Gurú: Dilo. Nadie te juzgará.
Yo: Lo admito ¡soy un terrible desarrollador!
Gurú: Bien hecho. Has dado el primer paso. Ahora, ¿en qué te basas para decirlo?
Yo: Apenas trataba de resolver un bug, me pasé día y noche tratando de replicarlo. Estaba tan perdido que ni siquiera sabía que poner en Google.
Gurú: Entonces no eres bueno debugeando (depurando). Solo tienes que trabajar tu habilidad de aislar problemas. Conoce tu lenguaje de programación y sus mensajes de error. Ata tu código con aserciones para atrapar los problemas antes de que sucedan. Aprende a usar herramientas de depuración para ir paso a paso dentro de tu código.
Sobre todo, comprende cómo funciona tu lenguaje en lugar de copiar y pegar código sin pensar. Si entiendes cada línea de tu código, es mucho más fácil aislar los problemas.
Inténtalo y cuéntame después.
…
Yo: He vuelto. Seguí tus consejos, pero constantemente me veo debugeando mi código. Y cuando no, siento que el software no fluye de manera rápida, tanto en su creación como en su ejecución. ¿Tienes algo para mí?
Gurú: Simplemente eres malo diseñando tu código. Todos lo padecemos alguna vez. Es todo un viaje el descubrir las mejores estrategias para obtener el máximo desempeño y legibilidad del software.
Y escribe. Escribe código solo para ver qué sucede. Programar es una experiencia interactiva. Es un ciclo de retroalimentación entre el desarrollador y la computadora. Tu escribes código, lo ejecutas y la computadora te da el resultado. Así muchas veces.
No hay atajos para esto así que tómate tu tiempo. Sigue las mejores prácticas para crear un código fácil de leer y depurar. Observa. Aprenderás mucho viendo cómo otros diseñan su software.
Inténtalo y cuéntame después.
…
Yo: Vengo por más consejos. Ya puedo resolver los pequeños bugs en código existente, pero me está costando trabajo crear nuevas funcionalidades desde cero.
Gurú: Ya veo. Te cuesta traducir un diseño a código que corra en una computadora. Primero, escribe el algoritmo de manera general. Luego, escribe comentarios por cada paso a realizar. A continuación, divide los pasos en sub pasos y anota comentarios por cada uno de ellos. Una vez que llegues al fondo de la jerarquía de comentarios, la traducción será cuestión de escribir una sentencia en la sintaxis de tu lenguaje.
Desarrollar software es como resolver crucigramas. Se trata de vocabulario y experiencia. Puedes tener o no talento para ello, pero a menos que perseveres no mejorarás.
¿Quieres ser bueno en los crucigramas? Expande tu vocabulario y resuelve un montón de ellos. Empieza con cosas simples. No saltes a temas complicados hasta que puedas ejecutar cosas fáciles sin mucho esfuerzo.
Inténtalo y cuéntame después.
…
Yo: Lo anterior me funcionó. Ahora tengo dificultad integrando la nueva API de un proveedor. He buscado respuestas en StackOverflow y otros foros, solo que mi situación es tan especifica que no encuentro ninguna que me satisfaga.
Gurú: Lo tengo. No sabes trabajar adecuadamente con los sistemas de otras personas. Leer la documentación, las definiciones de las funcionalidades de una API, y hacer pequeñas pruebas para validar que se comprende el funcionamiento de bibliotecas externas es lo que buscas. Pregúntate también como lo resolverías si tuvieras que hacerlo desde cero. De esta forma podrás entender mejor las decisiones que tomaron los creadores.
Una vez resuelto el problema, esmérate en que tu solución y documentación le hagan la vida fácil a los que luego retomarán el código, incluso tú mismo. Escribe documentación clara y software fácil de navegar tal como te gustaría verlo cuando te presentan un nuevo repositorio.
Inténtalo y cuéntame después.
…
Yo: Lo logré. Pude integrar exitosamente las nuevas APIs de varios proveedores en el sistema. Puedo sentir la emoción de dar vida a una nueva feature (funcionalidad) volviéndome uno con el programa, y a su vez, lo engorroso de otras tareas de seguimiento y planeación.
Para explicarme mejor, experimento polos opuestos; unas actividades son técnicamente demandantes y placenteras, mientras otras parecen insignificantes o frustrantes en comparación que hasta me da pereza hacerlas.
Gurú: Parece que ya cuentas con la destreza para resolver retos complicados, enhorabuena. Solo te falta ejercitar tu músculo de adaptabilidad.
Cada proyecto es diferente y pone a prueba tu capacidad integral, no solo la técnica, si no también virtudes como paciencia, colaboración y tolerancia a la frustración.
Es mucho más fácil llevarse con un cerebro hecho de cables que nos da exactamente lo que le pedimos contra un ser de carne y hueso cuyas respuestas no son del todo predecibles y están influenciadas por muchos factores externos a sí. Cada uno de ellos busca una respuesta que no siempre es técnica. Sé atento a lo que les interesa.
Simplemente preguntan cómo trabajar juntos, si el programa funciona o si ya está terminado. Adaptar tus respuestas a diferentes preguntas es clave para lograrlo.
Inténtalo y cuéntame después.
…
Yo: Parece que ya mejoré mucho en mis soft skills (habilidades interpersonales). Pasé por más y más proyectos y siento como si fueran cada vez más complicados. Al cierre de uno y comienzo de otro, paso de estar tranquilo a estar bajo constante presión de no cumplir las expectativas. Al final puedo sentir satisfacción, pero ¿es normal que sienta esto?
Gurú: Es más común de lo que tú crees. No te tienes confianza. He seguido tu crecimiento y si has superado todo lo anterior, no puedes ser tan mal desarrollador como crees. Solo eres poco realista. No puedes esperar saber todo sobre algo que no conoces.
Muchos buenos artesanos del código piensan que apestan porque siempre hacen cosas para retarse a sí mismos.
La implementación siempre toma mucho más que entender el algoritmo, y es de lo más normal dedicar un largo tiempo a depurar tu código. Planear tampoco es fácil. Siempre deja una reserva de contingencia cuando tengas incertidumbre.
Inténtalo y cuéntame después.
…
Yo: Tiempo sin verte. Creo que me he vuelto competente en esto del software. Con enfoque, llevando mis sistemas a su límite, haciendo muchas preguntas y entrando en un ciclo perpetuo de retroalimentación he dado grandes pasos en mi carrera.
Mi pregunta es, ¿porque me ayudaste en cada ocasión? Pregunté en varios lugares y me recomendaron abundantes recursos qué hay en la red. Sin embargo, existe todo un océano de información donde ni diez vidas me darían para explorarlo.
Gurú: Me recuerdas a mí. No soy tan diferente a ti. También tuve muchas dudas y me atreví a preguntar, tal como tú lo haces. La curiosidad genuina es motivo suficiente para invertir en explicaciones.
Además, eres una persona inteligente; habrías sido capaz de descifrar las cosas por ti mismo. Aunque una guía ahorra muchísimas idas y vueltas.
La ingeniería de software es un vehículo de colaboración muy potente. Este mundo se ha desarrollado hasta este punto porque grandes genios han compartido su visión a través de programas que han sido revisados y probados por una inmensidad de personas que lo han hecho mejor. El conocimiento no es un juego de suma cero. Si te lo comparto, yo no lo pierdo e incluso lo comprendo mejor. Ambos ganamos.
Como la máxima prestada por uno de los grandes colaboradores del software: Ubuntu. Es complicado de traducir a nuestro idioma, pero iría algo así: “Yo soy porque nosotros somos, y dado que somos, entonces yo soy”
Yo: Gracias por la explicación. No lo había visto de esa forma. Lo haré lo mejor que pueda. En serio, muchas gracias.
…
Novato: Oye, ¿sabes cómo funciona esto?
Yo: Sí, deja te explico. La cosa va así …
Deja tu comentario