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

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!

  • Renato Chencinski

    Fala Henrique,

    Me comentaram dessa ferramenta aqui. Não cheguei a avaliar, mas de repente ajuda nessa empreitada.

    https://kobra.io/#/

    Abraços!

  • luizstacio

    Parabéns por compartilhar a experiência e muito bom o seu texto. Bom a muito tempo percebi o quanto as comunidades são importantes para a evoluções e melhora continua no aprendizado e a única coisa que fico triste é de não ter percebido isto antes.

  • Fausto

    Sensacional, tenho muito interesse em participar. Como faço?

  • Geraldo Ramos

    Muito bom texto e é com base justamente nessa mesma hipótese que criamos o http://hackhands.com. Conectamos developers em real-time usando ferramentas modernas (webrtc, node, etc). O projeto está online desde do começo deste ano (tcrn.ch/N6jS22). Estamos em processo de integração com 5 online IDE’s e com algumas escolas de coding (bootcamps) aqui nos EUA. O serviço funciona da seguinte forma: o usuário põe um request e fazemos um pair em real-time (video chat, screen share, code collaboration, chat, etc). Utilizamos vários sistemas para notificação como Jabber/XMPP/Gtalk/Desktop notification e distribuímos os requests em departamentos/tags, tentando sempre fazer o pairing com o máximo de eficiência possível em tempo real. O custo é de 1 dollar por minuto (+tips) e os primeiros 5 minutos são risk-free (se o user desligar antes de 5, não paga nada,). Temos também uma ferramenta de rating e fornecemos um profile page para todos os experts onde eles podem cobrar o valor que quiserem pelo seu tempo, apenas para direct booking, fora do serviço principal (Ex: https://hackhands.com/johndbritton ). Estamos introduzindo em breve a opção de ajuda gratuita (com base apenas em tips) e isso fará parte também do workflow como forma de incentivar o open source e a colaboração gratuita. Lembramos que $1/m é considerado bastante barato pro mercado aqui e muitos de nossos experts cobram 3-4x esse valor, mas continuam ativos no HackHands pois é conveniente (não tem agendamento) e também porque gostam de ajudar comunidade a ser mais produtiva (aumentar produtividade é nosso core). Na versão atual em produção, alguns developers já oferecem o serviço gratuitamente (existe um botão de pause que o expert pode pausar a qualquer momento se ele quiser, e com isso não cobrar pelo tempo, quando isso ocorre os usuários costumam deixar bons tips). Quem tiver interesse em saber mais sobre o HackHands, se tornar um expert ou testar o serviço, fico a disposição para qualquer contato: geraldo arroba hackhands com. No momento, estamos com todo foco nos EUA, pois criamos o projeto por aqui e sem dúvidas é o mercado por onde começar, mas temos algumas dezenas de experts no Brasil e também alguns poucos usuários. Temos o objetivo de aumentar nossa presença no Brasil e suportar outras línguas para suporte (portugues e espanhol). Abraços.

  • Geraldo Ramos

    Muito bom texto e é com base justamente nessa mesma hipótese que criamos o http://hackhands.com. Conectamos developers em real-time usando ferramentas modernas (webrtc, node, etc). O projeto está online desde do começo deste ano (tcrn.ch/N6jS22). Estamos em processo de integração com 5 online IDE’s e com algumas escolas de coding (bootcamps) aqui nos EUA. O serviço funciona da seguinte forma: o usuário põe um request e fazemos um pair em real-time (video chat, screen share, code collaboration, chat, etc). Utilizamos vários sistemas para notificação como Jabber/XMPP/Gtalk/Desktop notification e distribuímos os requests em departamentos/tags, tentando sempre fazer o pairing com o máximo de eficiência possível em tempo real. O custo é de 1 dollar por minuto (+tips) e os primeiros 5 minutos são risk-free (se o user desligar antes de 5, não paga nada,). Temos também uma ferramenta de rating e fornecemos um profile page para todos os experts onde eles podem cobrar o valor que quiserem pelo seu tempo, apenas para direct booking, fora do serviço principal (Ex: https://hackhands.com/johndbritton). Estamos introduzindo em breve a opção de ajuda gratuita (com base apenas em tips) e isso fará parte também do workflow como forma de incentivar o open source e a colaboração gratuita. Lembramos que $1/m é considerado bastante barato pro mercado aqui e muitos de nossos experts cobram 3-4x esse valor, mas continuam ativos no HackHands pois é conveniente (não tem agendamento) e também porque gostam de ajudar comunidade a ser mais produtiva (aumentar produtividade é nosso core). Na versão atual em produção, alguns developers já oferecem o serviço gratuitamente (existe um botão de pause que o expert pode pausar a qualquer momento se ele quiser, e com isso não cobrar pelo tempo, quando isso ocorre os usuários costumam deixar bons tips). Quem tiver interesse em saber mais sobre o HackHands, se tornar um expert ou testar o serviço, fico a disposição para qualquer contato: geraldo arroba hackhands com. No momento, estamos com todo foco nos EUA, pois criamos o projeto por aqui e sem dúvidas é o mercado por onde começar, mas temos algumas dezenas de experts no Brasil e também alguns poucos usuários. Temos o objetivo de aumentar nossa presença no Brasil e suportar outras línguas para suporte (portugues e espanhol). Abraços!

  • Régis Silva

    Excelente, por onde eu começo? Perdi o video? To dentro, como começamos?

  • Bruno

    Muito bom a ideia! Acredito que o teabalho colaborativo como a união, bem organizada e administrada, é um ambiente altamente produtivo, onde a soma da produção do grupo é maior do que a soma das produções individuais, com maior qualidade e valor agregado! Se houver algum projeto estou disponível !

  • Eduardo Matos

    Henrique, me passa seu usuário no Bitbucket pra eu te mostrar um projeto candidato a programação cooperativa. 😉

  • Andreas

    Quero muito participar da programação cooperativa. Achei uma ideia fantástica, que traz benefícios pra todos que participam.

  • Clécio Sousa

    Magnífico!!! Não sei se vocês tem noção do impacto que esse novo termo e método tem no mundo da educação mas é simplesmente fenomenal!! Podemos desenvolver várias técnicas de aceleramento de aprendizado baseado em programação cooperativa e fazer com que as dificuldades de estudantes em programação simplesmente desapareçam e o que é melhor, podemos associar com várias outras disciplinas! Trazendo pro lado profissional, podemos trabalhar agora de forma mais divertida e (cooperativa) em home office e a coisa ficar mais dinâmica. Como dizia um grande amigo meu expert e autodidata.: agora a porra ficou séria!! iuaiuaiuaiua

    Muito legal mesmo!!!! Vou ficar na expectativa para que exista este recurso na próxima turma do Welcome to the Django!!

  • Daniel Sá

    Acompanhei a sessão e gostei muito. No primeiro momento demorei p/ entender o que era pois não tinha o áudio, depois que conectei no hangout eu entendi bem.

    Quando terá a próxima sessão?

  • João Soares

    Parece uma ótima alternativa mesmo. E acho que ajuda muito a difundir
    conceitos de boas práticas já alcançadas por pessoas mais experientes. Por exemplo,
    no momento estou trabalhando com o uso de Bootstrap e queria entender como fazer ele interagir
    com o AngularJs. Apesar de já ter lido alguns posts em Blogs bem conceituados sobre o assunto, os mesmos
    não me deram uma visão global de um projeto. Acho que essa oportunidade de reunir pessoas diante de um mesmo problema ajudaria não só a difundir boas práticas, mas proporcionaria a possibilidade de repensa-las e debate-las.

  • Muito legal! Traz experiências siginificativas no aprendizado e memorização (visual e auditivo). Ótimo post.

  • Leonardo Couy

    Irado demais, eu acompanhei esse dia que você estava no Floobits. Vai ficar bacana demais também incorporado no WTTD, vai aumentar mais ainda a qualidade do curso que já é altissima. Quando houver essa sessões me chama ou posta no grupo lá do WTTD =). Outra dúvida, ele tem suporte ao PyCharm?

    • Igor Santos

      Tem sim Leonardo Couy! Lá no site ensina como fazer a instalação do plugin no PyCharm

    • Valeu, Leo! 🙂

      Sim. Naquele dia eu usei o PyCharm o tempo inteiro. 😉