Mostrando entradas con la etiqueta Programación. Mostrar todas las entradas
Mostrando entradas con la etiqueta Programación. Mostrar todas las entradas

Exhumando cadáveres informáticos



RSS

Cadáveres informáticos
Hay quien cree que las aplicaciones son muy parecidas a los seres vivos: nacen, crecen, se desarrollan y mueren. Es fácil buscar la analogía entre los ciclos vitales básicos y los estados por los que pasa cualquier aplicación informática. Lo que no nos cuentan es lo que pasa cuando las aplicaciones pasan a mejor vida.

Y según parece, lo que ocurre dentro de los servidores es muy similar a lo que ocurría en el Viejo Oeste, donde los cadáveres podían estar durante horas o días tirados en la calle tras un tiroteo.

Cuando una aplicación deja de tener sentido, bien porque la empresa ha abandonado una línea de negocio o simplemente porque la aplicación ha sido sustituida por otra nueva, es habitual que nadie se acuerde de que se deja un muerto, en forma de activo de TI, tirado por la calle.

Durante una primera etapa no se le presta mucha atención porque todos los cariños van dirigidos a la nueva aplicación. Pasado ese primer momento, cuando teóricamente habría tiempo suficiente para hacer el levantamiento del cadáver y enterrarlo adecuadamente, ocurre que ya pocos se acuerdan de ella, todos pasan a su lado impasibles, como si hubiera formado parte del paisaje desde siempre. En cualquier caso, es claro que nadie ve alicientes en dedicar tiempo a esa vieja aplicación que ya no sirve a nadie. Esto mismo, en menor medida, aplica también al código muerto que hay dentro aplicaciones vivas.


Un poco de tiempo para revisar lo inservible

Es cierto que este problema solo lo sufren aquellas empresas con un cierto bagaje en el mercado, no tanto porque las nuevas aplicaciones se gestionen mejor, sino porque no han tenido tiempo suficiente para dejar morir -o matar- algunas de esas aplicaciones. Pero tras treinta años de desarrollo de aplicaciones, lo que se encuentra bajo las alfombras puede ser impresionante, con ratios de código muerto y aplicaciones sin uso por encima del 40 por ciento de las líneas de código.

Tener todos esos objetos no válidos implica sobrecostes en los procesos de evolución tecnológica, en la gestión de proyectos de mantenimiento y en los proyectos de migración de plataformas. Solo por eso ya merece la pena embarcarse en proyectos de renovación tecnológica.

www.tonsofit.com


RSS

Java, lo que pudo haber sido



RSS


Logo de Java
No se puede decir que Java sea nuevo en nuestras vidas, lleva más de quince años con nosotros y su gran éxito ha ocurrido en detrimento de otros muchos lenguajes de programación muy comunes en los años '90.

Pero Java, como lenguaje de programación, no es sino una pieza más -aunque importante- dentro de la Plataforma Java entendida en su conjunto. En el fondo, se buscaba compatibilizar cualquier dispositivo de forma que una misma aplicación pudiera funcionar sin cambios en un PC de escritorio, un servidor, un televisor, un teléfono móvil o hasta un PLC industrial. Daba igual cual fuera del sistema operativo que gestionase el dispositivo porque por encima de él se situaría la Máquina Virtual Java (JVM) que lo haría todo compatible.

Como peaje a esa maravilla tecnológica, todos los desarrollos de aplicaciones deberían hacerse en el nuevo lenguaje de programación: Java. No importaba si se trataba de una aplicación de gestión financiera o la gestión de la tarjeta SIM en un teléfono móvil, todo debía hacerse en Java.


...Y la realidad quince años después

