El Babel del Desarrollo

Publicado en

Escribir programas y aplicaciones nunca había sido tan fácil como lo es ahora. Actualmente abundan herramientas y lenguajes para crear aplicaciones en cualquier plataforma; desde sitios web hasta aplicaciones móviles, de escritorio, para hardware especializado, hasta aplicaciones para backend en un servidor o en la nube. Y lo mejor es que buena parte de estos lenguajes y herramientas se pueden conseguir de manera gratuita o a un costo mínimo.

El problema al que se enfrenta la industria en la actualidad, no es la falta o inaccesibilidad de buenos lenguajes o plataformas de desarrollo, sino justo lo contrario. Hay una enorme variedad de lenguajes para desarrollo que, a su vez, se subdividen en muchos frameworks, librerías, plugins y que, a su vez, se especializan para diferente hardware, sistemas operativos o runtimes; obligando a los programadores a especializarse, con la consecuencia de que les será más difícil cada vez moverse a otra plataforma de desarrollo.

En el lado de los clientes y usuarios, también hay un costo asociado a quedarse acotado a cierta plataforma, debido a decisiones relacionadas con la infraestructura de la empresa; haciendo más complejo y caro, el proceso de una migración o de interoperabilidad con sistemas en plataformas diferentes.

Muchas formas de resolver el mismo problema

La sabiduría popular dice que: “hay muchas maneras de atrapar a una liebre”, y aunque todas son diferentes, lo que cuenta es el resultado final. En el mundo del desarrollo, es posible aplicar la misma máxima en lo general. Hay muchas maneras de programar la misma funcionalidad en diferentes programas y plataformas; el usuario final casi nunca notará la diferencia. La “receta secreta”, es algo que pertenece al mundo técnico y algo de lo que idealmente el usuario jamás se enterará.

A nivel técnico, la historia es otra: diferentes personas tendrán diferentes grados de conocimiento, experiencia y preferencias sobre la tecnología, que se utilizará para resolver un problema o crear una aplicación o servicio; tanto en lo personal, como en lo que respecta al equipo de desarrollo y a los lineamientos del cliente o la empresa que esté haciendo el desarrollo. En este momento es donde comienza a haber problemas en la toma de decisiones, ya que en muchas ocasiones hay que trabajar en base a decisiones, que otras personas ya han tomado –no siempre de la manera más informada- o hay que negociar en base a las habilidades del equipo de desarrollo o con criterios de calidad impuestos por externos.

No es sorpresa entonces, que lenguajes como COBOL, Clipper, FoxPro, AS400 CL, BASIC, o muchos otros cuyo ciclo de vida terminó hace tiempo, sigan vigentes en empresas que en su momento realizaron cuantiosas inversiones en ella y mantienen sistemas viejos; aunque cada vez sea más difícil encontrar profesionistas que sepan cómo desarrollar en ellos. Esta inercia tecnológica, produce a la larga una brecha digital donde una decisión tomada en el pasado basada en una arquitectura deficiente, no sólo puede impactar y dejar desprotegidos a los usuarios de un sistema, sino que puede llevar al equipo de desarrollo a un callejón sin salida, tecnológicamente hablando.

Especialistas vs generalistas

La otra cara de este tema es que, en la medida que un programador trabaja y toma experiencia en una plataforma, es cada vez menos probable que la deje o que se cambie a otra; a menos que las condiciones en su entorno cambien dramáticamente. La certificación y la especialización en el mundo de las tecnologías de información, es algo que es impulsado y perseguido por desarrolladores y personal de infraestructura, que buscan subir escalones en el organigrama para aspirar a mejores puestos –y a mejores sueldos-, así como por la empresas, que esperan poder contar con personal con experiencia y madurez, para la creación de aplicaciones y sistemas complejos.

