Conjuntos de habilidades amplios versus estrechos: habilidades de ingeniería de software desmitificadas

Publicado: 2022-03-11

Cada ingeniero de software tiene un conjunto de habilidades compuesto por las diferentes habilidades que ha adquirido. Un conjunto de habilidades es "profundo y limitado" si domina una o dos habilidades y poco más; es “amplio y superficial” si puedes hacer un poco de todo sin ser un experto en ningún campo.

La mayoría de nosotros estamos en algún lugar en el medio con algunas habilidades sólidas, algunas promedio y muchas brechas. En este artículo, me gustaría discutir el espectro amplio y profundo y argumentar que acercarse al extremo amplio beneficiaría a la mayoría de los programadores.

Habilidades de ingeniero de software: Representación gráfica de un conjunto de habilidades

La amplitud y la profundidad son, por supuesto, relativas. Por ejemplo, podría ser un experto en desarrollo web, o simplemente en desarrollo web del lado del cliente, o solo en JavaScript. Todas estas son habilidades "profundas y estrechas" en cierto sentido, pero la última es mucho más estrecha que la primera.

Además, los conjuntos de habilidades "profundos y amplios" y "superficiales y estrechos" son posibles: el primero significa que todos quieren contratarlo, y el segundo significa que aún tiene que aprender algo significativo. Dado que no son muy comunes, tampoco vale la pena discutirlos en detalle.

Tipos de habilidades y conjuntos de habilidades del ingeniero de software

profundo y estrecho

Tener un conjunto de habilidades profundas significa que eres un experto en al menos un campo.

Tome SQL: digamos que sabe todo sobre la teoría de bases de datos relacionales; los pros y los contras de MySQL, PostgreSQL, Oracle y SQLite; cómo optimizar las consultas; cuándo y cómo desnormalizar una base de datos, etc. Los clientes que busquen esta habilidad específica querrán contratarlo lo antes posible y por una buena razón. Te pondrás en marcha y entregarás valor como pocos podrían hacerlo.

Sin embargo, si el proyecto se expande o cambia significativamente, serás reemplazado o complementado por programadores con las habilidades que te faltan. Incluso sin cambios importantes, ¿sería capaz de sugerir cambios arquitectónicos? El cliente podría estar mejor con una base de datos NoSQL o sin ninguna base de datos, pero su limitada experiencia podría sesgarlo en contra de estas opciones desconocidas.

Amplio y poco profundo

Por otro lado, si es un generalista que no es un experto en el dominio, necesitará algo de tiempo para acelerar los nuevos proyectos antes de alcanzar la máxima productividad.

Para dar un ejemplo, tal vez necesite hacer un proyecto de Python y nunca antes haya usado ese lenguaje. Aún así, probablemente haya escuchado algunas cosas al respecto (dinámico, interpretado, multiparadigma) y su experiencia con otros idiomas hará que la transición sea mucho más fácil.

Es posible que el código que escriba inicialmente no sea Pythonic (con tuplas, comprensiones o generadores), pero sabrá por dónde empezar. Hará un progreso constante y sus módulos bien factorizados serán fáciles de mejorar más adelante. Su amplia perspectiva sobre la tecnología le dará ideas que otros podrían pasar por alto.

Cuando el proyecto cambie, usted será un activo para su equipo en lugar de un pasivo.

Conjuntos de habilidades en el mundo real

En términos geográficos, los conjuntos de habilidades estrechos parecen montañas altas y los conjuntos de habilidades amplios son como mesetas. Usando esta analogía, es probable que los conjuntos de habilidades típicos presenten un par de montañas, una colina aquí y allá, y muchas llanuras.

Representación gráfica de montañas, colinas y llanuras.

Un programador aleatorio puede ser excelente en SQL y Python, bien en programación web y algoritmos, y realmente preocupado por la mayoría de las otras cosas, como volcados de núcleo, servidores OAuth o aplicaciones nativas. Dicho programador debe continuar explotando sus áreas de especialización, al mismo tiempo que encuentra y llena los vacíos de conocimiento.

Es probable que esta estrategia les sirva mejor a lo largo de los años.

Por qué los programadores necesitan diversificar sus conjuntos de habilidades

Muchos proyectos requieren habilidades no relacionadas combinadas de manera impredecible. Si bien los ingenieros con amplias habilidades podrían contribuir de manera útil a la mayoría de ellos, el conjunto de habilidades de un experto coincidirá con los requisitos precisos de pocos empleadores. Eso no es necesariamente un problema a corto plazo, ya que solo necesita un trabajo para pagar las facturas.

Sin embargo…

