Programação Cooperativa: Uma explosão de interações

25

Já pensou se a internet inteira pudesse ajudar você a escrever o seu código em tempo real? E se em vez de passar horas pesquisando como fazer algo, você pudesse simplesmente parear com pessoas mais experientes, de qualquer lugar do planeta? E se tudo isso pudesse acontecer enquanto cada um usa a IDE de sua preferência?

Dá uma olhada neste experimento:

Cada vez mais, a programação deixa de ser vista como uma atividade solitária e reclusa para ser reconhecida como uma atividade social. Dojos, hackathons, sprints e maratonas são cada dia mais comuns. Agora, é a vez de ferramentas online turbinarem esta tendência.

Para entendermos porque isso é tão sensacional, precisamos dar um passo atrás e compreender as 3 formas de interação na atividade de programação.

Forever Alone Programming

Quando se programa sozinho, existe apenas um único ciclo linear em andamento. Este ciclo conta com 3 momentos:

  1. O programador escreve os comandos;
  2. A máquina executa e exibe os resultados;
  3. O programador interpreta os resultados.

O ciclo se repete constantemente. Quanto menor for o tempo entre escrever o código e observar o resultado do código executado, melhor será o ritmo.

O ideal é que leve segundos! Mas nem sempre é possível, afinal, grande parte do trabalho é decidir o que escrever. Assim, grande parte do processo é dedicado a pesquisas, leituras de manual, leitura de código, etc.

É para ajudar a dar ritmo ao ciclo que existem ferramentas como TDD, autotest, IDEs com autocomplete, inline help, dash, etc.

It’s null until running

Existe uma distância gigantesca entre saber o que um código faz e ver o código fazendo. Isso porque há sempre um contexto implícito na execução de cada comando, e por conta deste contexto, pode ser que desta vez, o comando não se comporte como imaginado.

Este comportamento estilo “tudo que sei é que nada sei” é o pré-requisito essencial do mindset “iterativo e incremental”. E tem fundamento:

“O conhecimento ocorre pela interação entre sujeito e objeto.”

Este é um conceito do Construtivismo, e explica que o conhecimento não existe previamente. O conhecimento não está escondido na cabeça do programador (sujeito), nem tão pouco puramente existe no código (objeto). Apenas quando ambos interagem, surge o conhecimento. A forma simples de compreender esta frase é lembrando que as crianças só conhecem o que é choque, durante a interação com a tomada.

É na interação com cada erro ou acerto que conhecemos o caminho até o objetivo desejado.

Pair Programming

A Programação em Par é uma das práticas mais relevantes do Extreme Programming.

Nela temos uma única máquina com dois monitores espelhados, dois teclados e dois mouses. Assim, ambos os programadores conseguem interagir com o mesmo contexto.

Aqui, há dois ciclos, como descrito anteriormente, andando paralelamente e em sincronia. Dois programadores em um mesmo contexto com um mesmo propósito.

Além da interação de cada programador com a máquina, temos o diálogo entre eles, ou seja, a interação de um com o outro e vice-versa. O potencial de interação passa a ser exponencial.

A programação em par pode não aumentar a velocidade do ciclo, mas certamente melhora a cadência, o ritmo, pois agora, além do feedback da máquina, temos frequentes feedbacks resultantes do diálogo entre os programadores.

Cooperative Programming

A Programação Cooperativa, como o nome sugere, remete à experiência dos jogos cooperativos online, onde pessoas em lugares diferentes, se comunicam e interagem remotamente em um mesmo contexto com um mesmo objetivo.

É a extrapolação da dinâmica exponencial da Programação em Par.

De todas as ferramentas existentes para #coprog, a mais evoluída é a Floobits. Ela oferece plugins para as IDEs mais comuns, permitindo que cada programador utilize a que preferir.

Nela, você inicia uma sessão e seu código passa a ser sincronizado com o serviço online. Assim, com apenas um link qualquer pessoa pode se conectar e ter acesso sincronizado ao mesmo código.

Para completar, você também pode conectar uma sessão do seu terminal local com a ferramenta. Nele qualquer pessoa poderá digitar comandos, mas por segurança apenas o “dono” do terminal pode apertar enter e executar o comando.

Além disso, a comunicação por voz, vídeo e compartilhamento de tela está disponível através de WebRTC ou Google Hangout.

Caso você queira apenas usar o navegador, o Floobits oferece uma IDE no próprio browser. É incrível!

O meu experimento

O experimento usando o Floobits com o Eduardo Cuducos foi surpreendente. Passamos mais de 6 horas programando, com umas 15 pessoas diferentes, simultaneamente.

A experiência de aprendizado e colaboração foi tão fantástica que eu decidi incorporar a prática no meu curso Welcome to the Django e decidimos gravar o vídeo para divulgar a iniciativa.

O que você achou? Você já teve uma experiência parecida? Gostaria de participar de uma sessão destas?

Escreva seu comentário e compartilhe sua opinião.

[]’,s HB!

você pode gostar também