5 puntos por spilist2 2021-12-04 | 7 comentarios | Compartir por WhatsApp

Como últimamente he seguido pensando en temas como aprendizaje, crecimiento y productividad, me dio curiosidad este tema.

Yendo un paso más allá, ¿en qué creen que se diferencian un buen desarrollador y un desarrollador excepcional?

También les agradecería si responden cambiando "desarrollador" por otro rol o puesto al que pertenezcan o que conozcan bien. (e.g., tech lead, CTO, CEO, fundador, diseñador, PM, ...)

Yo creo que los puntos en común de los desarrolladores excepcionales son, en gran medida, los siguientes tres.

  • Detección del problema: encuentran cosas que otras personas ni siquiera reconocen como un problema y descubren posibilidades de mejora.

  • Definición del problema: observan la situación y la causa del problema desde niveles y perspectivas muy diversos, y convierten su experiencia acumulada en patrones para reducir el problema a uno mucho más simple (o más efectivo, o más fundamental).

  • Resolución del problema: pueden imaginar varias soluciones posibles y, al entender los trade-offs de cada una, eligen la solución adecuada para la situación actual de la organización. También saben en qué momento y observando qué señales deberían cambiar esa decisión. Y aplican la solución en unidades pequeñas, de una manera que permita recibir retroalimentación rápidamente.

7 comentarios

 
benjamin 2021-12-17

Cero sentido de la moda.

Si hablamos de rasgos en común, eso es lo único que se me ocurre.

Es medio broma, medio en serio..... jaja

 
xguru 2021-12-04

Básicamente, yo también creo que un desarrollador es alguien que resuelve problemas.

No creo que sea necesario limitarlo solo a los desarrolladores, pero yo elegiría la "conexión" como característica de las personas sobresalientes.

Creo que lo importante es si una persona sabe conectar bien muchas cosas que tiene en la cabeza, como conocimientos, experiencia e ideas.

Cuando se detecta un problema, pensar en una solución es una conexión de primer nivel,

pero también es conexión vincular un problema con otro para imaginar una situación compleja y encontrar una solución diferente,

y también es conexión unir varias soluciones e ideas para crear una solución más simple, flexible y superior.

No solo en el desarrollo: creo que, en estos tiempos, una capacidad muy importante es pensar conectando el desarrollo con factores de negocio, o incluso conectar cosas que no parecen tener relación en absoluto.

 
spilist2 2021-12-04

También hice la pregunta en Facebook y Kim Chang-joon me dejó un comentario diciendo que revisara un artículo académico. Ahora pienso: ¿cómo no se me ocurrió antes?

Voy a leer un artículo de 2015 titulado “What Makes a Great Software Engineer?”, ya que ha sido citado 150 veces.

https://ieeexplore.ieee.org/abstract/document/7194618

 
guswns1659 2021-12-15

¡Hola, spilist2! Creo que también vi que hiciste esta pregunta en Facebook :) Yo también siempre tengo esta inquietud, pero ¿podrías recomendar algún contenido de artículos académicos?

 
spilist2 2021-12-15

Creo que el artículo probablemente es una tesis doctoral (dissertation), y según el PDF tiene nada menos que 300 páginas. https://digital.lib.washington.edu/researchworks/bitstream/…

Por eso todavía solo he podido leer hasta el capítulo 2 (introduction, related works), pero incluso hasta ahí el contenido me ha gustado muchísimo. Además, está escrito de forma fácil de entender. Lo recomiendo.

 
guswns1659 2021-12-29

Leí el capítulo 6 porque de los artículos que compartiste me pareció que era el más clave jaja, ¡y está buenísimo! ¡Me hizo reflexionar de nuevo también! jaja. Gracias.

 
spilist2 2021-12-04

Al lanzar la pregunta y buscar en Google, sí aparecen varios artículos. También está la palabra clave 10x engineers.

https://linkedin.com/pulse/great-engineer-vs-good-marissa-fayer-mba/

  • Un buen desarrollador tiene herramientas especiales para resolver problemas. Un buen desarrollador es sistemático y racional, observa desde todos los ángulos y analiza todas las entradas y salidas posibles.

  • Un desarrollador excepcional, con base en todas las capacidades mencionadas arriba, las aplica a soluciones que pueden usarse de inmediato. Aplica de forma creativa patrones ya conocidos (principios de la ciencia y las matemáticas, principios de desarrollo lean, etc.) a nuevos problemas de la vida real.

  • Los desarrolladores más excepcionales saben escuchar. Escuchan el problema, escuchan a las partes interesadas y aquello a lo que le dan valor, escuchan al mercado, escuchan el feedback. Y escuchan la voz interior que les sugiere métodos creativos.

==

https://www.quora.com/How-do-you-identify-a-good-vs-great-engineer

Hay muchísimas respuestas... pero si vemos solo algunas de las que tienen más votos:

  1. (Usando el ejemplo de la persona que llevó un ventilador a la cinta transportadora) una persona floja siempre encuentra la manera de no trabajar. Un ingeniero flojo es el mejor ingeniero.

  2. Un buen ingeniero resuelve el problema que le piden. De vez en cuando toma clases para mejorar sus propias capacidades técnicas. Un ingeniero excepcional va un paso más allá de lo que le pidieron.

  • La gente lo busca cuando tiene preguntas.

  • Aprende constantemente.

  • Comparte de forma continua lo que sabe.

  • Defiende lo que cree correcto, pero también sabe cuándo ceder.

  • No teme ensuciarse las manos.

  1. Un mal ingeniero pone excusas sobre por qué es difícil corregir un bug cuando hay un bug en el sistema. Un buen ingeniero corrige el bug con base en su experiencia. Un ingeniero excepcional busca el significado oculto detrás del problema dado.
  • Revisa si no existen bugs similares en todos los demás sistemas (o si ya fueron corregidos).

  • Propone una solución o diseño de largo plazo que pueda evitar que vuelvan a ocurrir bugs similares. (Adjuntando un cost/benefit analysis entre cada solución)

  • Mira también fuera de su propia área de especialidad para ver si otros grupos no han pasado por problemas parecidos. (O ya se puso en contacto con ellos)