Como ser un buen developer ?

Todos soñamos alguna vez ser buenos programadores como Linus Torvalds, Fabién Potencier, Rasmus Lerdorf, James Gosling o Guille Rauch, pero para ser sinceros ellos no son buenos programadores, ellos son unicornios, nacieron con ciertas capacidades y/o oportunidades que muy difícilmente la mayoría podamos llegar a tener.

Hace poco leía sobre los fundadores de Google, Serguéi y Larry, Sergei es hijo de científicos rusos, la madre trabajaba en Goddard Space Flight Center de la NASA y el padre era profesor de Matemáticas en la Universidad de Maryland. La madre de Larry era profesora de programación en la Universidad de Míchigan y el padre fue profesor de Ciencias de la Computación e Inteligencia Artificial de la Universidad de Carolina del Norte en Chapel Hill y de la Universidad de Míchigan, un pionero y autoridad en el campo de la Inteligencia Artificial. Tenían de donde inspirarse los muchachos no?

La verdad que ellos son mucho mas que buenos developers, por eso son tan destacados, no todos podremos ser como ellos. Varios tienen como el ideal de buen developer estos estereotipos, la verdad que no es cierto, ser un buen developer no requiere taaaaanto.

La industria

Después de varios años en la industria me di cuenta de ciertas verdades.

La primera es que la industria no es plana y el trabajo de developer no es único, hay developers que trabajan en empresas de servicios, otros que trabajan en empresas de productos, otros que trabajan freelance, otros que trabajan para ONGs, otros que trabajan para el estado, otros que trabajan para organismos sobre sistemas específicos (bancos, retails, etc), es imposible medir con la misma vara a todos los developers.

Las capacidades como developers dependen mucho de las oportunidades que se nos presentan (y que generamos), entre antes comencemos a codear mejor, si ya sabemos ingles de antes mejor, si estamos en Silicon Valley donde hay 2 startups por cuadra con challenges increíbles es mejor que un lugar donde solo hay empleos públicos y lo que mas se hace son reportes y ABMs. El contexto nos forma y limita, si o si.

La industria no gira en torno a la tecnología, gira en torno a las personas. La mayoría de los problemas se solucionan hablando, escuchando y negociando, no poniendo más y más plata en tecnología. Las personas de sistemas suelen tener esta falta de soft skills, por ellos las areas gerenciales suelen estar desconectadas de las areas de sistemas, los gerentes toman desiciones sobre sistemas sin consultar a su gente de sistemas (en todos lados pasa).

La tecnología es fácil, lo difícil son las personas.

Muchos esfuerzos de development se pierden por mala compresión de los requerimientos originales, la gran mayoría de los esfuerzos diría yo.

En sistemas, el cliente no siempre tiene la razón, hay que saber negociar, todo el tiempo estamos negociando. Muchos bugs se cierran simplemente hablando, 0 lineas de códigos involucradas.

Computer Science no es Engineering, los capos que generan lenguajes, frameworks, patrones, metodología son personas que se dedican a las Computer Science, el ingeniero usa esos estudios para hacer cosas reales de todos los días para la gente. Un ingeniero puede hacer un lenguaje de programación?, si podría, también un niño de 8 años.

Startups !== Organismos Públicos !== Empresas Privadas !== Empresas de Servicios !== Empresas de Productos !== Empresas Multinacionales.

Todas son diferentes, cada una necesita un tipo particular de developer, Rasums Lerdorf difícilmente quiera / pueda / sirva trabajando en el Banco Nación, pero si en una Startup que esta innovando en como vender más y mejores zapatos online con PHP. Debemos buscar donde encajamos mejor.

La pregunta que les hago es, ¿que es necesario para ser un buen developer?

Si miramos lo que las empresas buscan veremos que ellos NO saben que es lo que necesitan, buscan generalmente gente con conocimientos en un lenguaje en particular y años de experiencias sobre una plataforma especifica, alegando Señoritis para decir “que tanto debes saber”. A la hora de la entrevista te hacen preguntas chetas pre fabricadas sobre patrones, objetos, librerías o frameworks que si lees todos los días la revista users o saliste ayer de la facu te las las sabes de memoria.

Si bien es la forma que se hace y nadie se fundió todavía por seleccionar personal de esta forma, no es la mejor pero funciona, por que eso que piden es una condición que surge de otras aptitudes que yo creo son las fundamentales.

Entonces ¿qué debe tener un buen developer?