La realidad es que Java es el lenguaje de programación más popular en la actualidad compartiendo ese primer puesto con alguno de los lenguajes (VB o C#) de la plataforma .NET, según quien haga la medición. Sin embargo, del sueño de compatibilizar las plataformas no queda ni rastro.

Arquitectura J2EE
Y no es que una aplicación diseñada para un servidor no funcione en un TV o un teléfono. Es que una aplicación diseñada para un servidor de aplicaciones J2EE no funciona en ningún otro servidor J2EE, al menos sin cambios. En muchas ocasiones incluso hay problemas en función del sistema operativo anfitrión o el motor de base de datos.

Seguramente habrá muchos teóricos que piensen que eso es una barbaridad. Pero no lo es, es la simple constatación de la realidad.

Además de los problemas de compatibilidad, prácticamente nadie se plantea desplegar Máquinas Virtuales Java en nada que no sea un servidor (muy potente) porque poner una capa de homogeneización por encima del sistema operativo y el hardware tiene un coste de recursos inasumible, máxime teniendo en cuenta los gravísimos y frecuentes problemas que la plataforma Java ha sufrido en la gestión de la memoria.

Es decir, hemos cambiado de lenguaje de programación, con todo lo que ello implica en la curva de aprendizaje de las personas y en los costes de migración, sin tener ni una sola de las ventajas que Java prometía. Visto en perspectiva, un disparate provocado en exclusiva por la moda.

Usamos Java para funciones muy dispares como diseñar sitios y aplicaciones web, para las aplicaciones Android, para la gestión interna de dispositivos de red o para aplicaciones empresariales internas. Y lo hacemos aún teniendo en cuenta que Java no es lenguaje de programación más óptimo en todos esos escenarios. De hecho, en su afán de compatibilizarlo todo, probablemente no sea el lenguaje de programación más óptimo en ninguno de ellos porque no es lo mismo gestionar las librerías gráficas de un teléfono móvil que realizar un proceso masivo de emisión de recibos. Aún así, usamos Java para todo ello.

El canon que nos toca pagar viene en forma de mayores plazos y costes de programación, sobre todo en aplicaciones de gestión (que son la mayoría en el ámbito corporativo) donde se han dejado de lado otros lenguajes de programación infinitamente mejor preparados para esa función pero bastante menos fashion.


Como el chaval del r9

Esquema mental de un programador J2EE
Para compensar muchas de esas carencias y nuevas necesidades en Java han surgido un gran número de frameworks de desarrollo y tecnologías que complementan la funcionalidad original.

De hecho, saber Java es solo el principio para hacer aplicaciones Java. Hace falta tener conocimientos de otras tecnologías y frameworks como JavaServer Faces, Spring, Struts, Hibernate, servlets, applets, JSP, JDOM, Apache Velocity, JBoss Seam, Apache Wicket,... según las preferencias del equipo de desarrollo y el tipo de aplicación que se quiera desarrollar.

En cierta medida, Java se parece a la leyenda del chaval del r9, que partiendo de un coche más bien normalito y a base de complementos intenta igualar al Kadet GSI de su cuñado.


Terminando

Estoy convencido de que si pusieran a un informático a analizar el oleaje con el objetivo de fijar la mejor posición para un generador eléctrico, acabaría desarrollando un modelo para normalizar el tamaño, posición, fuerza, caudal y frecuencia de las olas. Seguramente nadie se lo habría pedido, no podría ser implementado en la vida real y obligaría a desperdiciar datos vitales de cada ola a fin de hacerlas compatibles. Pero quedaría de lo más mono en un mercado absolutamente dominado por las modas. Qué le vamos a hacer, somos así.

Para no flagelarnos, quizá sea un buen momento para aprender algo de JAMon.


Enlaces relacionados

     › Programación, ¿arte o ciencia?
     › El día que SAP entró en la empresa
     › ¡Que poco sexy eres COBOL!
     › La fashion week tecnológica


www.tonsofit.com



RSS

El día que SAP entró en la empresa



RSS

Logotipo de SAP
Un buen día SAP entra en la empresa. Alguien, probablemente de algún área de negocio, ha tomado la decisión de implantar el módulo XX de SAP para resolver una parte importante del negocio y el personal de TI aún no es consciente de la cantidad de cambios que se le avecinan.


Y los cambios llegan

Llegarán cambios en el área de operación. Las promociones de código entre entornos o deploys en terminología Java pasarán a llamarse transportes. Se harán desde el propio entorno SAP que dispondrá de herramientas para guiar todo el proceso que, en general, no estarán integradas con el resto de procesos de gestión del cambio y configuración de la instalación. Los jobs o procesos batch ahora pasarán a llamarse cadenas y también serán gestionadas desde un planificador propio de SAP que, como es de esperar, no se integra con el planificador corporativo. Y también habrá que decirle a los técnicos que vayan olvidando todo lo que conocían sobre los procesos de backup ya que serán completamente nuevos a todo lo visto hasta ahora.

Dando una capa de pintura SAP al personal de TI
Habrá cambios en el área de sistemas e infraestructuras. Todo lo aprendido hasta ahora sobre tunning de base de datos será, en general, algo del pasado. Será el propio SAP quien se encargue de toda esa gestión. Lo mismo aplicará en general para la configuración de los monitores transaccionales o los servidores de aplicaciones ya que será el propio SAP quien, en general, lo gestione todo. Los procesos de cambio de versión y aplicación de parches al software de base serán completamente diferentes a todo lo vivido hasta ahora.

Habrá también cambios en el área de desarrollo. Tendrán suerte los programadores COBOL porque en ABAP encontrarán algo muy similar a un COBOL orientado a objetos. Aunque tendrán que olvidarse de su creatividad ya que, con toda seguridad, mucho de lo que quieran hacer estará ya resuelto por un proceso estándar que únicamente habrá que adaptar. Más complicado lo tendrán los programadores Java ya que, pese a que WAS (el servidor de aplicaciones de SAP) es compatible con J2EE, no es aventurado decir que la programación Java en SAP se parece a lo que ya conocen de Java como un bit a una lechuga. El concepto de JSPs, más o menos, se transformará en algo llamado Web dynpro que encapsulará toda la lógica de negocio y lo cambiará todo.

Por último, habrá también cambios en la estructura de los equipos de trabajo. En la informática de siempre existía la figura del programador, del analista y del jefe de proyecto (cada organización le da un nombre diferente pero en general, quizá añadiendo o refundiendo algunos de ellos, los conceptos se mantienen).
Pero al llegar SAP aparece el consultor de SAP. No es el jefe de proyecto, tampoco es equiparable al analista y está muy lejos del programador. Y tampoco es el consultor de negocio habitual propio de las grandes consultoras. Su función es trasladar los requerimientos del cliente al modelo estándar de SAP y, en general, su mayor potencial no es conocer el negocio en sí sino el modelo de datos y procesos del estándar del módulo SAP en cuestión.


Gestionando el cambio

Etapas de las gestión del cambioCon esos antecedentes, es prácticamente imposible que el personal de TI de la compañía reciba el nuevo proyecto SAP con los brazos abiertos. De hecho, lo más probable es que se produzca un gran shock en el que los ya existentes y los nuevos se vean mutuamente como una amenaza.

Tras el shock inicial habrá un 10 por ciento de personas que se adaptarán al cambio con gran rapidez y valentía; habrá otro 10 por cierto que, si el cambio es potente, probablemente se quedará por el camino y nunca llegará a adaptarse.

El 80 por ciento restante -la parte central de la campana de Gauss- pasará una por una por todas las etapas habituales de la gestión del cambio y si las cosas se hacen bien, gestionando en paralelo los cambios en la parte técnica y en la humana, probablemente no sin esfuerzo se llegará a la ansiada integración. El tiempo para esta travesía variará en función de la persona pero lo que es seguro es que no será inferior a los dos o tres años.


Integración

Es decir, al final deberá producirse la integración de las aplicaciones y formas de hacer del modelo SAP con las aplicaciones y formas de hacer ya existentes en la Organización. Así, habrá que empezar integrando el área de operación con herramientas y procesos comunes -en aplicaciones SAP y no SAP- para las copias de seguridad, la planificación de procesos o la gestión de la configuración y el cambio entre entornos.

Trabajando en equipo
Después llegará la integración del área de infraestructuras. Los técnicos de sistemas del resto de entornos irán familiarizándose con SAP hasta el punto de llegar a integrarlo en sus quehaceres diarios.

Por último se producirá la integración de los diferentes modos de planificar, diseñar y desarrollar aplicaciones. Los programadores y analistas de las aplicaciones pre-existentes descubrirán que SAP no es [tan] diferente de lo habido hasta el momento. Y a medida que se vayan familiarizando irán ganando en soltura dentro del entorno, tanto para el desarrollo en sí como para la parametrización del estándar. Será el momento para plantear conexiones e intercambios de datos entre los dos mundos.

Y si todo eso se realiza con éxito, simplemente, el consultor SAP externo dejará de ser tan vital. Los profesionales de la compañía -analistas reconvertidos a consultores o consultores reconvertidos a analistas- tendrán tanto el conocimiento del estándar como el conocimiento del negocio y la organización interna, lo que hará que la necesidad del consultor SAP externo se reduzca al máximo.

Es posible que la verdadera integración con SAP llegue cuando a la contabilidad se le vuelva a llamar contabilidad y no FI, cuando a los procesos de compra se les llame también por su nombre y no MM, cuando ya nadie se refiera a las aplicaciones de producción como PP, cuando un documento se guarde en el gestor documental y no en RM o cuando las aplicaciones de gestión de personas vuelvan a tener su bonito nombre, personas, y no HR.

No es trabajo de un día pero se hace camino al andar.


Enlaces relacionados:

     › John P. Kotter. Leading Change. Harvard Business School Press, 1996
     › Tons of IT: ¡Qué poco sexy eres COBOL!

     › Tons of IT: El mainframe frente a sí mismo


Nota: Todo lo aplicado a la gestión del cambio con aplicaciones SAP es válido para otros cambios traumáticos como la evolución de mainframes IBM hacia sistemas abiertos o la migración a Open Source. Es habitual que quienes plantean este tipo de proyectos se centren exclusivamente en lo técnico y tiendan a olvidar que las etapas de duelo profesional por el entorno que se nos fue se miden en un orden de magnitud de años.




RSS

Programación, ¿arte o ciencia?



RSS

Antes de empezar, matizar que nada de lo que se indique se refiere a diseños de interfaces de usuario o similares. Parece lógico pensar que eso sí es un arte en la medida en que un buen (o mal) diseño visual es una excepcional vía para trasmitir emociones al usuario. La cuestión tampoco se refiere a si el producto resultado de dicha programación es arte o no. Por ejemplo, también parece claro que un juego tiene más de arte -de transmisión de emociones- que de ciencia aunque de esto último también tenga muchísimo.

La cuestión se refiere a si el hecho en sí mismo de programar es un arte o una ciencia. Si se basa más en la virtud o habilidad para hacer algo (arte) o en conocimientos obtenidos durante observación y razonamiento sistemático del que se obtienen principios generales (ciencia).

Un problema, muchas aproximaciones

Tal vez parte del problema respecto a si la programación es arte o ciencia se deba a que fijado un problema hay muchas posibles aproximaciones. Es posible hacer una cantidad infinita de variantes del mismo programa -todas ellas cumplirán el objetivo fijado- pero unas estarán basadas en algoritmos más o menos eficientes y lógicos y otras estarán basadas en vericuetos y caminos escabrosos.

El desconocimiento de técnicas de programación y algoritmos no impide por tanto realizar trabajos de programación. Ese es el primer problema dado que cuanto más cercano esté el programa a un algoritmo bien definido más fácil será su sistematización y, por tanto, más cerca estará de la ciencia.

Durante las fases de aprendizaje de un programador, desde que es novato hasta que se convierte en experto (Peter Norvig, que algo de esto sabe, fija este proceso en no menos de diez años), se producen importantes cambios en su forma de analizar y abordar un problema.

Cuando es novato tiende a utilizar todos los recursos del lenguaje de programación, sin quizá demasiado rigor científico. Demanda constantemente más información y puede empezar a trabajar sin comprender complemente el problema. A medida que va acercándose a la maestría alinea más el momento de comprender el problema en su completitud con al momento de empezar a programar. Utiliza un subconjunto de las capacidades del lenguaje de programación y sistematiza el proceso de forma continua. Es decir, tiene una metodología y en ese sentido, cabe pensar que la metodología es lo que acerca la programación a la ciencia.

Sin embargo, cuando el programador se convierte en experto se vanagloria de seguir el manual de buenas prácticas. Y el manual de buenas prácticas está bien, muy bien, pero no es una ley o principio general (que es la base de la ciencia). Es eso, un manual de buenas prácticas. A nadie se le ocurriría que un ingeniero de caminos siguiera un manual de buenas prácticas para calcular la resistencia de materiales en el diseño de un puente. Sigue leyes matemáticas no buenas prácticas y quizá por ello la imagen de la derecha tenga su punto de humor dado que, lógicamente, no es habitual ni previsible.

Las pruebas

Las pruebas, sin duda, permiten encontrar fallos en los programas, en unas ocasiones por una mala programación y en otras por un mal diseño previo. Sin embargo, las baterías de pruebas no son la solución sino la consecuencia del problema. La realización de pruebas a posteriori se puede usar para demostrar la presencia de errores en un programa, pero nunca para demostrar su ausencia (Dijkstra). Lógicamente, también los ingenieros de ramas más tradicionales hacen pruebas a posteriori para verificar si lo construido es correcto pero la gran diferencia es que sus pruebas están basadas en fundamentos matemáticos. Es decir, verifican si la construcción se ha hecho con arreglo a las leyes generales pero no dudan de tales leyes.

Sin embargo, en el caso de la programación esas leyes generales no existen salvo que desde el inicio se defina una metodología clara de las pruebas que se llevarán a cabo durante la fase de test. La existencia misma de esa metodología hará que los programadores eviten los problemas en origen.

Fuente: SecurityFocus
Esta idea se muestra de forma nítida en la programación segura. Por ejemplo, hasta 2005 Microsoft era la referencia mundial más clara de programación insegura. Sus bibliotecas de código estaban plagadas de fallos que podían ser explotados -y de hecho lo eran- en ataques de buffer overflow y otros fallos. Tanto es así, que Microsoft era asociada con la mala calidad (desde el punto de vista de seguridad) de sus productos. Algunos, como Internet Explorer, tenían fallos clamorosos y antológicos día sí y día también.

Todo fue fijar una metodología clara para los programadores e invertir en formación sobre programación segura y el número de fallos descendió de forma drástica hasta valores considerados como normales (similares a los de sus competidores). Nuevamente, parece que la existencia de una metodología (leyes) es definitiva para pasar de arte a ciencia.

Terminando

La confianza en la calidad del software es fundamental y lo será mucho más cada día que pase. Hay errores mediáticos como el del error de división en el Pentium, el efecto 2000 o Ariane 5 (lista completa de los 20 errores de software más famosos), y hay otros muchos que día a día pasan desapercibidos pero complican sobre manera la vida a los usuarios.

Etimológicamente, arte en griego se escribe τέχνη, raíz de la que también derivan palabras como tecnología o técnica. De hecho, en la Edad Media las universidades se dedicaban a enseñar las siete artes liberales, esto es, gramática, retórica, lógica, aritmética, geometría, música y astronomía. Y la programación informática depende de, al menos, tres de esas artes -hoy en día claramente ciencias-, a saber, gramática, lógica y aritmética.

Desde entonces, a lo largo de muchos siglos, se viene demostrando que actividades que hoy en día son claramente consideradas como ciencia empezaron siendo arte. Quizá un ejemplo muy claro de ello sea la medicina, que pasó de chamanes a científicos. Fue la forma sistemática y razonada de abordar los problemas lo que terminó por fijar la categoría de esas actividades como ciencia.

Tal vez, lo que nos falta es más metodología, más CMMI, más Scrum,... En definitiva, más rigor científico. O tal vez sea posible que algunos elementos de la programación sean intrínsecos de la mente humana al no poder ser modelados o automatizados y por tanto estén siempre en el ámbito del arte. Ahí dejo la cuestión.

www.tonsofit.com

RSS

Los contenidos de Tons of IT están sujetos a licencia Creative Commons Reconocimiento 3.0 salvo donde se indique lo contrario.