La especialización es un proceso que a nivel profesional es caro y requiere tiempo para cristalizarse; muchas veces más del que se dispone en el mundo real, para cubrir las expectativas de la industria donde la tecnología cambia rápida y constantemente. Es normal que las personas con especialidad en una plataforma dada, sean pocas y difíciles de encontrar y pocas empresas disponen del tiempo o los recursos, para desarrollar a un equipo desde cero.

Con los especialistas ocurre una situación recurrente: es normal que deseen resolver todo en su trabajo, usando sólo la plataforma que dominan, incluso si ese lenguaje o plataforma no es la mejor herramienta, para resolver un problema dado por una “ceguera tecnológica”, que no les permite ver más allá de lo que conocen. Por otro lado, es comprensible: un especialista de una plataforma corre el riesgo de quedarse fuera, si la tecnología en la que trabaja cambia repentinamente o desaparece y, es normal, que sea entusiasta sobre ella y la promueva lo mejor que pueda.

En este punto es común encontrar desarrolladores que fuera de su plataforma principal de trabajo buscan también conocer y aprender lenguajes adicionales o complementarios para cubrir más terreno curricularmente hablando y no quedarse en el aire en un momento dado. Es común escuchar a los programadores decir que: “si sabes programar bien lo puedes hacer en cualquier lenguaje” y es normal que un programador, busque extender sus capacidades de desarrollo y sea capaz de manejar varios lenguajes de manera simultánea; lo que da lugar a la figura del “generalista”, alguien que conoce varios lenguajes de desarrollo de manera superficial.

El problema con el generalista es obvio: tener en el equipo a alguien que conoce un poco de muchas cosas funciona para proyectos sencillos, pero casi nunca para proyectos más complejos. No es que esa persona no pueda aprender y profundizar en un lenguaje, pero esa curva requiere tiempo que no siempre está disponible en una situación real y, si lo tuviera, entonces terminaría convirtiéndose en un especialista al enfocar su tiempo y capacidad en una plataforma específica, en lugar de seguir explorando otras de manera simultánea.

La solución única o la correcta

Entonces, ¿qué es lo mejor: ser generalista o especialista? Ninguna posición es más correcta que la otra, pero en general son mutuamente exclusivas y al escoger una, hay que dejar de lado la otra. Cada una tiene sus pros y contras y dependerá más del plan de carrera del programador y sus expectativas a futuro, que es lo más conveniente en cada caso.

Para un desarrollo específico es bueno recordar que, cada implementación tiene un ciclo de vida y que ningún código se vuelve mejor con el tiempo, sino lo contrario. El buen código hay que revisarlo, actualizarlo y cuando llega su momento, migrarlo para adaptarlo a las condiciones cambiantes del mercado y de la industria.

Sobre las habilidades de un programador pasa lo mismo: un profesionista de las tecnologías de información que se aferra a una tecnología muy específica, corre el riesgo de quedarse de lado en sus capacidades y perder tracción laboral; a menos que labore en un proyecto a largo plazo que requiera un juego de habilidades muy específicas.

Aunque existen lenguajes como C o Assembly que fueron creados hace más de 40 años y que siguen en uso, hay otros lenguajes de desarrollo que permiten la creación y el mantenimiento de manera más ágil y eficiente de programas y sistemas, algo que se sigue buscando como la principal característica de un lenguaje de desarrollo. También es importante tener en cuenta que, en los modelos actuales de desarrollo, se debe buscar siempre la manera de hacer software que sea modular y que pueda inter-operar con otras plataformas en lugar de crear silos tecnológicos con arquitecturas monolíticas para facilitar, tanto su mantenimiento como su migración, cuando sea necesario.

En ese aspecto podemos afirmar que, si para todo problema siempre hay una solución que es la óptima, es bueno recordar que hay varias soluciones, que también son correctas y que pueden ser más óptimas en el largo plazo.

Bio

Mauricio Angulo (@mauricioangulo) es programador desde 1989 divulgador, ávido escritor y emprendedor. Actualmente es CEO y fundador de Tesseract Space donde realiza funciones de asesor y consultor de innovación tecnológica, mercadotecnia digital y experiencia de usuario.