Escuchaba hace poco el podcast de Syntax moderado por Wes Bos y Scott Tolinski. Ellos tocaron este tema. El título hace referencia a los libros sobre hábitos de personas exitosas (No me queda claro a cuál de los libros hacen referencia, el más famoso es el de 7 habitos de Stephen R. Covey, pero en amazon hay uno de 10 habitos) Y listaron 11 cualidades, las cuales nombro y parafraseo con mis comentarios. Yo soy muy poco consumidor de podcasts, pero este lo recomiendo muchísimo. Está disponible el screencast en youtube así como en el sitio web e inclusive en spotify.
Entender a las partes interesadas y los objetivos comerciales
Si quieres desempeñarte muy bien como desarrollador, o en la organización en la cual te encuentras trabajando, debes tener claros los objetivos y hacia quién está dirigido el uso del sistema o el sitio web que se está desarrollando. Muchas veces se presta más atención al aprendizaje e implementación con el último lenguaje o framework, y aunque estas herramientas facilitan y agilizan el trabajo del desarrollador, hay que estar consciente que muchas veces lo que lleva el pan a la mesa no son los frameworks ni el lenguaje utilizado: son las prestaciones y funcionalidades que un sistema o sitio web ofrecen al usuario.
Ser curioso y mantenerse aprendiendo siempre
Debes tener amor en lo que haces y tener curiosidad de buscar formas de mejorar lo que ya tienes hecho: aplicar alguna nueva técnica en el código ya existente, refactorizar implementando algún patrón de diseño que nunca habías utilizado. Adicionalmente puedes tener algún proyecto en casa en el cual intentar aprender algo nuevo que no necesariamente vas a utilizar en el trabajo. Uncle bob en The Clean Coder habla del aprendizaje continuo: si eres un programador .NET aprende java, si eres programador de Java, aprende Ruby, si programas en C, aprende Lisp y eso tiene mucho que ver también con el siguiente tópico.
Tener una mente abierta a nuevas tecnologías
Wes Bos citó algo muy interesante, y es que mucha gente dijo que trabajar con React era tonto, era tonto colocar javascript dentro del html, y la tecnología retó las normas preexistentes en el javascript de aquel momento. Aquellos que supieron explotar mejor las bondades de esta tecnología obtuvieron una gran ventaja. En otros ejemplos, los antiguos desarrolladores de aplicaciones de escritorio sufrieron hasta más no poder en aprender cómo ejecutar un código en una página web.
Sentirse cómodo al pedir ayuda
Algunas personas quizás sean tímidas y se sientan incómodas pidiendo ayuda. Algunas veces nos da vergüenza admitir que no entendemos algo cuando los demás si y sufrimos esa inseguridad que teníamos en clases cuando el profe preguntaba si entendimos algo y decimos "Si" en coro aunque no comprendimos ni papa. Recuerdo que un jefe que tuve era altamente consistente en hacer preguntas de cualquier proceso, cualquier duda al respecto de una implementación no tenía pena alguna en interrogar a su interlocutor y seguir preguntando hasta tener claro el panorama, (por eso él era el jefe y yo no).
Pero volviendo al tema de pedir ayuda, es altamente efectivo y beneficioso algunas veces. Algún compañero de trabajo quizás vivió una situación así, y con su experiencia te ahorrarás mucho tiempo abriendo investigando en cientos de pestañas del navegador. Este compañero quizás te aporte conocimientos relacionados que no ibas a adquirir investigando puntualmente tu duda, incluso puede ofrecerte una alternativa mejor que se transforme en mejor código.
Ayudar a los demás
Tu puedes escoger la forma de ayudar: en tu trabajo no dudes en ayudar a un compañero, puedes exponer soluciones a problemas en las redes sociales, twitter, escribir en algún blog o inclusive hacer tutoriales en youtube.
Uno puede pensar que quien recibe explicaciones es quien más se beneficia. Pero resulta que el beneficio es recíproco. Cuando te comprometes a resolver alguna duda y enfrentas a nuevos retos de otras personas, te expones posiblemente a situaciones que no se presentan en tu flujo de trabajo normal y con cada ayuda que brindas subes de nivel y te permite a fortalecer más la mentalidad de solución de problemas, que es la el próximo hábito.
Mentalidad de solución de problemas
Nuestra profesión consiste básicamente en resolver problemas, que van más allá de los algoritmos de programación. Debemos desarrollar nuestra habilidad de poder encontrar fallas, descomponer los elementos de sistemas en partes que podamos probar, separando lo que no sea relevante para el bug para así apuntar al elemento que esté causando el inconveniente.
En un ejemplo de la vida real, un sitio web se vino completamente abajo, en el entorno de pruebas funcionaba correctamente. Había que desarticular todos los elementos que utilizaban el sitio para ver donde estaba el error, al revisar los logs se encuentra que un microservicio estaba causando el fallo en el sitio principal, el microservicio no obstante parecía estar funcionando correctamente. El grave problema que ocurrió fue que el personal de IT bloqueó el puerto de acceso a este microservicio, lo que causó toda la caída.
Nuestra habilidad para separar mentalmente las piezas que componen el sistema, para ubicar las fallas (así como desarrollar la paciencia para probar asertivamente bajo la presión) es una habilidad que debe desarrollarse y permite ofrecer resultados más rápidos.
Divertirse con lo que haces
Un developer puede pasarse toda su vida programando en un mismo lenguaje, inclusive puede tener un trabajo donde básicamente viva de hacer consultas y reportes, y su salario puede ser muy bien pagado. Sin embargo, para ser un programador efectivo debes enfrentar nuevos retos, aprender nuevas metodologías, nuevas versiones, hacer que un sistema anterior funcione con la nueva actualización de un framework. Todas estas tareas debes hacerla con gusto, con entusiasmo y divertirte en el ciclo, para que puedas aprovechar el aprendizaje que adquieres en cada una de ellas. No obstante todo tiene un balance, y aunque te apasionan estas cosas debes ser efectivo en el siguiente punto.
Entender el equilibrio de la vida laboral
¿Crees que programar de noche a noche es cool? ¿estar en el trabajo de lunes a lunes va a ser gratificante? En mi humilde opinión no es del todo cierto. (Scott Tolinski comentó de un conocido que incluso olvidó un día feriado). Primeramente las horas de privación de sueño no se pueden recuperar. Es muy popular leer en las redes sociales de mucha gente famosa que apenas duerme 4 horas y cosas así . Ellos tienen acceso a medicamentos, medicina de primer mundo, etc. No podemos negar que en algunas situaciones no queda de otra y salimos tarde, pero estas deben ser situaciones muy minimizadas, y muchas veces pueden ser consecuencias causadas por graves problemas a nivel de planificación y organización del sitio de trabajo (que quizás jamás arreglen y afecten tu salud) El hecho es que todo este trabajo extra tarde o temprano pasa una factura y como consecuencia, en nuestra profesión podemos desgastar innecesariamente nuestra salud y habilidades que van a mermar en un mediano - largo plazo el disfrute del producto de nuestros trasnochos.
La planificación es clave en todo, podemos hacernos más efectivos estudiando cómo administrar sabiamente el dinero y lograr más provecho. De igual forma debemos planificar nuestro tiempo y así sacarle más provecho para el disfrute y desarrollo de nuestra carrera, sin descuidar tampoco nuestra salud y relaciones con los demás. Las relaciones con los demás afuera y dentro del trabajo también es sumamente importante y clave para ser efectivo.
Empatía con tus compañeros y usuarios
Una cosa es ser un programador hardcore que se encierra en una cueva, usa audífonos gigantes a todo volúmen y evita el contacto humano. Pero muchas veces los sistemas son muy complejos y vas a tener decenas de piezas que otros compañeros tocan. Aunque tengas excelentes habilidades desarrollando código, es muy probable que hayan usuarios expertos que conocerán mucho mejor que tú el flujo de los procesos mucho más de lo que ha sido escrito en la documentación, tampoco olvidemos al tester o el QA, del cual depende que tu flamante código sea lanzado a producción. El caso es que, el ejemplo del programador aislado de toda la humanidad no es un modelo muy viable en la realidad. Hace falta contacto con muchas personas para llevar el código a producción, y de la misma forma que los engranajes, si una de las piezas presenta fallas todo presentará retrasos.
Un programador efectivo presta su ayuda a los demás compañeros, comparte sus conocimientos cuando hay problemas, colabora y esta cualidad lo hace destacar casi tanto como el buen código. Básicamente debes pulir tus soft skills tanto como tus habilidades en el IDE.
Mostramos empatía también ayudando a mantener un ambiente no obstrusivo en el trabajo. Conservar un tono de voz que no interfiera en otras actividades a los compañeros (videollamadas, código), etc.
Atención a los detalles
Puede ser que en tu empresa tengas pruebas automatizadas, tu desarrolles código usando TDD, pero la atención en los detalles va a permitir capturar errores más allá de los que pueden encontrar las pruebas, problemas inclusive más grandes: Si cuidas de hacer las consultas a la base de datos lo más rápidas posibles desde un principio, considerar con antelación los índices, optimizar cada imagen y código javascript evitarás los problemas de lentitud que muchas veces se ven en producción y no saltan a la vista en desarrollo porque puede que no haya el volúmen de datos y de peticiones que en producción. Considerar todos los casos de borde posibles, revisar cómo se ve el website en un ipad en horizontal y luego pasarlo en modo vertical, generar una documentación aunque no te la pidan, organizar las clases CSS alfabéticamente, ir más allá que simplemente hacer que el QA le de la luz verde para mandar a producción. Son detalles, que te destacarán, que inclusive podrían ser heredados en los protocolos comunes de la empresa
Ser parte de una comunidad
Formar parte de una comunidad permitirá un crecimiento en tu carrera y como ser humano. Lejos de ser asociales, los programadores teniendo esa habilidad de familiarizarse mejor con las herramientas que ofrece internet, podemos conectarnos en comunidades de una manera muy sencilla: grupos de telegram, slack, foros, y ahora hay una herramienta bien interesante como meetup donde seguramente encontrarás algún grupo relacionado a la tecnología de tú interés. El contacto con otros compañeros en una comunidad, muchas veces te expone a formas diferentes de pensar, y de igual forma, exponer lo que actualmente te encuentras desarrollando brinda un feedback valioso y quizás fresco a otros colegas. En el podcast citaban reuniones sencillas de colegas que se juntaban a resolver ejercicios de una tecnología particular. En las horas del almuerzo pueden repasar algun tutorial.
También formar parte de una fundación y cooperar con llevar la enseñanza de la programación a otras personas, así sea alguna sola vez, también es una actividad que puedes intentar realizar.
Yo aprendí muchas lecciones éticas y conductas profesionales que deben ser tomadas en consideración por un programador altamente efectivo, en el libro de Clean Coder de uncle bob. Aconsejo mucho que sea leído por todos los profesionales de nuestra área.