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. También tengo la oportunidad con frecuencia de tratar con quienes acaban de terminar su ciclo académico, tanto en la universidad como en 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 está claro que cada uno tiene sus propios objetivos? 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 estos, 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 no 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 a un desarrollador de software neófito pero ambicioso 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 puedes hacerlo a todo el globo?
- 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 importantes son 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: tienes que aprender continuamente, del mismo modo que tendrás que desechar gran parte de tus conocimientos técnicos cuando terminen 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 será un buen programador después de haber trabajado varios años escribiendo código, muchísimo código. Me molestan mucho quienes dicen cosas como que ya picaron código durante un par de años… Los conceptos básicos de programación se pueden aprender en un curso de fin de semana, pero lanzar un proyecto profesional requiere 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 encontrarás 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 ellas; la mayoría están defendiendo su puesto de trabajo.
- 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 y mucho mejor de lo que podríamos desarrollar por nuestra cuenta.
- Debe dominar todo lo relacionado con el código limpio y las técnicas de refactorización.
- No concibe escribir código que no pueda estar respaldado por pruebas y no duerme bien si su software no está suficientemente probado…
- 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 software (al menos de lo que ocurre en su sector): contenedorizació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).
- Su mejor currículum es una web personal propia donde habla del trabajo que realiza y enlaza algunos proyectos hechos por él y publicados. Gestiona su 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 impide 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 ni domina una sola área del desarrollo de software: hay que tener conocimientos variados, aunque sean superficiales, de bases de datos relacionales y no relacionales, algoritmos, diseño web, microservicios, pruebas, métricas y calidad del software, etc. Nadie es experto en todo, y si alguien se identifica como tal, está lejos de la realidad. Nuestro sector está cada vez más especializado en áreas completamente heterogéneas.
- Sabe distinguir lo que es el diseño y lo que es la arquitectura.
- Abraza el desarrollo ágil, sí o sí.
- Sabe que la mejor forma de mejorar en programación es programar muchísimo…
- Siempre se pregunta: «¿Cómo puedo mejorar y simplificar esto?».
- Sabe que hay que trabajar, sí o sí, con cierta metodología.
- Utiliza herramientas para el seguimiento metodológico del proyecto en el que trabaja (Visual Studio Online, Asana, Trello, etc.).
- Aunque su dedicación fundamental sea programar, también tiene 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), 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, perdiendo, por tanto, oportunidades. También cultiva y mejora 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 ve como una oportunidad para aprender más, no como una amenaza.
- Sabe soportar los momentos de estrés y gestionarlos como una parte más 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 de que cuanto más sabiduría alcanzas, más humilde eres. Lo contrario es el ego insoportable de quienes debes alejarte 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 y las interrupciones mientras está en un ciclo de trabajo (de una a dos horas como mucho).
- No quiere hacerlo 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 en día los mercados de mayor crecimiento están en el desarrollo de aplicaciones móviles y web, y en 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….