El término experto es ambiguo, y el de informática es muy amplio, pero aquí hablaré especificamente de las personas que saben mucho de desarrollo de software.

Entonces, reformulando la pregunta (o refactorizando como nos gusta decir a los desarrolladores), aquí va la pregunta clave.

¿Qué debe saber un desarrollador experto en software?

Uno estaría tentado a decir que un experto es aquel que lo sabe todo, pero eso implicaría haber memorizado muchas cosas y la memoria poco tiene que ver con el expertise.

Para explicarlo mejor propongo un simple esquema de cuatro niveles.

Aprendiz:

Aquél que esta aprendiendo el lenguaje, todavía no entiende los patrones de diseños básicos, no está seguro como implementar características nuevas, eso no quiere decir que no pueda hacerlo, pero no se rige acorde a las normas y los estándares e implementa funcionalidades por ensayo y error.

Puede empezar un proyecto básico, pero rara vez puede terminarlo.

Para superar este nivel se requiere práctica.

Semi Senior

Es capaz de abordar un problema conocido desde cero y resolverlo, el problema debe ser relativamente conocido o poder descomponerse en problemas conocidos.

La soluciones implementadas por el semi senior son funcionales, y cumplen con los propósitos pedidos, pero no se acogen (o por lo menos no sabe si lo hacen) a las normas y buenas costumbres, y no es completamente consciente del costo de la implementación de sus soluciones ni de las alternativas disponibles.

Para superar este nivel se requiere de comunidad y literatura, no sólo escribir código, además hay que estudiar, documentar y compartir, esa comunidad perfectamente puede ser un grupo de amigos cercanos o compañeros de trabajo con más experiencia.

Enseñar también es una muy buena forma de aprender, cuando uno enseñe no sólo tiene que hacer que las cosas resulten, tiene que entender por que son así y por que no podrían ser de otra manera (o por que motivos no sería conveniente), este tipo de estudio te encaminará al siguiente nivel.

Senior:

A diferencia del nivel anterior, el desarrollador senior programa acorde a las normas y buenas costumbres respectivas. Sabe las diferencias y las consecuencias de antemano de las multiples soluciones que puede tener un problema, así como los costos de implementación de las posibles soluciones.

Un desarrollador senior usualmente tiene 2 a 5 años de experiencia en ese lenguaje, pero la métrica real no es cuantitativa, es cualitativa. Es un factor clave que el desarrollador senior tenga proyectos terminados (o mejor dicho despachados, el software nunca se termina), el mayor aprendizaje esta´en el último 20% de un proyecto.

Superar este nivel se requiere de una comunidad bastante más grande, participar activamente en los foros y Github (u en general proyectos de terceros, no tienen porque ser necesariamente abiertos), requiere de estar en contacto con grandes desarrolladores y estudiar mucho fuera de tu zona de confort.

Experto.

Este título honorífico que muchas personas se atribuyen con ligereza consiste en una persona que no solo conoce a fondo el lenguaje sino además conoce a fondo sus bondades y limitaciones.

Por lo mismo es imposible convertirse un experto en un lenguaje de programación sin entender otros lenguajes y paradigmas.

¿Cómo convertirse en un experto?

La respuesta es sencilla y está arraigada en nuestro folclore. La práctica hace al maestro. La única forma de convertirse en un experto es aprendiendo, haciendo, reaprendiendo y rehaciendo.

A fin de cuentas un experto es alguien que ya ha cometido todos los errores posibles en su campo, así que hay que perderle miedo a equivocarse, aprender, hacer, compartir, corregir, ayudar a otros y permitir a otros ayudarte. Es un largo camino que demora miles de horas de trabajo y estudio, pero que definitivamente valdrán la pena el esfuerzo.

Nota importante:

El de la foto del artículo no es informático, es Howard Yana-Shapiro, director de Plant Science and External Research, Mars Incorporated. Pero por algún motivo en el mundo TI tenemos asociado las barbas con el expertise, las apariencias engañan.