8 min read

[Jornada do DevOps] #1 – Linguagem de Programação

[Jornada do DevOps] #1 – Linguagem de Programação

Seguindo os roadmaps de DevOps que encontrei pela internet, a primeira etapa é o estudo da linguagem de programação.

No Roadmap.sh é citado algumas linguagens como: Python, Go, Ruby, Node.js, Rust, C e C++.

Aproveitei também e fiz uma pesquisa sobre as linguagens de programação para DevOps na minha rede no LinkedIn.

Em uma pesquisa rápida, vi muitos profissionais mencionando Golang. Para tirar a dúvida pesquisei também algumas vagas de DevOps, e o que encontrei?

Em uma vaga para DevOps na AWS segue o requisito - qualificação básica:

Basic Qualifications:

  • BS level technical degree or 15+ years of professional or military experience.
  • Relevant experience with software development or application engineering in languages such as Python, Ruby, Go, Swift, Java, .Net, C++ or similar object oriented language. (Aqui o que nos interessa AGORA)
  • Relevant experience as a technical advisor.
  • Experience with architecting and automating cloud native technologies, deploying applications, and provisioning infrastructure.
  • Experience with Infrastructure as Code, using CloudFormation, Terraform, or other tools.
  • Experience architecting cloud native CI/CD workflows and tools, such as Jenkins, Bamboo, TeamCity, Code Deploy (AWS) and/or GitLab.
  • Architectural leadership experience with microservices and distributed applications, such as containers, Kubernetes, and/or serverless technology.
  • Experience with the full software development lifecycle and delivery using Agile practices.
  • Fluent in Portuguese and English.

Em outra pesquisa, encontrei um roadmap mais simples, sugerindo Golang ou Python, trabalhando dentro dos comandos do Linux (Shell scripting).

Ei a questão! Go ou Python? Vi vários profissionais falando em Go!  Gente é um assunto muito sério isso! kkk Tem até discussão no Reddit.

Vantagens de cada uma

Vantagens do Go para DevOps

Alguns recursos do Go incluem:

  • Simultaneidade: Este recurso é útil quando você precisa que as funções sejam executadas independentemente umas das outras. A simultaneidade é executada com um thread goroutine de execução, mas o thread goroutine deve ser adicionado no nível da linguagem (durante a codificação) antes de executar a função.
  • Coleta de lixo: esse recurso alivia as alocações de memória em seu programa, rastreando qualquer arquivo menos importante que ocupe espaço. Ele gerencia a memória eficiente e simultânea.
  • Multiplataforma: Com esse recurso da linguagem de programação Go, não há necessidade de se preocupar em iniciar sua codificação novamente quando você muda para uma nova plataforma.
  • Segurança: como velocidade e segurança não andam de mãos dadas em alguns aspectos do DevOps, é diferente com o Go. Go tem uma vulnerabilidade muito baixa a ataques e ainda mantém a velocidade, e o compilador sempre detecta erros.
  • Facilidade por compilação: Este recurso em Go é usado apra filtrar erros, gerar um arquivo binário ou executável antes de executar o programa.

Outro fato interessante é que o ecossistema de conteinerização e orquestração como Kubernetes e Docker é construído usando Go. Importante hein!

Outras ferramentas escritas em Go são:

  1. Prometeu
  2. Grafana
  3. Consul
  4. Terraform
  5. Frota
  6. Tráfego
  7. Hugo
  8. CockroachDB

Algumas respostas que achei interessante:

Uma coisa legal é que Go é visto como novo e diferente. Tem poucos desenvolvedores (baixa oferta) e a demanda existe. Portanto, as taxas de desenvolvimento do Go são atualmente mais altas do que os ecossistemas de linguagem estabelecidos.
Alan Mellor, com experiência em C, C++, Java e Go
Python domina os campos de análise de dados, científico e industrial
Rakshan NK, consultor de nuvem

Ainda fico na dúvida, Python é mais antiga, eu vejo que tem mai recurso, além da comunidade científica utilizar. Mas o Go, várias ferramentas e startups vem utilizando. OMG!

Eles resolvem problemas diferentes e realmente brilham em cenários muito diferentes.
u/chillysurfer

Aqui fiz uma busca e comparei Python & Go nos EUA, nos últimos 5 anos.

No mundo:

No Brasil:

Minha Decisão: vou de Go!

Mas calma, eu também estou estudando Python.

Aprendendo Go

Primeiro passo é baixar o Go. Fiz isso no site oficial.

Próximo passo é abrir a documentação do Go.

A linguagem de programação Go é um projeto de código aberto para tornar os programadores mais produtivos.
Go é expressivo, conciso, limpo e eficiente. Seus mecanismos de simultaneidade facilitam a escrita de programas que tiram o máximo proveito de máquinas multicore e em rede, enquanto seu novo sistema de tipos permite a construção de programas flexíveis e modulares. Go compila rapidamente para código de máquina, mas tem a conveniência da coleta de lixo e o poder da reflexão em tempo de execução. É uma linguagem compilada, de tipagem estática e rápida que parece uma linguagem interpretada e tipada dinamicamente.

Começando - Primeiros passos com Go

Instalando o Go - Instruções para baixar e instalar o Go.

Sobre a documentação dos primeiros passos:

Eu preciso ter uma breve introdução à programação Go. E também:

  • Escreva um código simples "Olá, mundo".
  • Use o gocomando para executar seu código.
  • Use a ferramenta de descoberta de pacotes Go para encontrar pacotes que você pode usar em seu próprio código.
  • Chamar funções de um módulo externo.