Creo que esto es lo fundamental

  • Un buen developer tiene pasión por lo que hace, ama lo que hace, por eso lee, se informa, prueba tecnologías nuevas, suma experiencia.
  • Soluciona sus problemas cotidianos con tecnología, y si puede codearlo mejor.
  • Es buen comunicador, tanto para expresar sus necesidades como para ayudar a los pares en necesidad.
  • Sabe escuchar y entender lo que se necesita que haga.
  • Sabe negociar, negocia requerimiento, bugs, estimaciones, planes, etc.
  • Sabe estimar, es fundamental que pueda estimar con certeza cuanto tiempo tardará en hacer una tarea.
  • No es un rock star, es un jugador de equipo. Primero esta el equipo y el proyecto, después esta el.
  • No tiene miedo al cambio, sabe que es la única constante, lo acepta y trabaja para ello.
  • Sabe que el objetivo no es solo cerrar tickets, el objetivo cumplir con lo que el equipo se comprometió.
  • Trae soluciones, no problemas. Cuando surge un problema tiene un as bajo la manga para solucionarlo.
  • Se preocupa por las pequeñas cosas, no subestima nada.
  • Quiere entregar un producto estable y útil para el cliente, no se preocupa por solo tener 0 bugs.
  • Tiene el NO fácil, NO es la mejor herramienta para cerrar bugs antes que aparezcan, acordate de KISS y YAGNI.
  • Conoce la importancia de testear, y realiza tests (automáticos o no, testea).
  • Se organiza, sabe manejar prioridades, sabe que es lo mas importante, que se puede postergar, cuando hay que alarmar.
  • Es honesto, para con sigo mismo y con el equipo.
  • Sabe hacer preguntas especificas.
  • Sabe pedir ayuda.
  • Conoce sus limitaciones.
  • Sigue las buenas prácticas, pero es lógico.
  • Se involucra en las comunidades.
  • Sabe de redes y hardware.
  • Escribe soluciones, no código.
  • Conoce su lenguaje/s y maneja las herramientas de su ecosistema, (si, también tenes que saber codear bro).
  • Un buen developer sabe que ganar dinero es una consecuencia de hacer lo que bien le gusta, y como sabe que es bueno se hace valer.

Sinceramente, esto cae a reflexión por que durante muchos años estuve muy focalizado en el código y tanto pensar en el código me distrajo de cosas más importantes, como la solución. Me hubiese gustado entender estos puntos de vista mucho antes.

Como hacemos para meter esto en un proceso de selección ? …. todavía no lo sé, cuando lo descubra escribiré otro post, se aceptan ideas 🙂

Críticas ? Comentarios ? …. bienvenidos

Share

14 comments

  1. Totalmente de acuerdo. Y cuando encuentres cómo se hace para involucrar todo eso en la selección, compartilo porque tal vez sea útil para formar bajo esas premisas 😉

  2. Es muy bueno el articulo completo. Creo que el motor principal de un buen desarrollador (permitime utilizar el castellano) es la pasión. Podes ser un crack en PHP, o en JS, o en lo que sea, pero si no te apasiona lo que haces dificil que llegues a buen puerto. Particularmente, trabajo en la administración publica (una facultad de la UNNE) y me he ahorrado cientos de horas de trabajo gracias a saber codear… Que la computadora lo haga en mi lugar, mas rápido y sin errores. Y no creo que sea para trabajar menos, creo que es trabajar mejor.
    En cuanto a los procesos de selección, no creo que en una entrevista de 20 o 30 minutos uno pueda determinar las capacidades (o mas importante aun, la actitud, si, con C) de una persona.

    Saludos!

  3. La pucha ichu que son muchas cosas las necesarias para ser un buen developer. ¿Están todos concatenados con un AND o hay algunos OR en medio? No se si voy a llegar en algún momento a ese nivel y no se, a decir verdad si conozco a alguien con todas esas características.
    Definitivamente si en la entrevista me pasan todos los ítemes para un auto examen, con total sinceridad me doy vuelta y me voy.
    Creo que me acabo de deprimir ajajaja. Algún día llegaré, lo prometo!

  4. Excelente Agustín, me encanto tu publicación. Felicitaciones por el solido camino que estás construyendo al compartir estas reflexiones. Un fuerte abrazo.

  5. muy buen post, soy estudiante de sistema y me doy cuenta que hay mucha informacion donde cada dia hay que leer y leer quemando pestaña, asi uno mismo se va formalizando.

  6. Muy buen post, y si creo que hay que estar muy bien preparado para ser así pero si uno tiene pasión por lo que hace solo hay que aprovechar las oportunidades de la vida.

  7. Hasta que las maquinas se programen solas muahahaha..

    Muy buena lectura.
    No se si concuerdo con la parte de que podes ser un buen dev solo en algo.. Es decir si sacas a un dev de un banco y lo pones en una startup bien hipster y no anda bien entonces no es tan buen dev. Yo diria que eso te evita un tiempito de adaptacion nada mas.

    Tambien creo que si lo pones a Linus a hacer un sitio e-commerce, seguro algo genial va a salir…

    Cheers.

  8. Hola Agustín. Me encantaría leer algo tuyo donde des Consejo a los muy nuevos que quieren trabajar en programación.
    Algo sobre como saber si estas listo para una empresa. Como arrimarse como MUY junior a una entrevista para senior… .. Si ya tenes algo please indican sino ahí tenes un huecito.

Leave a Reply

Your email address will not be published. Required fields are marked *