En phpkitchen.com Demian ha transcrito en su integridad un interesante artículo sobre los elementos que determinan en qué medida un programador es experto. Este artículo fue escrito por Jeff Moore’s (el creador de WACT). Ciertamente, este artículo apunta en la dirección correcta, pero aún no aporta la suficiente luz suficiente sobre si tenemos a un programador que es muy inteligente, muy experimentado, con un alto conocimiento en conceptos CS, pero que no es particularmente un buen desarrollador de software.
En un artículo en Java World, “Contratando el archiquecto fantasma de Java”, se ha iniciado un interesante debate en el lado servidor respecto a lo que significa ser un desarrollador frente a ser un arquitecto. Demian, no está muy de acuerdo con el término arquitecto -cosa en la que coincido- sino que prefiere referirse mejor a niveles de programación.
La ciencia cognitiva se centra en investigar la resolución del problema relacionado con la determinación de la diferencia entre expertos y novatos en un área determinada. Más que distinguir entre desarrolladores y arquitectos, creo que es más adecuado referirse a expertos y novatos en la programación. El modelo Dreyfus de adquisición de conocimientos diferencia cinco niveles para ayudar en la resolución de este problema. A continuación, figura un resumen tomado de Coding Horror:
Nivel 1: Novato
* Con poco o ninguna experiencia previa.
* No quiere aprender: busca cumplir con un objetivo.
* No tiene un juicio discreccional.
* Se ciñe rígidamente a las reglas.
Nivel 2: Novato avanzado
* Comienza tratando de realizar las tareas por si mismo.
* Tiene dificultades con los problemas.
* Quiere información rápida.
* Puede dar algún consejo cuando se requiere.
* Sigue unas líneas, pero sin una compresión holística.
Nivel 3: Competente
* Desarrolla modelos conceptuales.
* Resuelve los problemas por si mismo.
* Busca los consejos del experto.
* Tiene una visión, al menos parcialmente, de planes y metas a largo plazo.
Nivel 4: Avanzado
* Guiado por máximas aplicadas a la situación actual.
* Aprecia las situaciones de forma holística.
* Se autocorrige basándose en la experiencia previa.
* Aprende de la experiencia de otros.
* Frustrado por la sobre simplificación de la información.
Nivel 5: Experto
* No se basa en reglas, líneas o principios.
* Trabaja fundamentalmente desde la intuición.
* Solo usa de aproximaciones analíticas al problema cuando se trata de situaciones nuevas o cuando surge el problema.
* Cuando se ve forzado a seguir las reglas, el rendimiento se ve perjudicado.
En el artículo publicado en Java World el autor se lamenta de que las compañías busquen expertos, pero no hagan entrevista para eso. Por ejemplo, el tests como el Certificado de Zend me desagrada. Tests como este no miden en absoluto el nivel de uno dentro de esta escala, sino que miden conocimientos.
He venido utilizando un fragmento de código en las entrevistas. El código, de cerca de 250 líneas, lo generó un sistema, resulta muy feo en muchos aspectos, pero es funcional. Mostrando el código a unos candidatos y preguntándoles sobre la forma de mejorarlo, he encontrado que podría ser un método adecuado para saber su nivel. Los novatos, sencillamente no tienen ni idea de qué hacer con él y simplemente le dan vueltas. Algunas veces, introducen comentarios, tratando de hacer el código “mejor”. Otros sólo encuentran y resuelven un problema (la mayor parte). Ninguno arregló todos los problemas que presentaba. La única persona que he entrevistado y no echó un vistazo al código (por cuestiones de tiempo), le dejamos ir. Él simplemente nos engaño sobre su nivel. El asunto es que estoy seguro de que hubiera pasado un test de certificación de Delphi (como el mismo que cogí de Brain Bench.)
Pasar desde del estadio de novato a programador experto, lleva bastante tiempo. Esto es lo que opinan desde Teach Yourself Programming in Ten Years:
Los investigadores (Hayes, Bloom) han hecho ver que requiere cerca de 10 años llegar a ser un experto en diferentes áreas, incluyendo jugar a la ajedrez, componer música, pintar, tocar el piano, nadar, jugar al tenis, e investigar en neuropsicología y topología. Parece que no existen atajos: incluso Mozart, que era un prodigio a la edad de 4 años, le llevó cerca de 13 años más antes de que produjera música reputada. En otro género, los Beetles, parece que saltaron a la escena con una canción de un hit y una aparición en el show de Ed Sullivan en 1964. Pero habían estado tocando en pequeños locales en Liverpool y Hamburgo desde 1957. Su primer gran éxito importante fue Sgt. Peppers, producido en 1967. Samuel Johnson piensa que llevó más de 10 años: “la calidad en cualquier departamento solo puede lograrse con el trabajo de una vida: no se puede comprar a un precio menor.” Y Chaucer se queja de que “la vida es demasiado corta, y que el oficio requiere demasiado tiempo para aprenderlo.”
Por lo tanto, no te puedes convertir en un experto sin experiencia. Pero, puedes tener experiencia sin ser un experto. Algunas personas emplean su tiempo pero no se desarrollan a si mismos. Es normal que estas personas tengan las respuestas para una pregunta trivial de un cuestionario, y consigan pasar los filtros de curriculum con sus detectores de palabras de moda, pero no tendrán el impacto que un verdadero experto podría tener en la misma situación. Como nuestro Delphi Dub.