Qué separa a los mejores programadores del resto. Diez rasgos críticos.
Aviso: este artículo es una traducción reinterpretada del original What Separates the Best Devs From the Crowd: 10 Critical Traits .
Tres aspectos necesarios para tener éxito como desarrollador de software
El desarrollo de software profesional es una disciplina compleja que requiere un conjunto diverso de habilidades para tener éxito. Podemos agruparlos en tres categorías principales:
Habilidades técnicas
Este es el grupo más obvio. Para ser un desarrollador exitoso, debes ser bueno en tu oficio: lenguajes y frameworks, principios de código limpio, arquitectura, pruebas, depuración, etc. También tienes que ser hábil con algunas herramientas: control de versiones, línea de comandos y entornos de desarrollo.
Sin embargo, las habilidades técnicas por sí solas no te llevarán lejos en un entorno profesional basado en equipos. Es por eso que también necesita habilidades blandas.
Habilidades blandas
Para poder trabajar en grandes proyectos comerciales, necesita un conjunto sólido de habilidades blandas: trabajo en equipo, comunicación, gestión y planificación de proyectos, trabajo remoto, auto-organización, aprendizaje y productividad personal, entre otras.
Muchos de nosotros encontramos a estas habilidades menos interesantes que a las técnicas y, por lo tanto, a menudo las descuidamos (este simple hecho hace que puedan separar a los desarrolladores profesionales y sólidos del resto).
Sin embargo, también hay una tercera categoría, que es igualmente importante pero pasa desapercibida para casi todos, incluso los buenos desarrolladores.
Mentalidad
La mentalidad se parece a las habilidades blandas, pero las “habilidades” que la componen son rasgos más fundamentales y básicos: curiosidad, paciencia, empatía, determinación, adaptabilidad, etc.
En cierto nivel, sabemos que estos rasgos son importantes para una carrera exitosa como desarrollador de software. Pero debido a que parecen una parte innata y fija de nuestra personalidad, no intentamos aprenderlas deliberadamente de la misma manera que aprendemos técnicas de gestión de proyectos o productividad personal.
Esto nos hace ignorar a una parte enorme e importante de nuestro conjunto de habilidades y puede perjudicar gravemente nuestra evolución.
Por qué ignorar tu forma de pensar puede poner en peligro tu carrera
El desarrollo de software es un campo complejo, a veces frustrante e increíblemente rápido. Aprender, crecer y mantenerse relevante como desarrollador (y no quemarte en el proceso) requiere una combinación específica de rasgos de carácter.
Al mismo tiempo, es un juego 100% de equipo. Los piratas informáticos solitarios no tienen cabida en el desarrollo de software profesional, sin importar cuán buenos sean técnicamente. Y funcionar bien en un equipo requiere otro conjunto de rasgos aparentemente opuestos.
La mentalidad es algo diferente a las habilidades. Comprender los principios de desarrollo Agile no es lo mismo que ser adaptable y estar abierto a cambios frecuentes.
Y conocer algunas técnicas de depuración no es lo mismo que tener la curiosidad y la persistencia para realmente disfrutar persiguiendo el problema durante varias horas sin agotarte o desanimarte. Pero, aunque estos rasgos puedan parecer fijos e innatos a nuestra personalidad, son igualmente aprendibles como habilidades.
Sin comprender qué rasgos son críticos para un programador y perfeccionarlos deliberadamente con el tiempo, nunca alcanzarás tu máximo potencial. Los verdaderos desarrolladores senior lo saben, son conscientes de su forma de pensar y trabajan continuamente para mejorarlos.
Este es el diferenciador, el superpoder que separa a los mejores desarrolladores de la multitud.
Bien, pero ¿qué rasgos son los más importantes? Profundicemos un poco más en los detalles.
10 rasgos de un verdadero Desarrollador Senior
1. Curiosidad
Si tuviera que resumir en una frase de qué se trata el desarrollo de software, diría que se trata de aprender. Debes mantenerte actualizado con las tecnologías y los procesos de desarrollo de software en constante evolución.
Debes aprender los detalles profundos de dominios comerciales complejos (que serán varios a lo largo de tu carrera). Analizar y clarificar requisitos es aprender. Investigar es aprender. Optimización de rendimiento y la depuración; en otras palabras, profundizar en el funcionamiento interno del código, también es un tipo de aprendizaje.
El desarrollo de software también consiste en trabajar con personas (y para personas). Trabajarás en equipos multifuncionales con un conjunto diverso de personas de diferentes especializaciones y antecedentes (hoy en día, en la era remota, muy probablemente de múltiples países y culturas). Tendráss que entender “negocios”. Tendrás que comprender y resolver los puntos débiles y los problemas de los usuarios.
Sin una buena dosis de curiosidad, no solo serás menos efectivo en todas esas cosas, sino que también te cansarás bastante rápido.
2. Afinidad por la resolución de problemas
El desarrollo de software es un rompecabezas gigante: un flujo infinito de problemas para resolver. El motivo por el que te contratan como desarrollador es para solucionar los problemas de tu empresa y de tus clientes.
Para hacer esto, tienes que resolver problemas organizativos (cómo funcionar como equipo, cómo organizar tu trabajo, qué procesos usar) y problemas técnicos (lógica, arquitectura, rendimiento, etc.).
Estos problemas consisten en problemas anidados aún más pequeños, hasta problemas atómicos por ejemplo cómo diseñar y nombrar una función particular o prueba unitaria.
Si no disfrutas de resolver estos rompecabezas, si no tienes la habilidad de descifrar y desenredar problemas, tu carrera de desarrollo de software será una lucha.
3. Paciencia
Convertirse en un verdadero desarrollador senior requiere años de práctica. Experimentarás muchos contratiempos en el camino. Desarrollar tu carrera es gratificante, pero también un proceso lento y, a veces, doloroso. Para lograr la excelencia y llegar a la cima, debes estar preparado para la dedicación de por vida. Esto requiere de mucha paciencia.
La paciencia también es fundamental para muchas cosas relacionadas con nuestro trabajo: gestionar el soporte técnico, trabajar con usuarios que no son muy expertos en tecnología y hacer frente a la burocracia organizacional. Además, es una gran ayuda para resolver problemas.
No podrás trabajar sin paciencia en una industria tan dinámica y en constante cambio como la tecnología.
4. Persistencia (en la cantidad justa)
El desarrollo de software requiere mucha persistencia. Cazando errores. Descifrando APIs y bibliotecas mal documentadas. Desenredando el código heredado. Haciendo seguimiento de cuellos de botella en el rendimiento. Incluso simplemente manteniendo un enfoque profundo durante largos períodos de tiempo.
Lucharás, fallarás, te atascarás y te frustrarás mucho, sin importar qué tan alto seas. Y necesitarás mucha resiliencia para abrirte paso y no quemarte.
Pero también debes comprender cuál es la cantidad correcta de resiliencia. ¿Cuál es el punto óptimo entre golpearse la cabeza contra la pared de forma improductiva durante horas o incluso días, frente a interrumpir constantemente a tu equipo al solicitar asistencia de inmediato cuando se encuentra con el más pequeño bache en el camino?
5. Inteligencia emocional
El desarrollo de software gira en torno a las personas y los equipos. Trabajarás muy de cerca con colegas a nivel individual: programación en parejas, depurando y revisando código juntos.
También trabajarás con ellos en una configuración de equipo: brainstorming, planificación y toma de decisiones como equipo. Esta colaboración puede ser desordenada: tu trabajo se superpondrá o entrará en conflicto con el de otros, y cada uno tendrá opiniones diferentes.
Negociarás tu hoja de ruta con la gerencia. Finalmente, para crear un gran producto, deberás ponerte en el lugar de los (tus) usuarios.
Además de lo anterior, todas estas personas que hemos mencionado provienen de diversos orígenes, tanto técnicos como no técnicos. Son apasionados. Tienen opiniones fuertes. A veces pueden tener un carácter difícil.
Tu éxito como desarrollador dependerá de qué tan bien puedas establecer una buena relación con ellos. Sin una alta inteligencia emocional, esto será simplemente imposible.
6. Habilidad para mantener tu ego bajo control
El desarrollo de software (y el trabajo en equipo en general) es un acto de equilibrio. Por un lado, te contratan por tu experiencia. Se espera que tengas opiniones sólidas y que guíes a personas menos expertas en aspectos tecnológicos.
Por otro lado, trabajarás con compañeros de equipo igualmente experimentados que desafiarán tu punto de vista y con los que tendrás que tomar decisiones grupales.
Tu ego a menudo resultará herido en el proceso. Debes poder mantenerlo bajo control, pero sin retirarte ni desconectarte.
Debes ser obstinado pero no fanático. Haz esto: ten un punto de vista fuerte pero mantenlo débil; mantente abierto a ser convencido de lo contrario. Debes estar listo para defender tu opinión, pero también saber cuándo dejarla ir, para no ser un idiota brillante y condescendiente.
Necesitas respetar al equipo, al negocio y a los clientes. Necesitas ser capaz de estar en desacuerdo, pero al mismo tiempo comprometerte, y ser permeable a recibir comentarios constructivos (e incluso negativos) con gracia. De lo contrario, no podrás trabajar de manera efectiva en un equipo.
7. Adaptabilidad
Todo en el desarrollo de software se mueve muy rápido. Las tecnologías están en constante cambio. Las nuevas metodologías se vuelven populares. Las empresas pivotan. A lo largo de tu carrera, también cambiarás de proyectos, equipos, empresas y dominios comerciales. Incluso un único proyecto es un acto constante de inspección y adaptación (especialmente en enfoques ágiles). Y tu equipo también se deberá reorganizar constantemente.
La mayoría de las personas son alérgicas al cambio. El cambio es difícil. Es incómodo. Es estresante. Ser adaptable y estar abierto al cambio te diferenciará instantáneamente. No solo te permitirá subir a la cima de la escala de antigüedad, sino que también te permitirá permanecer allí durante mucho tiempo.
8. Confiabilidad
Lo repito hasta la saciedad, pero el desarrollo de software es un juego de equipo. Tus colegas, gerente y empresa: todos cuentan contigo para que hagas tu parte.
Nadie te considerará un verdadero desarrollador senior, sin importar tu experiencia tecnológica, si no pueden confiar en tí para que te encargues de tu trabajo y cumplas tus promesas sin tener que ser microadministrado.
No significa que nunca puedas cometer errores. Las fallas suceden. Y las mejores empresas los ven como algo valioso a las oportunidades de aprendizaje. Pero para alcanzar esto, debes poder recoger una pelota caída, recuperarte con gracia y confiar en que aprenderás de tu error y no lo repetirás en el futuro.
9. Pragmatismo
El desarrollo de software profesional es un arte de concesiones. Necesitas comprometer constantemente la velocidad de desarrollo y la calidad. Equilibrar lo nuevo y prometedor con lo probado y estable. Caminas por una delgada línea entre la ingeniería insuficiente y la excesiva.
Para tener éxito en el desarrollo de software profesional, debes ser muy pragmático. Debes comprender que nada es blanco o negro, y que ningún principio o patrón es válido en todas las situaciones.
Debes tener una gran intuición para hacer concesiones entre diferentes enfoques, tecnologías y soluciones. Sentirte cómodo tomando atajos, pero teniendo una buena idea de cuántos atajos son suficientes.
10. Perspectiva positiva
Tu vida como programador no es color de rosa. Te encontrarás con clientes molestos. Te enfrentarás a plazos ajustados. Tu proyecto puede ser cancelado. Es posible que no estés de acuerdo con tu equipo o administración, pero aún así debes comprometerte y ejecutar.
También trabajarás con código feo. (Sí, cada base de código tiene partes buenas y malas, incluso en las principales empresas como Google).
Te cansarás, te frustrarás y te enojarás.
Si dejas que la negatividad se apodere de tí, si empiezas a criticar y quejarte, no solo te desmotivarás a ti mismo, sino que también matarás la moral de tu equipo, lo que no llevará tu carrera muy lejos.
Necesitas estar sesgado hacia lo positivo. Sé optimista y alegre. Busqua siempre un lado positivo. Sé la persona que anima a tu equipo, acaba con el mal humor y restaura la moral. No solo te hará destacar y ascender, sino que también hará que tu carrera sea más placentera y sostenible.
Bonus: algunos consejos sobre cómo moldear tu forma de pensar
Las habilidades, obviamente, se pueden entrenar, tanto las blandas como las técnicas. Puedes mejorar tanto en la depuración de código como en la comunicación. Pero, ¿qué pasa con rasgos aparentemente innatos como la curiosidad o una perspectiva positiva? ¿Realmente puedes entrenarte para ser más optimista o curioso?
¡Sí, puedes! Este es un tema amplio, digno de varios libros (“Mindset” de Carol S. Dweck es un excelente punto de partida). Pero permíteme compartir rápidamente un par de consejos:
- Reconoce que tu mentalidad no es fija y que tus rasgos son maleables.
- Construye la autoconciencia. Observa cómo reaccionas ante diferentes situaciones. Trata de entender lo que te hace sentir de una manera particular (curioso o aburrido, positivo o gruñón, ansioso o defensivo).
- Haz una retrospectiva sobre tu comportamiento de uno o dos días atrás. ¿Tu opinión era realmente pragmática o era tu ego el que hablaba? ¿Cómo podrías haber actuado diferente?
- Prepárate con anticipación. Planifica con anticipación cómo te comportarás la próxima vez en una situación similar e identifica el disparador correcto que te recordará tu plan cuando llegue el momento.
- Exponte a situaciones que te permitan ejercitar y fortalecer los rasgos deseados. Busca activamente tales oportunidades.
- Concéntrate en un solo rasgo durante algún tiempo. Hará que sea más fácil encontrar oportunidades para ejercitarlo y aumentar tu autoconciencia de este rasgo.
- Reencuadra. Sé consciente y deliberado sobre cómo te hablas a ti mismo. La idea no es estúpida, es sorprendente. Ese escalofrío no es ansiedad, es emoción. El problema no es frustrante, es interesante.
- Pide ayuda. No dudes en pedir retroalimentación a tu colega o gerente, o incluso convertirte en su “socio de responsabilidad” que detectará y señalará su comportamiento no deseado.
- También te animo a que aprendas un poco sobre los sesgos cognitivos y la formación de hábitos. Esta es una disciplina bien desarrollada, con una gran cantidad de conocimientos y bastante interesante de explorar.
Nota final
Si quieres ser un verdadero desarrollador senior, tienes que ser uno completo. Debe tener la combinación correcta de habilidades tecnológicas, habilidades blandas y rasgos de carácter, y no puedes ignorar ninguna parte de este trío.
Los rasgos de carácter son la parte más complicada. La mayoría de los desarrolladores los descuidan porque no son conscientes de ellos, no saben cuáles son importantes o no creen que sean maleables.
Pero si puedes superar esta forma de pensar defectuosa, si puedes cambiar tu forma de pensar, puedes convertirla en un superpoder que elevará tu carrera y te hará sobresalir.