Nivel 30: Maestro Desarrollador

Una de las cosas que más parecidas puede tener un juego de rol con la actividad de un programador son las destrezas. En los videojuegos, las destrezas básicas de un personaje suelen ser: velocidad, fuerza, agilidad e inteligencia. ¿Cuáles serían las destrezas a medir entre los desarrolladores y administradores de sistemas?

Para un programador, la forma de medir su destreza es a través de los lenguajes de programación, normalmente. ¿Cuántos conoces?, ¿qué nivel de profundidad conoces de cada uno? Al pasar por la facultad quizás se agreguen otros parámetros para medir el nivel del programador como, ¿qué estructuras de datos conoces?, ¿qué algoritmos? Tenemos nuestra fuerza. Puedes elegir las armas (C/C++, Java, PHP, Ruby, Python, Perl, Erlang, …) y desarrollar incluso técnicas de combate a través de la estrategia (Programación Orientada a Objetos, Programación Funcional, Estructuras de Datos, …) pero tu personaje sigue incompleto.

En la misma analogía, un administrador de sistemas puede tener igualmente sus armas (sistemas operativos, servidores web, ftp, correo, bases de datos…) e incluso en base a la estrategia conocer los protocolos, balanceo de carga, replicación, … igualmente el personaje está incompleto.

Agrega Velocidad

Un buen personaje necesitaría más atributos y potenciarlos. Uno de los más importantes para mi es la velocidad, y en el caso tanto de programadores como administradores de sistemas esta la da el conocer y saber construir un ecosistema para desarrollar su trabajo.

Para el programador, por ejemplo en lenguaje C/C++, el conocimiento de un entorno basado en un sistema como make, saber crear un Makefile e incluso agregar el uso de las GNU build tools para tener un sistema estándar de creación basado en el típico ./configure && make && make install, es básico para poder llevar el código de su estado de creación a su forma de ejecución e incluso distribución. Esto es aplicable para todos los lenguajes donde existen herramientas que permiten que el código pueda ser puesto para probar o para producción en un período de tiempo muy pequeño.

El entorno de un administrador de sistemas en este caso serían sistemas que permitan la instalación automática de sistemas operativos (como las plantillas de servidores en las máquinas virtuales) o automatización de instalación que generan instaladores de distribuciones GNU/Linux como Debian. También la gestión de configuraciones para el caso de servidores web, de correo o base de datos por ejemplo. Sistemas como Puppet, Chef, CFEngine o Fabric aceleran enormemente tareas de repetición y mantenimiento cuando no solo hay un servidor a mantener.

Vigila tu Flexibilidad

Para un programador, realizar cambios en su código, refactorizar y probar cosas nuevas, pero al mismo tiempo mantener una línea base y estable se convierte en un infierno sino emplea un sistema de control de versiones. En este caso, saber no solo utilizar el sistema de control de versiones (CVS, Subversion, Git, Mercurial o Bazaar) sino también cómo hacer ramas y poder mantener el código entre las distintas ramas hará que se gane flexibilidad para poder desarrollar en el código estable y probar cosas sin perder información y sin tener cientos de copias del código por el disco duro.

El administrador de sistemas en este caso debería de aplicar estas mismas reglas en base a mantener en un control de versiones las configuraciones del servidor cambiantes para, en caso de tener que modificar alguna configuración y días más tarde algo falle, poder trazar qué fue mal o incluso poder volver hacia atrás de forma rápida.

Incrementa tu Agilidad

En sincronía con el nombre, considero que la agilidad del programador y del administrador de sistemas consiste en la administración y gestión de su tiempo y sus tareas. Una gestión ágil basada en técnicas como Scrum o Kanban (para el equipo) y ZTD, GTD o Pomodoro (para las tareas propias) es algo muy a tener en cuenta como herramienta de organización personal del trabajo.

Para el programador además, el agregar tests y realizar tareas de desarrollo en base a BDD o TDD puede conducir a una mayor agilidad al poder realizar refactorizaciones de forma más segura.

En el caso del administrador de sistemas se puede realizar de la misma forma, pero con otras herramientas. Es decir, tener sistemas para lanzar pruebas una vez se realiza un cambio en la configuración para asegurarnos de que todo funciona agiliza un poco el hecho de los cambios que podemos hacer y la retroalimentación (feedback) que recibimos de cada uno.

¿Sabiduría, Inteligencia, … alguna más?

Creo que las principales quedan dichas. La sabiduría creo que es intrínseca a cualquier profesión y debe consistir en actualizarse, intentar aprender algo nuevo cada día para mantenernos con un buen nivel de experiencia y seguir subiendo de nivel.

La inteligencia la debemos desarrollar nosotros mismos con pequeños desafíos, études, competiciones, ejercicios o lo que queramos que nos permita poner a prueba nuestros conocimientos. Lo más sano es competir con uno mismo, ver lo que se programó hace tiempo, medir lo que se sabe en un cierto momento y cuantizar los avances obtenidos en el tiempo.

Conclusiones

Obtener un nivel 30 en desarrollo o administración de sistemas es fácil, aunque el camino de la aventura es largo, siempre encontrarás compañeros que te ayudarán a mejorar y desafíos en los que podrás crecerte, lo más importante es seguir aprendiendo y disfrutando. ¿Qué cualidades o destrezas crees que sería importante destacar? ¿las ya mencionadas y/o alguna nueva?