La Sombra de Dijkstra

Sobre el arte y la práctica de la programación

Habilidades Y Características De Un Programador

| Comentarios

El sitio Penny Arcade publicó dos videos titulados “so you want to be a developer”, en que exponen algunas características y habilidades para ser un desarrollador de software.

Elaborados con la ayuda de la gente de StackExchange, los videos dan algunas recomendaciones para las personas que están interesadas en ser desarrolladores de software.

Estos son los enlaces a los videos:

En general estoy de acuerdo con lo expuesto en los videos, pero tengo mis comentarios.

En el video un desarrollador se define básicamente como una persona analítica con la capacidad de resolver problemas. Bueno, eso coincide curiosamente con la descripción de ingeniero :)

[caption id=”attachment_355” align=”aligncenter” width=”427” caption=”Una mente analitica y capacidad para resolver problemas”][/caption]

Pero sí, un desarrollador debe tener las mismas habilidades cognitivas de un ingeniero, por eso que en Chile al menos, tenemos la carrera de ingeniería en informática, computación o software (no hay mucho consenso al respecto).

De todas maneras aparecen mencionadas en la segunda parte algunas habilidades y características que un desarrollador debe tener.

La primera, y estoy de acuerdo que es una de las más importantes, es la habilidad para comunicarse. La idea del programador como una persona aislada, solitaria encerrada en una sala oscura llena de pantallas es inadecuada, después de todo, hoy en día el software apoya a muchas industrias y disciplinas, lo que obliga a trabajar en equipos con gente con distintas profesiones y oficios. Es importante saber escuchar y trabajar en conjunto en pos del objetivo de la empresa o institución. Un buen programador debe ser empático y colaborador, ser un aporte y no un estorbo a la organización. Desarrollar las habilidades sociales y de comunicación es un requisito mínimo para el desarrollador. Cuando no hay comunicación se resuelven los problemas equivocados, se asumen cosas incorrectas, se generan errores, los proyectos se retrasan.

Luego hay una serie de habilidades más concretas:

  • Matemáticas: fundamental. Probablemente no necesitas ser un genio de las matemáticas, pero es básico saber álgebra, geometría y probabilidades. Yo agregaría matemáticas discretas, es fundamental saber contar,  hablaremos sobre matemáticas más adelante en este blog.

  • Estimación: Hay que saber estimar, ese es uno de los mayores defectos de los programadores, y algo que deben aprender a mejorar rápidamente en su carrera. Una buena manera es dividir el problema en partes más pequeñas, estimar el esfuerzo de cada una, llevar un registro de las estimaciones, y después revisar que fue lo que estuvo mal con la estimación, y corregir. Aprender en retrospectiva, para ir mejorando las estimaciones.

  • Micro economía: en esto estoy totalmente de acuerdo, se deben entender los fundamentos de la economía, oferta, demanda, costo de oportunidad, etc. Muchos programadores ignoran el aspecto económico o no se preocupan del impacto que su perfeccionismo pueda tener sobre el negocio. Muchas decisiones en un proyecto van a estar influenciada por el dinero. Se debe entender la diferencia entre lo perfecto y lo que es relevante para el valor del negocio.

  • Diseño de Interfaces de Usuario: finalmente otra persona será la que use tu programa, y hay una manera adecuada de desplegar la información y definir las interacciones. Muchas interfaces malas son creadas por programadores, que no se preocupan de la importancia de la usabilidad y la accesibilidad.No se trata de que se vea lindo, se trata de que sea usable, entendible. Hay que aprender el lenguaje de los controles en pantalla y saber cuando usar cada control para cada uso específico.

  • Lenguajes de Bajo Nivel: C o Assembler. En algún momento aparecen los problemas de desempeño, y hay que entender cómo un lenguaje de alto nivel nos abstrae de detalles de bajo nivel como punteros, uso de memoria, branching, aritmética, representación de la información en bits, etc. Cuando uno entiende esto puede llegar a optimizar el código de mejor manera.

  • Arquitectura de Computadores, o cómo funciona un computador internamente. Esto incluye el conocimiento de hardware, redes, sistemas operativos. En algún momento se encontrarán con problemas de paginamiento, pérdida de paquetes, falla a nivel de hardware, y hay que saber como enfrentar esos problemas.

  • Programar, programar, programar. Escribir código, leer código. Participar en algún proyecto opensource, escribir tu propio código, realizar algún code kata (ya veremos que es eso). Leer blogs sobre programación donde enseñen alguna técnica, o leer tutoriales sobre un framework, y probarlos por ti mismo.

Estas son las sugerencias de StackExchange y Penny Arcade sobre las habilidades para ser un buen programador/desarrollador de software, ¿qué opinan ustedes?

Comentarios