En Filología se distingue entre el vocabulario activo, la parte del léxico de un lenguaje (es decir, del conjunto de palabras existentes en el lenguaje) que sabemos usar, y el vocabulario pasivo, la parte del léxico de un lenguaje que sabemos reconocer si las vemos.

Evidentemente, el vocabulario pasivo suele ser mucho mayor que el activo. Y una de las maneras de mejorar en cualquier lenguaje es aumentar los dos vocabularios, incluyendo conseguir pasar elementos del vocabulario activo al pasivo.

Estos conceptos son perfectamente aplicables al mundo de la programación. Yo mismo, entiendo código que incluya operaciones de stream de colecciones de elementos en Java pero tengo que mirar la documentación cada vez que quiero intentar escribir una. Si me lo propusiera (por ejemplo, poniéndome como “deberes” el escribir código ejercitando diferentes tipos de streams) conseguiría pasar el vocabulario de streams de pasivo a activo.

Lo  contrario también es cierto. Como mi cabeza es limitada, si no sigo utilizando estos operadores, acabará volviendo de mi vocabulario activo al pasivo.

Es importante entender esta distinción y decidir de forma consciente si queremos ser programadores más:

  • Generalistas, focalizando nuestros esfuerzos en aumentar el vocabulario pasivo, por ejemplo aprendiendo conceptos de lenguajes y librerías diferentes que nos permitan abarcar proyectos más complejos
  • Especialistas, optimizando nuestras habilidades de escribir rápidamente código eficiente para un lenguaje y arquitectura concretas.

Si fuera necesario también podéis intentar ser especialistas en varios lenguajes, pero en ese caso mejor hacerlo de forma secuencial, ya que cualquier cambio de contexto acelerará la transferencia de vocabulario activo a pasivo que después habrá que recuperar al cambiar de nuevo.

También es importante tener en mente esta distinción si en algún momento os viene el síndrome del impostor. Que haya gente capaz de escribir código en multitud de lenguajes normalmente quiere decir que es capaz de manejarse en todos ellos (vocabulario pasivo) aunque probablemente necesitará tiempo (activar el vocabulario activo) antes de escribir código decente en cualquiera de ellos.

Por ejemplo, Xatkit incluye componentes en Java, Javascript, PHP y Python. Y para cada lenguaje un buen número de librerías no triviales (Spring, React, WordPress API, Tensorflow,…) . Yo soy capaz de tocar todos los componentes pero cada vez que tengo que hacerlo sudo tinta y tengo que pasar un par de horas “estudiando” el código antes de ser productivo. Mi única estrategia es acumular mejoras por componente hasta poder pasar una semana entero en un mismo componente y así no tener que “estudiar” tanto.

Quien sabe si, en un futuro muy lejano, GitHub Copilot o cualquier otro editor inteligente serán especialmente útiles en este contexto, dando sugerencias de código que nos costaría escribir nosotros mismos (por falta de vocabulario activo) pero que sí podemos reconocer y validar (gracias a nuestro vocabulario pasivo).