3 pontos por GN⁺ 2024-01-05 | 1 comentários | Compartilhar no WhatsApp

No 14º aniversário do lançamento da linguagem Go como projeto open source

  • Um dos cofundadores da linguagem Go fez sua última palestra na conferência GopherConAU, realizada em Sydney em 10 de novembro de 2023.
  • A palestra celebrou os 14 anos desde o lançamento da linguagem Go como projeto open source e discutiu tanto os sucessos quanto os pontos que merecem reflexão ao longo desse período.
  • O palestrante deixou claro que falava em nome pessoal, e não em nome da equipe do Go nem do Google, e agradeceu à comunidade por sua contribuição para o sucesso da linguagem Go.

Fatores de sucesso e pontos de melhoria da linguagem Go

  • O objetivo original da linguagem Go não era criar uma nova linguagem de programação, mas melhorar a forma de escrever software.
  • A linguagem Go buscou resolver a complexidade da construção de software moderno para servidores, como gerenciamento de dependências, colaboração em equipes grandes, facilidade de manutenção, testes eficientes e uso eficaz de CPUs multicore e redes.
  • A linguagem Go não é apenas uma linguagem de programação, mas um projeto para tornar mais fácil e produtiva a construção de software de produção.

O mascote da linguagem Go, o gopher

  • O gopher, mascote da linguagem Go, teve um papel importante no sucesso da linguagem.
  • O gopher tornou-se o símbolo dos programadores Go e a bandeira da comunidade, sendo essencial para o crescimento do projeto.
  • Tornar o design do gopher público sob a licença Creative Commons Attribution ajudou a promover o espírito de comunidade, mas também trouxe dificuldades relacionadas a direitos autorais.

Fatores técnicos de sucesso da linguagem Go

  • A redação da especificação oficial, a existência de múltiplas implementações, a portabilidade, a garantia de compatibilidade, uma biblioteca rica, a facilidade de desenvolvimento de ferramentas e a ferramenta automática de formatação de código gofmt contribuíram para o sucesso da linguagem Go.
  • O gofmt influenciou toda a comunidade de programação e ajudou a criar um cenário em que a maioria das linguagens passou a ter um formatador padrão.

Concorrência e interfaces

  • A linguagem Go adotou a concorrência como um dos principais componentes da linguagem, contribuindo para simplificar a estrutura do software de servidores.
  • As interfaces são uma ideia característica da linguagem Go, a resposta do Go ao design orientado a objetos, e desempenham um papel importante na biblioteca padrão e no gerenciamento de dependências.

Genéricos e compilador

  • A existência das interfaces foi um dos motivos pelos quais levou tanto tempo para adicionar genéricos à linguagem Go.
  • O fato de o compilador inicial do Go ter sido escrito em C gerou controvérsia na comunidade de linguagens de programação, mas foi uma escolha adequada para a evolução da linguagem Go.

Gestão do projeto e gerenciamento de pacotes

  • Como projeto open source, a linguagem Go teve um desenvolvimento inicial feito de forma privada, mas, após a abertura ao público, as contribuições da comunidade cresceram de forma explosiva.
  • O processo de desenvolvimento do gerenciamento de pacotes não foi tranquilo, e faltou compreensão sobre como colaborar com a comunidade.

Documentação e exemplos

  • A documentação inicial da linguagem Go não atendeu às expectativas da comunidade, mas depois foi melhorada, inclusive com a oferta de exemplos executáveis na web.

Opinião do GN⁺

  • O sucesso da linguagem Go se deve a fatores como uma biblioteca padrão forte, suporte a concorrência, design baseado em interfaces, gerenciamento de pacotes claro, ferramentas rápidas de build e testes, formatação de código consistente, foco em legibilidade e garantia de compatibilidade.
  • A linguagem Go trouxe inovação não apenas em suas funcionalidades como linguagem de programação, mas também na forma de desenvolver software, e isso foi possível graças à diversidade e ao apoio da comunidade.
  • O processo de desenvolvimento da linguagem Go e as reflexões sobre ele oferecem lições importantes para a operação de projetos open source.

1 comentários

 
GN⁺ 2024-01-05
Comentários do Hacker News
  • Gratidão às pessoas centrais que dedicam tempo à retrospectiva do projeto

    • Restrição da linguagem com foco em programação de sistemas
    • Definição clara da linguagem e dos princípios para evitar ambiguidades e desperdício de design com objetivos divergentes
    • Priorizar a qualidade, resolvendo problemas antes do lançamento, é mais barato para todas as partes interessadas
    • Manter o equilíbrio entre compartilhamento com a comunidade e gestão rigorosa da linguagem e dos lançamentos
    • A não intervenção do Google contribuiu para o sucesso do Go, levantando a dúvida se isso seria possível em outros projetos
    • Go foi uma tecnologia-chave para mover o software do lado do servidor de Java para contêineres nativos, sustentando grande parte da infraestrutura de aplicações web da última década
  • Carinho pela linguagem Go e por sua comunidade

    • Em 2012, como desenvolvedor Python, conheceu Go e ficou impressionado com a facilidade de manipulação de bits
    • Mesmo 10 anos depois, continua impressionado com o fato de que a maioria dos recursos do Go ainda funciona bem
    • Agradecimento a Rob, Ian, Russ e outros pelo que fizeram pelo Go e pela honestidade sobre os "solavancos na estrada" com a comunidade
    • Há também uma visão crítica sobre os problemas de gerenciamento de pacotes, mas a avaliação é de que agora se chegou a uma boa solução
  • Compartilhamento de uma experiência crítica com o sistema de gerenciamento de pacotes do Go

    • Experiência de ter sido ignorado por Rob Pike ao apresentar, há 10 anos no go-nuts, uma opinião crítica sobre a forma como o Go lidava com gerenciamento de pacotes
  • Visão crítica sobre a linguagem Go

    • Falta de reconhecimento dos problemas profundos da linguagem
    • Não recomenda Go por causa do sistema de tipos, tratamento de erros, concorrência insegura e sintaxe simplista
    • Usa Rust como linguagem principal e encontrou no Rust uma visão que o Go não conseguiu ter
  • Ponto interessante sobre a decisão de Ken Thompson de usar um compilador C

    • Reclamação sobre a decisão de usar o compilador C de Ken Thompson em vez do LLVM e menção à geração de código não otimizada nas versões iniciais
    • Essa decisão permitiu implementar pilhas segmentadas rapidamente
  • Ênfase na adoção bem-sucedida do gofmt

    • Trouxe grande valor ao eliminar completamente as discussões sobre formatação de código desde o início do projeto
    • Mostra que várias linguagens novas imitaram o gofmt ou criaram ferramentas parecidas
  • Compartilhamento da playlist completa como organizador da GopherConAU

    • Não entende por que a playlist não pode ser tornada pública
  • Vantagens de usar Go para criar monorepos com facilidade e compilar apps rapidamente

    • É fácil criar ferramentas de CLI com Go e usá-las como parte de pipelines Unix
    • Go é útil para análise de grandes volumes de logs e tarefas semelhantes
  • Falta de menção às escolhas de interoperabilidade do Go e ao C FFI

    • A resposta "reescreva em Go" acaba excluindo outras opções
  • Opinião sobre escrever compiladores na própria linguagem

    • Levanta a questão de se uma linguagem que não compila a si mesma não seria adequada para escrever compiladores
    • Não entende a implicação de que uma linguagem adequada para compiladores não seria adequada para outras aplicações e pede mais contexto