La sobreespecialización es arriesgada. Poner los huevos en una canasta podría estar bien si puede predecir el futuro mejor que los demás, pero esa habilidad es rara y no está relacionada con las habilidades tecnológicas. Considere la demanda de habilidades de programación de Windows en nuestro milenio. O pregúntese: ¿podríamos muchos de nosotros haber adivinado las respectivas trayectorias de Android, Flash, Nokia o Blackberry hace una década?

Por último, los mejores empleadores valoran mucho las diversas habilidades. Facebook no asigna nuevas contrataciones a los equipos hasta seis semanas después de que comienzan. Google fomenta las transferencias internas y ejecuta varios programas de rotación. Incluso si te gusta trabajar por cuenta propia, mantener tus opciones abiertas no te hará daño. Si alguna vez considera trabajar para esas empresas, tendrá que ser al menos algo generalista.

Suponiendo que esté convencido y quiera diversificar sus habilidades, ¿cómo lo haría?

Cómo diversificar y mejorar las habilidades técnicas

Podrías cambiar dinero por habilidades:

  • Acepte una tarifa más baja mientras hace la transición a un campo desconocido. Si eres un 75 % tan productivo como de costumbre, un recorte salarial temporal del 25 % es justo. Pronto lo recuperarás.
  • Realice trabajos de demostración no remunerados con las habilidades que desea mientras solicita trabajos que las requieran. Si resulta que no está listo para el cambio, todavía es una lección útil que debe aprender.

También puedes intercambiar tiempo por habilidades:

  • Contribuir a un proyecto de código abierto. Obtendrá consejos y validación, retribuirá a la comunidad y tal vez sea notado por posibles empleadores o compañeros de trabajo.
  • Haz un proyecto personal para la alegría, la inspiración y un cambio del trabajo del día a día. Por ejemplo, cloné el juego Snake anterior al teléfono inteligente mientras aprendía React.

Tienes que buscar oportunidades de aprendizaje, pero no puedes hacerlo constantemente. Para mi proyecto de entrevista de Toptal, utilicé Node.js y Backbone, ninguno de los cuales tenía mucha experiencia. Fue divertido, pero el ritmo de aprendizaje requerido no pudo mantenerse durante meses.

Lo ideal sería alternar entre largos períodos de estabilidad (con una producción e ingresos constantes) y breves intervalos en los que se desafía a sí mismo a aprender algo nuevo. La frecuencia con la que haga esto último depende de varios factores, como su conjunto de habilidades actual, la demanda del mercado y sus objetivos personales.

Por qué la amplitud es buena para los empleadores

En lo que respecta a los empleadores, siempre se requerirán habilidades profundas en algunos escenarios:

  • Cuando hay poca confianza o compromiso de tiempo entre empleador y empleado.
  • Cuando los resultados catastróficos (como incidentes de privacidad o seguridad) son probables.
  • Cuando se requieren habilidades esotéricas.
  • Cuando los plazos sean urgentes e innegociables.

Aún así, muchos proyectos no marcan ninguna de esas casillas y sus gerentes de contratación deberían considerar ingenieros completos. Se transfieren muchas habilidades técnicas, como las pruebas y la documentación del código, y todas las habilidades sociales (como la comunicación). La resiliencia es importante incluso cuando los productos no cambian por completo; si la parte que contrató se detiene, un generalista puede trabajar en la siguiente prioridad más alta.

Representación gráfica de un empleador que elige a un desarrollador con un conjunto de habilidades amplias y superficiales en lugar de uno con un conjunto de habilidades profundas y limitadas

Dada la importancia de los amplios conjuntos de habilidades, debemos alentar a los desarrolladores a diversificarse, y debemos comunicar la importancia de un amplio conocimiento a los empleadores que pueden estar demasiado enfocados en "años de experiencia" con varios campos y habilidades.

El objetivo final es un historial de clientes satisfechos; además de las habilidades duras y blandas, eso demuestra la capacidad del ingeniero para hacer la transición a áreas desconocidas. También es un fuerte incentivo para que los autónomos no se aventuren en nuevos campos antes de estar preparados para hacerlo.

Lograr el equilibrio adecuado

Cuando se subestiman las habilidades generales, algunos buenos desarrolladores están inactivos y algunos buenos proyectos no tienen suficiente personal o están por encima del presupuesto. Exigir una combinación perfecta de habilidades es como exigir trabajo en el sitio, ya que hace que sea más difícil hacer coincidir la oferta (mano de obra calificada) con la demanda (trabajo gratificante).

Nada de esto es un argumento en contra de la experiencia en el dominio; siempre importará y será generosamente recompensado. Solo debemos tener en cuenta que las habilidades generales también importan más de lo que parece.