Los talentos del programador



En muchos artículos y libros se ha dilucidado sobre las aptitudes que se requieren para ser un buen desarrollador de software. Está claro que haber pasado por una carrera de sistemas, si bien garantiza una cantidad de conocimientos técnicos elementales, no habilita al alumno para ser programador. Tampoco el dominio de una herramienta de programación hace a un desarrollador realmente bueno, y por esto me refiero a alguien que se le pueda confiar el diseño y la codificación de un sistema que reúna las características de calidad de un software comercial (léase un producto que se pueda vender sin recibir cartas documento por similar cantidad de copias vendidas). Volveremos sobre esto después, sólo déjenme agregar aquí que estamos frente a un caso donde, cómo dice el proverbio, el hábito no hace al monje. Entonces ¿cómo podemos reconocer quién tiene pasta de programador? ¿Cuáles son las características que nos permiten predecir que alguien puede convertirse en un desarrollador brillante, independientemente de su grado actual de expertise? Son preguntas interesantes para cualquiera que guste de contratar brillantes jóvenes sin experiencia y convertirlos en profesionales de sistemas (y mientras eso sucede, ahorrarse varios miles de pesos, por supuesto).

Los que saben del tema parecen coincidir que cierta habilidad para la matemática ayuda al pequeño saltamontes que aspira convertirse en programador. Creo que por ahí va la cosa, pero en realidad es un poco más complejo. La matemática y otras ciencias relacionadas, como la geometría, permiten estudiar los fenómenos naturales haciendo una abstracción del mundo real. Son, como suele decirse, un modelo, o sea, una representación simplificada de un universo complejo. El modelo hace un recorte, toma una cantidad de características distintivas de lo que se quiere representar y las pasa al modelo, con sus cualidades y relaciones entre ellas. De alguna manera, el modelo intenta crear un universo en miniatura. Así, cuando decimos “un modelo a escala de una locomotora”, nos referimos a una locomotora reconstruida con idéntico aspecto, sus partes móviles y algunos de sus complejos mecanismos, pero en una escala mas pequeña y manejable, y la mayor parte de las veces más barata (¿vieron lo que valen esos jugetitos? ). Por eso se dice que el aprendiz de programador debe por lo menos sentirse cómodo con cierto nivel de matemática. Y se ve que los creadores de las currículas de las carreras de sistemas piensan eso, y por eso han puesto en ellas una cantidad de matemática que haría sentir un ignorante al mismo Einstein. Pero en realidad, lo esencial en la caja de herramientas intelectuales del programador es la capacidad de abstracción, o más precisamente, la capacidad de realizar modelos del mundo real.

La actividad de un programador de cierto nivel (el que veíamos arriba) esta llena de modelos. Cuando realizamos software, por ejemplo, para gestionar cierto proceso de un negocio, nos enfrentamos a un desafío de modelización. ¿Cómo pasaríamos a un ambiente informático la gestión de un hotel? Bien, estudiaríamos los procesos más importantes donde nuestro software debería asistir, y después haríamos un modelo informático que representara cada uno de esos procesos. Uno de ellos, sin dudas, sería el check in, y aquí buscaríamos una forma de representar el conserje del hotel, el pasajero, la habitación que ocupará, etc. Todo este trabajo de abstracción, que luego será llamado por el vulgo “la pantalla de check-in”, es en realidad un modelo del proceso traducido al software. Aquí creo, y no en la cantidad de siglas del mundo IT que maneje, está la habilidad esencial de un desarrollador. Algunos discutirán conmigo que en realidad eso es el trabajo del analista, del ingeniero, del arquitecto. Ok, ok.... La realidad es que todos, por más que sean el último escalón de la cadena del desarrollo, tendrán que hacer algo de modelización en algún momento, sobre todo si se dedican a producir sistemas para usuarios finales. La falta del talento para inventar modelos del mundo real hace programadores mediocres, sólo capaces resolver pequeños problemas copiando y pegando código de la ayuda al sistema. He visto profesionales bien preparados, muy hábiles en el manejo del lenguaje, y con un asombroso dominio de APIs, pero que al momento de modelizar un proceso se balanceaban frente al monitor como los peregrinos frente al muro de los lamentos, angustiados, agarrándose la cabeza viendo como sus propios frankesteins se volvían contra ellos. Porque los programadores que no pueden crear buenos modelos, lamentablemente, los crean igual, pero pésimos. Un modelo pésimo es un modelo incomprensible, con partes rejuntadas de cualquier lado, no se entienden y son prácticamente inmodificables. Probablemente uno de estos programadores, en la buena intención de hacer un modelo informático de un barrilete, programe un complicadísimo tacómetro. ¿Para qué? Solo Dios sabe, pero la cuestión es que para modificar el largo de la cola debemos setear el tacómetro a un valor decimal que duplique la altura actual, de lo contrario el barrilete se pintará enteramente de fucsia.... (?) Sí, es delirante, lo sé, pero sucede. Es simplemente un programador que no supo modelizar un barrilete. La programación orientada a objetos ayuda a que los modelos sean más naturales, si queremos modelizar automotores, hacemos un objeto que tenga ruedas y puertas y después heredamos de él autos, camionetas y bla, bla (ya todos conocemos los ejemplos de herencia de los libros). El modelo orientado a objetos ayuda, sí; pero si nos toca construir un modelo un poco más complejo que el de los ejemplos de los libros (que casi siempre son autos y animales, no se por que) y no tenemos esta habilidad para la abstracción de la que estamos hablando... muchacho, estás perdido.

Por eso, mi pequeño saltamontes, si el pájaro canta pero no vuela, quiere decir que el modelo falla, porque los pájaros cantan y vuelan. Y para los que no gusten de conclusiones zen, la línea final sería que la destreza fundamental de un buen programador es la capacidad de abstraer y construir pequeños mundos de bits que funcionen y mantengan cierta afinidad con los procesos que representan. A eso, por supuesto, debemos agregarle, como decía Clemente, un cacho de cultura: en este caso un profundo conocimiento de los frameworks y herramientas que utilizaremos para programar. Y ya que estamos enumerando, tampoco vienen mal el sacrificio, la curiosidad y un poquito de comportamiento obsesivo y perfeccionismo. Pero, mi pequeño saltamontes, si programas alas en un pez, ruedas en la pizza o juanetes en un sombrero... mi pequeño saltamontes, quizás tienes un gran futuro como creativo publicitario.

Comentarios