Golang: ¿por qué aprender Golang?

Publicado por

frontpage

Go es un lenguaje de programación relativamente nuevo; su primera versión fue liberada al público en 2009, es por eso que no es extraño que, al día de hoy, algunos programadores no conozcan de su existencia. En codingornot tenemos una serie de entradas para aprender a programar Golang desde cero, cabe aclarar, también es escrita por mi.

La razón principal por la cual decidí crear notas sobre Go fue porque era un lenguaje de programación que recién estaba aprendiendo y me gustó mucho su sintaxis. En la primera nota expliqué por qué deberíamos de aprender Golang, sin embargo, después de publicar unas cuantas notas más sobre el lenguaje, y con ayuda y experiencia(s) que algunos programadores han compartido en Internet, identifiqué un problema: muchas personas no quieren aprender un lenguaje del que han escuchado poco o nada al respecto.

En esta nota deseo plasmar mi postura sobre Golang: deberías aprender a programar con Go? ¿Por qué?

Lo bueno (pros)

Tal vez el título de este subtema sea un cliché en esta clase de notas, sin embargo creo que cumple con mi intención principal: para tomar una postura sobre cualquier cosa, es necesario conocer los matices buenos y malos que esta tiene. En la siguiente lista señalo algunos de los aspectos buenos del lenguaje (sin ningún orden en particular):

  • Simple, confiable y eficiente: es, de algún modo, el eslogan de Golang. El equipo de desarrollo de Go muchas veces ha comentado que una de sus metas fue crear un lenguaje de programación simple, fácil de aprender, leer, trabajar; y que a su vez fuera confiable. Podría decirse que lo lograron, realmente es muy sencillo aprender a programar con Go gracias a su sintaxis minimalista; además, solucionaron algunos de los problemas que otros lenguajes como C venían acarreando desde hace muchos años (ejemplo: operaciones entre diferentes tipos de datos).
  • Concurrencia nativa: tal vez el punto fuerte de Go. Me atrevería a catalogarlo como uno de los lenguajes de programación con una de las mejores implementaciones nativas de concurrencia. La concurrencia es una propiedad de los sistemas para ejecutar diferentes procesos de forma simultánea con la posibilidad de comunicarse entre ellos. Las goroutines (las que permiten utilizar esta propiedad) son muy sencillas de aprender y con una implementación con poco que criticar.
  • Excelente alternativa para el desarrollo de páginas y aplicaciones web: te sorprenderá la facilidad con la que lo puedes hacer. Si te interesa, puedes comprobarlo con la serie de desarrollo web que ponemos a tu disposición aquí.
  • Opciones limitadas: aunque esta razón trae consigo muchos inconvenientes, realmente el lenguaje omitió tantas cosas que resulta sumamente atractivo para programadores quienes quieran un lenguaje que cumpla con su cometido y no presente problemas de compatibilidad entre -exagero- infinidad de paquetes, bibliotecas, etc.
  • Tu programa funcionará en cualquier actualización de la versión en la que lo escribiste: si escribiste un programa en Go 1.0, el equipo de desarrollo mantiene un acuerdo con sus usuarios: sin importar qué nuevas funciones implementen, ese programa funcionará con cualquier actualización de la versión 1.0 (1.1, 1.2, 1.3 etc.). No mantienen el acuerdo entre diferentes versiones, es decir, no te garantizan que tu programa escrito en la versión 1.0 vaya a funcionar con la versión 2.0. Más información al respecto aquí.
  • Excelente herramienta para servidores: proporciona una buena opción para sustituir a C y ensamblador en servidores ya que conserva muchas de las facilidades que estos últimos contienen, como la gestión de memoria, pero con un sintaxis más simple y fácil de aprender.
  • Documentación fácil de comprender y memorizar: puedes consultar casi cualquier aspecto del lenguaje en la documentación oficial aquí.
  • Gestión de memoria sencilla: es muy sencillo consultar el código ensamblador de todo programa en tiempo de ejecución.
  • Código con un estilo estándar: ¿no te ha pasado que encuentras un programa escrito en Java que, en lugar de ser orientado a objetos, sigue el paradigma de programación por procedimientos? Con Go se aprende una gran parte del estilo de programación estándar automáticamente al repasar temas y ejemplos del lenguaje, de ese modo se eliminan tiempos muertos aplicando formato a nuestro código o al de nuestros compañeros.
  • Actualizaciones constantes: muchos de los problemas iniciales del lenguaje, conforme el equipo de desarrollo lanzó nuevas versiones, se han corregido. En Internet podemos encontrar infinidad de programadores que compartían su mal sabor de boca con el lenguaje, sin embargo, algunos de esos problemas ya han sido solucionados, por ejemplo: el recolector de basura en algún momento ocasionó muchos problemas de velocidad de compilación, pero esto ha sido mejorado considerablemente.

Lo malo (contras)

A pesar de los puntos anteriores, también tiene algunos aspectos malos:

  • Abstracción compleja: aunque las sentencias son tan simples que se pueden entender proyectos grandes con relativamente poca documentación, la simplicidad trajo consigo algunos problemas. Algunos algoritmos resultan muy extensos y de difícil comprensión porque muchas de las bibliotecas y funciones que otros lenguajes usaban para aligerar el trabajo del programador, no se implementaron en el lenguaje (function template, por ejemplo).
  • Características no implementadas: esta desventaja es una extensión de la anterior. Algunas herramientas y características muy útiles han sido dejadas de lado con Go como la herencia, programación orientada a objetos, alias etc.
  • Sin excepciones: esta es una de las características que muchos programadores han pedido incluir desde hace varias actualizaciones. Resulta un poco incómodo no poder hacer uso de excepciones en un lenguaje que es tan popular para servidores.
  • El equipo de desarrollo debe de aceptar cualquier función nueva: aunque parezca razonable, su política de simplicidad y compatibilidad deja en el tintero muchas funciones que podrían llegar a ser muy atractivas y útiles porque los desarrolladores no las consideran necesarias, no han encontrado una forma “natural” de implementarla o bien porque creen que podrían traer más problemas que soluciones.

Conclusión

Una vez que se repasaron algunos de los aspectos buenos y malos del lenguaje, ha llegado el momento de responder a la pregunta principal: ¿Deberías aprender Go?

Importante: la siguiente respuesta podría no representar la postura de codingornot, en cambio, es meramente la postura de autor.

Respuesta: sí deberías de considerar aprender a programar con Go. La cantidad de empresas que requieren personal familiarizado con este lenguaje es cada vez más grande. Lo comenté en los pros y sigo haciendo hincapié en ello: las goroutines son una de las mejores implementaciones de concurrencia en un lenguaje de programación en los últimos años; cualquier empresa o persona que desee instalar o gestionar un servidor, al menos debería de considerar por un momento utilizar Golang. Además, por sí mismo, el lenguaje permite agilizar considerablemente el tiempo de desarrollo de ciertos programas a comparación de otros lenguajes. ¿Ya mencioné que su sintaxis es bastante sencilla? Tal vez parezca repetitivo, pero en verdad que es una sintaxis tan simple que familiariza casi automáticamente a cualquier programador con el lenguaje (especialmente a aquellos que saben C o C++).

Finalmente, añado una captura del ranking de lenguajes de programación más populares del 2016 según la IEEE, en la cual podemos apreciar que Go se ha abierto camino hasta la posición #10. Estar en esa posición es un gran logro tomando en cuenta que los primeros nueve lenguajes de la lista aparecieron desde finales del siglo pasado (C# en el 2000); C, por ejemplo, es el más antiguo de todos, su primera versión salió en 1972; ha tenido mucho tiempo para pulir sus características, errores, ganar popularidad y adaptarse a nuevas tendencias. Como curiosidad, durante el año 2015 Golang ocupaba la posición #14, y en el 2014 la posición #20.

IMG_20160828_201549
Lenguajes de programación más populares para 2016 (web, móvil, sistemas y embebidos)

Páginas que te podrían interesar (recuperan comentarios de Golang o bien hablan sobre alguna característica que ha estado en debate sobre el lenguaje):

One comment

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *