A lo largo de la evolución, distintas especies desarrollaron distintas estrategias de supervivencia. Unas se hicieron más generalistas y otras más especialistas.
Las especies generalistas tienen nichos amplios. Están adaptadas a distintos tipos de climas y dietas. En este grupo están por ejemplo los zorros, mapaches y los humanos.
Las especialistas tienen nichos más estrechos. Requieren dietas o condiciones climáticas muy específicas para sobrevivir. Aquí destacan especies como los tigres, osos panda o koalas.
Ser un especialista tiene sus ventajas, tienen poca competencia por su alimento. Sin embargo, los animales con dietas variadas compiten con muchas especies distintas.
Como contrapartida, los especialistas son mucho más vulnerables. Un cambio del entorno puede ser catastrófico de forma que les salpique y pudiendo llegar incluso a causar su extinción.
Especialistas y generalistas en el código
Este concepto de especies generalistas y especialistas es aplicable también al desarrollo de software.
Las empresas intentan que nos especialicemos en campos de conocimiento cada vez más estrechos. Especializarse en algo tiene muchos beneficios, por supuesto, pero encierra también peligros.
Si eres super especialista en librerías y frameworks destacas rápido, es fácil que tardes poco en encontrar trabajo pero a la vez eres vulnerable y tu estabilidad laboral es frágil.
Un cambio del entorno, como aparición de nuevas y mejores librerías, que deje de existir tu framework o falta de proyectos, puede provocar tu despido (extinción).
Otro caso, que me ha pasado alguna vez, es cuando en tu empresa hay una rama especialista como puede ser Android que deja de recibir proyectos. Si no eres capaz de adaptarte y aportar valor en otra rama de la empresa como web de algún modo mientras aprendes esa tecnología, estas jodido.
Un modelo que yo utilizo y ayuda a reducir la fragilidad laboral es El Modelo T del conocimiento.
Se trata de combinar lo mejor de ambas especies. Este modelo maximiza las virtudes de ambas especies y minimiza las debilidades.
Por un lado, desarrollas conocimiento básico sobre múltiples ámbitos. Por otro lado, te beneficiarás de especializarte en algo.
Aprende algo sobre todo
Sobrevivir en un entorno salvaje requería múltiples habilidades.
Nuestros ancestros construían herramientas para cazar o construir, sabían utilizar plantas para alimentarse o sanar. Elaboraban ropa, eran exploradores, pintaban.
Había especialistas pero en general tenían todos mínimos conocimientos de varias habilidades.
Si trabajas por ejemplo con React, claro que es importante conocerlo, pero la especialización limita nuestra visión y capacidad de elección.
Es importante conocer React, pero si además sabes escribir código limpio, escribir tests, escribir código desacoplado y sabes trabajar con código legado vas a tener mucho más valor y estabilidad laboral.
Si además tienes algunos conocimientos de programación funcional, experiencia en otras tecnologías como Android o Flutter vas a encontrar situaciones donde la solución pasa por aplicar soluciones existentes ya en otras tecnologías diferentes a la tuya principal.
En caso de haber un pico de trabajo en otra rama de la empresa o déficit en la tuya siempre vas a poder aportar en otra tecnología.
La creatividad consiste en identificar conexiones entre elementos aparentemente dispares. Al exponerte a un mayor número de ámbitos de conocimiento, tendrás más posibilidades de encontrar esas nuevas conexiones.
Aprende todo sobre algo
Isaiah Berlin escribió un ensayo titulado el erizo y el zorro.
Tradicionalmente existe una visión peyorativa del zorro, al considerarse propio de personas dispersas y caóticas.
Ser un zorro con multitud de conocimientos ofrece beneficios, pero debemos aprender también de los erizos.
Los erizos cuando son atacados simplemente se enrollan en una afilada fortaleza. Es su única estrategia, pero es muy importante, y la ejecutan a la perfección.
Sé el zorro y el Erizo en eso se basa El Modelo T de Conocimiento.
Mi Modelo T de Conocimiento.
Muchas veces la vida nos va marcando en que nos debemos especializar y qué conocimientos debemos aprender más superficialmente. Y así fue en mi caso.
Hay que saber aprovechar las areas de oportunidad y dejarte llevar por aquello donde tienes más interés y te supone menos esfuerzo que a los demás.
He leído muchos libros relacionados con código limpio, escribir tests, escribir código desacoplado y saber trabajar con código legado.
Desde el principio de mi carrera me atrajo este tipo de conocimiento, me gustaba, me costaba menos que a los demás. Por otra parte, me encontré con que era conocimiento que no es efímero y aplicable a cualquier tecnología, lo que hizo que me gustará aún más.
Las circunstancias de mundo laboral hicieron que fuera cambiando de tecnologías. Fui experimentando como podía aplicar el conocimiento de diseño de software en diferentes tecnologías con las que iba trabajando.
He trabajado con .Net, Android, iOS, Asp.Net, React, Flutter por diferentes circunstancias y en todas estás tecnologías he aplicado lo que sabia de mi conocimiento más profundo.
En mi caso de forma natural mi modelo T de conocimiento era claro.
Tanto me especialicé en diseño de software, que fui impartiendo formaciones sobre ello en todas las empresas en las que estuve. Me hice freelance en 2016 e imparto este tipo de formaciones en empresas y en abierto.
Curso clean Architecture: