Nota del autor

Si la entrada que estás leyendo carece de imágenes, no se ve el vídeo que teóricamente lleva incrustado o el código fuente mostrado aparece sin formato, podéis conocer los motivos aquí. Poco a poco iré restableciendo la normalidad en el blog.
Este blog es un archivo de los artículos situados previamente en Lobosoft.es y ha dejado de ser actualizado. Las nuevas entradas pueden encontrarse en www.lobosoft.es. Un saludo,
Lobosoft.

viernes, 25 de febrero de 2011

Políglotas

En la anterior entrada del blog mencionaba lo interesante que resulta –a mi parecer– poseer un perfil profesional en el que, aunque nos hayamos especializado en una determinada materia o tecnología, dominemos un amplio espectro de conocimientos. A lo largo de los años las distintas batallas diarias nos hacen ver cómo hasta lo que menos podríamos imaginarnos nos ayuda a resolver un determinado problema. En muchas ocasiones son, en efecto, estos conocimientos que podríamos denominar periféricos los que nos ayudan a dar con la solución que andamos buscando.

Mientras escribía sobre la especialización y la diversificación recordaba un artículo escrito hace unos años por Paul Graham en su blog, “Beating the Averages”, en el que hacía referencia a “La paradoja de Blub”. Si no la conocéis, os invito a leer el artículo completo de Graham y, de cualquier modo, aquí presento un escueto resumen de la mencionada paradoja.

La Torre de Babel

Supongamos que Blub es un hipotético lenguaje de programación de propósito general que nos permite resolver diversos tipos de problemas y para el que existen, al menos, un lenguaje menos potente que él y otro que lo es más. Imaginemos a un programador de Blub que, por ejemplo, conoce la existencia del ensamblador y del lenguaje Pascal. Para nuestro desarrollador está claro que el ensamblador no es lo suyo (para eso están los compiladores) y, desde la perspectiva de Blub, Pascal no aporta mucho más que una sintaxis desconocida para él y, aunque desconoce a qué corresponde tal o cual función de Blub, intuye que Pascal no le aporta demasiado. También ha visto algo de Java, un lenguaje que, en este caso, es más potente que Blub, pero dado que “piensa en Blub”, no es capaz de apreciar la potencia de Java como lenguaje. Es decir, que si bien nuestro programador es capaz de, mirando “hacia abajo”, darse cuenta de esos lenguajes son inferiores a Blub, su desconocimiento hace que sea incapaz de mirar “hacia arriba” y apreciar las ventajas de otros lenguajes más potentes.

Esta paradoja fue usada por Graham para ilustrar la relación existente entre diversos lenguajes de programación y la completitud de Turing y, en particular, para hacer ver lo difícil que resulta comparar dos de ellos entre sí cuando no se conoce alguno de ellos en profundidad.

Volviendo al tema de la anterior entrada, cuanto más amplio y diverso sea nuestro perfil, mejor preparados estaremos para solucionar los problemas que se nos presenten por delante y más acertadas serán nuestras decisiones sobre qué tecnología o qué herramientas usar para construir la solución pensada. E incluso para elaborarla, por qué no. Quienes dominan varios idiomas y mejoran sus conocimientos filológicos son capaces de inferir el significado de un mensaje emitido en un idioma extraño para ellos si es afín a alguno de los que conocen, e incluso afirmar si uno de ellos ha más evolucionado que el otro desde una raíz común o si deriva de aquel. Con los lenguajes informáticos ocurre otro tanto: aunque la mayoría de ellos permite ofrecer soluciones teóricas a los problemas con que nos encontremos, algunos permitirán ponerlas en práctica de un modo más eficiente, ya sea por la plataforma sobre la que se sustentan o por el enfoque que posee el propio lenguaje.

Lo anterior, que parece de Perogrullo, no debe de serlo tanto cuando a lo largo de los años me he encontrado con gente tan acérrima seguidora de un determinado lenguaje o familia de tecnologías (“Jafa forever”, “Microsoft a muerte”, …) que era incapaz de admitir que montar un CMS para gestionar un blog era más rápido y eficiente usando PHP que Java sobre un Apache Tomcat o que, a largo plazo, un ERP en .NET Framework sería probablemente más fácil de mantener y extender que de hacerlo en Python, por ejemplo. Aunque a priori un desarrollador de Bulb tendrá listo su programa en menos tiempo si lo hace en “su” lenguaje antes que en otro que no domine, a largo plazo sus decisiones y forma de programar estarán supeditadas a aquello que le es familiar, y cuanto más estrecho sea su campo de visión más limitadas estarán sus propuestas.

Lo expuesto, por supuesto, sería extensible a multitud de aspectos de nuestra profesión, y no solamente a la programación. Y, “aunque los experimentos haya que hacerlos con gaseosa”, no es menos cierto que de vez en cuando no está de más ser un poco innovador y abrirse a nuevas experiencias. Además, resulta divertido.

Propongo así ser políglotas tecnológicos.

miércoles, 23 de febrero de 2011

¿Es siempre preferible la especialización?

Hace unos días conversaba con un gran informático y mejor amigo sobre diversos temas, hasta que uno de ellos me hizo recordar una de las entradas que tengo pendientes desde hace mucho. Hablábamos sobre las necesidades formativas de cada cual y cómo íbamos cubriéndolas de un modo u otro, así como de las ventajas y desventajas de un perfil profundamente especializado frente a uno excesivamente diversificado o difuso. Dicho en tres palabras: especialización versus diversificación.

