3 puntos por GN⁺ 2024-01-05 | 1 comentarios | Compartir por WhatsApp

En el 14.º aniversario del lanzamiento del lenguaje Go como proyecto de código abierto

  • Uno de los cocreadores del lenguaje Go dio su última charla el 10 de noviembre de 2023 en la conferencia GopherConAU celebrada en Sídney.
  • En la charla se conmemoraron los 14 años desde que Go se lanzó como proyecto de código abierto, y se habló de los aciertos y de los aspectos que merecen reflexión.
  • El ponente aclaró que no hablaba en representación del equipo de Go ni de Google, sino que expresaba una opinión personal, y agradeció a la comunidad que contribuyó al éxito del lenguaje Go.

Factores de éxito y aspectos a mejorar del lenguaje Go

  • El objetivo original de Go no era crear un nuevo lenguaje de programación, sino mejorar la manera de escribir software.
  • Go buscó resolver la complejidad de construir software moderno para servidores, incluyendo la gestión de dependencias, la colaboración con equipos grandes, la facilidad de mantenimiento, las pruebas eficientes y el uso eficaz de CPU multinúcleo y redes.
  • Go no es simplemente un lenguaje de programación, sino un proyecto para facilitar y hacer más productiva la construcción de software en producción.

El gopher, mascota del lenguaje Go

  • El gopher, la mascota del lenguaje Go, desempeñó un papel importante en el éxito de Go.
  • El gopher fue el símbolo de los programadores de Go y la bandera de la comunidad, y resultó esencial para el crecimiento del proyecto.
  • Publicar el diseño del gopher bajo la licencia Creative Commons Attribution ayudó a fomentar el espíritu comunitario, aunque también trajo dificultades relacionadas con derechos de autor.

Factores técnicos del éxito de Go

  • La redacción de una especificación oficial, la existencia de múltiples implementaciones, la portabilidad, la garantía de compatibilidad, una biblioteca abundante, la facilidad para desarrollar herramientas y la herramienta de formateo automático de código gofmt contribuyeron al éxito de Go.
  • gofmt influyó en toda la comunidad de programación y abrió el camino para que la mayoría de los lenguajes contaran con un formateador estándar.

Concurrencia e interfaces

  • Go convirtió la concurrencia en un componente principal del lenguaje, contribuyendo a simplificar la estructura del software de servidores.
  • Las interfaces son una idea distintiva de Go, su respuesta al diseño orientado a objetos, y desempeñan un papel importante en la biblioteca estándar y en la gestión de dependencias.

Genéricos y compilador

  • La existencia de interfaces fue una de las razones por las que tomó tanto tiempo añadir genéricos al lenguaje Go.
  • Que el compilador inicial de Go estuviera escrito en C fue motivo de controversia en la comunidad de lenguajes de programación, pero fue una decisión adecuada para la evolución de Go.

Gestión del proyecto y de paquetes

  • Aunque Go era un proyecto de código abierto, en sus primeras etapas de desarrollo avanzó de forma privada, pero tras hacerse público las contribuciones de la comunidad aumentaron de manera explosiva.
  • El proceso de desarrollo de la gestión de paquetes no fue fluido, y faltó comprensión sobre cómo colaborar con la comunidad.

Documentación y ejemplos

  • La documentación inicial de Go no estuvo a la altura de las expectativas de la comunidad, pero mejoró con medidas como ofrecer ejemplos ejecutables en la web.

Opinión de GN⁺

  • El éxito de Go se debe a factores como una biblioteca estándar sólida, soporte para concurrencia, diseño basado en interfaces, una gestión de paquetes clara, herramientas rápidas de compilación y pruebas, formateo de código consistente, énfasis en la legibilidad y garantía de compatibilidad.
  • Go no solo destacó por sus funciones como lenguaje de programación, sino también por haber transformado la manera de desarrollar software, algo posible gracias a la diversidad y el apoyo de la comunidad.
  • El proceso de desarrollo de Go y la reflexión sobre él ofrecen lecciones importantes para operar proyectos de código abierto.

1 comentarios

 
GN⁺ 2024-01-05
Opiniones de Hacker News
  • Agradecimiento a las figuras clave que dedicaron tiempo a reflexionar sobre el proyecto

    • Restricciones del lenguaje enfocadas en la programación de sistemas
    • Definir con claridad el lenguaje y sus principios para evitar ambigüedad y desperdicio de diseño con objetivos distintos
    • Priorizar la calidad para resolver problemas antes del despliegue resulta más barato para todas las partes interesadas
    • Mantener el equilibrio entre compartir con la comunidad y una gestión estricta del lenguaje y de las versiones
    • La no intervención de Google contribuyó al éxito de Go, y se plantea si eso sería posible en otros proyectos
    • Go fue una tecnología clave para mover el software del lado del servidor de Java a contenedores nativos, y sostuvo gran parte de la infraestructura de aplicaciones web durante la última década
  • Aprecio por el lenguaje Go y su comunidad

    • En 2012, al conocer Go como desarrollador de Python, sorprendió la facilidad para manipular bits
    • Diez años después, sigue sorprendiendo que la mayoría de las funciones de Go sigan funcionando bien
    • Agradecimiento por lo que Rob, Ian, Russ y otros hicieron por Go, y por su franqueza sobre los "baches en el camino" con la comunidad
    • Aunque también hay una mirada crítica sobre los problemas de gestión de paquetes, se considera que ahora se llegó a una buena solución
  • Experiencia compartida de una postura crítica sobre el sistema de gestión de paquetes de Go

    • Hace 10 años, al expresar una opinión crítica en go-nuts sobre la forma en que Go manejaba los paquetes, Rob Pike la desestimó
  • Visión crítica sobre el lenguaje Go

    • Falta de reconocimiento de problemas profundos del lenguaje
    • No se recomienda Go por su sistema de tipos, manejo de errores, concurrencia insegura y sintaxis simple
    • Se usa Rust como lenguaje principal, y en Rust se encuentra una visión que Go no logró tener
  • Un punto interesante sobre la decisión de Ken Thompson de usar un compilador de C

    • Se menciona la inconformidad con la decisión de usar el compilador de C de Ken Thompson en lugar de LLVM, así como la generación de código no optimizado en las primeras versiones
    • Gracias a esa decisión, fue posible implementar rápidamente pilas segmentadas
  • Énfasis en la adopción exitosa de gofmt

    • Desde el inicio del proyecto, eliminó por completo las discusiones sobre el formato del código y aportó un gran valor
    • Se observa que varios lenguajes nuevos imitan gofmt o crean herramientas similares
  • Como organizador de GopherConAU, comparte la lista de reproducción completa

    • No entiende por qué no se puede hacer pública la lista de reproducción
  • Ventajas de usar Go para crear monorepos fácilmente y compilar apps con rapidez

    • Es fácil crear herramientas CLI con Go y usarlas como parte de pipelines de Unix
    • Go resulta útil para análisis de logs a gran escala y otros casos similares
  • Falta de mención a la interoperabilidad de Go y a la elección de C FFI

    • La respuesta de "reescribirlo en Go" deja fuera otras opciones
  • Opinión sobre escribir compiladores en su propio lenguaje

    • Se plantea la pregunta de si un lenguaje que no puede compilarse a sí mismo no sería adecuado para escribir compiladores
    • No se entiende la implicación de que un lenguaje apto para compiladores no necesariamente lo sea para otras aplicaciones, y se pide más contexto