Programación Golang: La pirámide del conocimiento del desarrollador de software

Fabián Pallares
6 min readJun 7, 2018

--

Hace un tiempo, leí un excelente artículo; el cual hizo confirmar mi enfoque respecto al desarrollo de software. El texto original, pueden encontrarlo en el siguiente link:

https://rainsoft.io/the-path-of-software-development-craftsmanship/

Me tomaré el permiso y atrevimiento para incorporar mis propias ideas, vivencias y creencias.

Comencemos…

La complejidad del desarrollo de software, aumenta día a día. En un abrir y cerrar de ojos descubrimos que han surgido nuevos frameworks o nuevos paquetes para resolver cuestiones particulares.

La mayoría de ellos hacen lo mismo que los anteriores y son muy pocos los que mejoran nuestro estilo de programar.

Esto ocurre a una velocidad luz y a mi entender, es imposible seguir ese camino.

Estar de framework en framework es muy perjudicial.

La función de ellos es la de ahorrarnos dificultad y horas de programación; pero llevan un tiempo considerable aprenderlos y darles un uso adecuado.

Sucede habitualmente que comienzas un nuevo aplicativo y piensas: “… puedo aprovechar y hacerlo con la nueva versión de XXXXXX …”.

Entonces, el desarrollo de 3 semanas se convierte en dos/tres meses porque en el camino se intentó aprender el framework de moda.

La calidad del producto final será mediocre, se terminará a las apuradas y con un código que entiendes a medias.

Seguramente has programado aplicativos con frameworks que te han costado aprender, para luego ser descartados en el próximo desarrollo. Imagínate repetir esto varias veces.

Imagínate intentar hacerle cambios al primero de ellos y no recordar el debido funcionamiento de aquel framework que ya cambió de versión varias veces; que amaste en su momento y hoy no entiendes como llegaste a utilizarlo.

No es posible aprenderlos y recordarlos a todos, sencillamente no es posible.

Incluso Golang, tiene infinidad de paquetes y frameworks desarrollados por terceros. Ingresando a https://golanglibs.com es posible observar la cantidad existente.

¿Vale la pena utilizar tantos frameworks?

¿No es preferible hacer nuestros propios frameworks, nuestros propios paquetes?

Una idea interesante es pensar en una pirámide de conocimientos del desarrollador de software:

En la cima de la pirámide, se encuentran los frameworks.

En la capa media, se encuentra el conocimiento preciso del lenguaje de programación (en este caso Go/Golang).

En la base: se encuentra el conocimiento “fundamental o fundacional”: Teoría, experiencia, sapiencia y creatividad para resolver problemas. Conocimientos de estructuras de datos, algoritmos, patrones de diseño; etc.

El desarrollador principiante, junior o cómodo: “El triángulo invertido”

Existen muchos programadores que intentan solucionar sus proyectos de una manera rápida, cómoda y simple. Intentan quitarse el proyecto de encima lo más rápido posible.

El problema que tiene este estereotipo de programador, es que sus conocimientos son muy básicos, mínimos y sólo pueden solucionar lo que el framework solucione. Tienen que hacer injertos con otros frameworks, transformando lo que debió ser un hermoso aplicativo, en un enorme monstruo inmantenible.

Esta persona no conoce cómo funciona su lenguaje de programación y en muchos casos; no le interesa. Intenta solucionar todo a traves de frameworks y paquetes de terceros.

Su producto final nunca será de calidad, nunca tendrá una performance adecuada, nunca será la mejor solución que pueda llegar a hacer. Esta persona carece del conocimiento “fundamental o fundacional”.

En cuanto tenga que programar/desarrollar algo que un framework no solucione, simplemente… no podrá hacerlo por sí mismo.

Carece de teoría y de técnicas avanzadas de programación.

El desarrollador Competente: “El rectángulo”

Este es un desarrollador más interesado en el lenguaje. Su base y su plataforma parte del lenguaje de programación. Generalmente es un enamorado del lenguaje que utiliza. Mejora día a día su astucia y perspicacia. Incluso a veces, realiza soluciones basándose en sus propias creencias, descartando la teoría y técnicas que se encuentran en las “fundaciones”.

Siempre es preferible este tipo de programador, que el anterior.

Su trabajo final será de mejor calidad y su código será más claro y más simple para realizar cambios (más mantenible). Este desarrollador hará aplicaciones de mejor calidad, pero no las más eficientes.

El desarrollador experto: “El triángulo”

Un desarrollador experto es quién domina los tres escalones: los fundamentos de la programación, el lenguaje de programación y los frameworks.

