Consejos para un desarrollador que empieza
Un artículo de Rafa G. Blanes
A menudo me he cruzado mensajes con personas que me han pedido más o menos consejos sobre sus primeros hitos como desarrolladores de software y, también, tengo la oportunidad con frecuencia de tratar con quienes acaban de terminar su ciclo académico (tanto de la Universidad como de una modalidad que existe en mi país a través de módulos formativos).
¿Qué decirles a aquellas personas que comienzan en este sector y cuyo interés principal es programar?
Qué decir cuando cada uno cuenta con sus propias experiencias a lo largo de su vida profesional, y también cuando está claro que cada uno tiene sus propios objetivos; yo puedo decir que cuento con una experiencia dilatada en muchísimos proyectos de naturaleza completamente heterogénea, algunos de los cuales fracasaron y otros continúan funcionando en alguna parte del mundo. Según éstos, tu progresión profesional y formativa deberá ir cambiando en una u otra dirección: ¿te ves trabajando para una gran compañía el resto de tu vida? ¿o bien te resulta más atractivo cambiar cada pocos años o incluso crear tu propio negocio?
Lo primero que te voy a decir es que si llevas varios años realizando el mismo tipo de actividad... pues mal, muy chungo, vas por muy mal camino.
Por otra parte, hay que tener en cuenta que el mercado laboral local en el que cada uno vive tiene características diferentes y al final nos tenemos que adaptar un poco al tipo de compañías que tenemos más accesible, si es que te das cuenta pronto de que también puedes teletrabajar ofreciendo tus propios servicios como agente libre.
Aquí va una serie de consejos que espero que sean de utilidad, enfocados para un desarrollador de sofware neófito pero ambicioso y que comprende que:
- Nuestro mercado es mundial, no local. ¿Te das cuenta? ¿Por qué ofrecer tus servicios a las compañías de tu propia ciudad cuando lo puedes hacer a todo el globlo?
- El inglés es el idioma natural en todo lo relacionado con el software. Lo siento, es así, si no dominas el inglés, al menos el técnico, reduces tus posibilidades.
- No hace falta vivir o trabajar en Silicon Valley para lanzar proyectos importantes.
- Tan importante es la actitud como la aptitud, tendrás que cultivar y mejorar ambas.
- El desarrollo de software, aunque tenga una base sólida desde hace muchas décadas, evoluciona a un ritmo frenético: o te actualizas casi continuamente, o en cinco años eres un dinosaurio tecnológico. Tenlo en cuenta; esto es: tienes que aprender continuamente, del mismo modo que tendrás que desechar gran parte de tus conocimientos técnicos que terminan siendo obsoletos. Nada peor que aferrarte a unos conocimientos cuyo valor en el mercado tiende a... cero.
Un programador que empieza y que quiere mejorar...:
- Debe aceptar que solo va a ser un buen programador cuando haya trabajado varios años escribiendo código, muchísimo código. Me molesta mucho quienes dicen cosas como que "ya picaron código durante un par de años...". Los conceptos básicos de programar se pueden aprender en un curso de fin de semana... Pero lanzar un proyecto profesional requiere de mucho más tiempo y experiencia. Programar es un arte, difícil, y si no que se lo digan a Uncle Bob...
- Un buen programador siempre acepta que puede haber una solución mejor que la suya (= humildad). Lamentablemente, en este sector te vas a encontrar con muchos egos subidos que creen que por escribir dos tonterías en un ordenador, están enviando un cohete a Marte... Acostúmbrate a tratar con personalidades con egos demasiado inflados. Mi consejo: aléjate de ellos, la mayoría están defendiendo su puesto de trabajo.
- Un buen programador lee código de otros y le gusta husmear en GitHub o sitios similares para ver el trabajo de los demás.
- Se documenta y lee continuamente acerca de nuevas tecnologías, tendencias, etc.
- Antes de reinventar la rueda, investiga para comprobar si ya existe algo parecido a lo que tiene que realizar, es decir, integra librerías o servicios de terceros en su trabajo. Nuestra responsabilidad es crear valor, no rediseñar soluciones que otros ofrecen a bajo precio mucho mejor de lo que podríamos desarrollar por nuestra cuenta.
- Debe dominar todo lo relacionado con el código limpio y técnicas de refactoring.
- No concibe escribir código que no pueda ser respaldado por tests y no duerme bien si su software no está suficientemente testeado...
- Como mucho puede llegar a dominar unas cuantas tecnologías (dos o tres, digo "dominar con carácter de experto"), pero sí sabe "algo" de muchas otras.
- Se mantiene al día de lo que acontece en la industria del sofware (al menos de lo que ocurre en su sector): contenerización, cloud, software as a service, microservicios, etc.
- Los mejores desarrolladores que he conocido siempre trabajan en proyectos propios y personales al margen de su actividad regular (quizá haya sido casualidad, pero no lo creo).
- Tu mejor currículum es una web personal propia donde hablas del trabajo que realizas y enlazas algunos proyectos hechos por ti y publicados. Gestionar tu marca personal como si de una empresa se tratase.
- Nada peor que trabajar en el mismo proyecto durante mucho tiempo. Esta actitud provoca que trates de defender una posición que crees exclusiva en la compañía, y puede que así sea, pero te está impidiendo progresar y mejorar como profesional en otras áreas. En El Libro Negro del Programador dedico un capítulo a esta dinámica.
- Ningún profesional es monolítico y solo domina un área del desarrollo de software: hay que tener conocimientos variados aunque sea superficiales, de bases de datos relacionales y no relacionales, de algorítmica, de diseño web, de microservicios, de testing, de métricas y calidad del software, etc. No hay nadie que sea experto en todo, y si alguien se identifica así, está lejos de la realidad. Nuestro sector está cada vez más especializado en áreas completamente heterogéneas.
- Un buen desarrollador sabe distinguir lo que es el diseño y lo que es la arquitectura.
- Abraza el desarrollo ágil sí o sí.
- Sabes que la mejor forma de mejorar en programación es, programando muchísimo...
- Siempre se pregunta "¿cómo puedo mejorar y simplificar esto?".
- Un buen programador sabe que hay que trabajar sí o sí con cierta metodología.
- Utiliza herramientas para el seguimiento metodológico del proyecto en el que trabajo (Visual Studio Online, Asana, Trello, etc.)
- Aunque tu dedicación fundamental sea programando, también tienes algún conocimiento de infraestructura, administración de sistemas, etc.
Un buen programador (o alguien que prospera programando, que no tiene por qué ser lo mismo), y al igual que ocurre con cualquier otra profesión, no cultiva solo su aspecto y saber técnicos (algún que otro hijo de p... que he conocido podía ser "bueno" en lo suyo pero insufrible como persona, perdiento, por tanto, oportunidades), sino que cultiva y mejora también su actitud:
- Sabe trabajar en equipo y se integra bien cuando tiene que compartir su trabajo.
- No se siente amenazado ante quienes tienen más experiencia: lo ven como una oportunidad de aprender más y no como una amenaza.
- Sabe soportar los momentos de estrés y gestionarlos como algo más que forma parte de la dinámica profesional.
- Es organizado en el trabajo y sabe distinguir las tareas importantes de las urgentes.
- Tiene conocimientos de productividad en el trabajo.
- Es amable con sus compañeros y cuida el modo en que se expresa con ellos.
- Me di cuenta hace mucho que cuanto más sabiduría alcanzas, más humilde eres, lo contrario es el ego insoportable de quienes te debes alejar como de la peste, en serio.
- Transmite a su jefe de forma clara lo que necesita para trabajar correctamente.
- Se mantiene enfocado: evita las distracciones continuas e interrupciones mientras está en un ciclo de trabajo (de una a dos horas como mucho).
- No lo quiere hacer todo él mismo, sino que sabe que en ocasiones tendrá que delegar.
- No trabaja en lo que más le gusta en cada momento, sino en lo que hay que hacer.
- Se compromete con su trabajo.
Así que ya vemos que una cosa es la actitud y otra bien distinta la aptitud, y que ambas son importantes para un buen profesional.
Por último, es indudable que hoy día los mercados de mayor crecimiento están el desarrollo de aplicaciones móviles, web y todo lo relacionado con los servicios cloud.
Y, por supuesto, un buen profesional no comete los errores que describo con precisión en El Libro Negro del Programador...