9 de abril de 2014

Primeiro dia de QConSP 2014

Hoje foi o primeiro dia do evento QConSP 2014. Vou tentar resumir minhas percepções sobre este primeiro dia de evento. O dia foi composto de dois tutoriais: um de manhã e um a tarde e finalizava com três apresentações curtas (short-talks). Elaborei este post de forma rápida, desculpe se o texto está difícil de entender.

Iniciando com Continuous Delivery

O primeiro tutorial que participei falava sobre entrega contínua (Continuous Delivery). Algo que já estou estudando e tentando praticar, porém até agora somente em provas de conceito e testes, nada colocado em produção de fato. Decidi participar deste tutorial para ver se conseguia conectar com as minhas experiências.

Quanto mais estudo sobre arquitetura orientada a serviços, integração contínua e entrega contínua mais percebo que são assuntos cada vez mais consolidados e todos eles se resumem basicamente em atitude. Que inclusive foi algo comentado pelos palestrantes Fabricio Leoti e Rodrigo Russo. Não existe uma bala de prata para a "nova indústria de software", o que existem são profissionais com atitude comprometidos em fazer algo funcionar; profissionais que estão acima de crenças e de seus próprios egos; o novo profissional de software deve fazer o melhor possível para integrar várias ferramentas de mercado em seu favor, sempre buscando eliminar sua própria existência como uma necessidade para a empresa, i.e. automatizar e tornar mais eficientes todos os processos para que fique livre para explorar coisas mais interessantes e que tragam valor para a corporação.

Este novo modelo de trabalho está se tornando cada vez mais forte. O que percebo é que é uma questão de tempo: quem não se adaptar, não conseguirá captar e reter os melhores profissionais e consequentemente, com o tempo, não conseguirá mais entregar valor para seus clientes, que procurarão fornecedores que acompanhem o novo ritmo do mundo. A entrega contínua faz parte desse novo mundo: todos que querem se manter atualizados precisam aprender e se adaptar.

Para obter a entrega contínua é preciso disciplina: é preciso ter processos de provisionamento automatizados e um processo de integração contínua funcionando 100%. A preparação deve ser feita na parte cultural da equipe: todos precisam querer e buscar este nível de excelência.

Acredito que as partes deste tutorial que mais podem contribuir com meu trabalho atualmente são:

  1. Todos devem ser responsabilizados por tudo: a qualidade não é responsabilidade só do time de testes; a evolução do produto não é só responsabilidade do gerente de produto; o erro não é responsabilidade só do time de desenvolvimento. Todos precisam se sentir envolvidos e donos do produto final. É como se a equipe se tornasse uma startup: todos comemorarão com os sucessos e todos sofrerão com os fracassos.
  2. Uma funcionalidade só é considerada "entregue" quando ela está em produção e em uso pelos clientes. Pensando bem, não sei como não cheguei nesta conclusão por conta própria. É um pensamento completamente razoável e com sentido. Na verdade, pensar de outra forma é que não faz o menor sentido: como você pode considerar uma funcionalidade como "entregue" se não tem ninguém usando? Frases como "está pronto, só faltam os testes" ou "está pronto, só falta jogar para produção" não fazem o menor sentido!

NoSQL Aplicado

Compareci neste tutorial para ver na prática as aplicações de bases NoSQL. Estou começando a trabalhar um pouco com o MongoDB, mas sempre ouço falar bem do Cassandra, HBase, etc. Gostaria de aproveitar este tempo para ver as aplicações destes diferentes bancos para evitar ter que passar por processos de tentativa e erro ou grandes sessões de leitura para poder decidir qual banco utilizar para cada situação.

Confesso que me decepcionei com a apresentação. Ela se resumiu em apresentar as bases NoSQL e um pouco da arquitetura interna delas. Coisas que são relativamente fáceis de buscar na internet e que eu já tinha uma noção básica. No final das contas, o conteúdo apresentado não me fez saber melhor qual base utilizar em cada situação e não vi nenhuma aplicação do NoSQL, i.e. "aplicado" só no título do tutorial.

Mas, apesar de não satisfazer minhas expectativas, foi possível aproveitar um pouco do conteúdo do tutorial. O mais relevante para mim na verdade ficou como tarefa de casa: aprender ZooKeeper.

Short-talks

As apresentações curtas que assisti foram "Hadoop: Mãos à massa!", "Cassandra no Desenvolvimento de Serviços para Apps Mobile" e "Play, do zero ao deploy em 20 minutos". Mas estas tiveram o mesmo problema que ocorreu na edição de 2013 do evento: o tempo é curto de mais! Todos os apresentadores estouraram o tempo. Mesmo se não tivessem estourado, o conteúdo passado sempre é demasiadamente superficial.

Os palestrantes foram ótimos, todos os três. A de Hadoop utilizou humor, a de Cassandra trouxe um caso do mundo real e a do Play foi direta ao ponto. Mas são apresentações que só servem para despertar o interesse do ouvinte. Como eu já tinha visto da história de Hadoop no tutorial de NoSQL, foi meio repetitivo; a de Cassandra conseguiu ter mais "NoSQL Aplicado" do que o tutorial, mas como foi muito rápido só ficou como aprendizado: "é possível começar um serviço com base relacional e trocar por um NoSQL depois", que vai de encontro com o que escrevi no post passado sobre otimização precoce; a última que falou do Play Framework despertou um interesse muito saudável, vou procurar saber mais sobre ele por algumas propriedades dele que brilharam aos meus olhos, principalmente static checking.

Organização

Este ano o evento está muito melhor organizado. O evento está acontecendo no WTC SP que possui um espaço muito melhor do que o local do ano passado. O credenciamento foi bem tranquilo, apesar de que só recebi a credencial à tarde, mas porque a compra do dia de tutoriais foi feita em cima da hora (ontem). As pausas com café entre as apresentações também estão mais generosas e com uma distribuição melhor pelo local, em nenhum momento senti falta de suco, café, água e alimentação.

Comentários

Alguns pensamentos que passaram pela minha cabeça hoje durante o evento:

  1. Com o crescimento de bases NoSQL e de BigData, o papel exclusivo de um administrador de banco de dados parece estar perdendo força. Juntando com a entrega contínua, em que todo mundo se responsabiliza por tudo, os desenvolvedores precisam pensar em como o dado será lido antes de armazená-lo, precisa entender da topologia de onde ficarão os dados e etc. Será que faz sentido ainda ter um papel exclusivo para isto?
  2. Entrega contínua significa metodologia ágil. Não sei como colocar um processo cascata que faz entrega contínua. Já é difícil fazer com que todos se sintam responsáveis pelo produto em uma metodologia tradicional.
  3. O número de apresentações sobre programação funcional cresceu do ano passado para cá. Mas não sei se todos estão preparados para esta mudança. Teve um tutorial exclusivo de Clojure este ano, gostaria de ter participado, mas a de entrega contínua pareceu mais fácil de "aplicar na vida real". Por mais que eu seja um entusiasta de Haskell e querer que a programação funcional se torne mainstream, parece que ainda há uma barreira natural para que isto aconteça. Ouvi comentários de que "programação orientada à funções era estranho". De certa forma não tiro razão destes comentários, ouvi que a apresentação de "Lambdas em Java" falou de estruturas persistentes e deu como exemplo a da estrutura de árvore, que é "modafoca" para entender. Acho que isto é uma falha dos entusiastas das linguagens funcionais: nós ficamos tão empolgados com as inúmeras "qualidades" deste modelo, que atravessamos tudo e tentamos passar todo conhecimento em uma única apresentação.