Está representado por un triángulo con una base sólida. El desarrollador experto es capaz de ver la eficiencia de ciertos algoritmos y aplicarlos cuando sea necesario.

Se beneficia de elegir las estructuras de datos correctas, haciendo simples manipulaciones de datos. Su conocimiento hace que sea capaz de poder elegir correctamente entre utilizar un framework puntual o un paquete propio.

Busca y encuentra un equilibrio para obtener el máximo rendimiento posible.

No se complica, juega a un pase. Su código es tan simple que cualquiera puede entenderlo.

Dado que el lenguaje de programación es un instrumento para hablar con la mente algorítmica, no importa cual utilice. Puede escribir código de calidad en varios lenguajes similares al mismo tiempo: C, C++, C#, Go/Golang, Javascript.

Recomendaciones

Otorga mucha ventaja conocer algoritmos de ordenamiento (burbuja, inserción, clasificación rápida), algoritmos de búsqueda y algoritmos matemáticos.

Para construir aplicaciones complejas y de alta prestación y calidad, se debe tener conocimientos de algoritmos.

Aprenderlos en detalle es una experiencia valiosa. Estudiarlos y dominarlos cultiva una intuición para resolver problemas difíciles.

La intuición de gran alcance, la experiencia y la disciplina es lo que define a un gran desarrollador de software.

Las estructuras de datos también son un aspecto esencial. Aprenderlos enseña cómo representar correctamente la información de una aplicación.

Elegir la estructura de datos correctamente trae enormes beneficios. Hace que las operaciones de manipulación, almacenamiento y consulta de datos, sean más fáciles de implementar y… mas eficientes.

Joe Celko, es un gurú de las bases de datos SQL, te aconsejo que leas alguno de sus libros.

El código de calidad consiste en escribir algoritmos eficaces y estructuras de datos convenientes.

Conocer los siguientes principios, te destacará sobre el resto:

  • KISS (mantén esto simple, estúpido)
  • SOLID (propuesto por Robert Martin)
  • No te repitas a ti mismo.
  • Separación de intereses.

Si quieres ser un excelente programador, empieza nuevamente desde abajo. Vuelve a los orígenes. Reencuéntrate con ese fuego que se inició hace algún tiempo y que de a poco se fue apagando.

Miguel Tal, siendo campeón mundial de Ajedrez; asistía a clases para niños de primaria. En aquel momento, Rusia era potencia mundial y el Ajedrez era obligatorio en las escuelas. Este excelente jugador decía que, al llegar a un punto de conocimiento y abstracción muy elevado; se pierde la esencia, el origen, la motivación y el porqué de las acciones.

Todo se automatiza de tal manera, que se terminan resolviendo determinadas cuestiones sin saber por qué y sin saber cómo.

Pequeños cambios, logran grandes mejoras.

Reaprender lo aprendido, fija y afianza la humildad.

En vez de aprender el nuevo framework de moda, es recomendable leer sobre estructura de datos, patrones de diseño o programar algoritmos de ordenamiento (aunque ya existan).

Es una tarea muy difícil, pero el camino para llegar a ser un desarrollador experto no es fácil.

Nada se logra sin esfuerzo, sin dedicación, sin respeto, sin pasión y sin amor por lo que uno hace.

Tiene que ver con lo que llevamos y tenemos dentro, es un trabajo interior, muy interior.

Sólo un colega podrá entenderte y no cualquiera, sólo aquel que transite el mismo camino.

Te encontrarás con fantasmas, con ideas y mensajes mentales tales como: “¿para qué estoy haciendo esto?”. Calma, respira… los resultados los verás rápidamente.

No hay atajo para convertirte en un experto programador, en un samurai de la programación.

Lo que te hace mejorar, es aprender y practicar. Pronto serás reconocido y te destacarás entre tus colegas. Pronto resolverás por ti mismo, problemas que ningún framework resuelve. Pronto… serás un mejor profesional y sumarás valor agregado a la industria del software.

La humildad te inundará de tal manera, que creerás saber poco. Expulsa el ego.

Demuestra tu conocimiento compartiéndolo con humildad. Ayuda a todo aquél que no encuentre el camino correcto.

Todo vuelve, todo favor vuelve. Esa energía, ese esfuerzo… volverá con más fuerza. Ayuda y enséñales a aquellos que quieran aprender. Tu aprenderás más que ellos. Hacelo por ellos y hacelo por vos.

Programá feliz.

fp

--

--

Fabián Pallares

Desarrollador de software en lenguaje Go/Golang: backend y bases de datos.