Pré-requisitos:

  • Alguma experiência em programação. O código aqui é bem simples, mas ajuda saber algo sobre funções. Isso eu sei!
  • Uma ferramenta para editar seu código. Qualquer editor de texto que você tenha funcionará bem. A maioria dos editores de texto tem um bom suporte para Go. Os mais populares são VSCode (gratuito), GoLand (pago) e Vim (gratuito). Eu utilizo VSCode.
  • Um terminal de comando. Go funciona bem usando qualquer terminal no Linux e Mac e no PowerShell ou cmd no Windows. Vamos de CMD.

Escreva algum código (medo):

Comece com Olá, Mundo.

  1. Abra um prompt de comando e cd para seu diretório inicial.
cd %HOMEPATH%

2. Crie um diretório hello para seu primeiro código-fonte Go.

Por exemplo, use os seguintes comandos:

mkdir ola
cd ola

3. Habilite o rastreamento de dependência para seu código.

Quando seu código importa pacotes contidos em outros módulos, você gerencia essas dependências por meio do próprio módulo do seu código.

Esse módulo é definido por um arquivo go.mod que rastreia os módulos que fornecem esses pacotes. Esse arquivo go.mod permanece com seu código, inclusive em seu repositório de código-fonte. Importante isso!

Para habilitar o rastreamento de dependência para seu código criando um arquivo go.mod, execute o go mod initcomando, dando a ele o nome do módulo em que seu código estará. O nome é o caminho do módulo.

No desenvolvimento real, o caminho do módulo normalmente será o local do repositório onde seu código-fonte será mantido.

Por exemplo, o caminho do módulo pode ser github.com/mymodule. Se você planeja publicar seu módulo para outros usarem, o caminho do módulo deve ser um local de onde as ferramentas Go possam baixar seu módulo. Para obter mais informações sobre como nomear um módulo com um caminho de módulo, consulte Gerenciando dependências.

Para os propósitos deste tutorial, basta usar example/hello.

$ go mod init example/hello
go: creating new go.mod: module example/hello

A saída foi:

4. Em seu editor de texto, crie um arquivo hello.go para escrever seu código.

5. Cole o código a seguir em seu arquivo hello.go e salve o arquivo.

package main 

import "fmt" 

func main() { 
    fmt.Println("Hello, World!") 
}

Este é o seu código Go. Neste código, você:

  • Declare um pacote main(um pacote é uma forma de agrupar funções e é composto por todos os arquivos no mesmo diretório).
  • Importe o pacote fmt, que contém funções para formatação de texto, incluindo impressão no console. Este pacote é um dos pacotes de biblioteca padrão que você recebeu quando instalou o Go.
  • Implemente uma função main para imprimir uma mensagem no console. Uma função main é executada por padrão quando você executa o pacote main.

6. Execute seu código para ver a saudação.

$ go run .
Hello, World!

O comando go run é um dos muitos comandos go que você usará para fazer as coisas com o Go. Use o seguinte comando para obter uma lista dos outros:

$ go help

Funcionou!! Só achei estranho o tempo de resposta, esse simples comando demorou 7s para imprimir o "Hello, World!".

Código de chamada em um pacote externo

Quando você precisa que seu código faça algo que pode ter sido implementado por outra pessoa, você pode procurar um pacote que tenha funções que você pode usar em seu código.

  1. Torne sua mensagem impressa um pouco mais interessante com uma função de um módulo externo.
  • Visite pkg.go.dev e procure um pacote de "cotação".
  • Localize e clique no pacote rsc.io/quote nos resultados da pesquisa (se você vir rsc.io/quote/v3, ignore-o por enquanto).
  • Na seção Documentação, em Index, observe a lista de funções que você pode chamar de seu código. Você usará a função Go.
  • Na parte superior desta página, observe que o pacote quoteestá incluído no módulo rsc.io/quote.Você pode usar o site pkg.go.dev para encontrar módulos publicados cujos pacotes tenham funções que você pode usar em seu próprio código. Os pacotes são publicados em módulos -- como rsc.io/quote-- onde outros podem usá-los. Os módulos são aprimorados com novas versões ao longo do tempo e você pode atualizar seu código para usar as versões aprimoradas.

2. Em seu código Go, importe o pacote rsc.io/quotee adicione uma chamada à sua função Go.

Depois de adicionar as linhas destacadas, seu código deve incluir o seguinte:

package main

import "fmt"

import "rsc.io/quote"

func main() {
    fmt.Println(quote.Go())
}

3. Adicione novos requisitos e somas de módulo.

Go adicionará o módulo quotecomo um requisito, bem como um arquivo go.sum para uso na autenticação do módulo. Para obter mais informações, consulte Autenticação de módulos na Referência de módulos Go.

$ go mod tidy
go: finding module for package rsc.io/quote
go: found rsc.io/quote in rsc.io/quote v1.5.2

4. Execute seu código para ver a mensagem gerada pela função que você está chamando.

$ go run .
Don't communicate by sharing memory, share memory by communicating.

Observe que seu código chama a função Go, imprimindo uma mensagem inteligente sobre comunicação.

Quando você executou go mod tidy, ele localizou e baixou o módulo rsc.io/quote que contém o pacote que você importou. Por padrão, ele baixou a versão mais recente.

Conclusão

Pela experiência que tive com Python, já percebi que o Go é mais mais complexo, até na impressão do "Hello World".

Nos próximos capitulos vou publicar os estudos mais especificos do Go, como a criação de um módulo, como segue a documentação.

Para portfólio acredito que esse roadmap.sh do Go me ajuda.

Segue nosso roteiro:

Espero vê-lo nos próximos cápitulos. Assine a newsletter para não perder nada. 😋