Confira a primeira parte aqui.
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.
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 a 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 em 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 esses 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.
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.
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 de 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
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!