Concrete Logo
Hamburger button

O Tao do DevOps (e suas questões frequentes) – Parte 2

  • Blog
  • 2 de Outubro de 2015
Share

Python vs Ruby: o clássico da cultura DevOps

Tudo na vida tem seus clássicos: Rocky contra Apolo, BK contra Mc, Fla contra Flu, Timão contra Verdão, Loubutin contra Versace, Java contra o mundo, vocês sabem. Aliás, falando em linguagem, essa é sempre uma das primeiras perguntas daquela pessoa camaradinha que quer entrar em TI e te vê falar sobre DevOps: “qual linguagem eu preciso aprender?” E aí na verdade todo mundo precisa aprender tudo (nota pessoal aqui: continuo achando que “ABC, ABC, toda criança precisa de Assembly, Bash Script e C”), mas claro que na iminência de um aprendizado sadio e de rápido acesso as duas linguagens campeãs dessa era sempre serão Python e Ruby. Tem muito material, tem no Codecademy, são bem utilizadas e gentis com iniciantes, o que mais se pode querer? Ah, sim, querer saber qual delas é mais eficaz em um processo de desenvolvimento contínuo. E aí, pessoinhas, não tem resposta, tem a sua facilidade, seu amor à camisa, sua vontade de ver funcionar. Sim.

Porém, há diferenças pontuais que fazem com que reflitamos um pouco mais adiante. Focarei só nas qualidades, só no amor, sem rivalidade gratuita.

image00

O que Python tem de ótimo:
* Uma legibilidade maravilhosa, que torna muito mais fácil achar código reutilizável;
* Uma gama imensa de bibliotecas, inclusive científicas, que podem ser decisivas em clusters de altíssimo desempenho e computação em grade;
* Um shell muito poderoso que pode ser integrado ao sistema operacional com destreza; * Uma curva de aprendizado indiscutivelmente leve;
* Alta estabilidade com relação a ambientes Linux.

O que Ruby tem de ótimo:
* Uma linguagem dinâmica e sinergética que te faz sair dançando pelos trilhos (sacou?);
* Um conjunto de módulos e APIs muito poderoso para o uso cotidiano;
* Gems. Um universo de middleware e integração a um comando de distância;
* APIs completas para uma quantidade imensurável de produtos do universo de DevOps;
* Sem dúvidas um dos melhores interpretadores cross-platform já escritos na história.

Diante disso, é fácil concluir que não há vencedores. Mas, cá entre nós, no ambiente corporativo o Ruby consegue ser muito grande. E quem está falando aqui é uma pessoa que aprendeu a amar Python junto com o Linux, pra não dizer que não dei meu voto e meu fica dica.

Koan e literatura básica de DevOps

Chegando a esta parte que é sempre um alívio pra quem quer iniciar os estudos, acho pertinente que entoemos um mantra para que jamais esqueçamos o foco dos profissionais de devops. Vai ser simples, te fizeram decorar os ingredientes de um certo sanduíche com esta fórmula. Vamos lá:

“DevOps é continuidade: são cinco fases de magia, integração, desenvolvimento, teste, entrega e melhoria”

Viu que lindo? E o sanduba nem rimava.

Agora sério, saber disso e dissecar eventualmente torna mais simples saber quais as metodologias e aplicações que você deve concentrar seu esforço. Integrar é angariar recursos e processos sob uma mesma camada de controle (aí vêm os softwares de CI, contêineres de aplicação, automação e tudo que o lado dev da força permitir). Você pode não lidar ativamente com o desenvolvimento e o teste, mas é da sua alçada prover mecanismos que automatizem estes processos e que mantenham uma base de acesso comum a toda equipe (o lado ops). Se possível, que seja assíncrona sem comprometer a funcionalidade.

image05

Entram aí ferramentas de controle de versão, controle de ambiente de desenvolvimento e testes funcionais contínuos. Para quem sentiu falta da palavra implementação e do continuous deployment, ela ainda existe dentro do universo da entrega contínua, que trata de criar barramentos entre os processos (também conhecidos como pipelines) a fim de comodizar a implantação do projeto, permitindo que as melhorias (próximo passo) sejam asseguradas de forma funcional, sem atropelos. Isso permite entregas ágeis (oi Agile/Scrum/Kanban!) e, por sua vez, a fluidez facilita o refatoramento, permitindo processos mais limpos neste tempo (oi Lean, e oi Tidy se tivermos PaaS). Já deve ser evidente que o trabalho em DevOps encoraja o surgimento de times ágeis e com excelente controle de qualidade. Mas é lindo demais para perder a deixa.

image03

Tudo isso explicado, parece um pouco mais claro o tipo de ferramenta que a atividade exige, então vamos às coisas boas da vida. Sobre metodologias já está repetitivo, mas lembre-se que Agile é essencial e, se for novidade, não tenha vergonha de ser dummy. Mais adiante, este livrinho do InfoQ é um recurso de rápida absorção sobre Scrum e Kanban. Aí tem um mundo de ferramentas incríveis cujos critérios de aceitação dependem apenas da sua familiaridade e, claro, das demandas de cada cliente. Tentarei separar em pequenas categorias e associar alguns livros e documentos que trazem uma boa perspectiva sobre diversos tópicos. Infelizmente existem mais livrões do que links práticos sobre a maioria das ferramentas, mas podemos mudar isso, não?

Ah sim: sobre nossas ferramentas preferidas aqui na Concrete, podemos falar mais adiante. Mas já há várias postagens anteriores que dão algumas dicas sobre isso.  Confira!

Langs

Aquele livro inevitável sobre Rails
Um tutorial prático de Rails bem melhor que o do Codecademy (sério)
Infra com Python (dicas de libs e frameworks bacanas)
Mochilão de Python (com mais referencias, infelizmente poucos exemplos)

Continuous Deploy/Delivery

Continuous Delivery: Introduction to concepts and tools
Documentação do Fabric (biblioteca bastante usada para automatizar deploys remotos)
Heroku Hacker’s Guide (uma das ferramentas de deploy contínuo queridinhas do mercado)
Refactoring,com (Baita livro e biblioteca de exemplos do Martin Fowler)

Continuous Testing

Diversos Tutoriais sobre Cucumber
The Cucumber Book (Pragmatic Bookshelf)
Introduction to Calabash (Teste de UI para mobile)

Continuous Integration

Jenkins The Definitive Guide
The Hudson Book (Pré-Jenkins, mas ainda quebra um galhão e é grátis)
Documentação do Travis (outro CI de peso)
Documentação do TeamCity (boa opção que alia CI e CD)

Dev Provisioning

Basicamente o livro desatador de nós sobre ferramentas de controle de versão
Pragmatic guide to GIT
Think like a Git (esse site é genial)
Documentação do Vagrant

Configuration Management

An Ansible Tutorial (porque YAML é yay)
Pros e Cons das ferramentas mais utilizadas no mercado

Cloud Computing

Provavelmente a melhor explicação sobre serviços AWS que você verá na vida
Cloud Application Architectures (um livro agnóstico sobre nuvem)
SDK AWS para Ruby (sem preconceito aqui, Python já é o padrão via PIP 🙂 )

E é isso aí! Ficou alguma dúvida, tem alguma sugestão ou acha que falei besteira? Deixe abaixo seu comentário. Até a próxima!