Dijkstra, dio un discurso en el cual compara al artesano y al científico como opciones para enseñar programación y concluye que ninguna de las dos es suficientemente buena por si sola. Su propuesta; utilizar la tecnología de uno y la pretensión del otro.

Sin necesidad de decirlo, el orden de los factores, sí altera el producto en este caso. A lo cual Dijkstra nos advierte no caer en utilizar la tecnología del artesano y la pretensión del científico. Lo único que lograremos en este caso es, enseñar exhaustivamente el uso de nuestras herramientas para fines poco prácticos.

Lamentablemente, pienso que eso es exactamente lo que se puede ver hoy en día en nuestra industria. Estamos llenos de startups y bootcamps que ofrecen entrenamientos que profesan enseñar programación, solo porque en ellas puedes aprender un par de lenguajes y un puñado de herramientas. El resultado, muchos de los programadores que egresan de estos entrenamientos, no pueden programar fuera del contexto especifico que vieron en la clase.

Las universidades por su lado, se enfocan en la teoría y muchas veces olvidan que la mayoría de sus egresados no se dedicaran a la academia. Estos terminan constantemente creando aplicaciones para resolver problemas inexistentes o peor aun desarrollar utilidades que poco nos benefician como sociedad.

Me recuerdo de este problema cada vez que leo una oferta de trabajo. Todas las empresas buscan programadores en “inserte el nombre del framework de moda aquí” y listan por nombre las diferentes herramientas y metodologías que el candidato debe conocer como quien no pudiera aprender nada nuevo. Lo más irónico es que en cada trabajo utilizan cada herramienta y metodología de manera distinta así que aun conociéndola hay que adaptarse.

Por el contrario, la recomendación de Dijkstra es que enseñemos con la tecnología del científico y la pretensión del artesano. De tal manera que los futuros programadores aprendan a pensar por si mismos y lo hagan de una manera pragmática. Es decir que sean capaces de adquirir cualquier conocimiento técnico necesario para resolver un problema del mundo real.

Esto obviamente no descarta la idea que tengamos expertos en diferentes ramas de la programación, ni que no podamos hacer investigación y desarrollo. Todo dependerá del individuo, sus capacidades y el contexto. Lo cual requiere pensar y analizar, para poder elegir la mejor opción según las limitaciones y condiciones del momento.

Yo, le haría una pequeña modificación a la recomendación de Dijkstra, y en lugar de tomar al artesano europeo como modelo, me basaría en el “Shokunin” japonés. El cual además de enfocarse en sus herramientas y habilidades técnicas, también tenía una conciencia social y una obligación por hacer su mejor trabajo para el bien de la comunidad.