Una de las facetas que me parecen más fascinantes del mundo de la ecología es el estudio de cómo interactúan las diversas especies con su entorno. Por poco que nos fijemos en ellas, observaremos que algunas especies se especializan en la obtención de recursos de un determinado hábitat, alcanzando el máximo aprovechamiento del mismo; alcanzan, por tanto, un nivel óptimo de integración con el entorno. Suelen aparecer en regiones aisladas geográficamente, como islas o territorios que presenten barreras biogeográficas (por ejemplo, una alta cadena montañosa), y como ejemplos podrían valernos el oso panda o el koala: grandes consumidores de bambú o eucalipto, respectivamente, y francamente despreocupados de improbables depredadores. Frente a estas, otras especies optaron por una estrategia generalista u oportunista, aprovechando cualquier recurso que esté en su mano alcanzar pero sin alcanzar una optimización máxima. Nuestros amigos los córvidos (por ejemplo, las cada vez más extendidas urracas) o muchos roedores (como la rata o el conejo) podrían servir de ilustración a este respecto. Entre ambos tipos de especies se encuentra un amplio espectro de otras más o menos adaptadas a su entorno.

¿Qué tiene que ver lo anterior con el perfil profesional de un informático? Bien, las especies especialistas alcanzan un aprovechamiento óptimo de los recursos en un entorno que ha resultado estable a lo largo del tiempo. De seguir así, resulta claro que estarán más adaptadas que cualesquiera otras para obtener el mejor rendimiento de aquello que necesiten para sobrevivir. Las especies generalistas, en cambio, no serán capaces de alcanzar ese máximo, pero obtendrán lo necesario para su supervivencia de diversas fuentes. En un ecosistema estable los especialistas vivirán “mejor” que los oportunistas, pero si las condiciones cambian –sobre todo si lo hacen de forma brusca o radical, sin dejar tiempo ni oportunidad para adaptarse a las nuevas- las poblaciones de especies oportunistas permanecerán más estables que las de especialistas y, posiblemente, si las nuevas circunstancias les son propicias, podrán incluso medrar en ellas.

Dentro del ecosistema de la informática, a mi parecer, resulta de lo más interesante poseer un perfil variopinto, especializado en lo posible en una rama del conocimiento, en efecto, pero que no deje de lado otras que puedan dotarte de un valor añadido en un momento dado. Creo que los dos extremos planteados pueden resultar nefastos para un profesional: una excesiva especialización puede hacer que carezcamos de valor a pocos años vista dentro de un sector tan cambiante como el nuestro, aunque en un hipotético presente nos dé cuantiosos réditos (como podría ser el caso de un consultor SAP o un desarrollador muy especializado en una tecnología floreciente), y una diversificación extrema nos llevaría a ser un claro ejemplo del refrán: “aprendiz de mucho, maestro de nada”.

Personalmente, hace unos años me encontré en una situación en la cual me “salvó” de una situación embarazosa poseer un perfil intermedio pero con una fuerte carga generalista. Aunque mi perfil académico está enfocado al área de sistemas, lo cierto es que, salvo un par de experiencias en este ámbito, mi carrera profesional me ha llevado a trabajar, sobre todo, en desarrollo de software. Mis intereses particulares, como bien sabéis quienes habéis seguido el blog durante un tiempo, se centran más en el área de la seguridad informática (aunque ahí me considero poco más que un neófito: ¡me queda tanto por aprender!). Y por haber vivido en Granada, una ciudad maravillosa para el estudiante pero nefasta para el trabajador, a lo largo del tiempo fui acumulando experiencias de lo más diversas en el mundo de la programación; desarrollador web (desde páginas básicas en HTML con sus CGIs hasta ASP.NET pasando por PHP y su terrible “hermano” ASP) y de aplicaciones de escritorio (Visual Basic, Java, VB.NET y C#). Pues bien, cuando cambié de ciudad (y trabajo) hace unos años y me vine a Málaga, lo hice para ocupar un puesto de analista programador en C#, pero finalmente acabé llevando a cabo labores de consultoría (definiendo el proceso de Gestión de la Configuración para un organismo público) junto a unos superiores de los que aprendí mucho, durante un tiempo planteando una serie de cambios sobre herramientas de software libre (volvía el PHP) e, incluso, volviendo a .NET en el último periodo que pasé allí.

De resultas de lo anterior, cuando me marchaba, mi responsable directo –y primigenio entrevistador– me comentó que, debido a cierto varapalo, las expectativas empresariales que habían propiciado mi contratación no se habían visto cumplidas y que únicamente me había salvado de la cola del desempleo (o de buscar un nuevo trabajo justo un par de meses después de mudarme a la ciudad) la capacidad de adaptación y aprendizaje que me había proporcionado el perfil que poseía.

Siempre he pensado que es más interesante (y divertido) poseer un perfil versátil a la par que completo, y en esta apreciación coincidía con mi amigo. Pero, ¿qué os parece a vosotros? ¿Veis mejor ser especialista o ser oportunista? ¿Un bólido o un todoterreno? Y, en el caso de un término medio, ¿hacia qué lado de la balanza os inclinaríais?