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
25 comentários
  1. Renato Chencinski Diz

    Fala Henrique,

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

    https://kobra.io/#/

    Abraços!

  2. Renato Chencinski Diz

    Fala Henrique,

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

    https://kobra.io/#/

    Abraços!

  3. luizstacio Diz

    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.

  4. Fausto Diz

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

  5. Geraldo Ramos Diz

    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.

  6. Geraldo Ramos Diz

    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: . 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!

  7. Régis Silva Diz

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

  8. Régis Silva Diz

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

  9. Bruno Diz

    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 !

  10. Bruno Diz

    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 !

  11. Eduardo Matos Diz

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

  12. Andreas Diz

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

  13. Andreas Diz

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

  14. Clécio Sousa Diz

    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!!

  15. Daniel Sá Diz

    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?

  16. Daniel Sá Diz

    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?

  17. João Soares Diz

    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.

  18. João Soares Diz

    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.

  19. horacioibrahim Diz

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

  20. horacioibrahim Diz

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

  21. Leonardo Couy Diz

    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?

    1. Henrique Bastos Diz

      Valeu, Leo! 🙂

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

  22. Leonardo Couy Diz

    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?

    1. Igor Santos Diz

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

    2. Henrique Bastos Diz

      Valeu, Leo! 🙂

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

Deixe uma resposta

Seu endereço de email não será publicado.