Como posso encontrar um bom projeto de código aberto para participar? [fechadas]

152

Comecei a trabalhar há um ano e quero ingressar em um projeto de código aberto pelos mesmos motivos que qualquer outra pessoa: ajudar a criar algo útil e desenvolver minhas habilidades ainda mais.

Meu problema é que não sei como encontrar um projeto em que me encaixarei.

Como posso encontrar um projeto para iniciantes? Quais atributos devo procurar? Quais são os sinais de alerta de que um projeto pode não ser o ajuste certo? Existem ferramentas disponíveis para ajudar a combinar pessoas com projetos de código aberto?

Há uma pergunta semelhante aqui , mas essa pergunta tem a ver com emprego e é limitada ao PHP / Drupal.

Pops
fonte
9
Legal, acabei de dar uma olhada na ArsTechnica e vi essa pergunta como um artigo. Aqui está o link. arstechnica.com/business/guides/2012/03/...
Evan Solha

Respostas:

111

Minha primeira contribuição de código aberto foi para uma biblioteca que eu já havia usado (e teria sofrido muito sem) em um projeto pago anterior. Durante meu uso inicial, vi um bug no código, então criei um patch, ingressei no projeto e enviei-o para revisão.

Cerca de 8 meses depois, quando eu tinha algum tempo livre, decidi que iria retribuir (e trabalhar em minhas habilidades de desenvolvimento) contribuindo mais para o projeto. Então, eu clonei o repositório e comecei a me familiarizar com a base de código. Depois de algumas semanas enviando pequenas correções de patch para a base de código e monitorando as solicitações de recursos, peguei uma solicitação de recurso para adicionar um módulo bastante substancial ao projeto.

Como gerar muitas correções de patches individuais é bastante tedioso para qualquer desenvolvimento significativo, eu clonei o repositório em uma ramificação no git hub e comecei a perfurar o código. Algumas semanas e vários milhares de linhas de código depois, o líder do projeto e eu trabalhamos para integrar e testar minhas correções na biblioteca de uma maneira que funcionasse de maneira consistente com o restante da base de código.

Foi um processo inestimável que eu aprendi muito com:

  • Quando comecei, não sabia como usar o Git. No final, eu poderia criar ramos de rastreamento remoto com proficiência e mesclá-los ou transformá-los no ramo mestre sem suar a camisa.
  • Comecei no VS 2008 e acabei migrando para o Linux e o Monodevelop para trabalhar na escrita de código (porque o VS é retardado por Unicode e as terminações de linha são uma dor de cabeça no git). Acontece que não há muito que você não possa fazer no * nix que você possa fazer no * nows.
  • Eu nunca tinha feito nenhum teste de unidade antes, Nunit é um pedaço de bolo para usar e escrever testes de unidade é uma coisa bastante elementar.
  • Eu tive que aprender a engolir a língua e ouvir, além de praticar paciência. Não faz sentido manter uma posição firme em sua posição em um projeto de código aberto, porque todos os envolvidos são conhecedores (provavelmente mais do que você) e capazes de aceitar / rejeitar suas idéias com base na substância e não na entrega. É extremamente humilhante e gratificante ao mesmo tempo.
  • Apenas ter os olhos de um outro desenvolvedor habilidoso em uma grande base do meu código apontou falhas no meu estilo que eu nunca havia considerado antes (assim como apontei falhas no código). Para mim, aprendi que é mais fácil / melhor definir constantes do que usar um monte de números mágicos com comentários detalhados.

Esse projeto em particular foi baseado na geração e decodificação de pacotes de rede em todos os níveis de protocolos de rede. Eu tenho um interesse pessoal em redes de nível inferior, por isso foi ótimo ter discussões com outro desenvolvedor com interesses e conhecimentos compartilhados no domínio.

Se você quiser apenas molhar os pés: encontre um projeto que você já use; clonar o repositório; e comece a ver se você pode corrigir alguns bugs e / ou adicionar alguns testes de unidade. Parece intimidador olhar a base de código de outra pessoa com novos olhos, mas é uma habilidade extremamente valiosa para aprender. Envie alguns patches. Você pode esperar que seu código seja minuciosamente examinado primeiro. Não se preocupe, é uma parte normal do processo ganhar a confiança dos administradores do projeto.

Após estabelecer uma base de mérito com o (s) administrador (es) do projeto, comece a buscar mais responsabilidades, como propor novos recursos ou solicitar a atribuição de implementar solicitações de recursos.

Se você não conseguir encontrar um projeto já existente em uma das principais redes de repositórios de código aberto (github, sourceforge, google code), pense em um aplicativo que você realmente gostaria de usar que ainda não existe e comece o seu próprio.

Esteja preparado para ser humilhado e esperar que o trabalho seja rejeitado em favor de novas revisões. O mito de que qualquer pessoa pode adicionar código a um projeto de código aberto é completamente falso. Sempre há um porteiro entre você e o acesso por push. Quanto melhor o seu código, menos ele será examinado a longo prazo à medida que você ganhar confiança dos administradores do projeto. Se for o seu projeto, você será o porteiro.

Atualizar:

Eu apenas pensei sobre isso e percebi que não me incomodei em mencionar qual projeto que muitas das minhas respostas estão referenciando. Para quem quer saber, é o SharpPcap . O desenvolvedor líder Chris Morgan é muito profissional e pontual. Ele faz um ótimo trabalho gerenciando o projeto e me ensinou muito sobre o que é necessário para amadurecer um projeto OSS.

Devido a restrições de tempo pessoal, não sou capaz de contribuir com código há mais de um ano, mas ainda tento retribuir espreitando o Stack Overflow e respondendo às perguntas sobre o SharpPcap ocasionalmente.

Evan Plaice
fonte
você pode sugerir algum site popular a esse respeito?
Aditya P
2
@AdityaGameProgrammer Eu colocaria mais ênfase na procura de um projeto específico que não seja um site de hospedagem de código aberto. Sites de hospedagem são apenas um depósito de lixo para projetos de código-fonte aberto e alguns projetos serão migrados para sites diferentes se forem encontrados melhores recursos (isto é, licenças específicas são suportadas, melhor suporte ao controle de versão, melhores rastreadores de erros, etc ...). Eu já citei alguns. IMHO, github, código do google e sourceforge são os mais populares. O Launchpad (usa controle de versão do bazaar) é onde você encontrará a maior parte do desenvolvimento do Ububtu / linux.
Evan Solha
2
@AdityaGameProgrammer (cont) Github, sourceforge e google code são muitos grupos de projetos. Como o sourceforge existe há mais tempo, você provavelmente encontrará muito mais projetos mortos / órfãos. É muito mais fácil encontrar um projeto para participar, se você demorar um pouco para considerar o que interessa primeiro. A exceção é se você estiver procurando hospedar seu próprio projeto. Depois, reserve um tempo para procurar os recursos que melhor se adequam ao seu fluxo de trabalho de desenvolvimento habitual.
Evan Solha
Obrigado. Minhas tentativas anteriores de encontrar um no sourceforge me levaram a um grande número de projetos mortos / órfãos.
Aditya P
28

Aqui o que eu sugiro fazer para encontrar a combinação perfeita:

  1. Se você tem um projeto de código aberto que já utiliza, conhece e se preocupa, deve ser o seu primeiro candidato a tentar. Caso contrário, pense no que você gostaria de fazer em geral e procure um projeto nessa área.

  2. Quando você encontrar um projeto em potencial, não se apresse. Tente usar você mesmo. É tão bom em ação quanto parecia na descrição e nos comentários? Caso contrário, não é uma parada completa; talvez seja uma oportunidade para você entrar e realmente fazer a diferença. Afinal, ninguém precisa de outro desenvolvedor para um produto perfeito. Mas isso lhe dará uma visão importante se você deseja fazer parte deste projeto, enquanto ganha experiência em primeira mão com as novas tecnologias na área em que está interessado.

  3. Antes de começar a investir muito tempo no projeto e aprender seus detalhes, considere ficar nas listas de discussão, nos fóruns e até no sistema de rastreamento de bugs por algumas semanas. Se você começar a contribuir com o projeto regularmente, passará muito tempo lá.

Descobrir: você gosta de ficar por aqui, ou é uma chatice para você? Parece que este projeto tem uma comunidade boa e enérgica ou está morrendo lentamente? As pessoas do núcleo parecem encorajar e orientar os recém-chegados ou você estará por sua conta?

Execute estas etapas para vários projetos, potencialmente em áreas diferentes e é menos provável que você sinta decepções quando se junta a uma equipe errada. Essa experiência pode potencialmente desencorajá-lo a fazê-lo novamente no futuro.

Mais alguns pensamentos:

Se o projeto no qual você está realmente interessado é de alto nível, com muitos desenvolvedores e atividades ao seu redor, provavelmente você terá dificuldade em estabelecer uma reputação suficiente para obter, digamos, comprometer direitos ou um papel interessante na comunidade. Nesse caso, considere ingressar em um projeto de spin-off relacionado com menor visibilidade. Por exemplo, em vez de tentar começar a contribuir com o jQuery, tente encontrar o plug-in do jQuery que será adequado para você. Mais tarde, você pode considerar "subir".

Se você gosta de um projeto, mas se sente intimidado por seus requisitos de tamanho, complexidade ou qualidade de código, considere começar pelas funções de suporte, como testes, manutenção de documentação ou verificação de erros. Se você perguntar na lista de discussão do projeto que tipo de ajuda eles precisam mais no momento, eles ficarão felizes em guiá-lo até lá. :)

Dessa forma, você aprenderá o projeto e construirá sua reputação lá, contribuindo muito mais para ele do que se você começasse a enviar patches abaixo do padrão que seriam rejeitados várias vezes até que estivessem prontos.

O último e o mais importante: se você se queimar em um só lugar, siga em frente; não desista.

Espero que ajude.

kdubinets
fonte
2
+1 em "considere começar pelas funções de suporte". Escrever testes é realmente fácil e uma análise cuidadosa dos testes fornece uma boa idéia sobre o que o código está tentando realizar. A documentação é uma boa maneira de entender o 'quadro geral' e a verificação de bugs é um bom ponto de entrada de baixa barreira para quebrar o gelo. Trabalhar nas coisas que os desenvolvedores geralmente negligenciam demonstra que seu foco é melhorar o projeto e suas contribuições não são apenas orientadas pelo ego. Os problemas de ego podem dificultar a vida dos mantenedores de projetos, por isso eles cuidam desse tipo de coisa.
Evan Solha
9

Eu recomendo fortemente que você encontre um projeto de código aberto que tenha seu interesse sincero e que use ativamente .

O motivo é simples: faz a diferença entre uma tarefa e um hobby.

Dê uma olhada no seu computador. Qual software você colocou nele que é Open Source? Um palpite seria Chrome ou Firefox, ou talvez o Open Office ou um cliente do Instant Messenger. Eles são perfeitos ou há algo minúsculo que você gostaria de mudar se pudesse?

Se houver, agora é a hora de fazer algo a respeito.


fonte
8

Eu sugeriria encontrar (ou iniciar) um projeto, como as pessoas fazem há anos, começar a usar o software de código aberto para fazer as coisas. Isso pode parecer trivial para você, mesmo que simplificado demais. No entanto, é realmente difícil descrever a satisfação de usar algo, encontrar um bug, pegar a fonte e corrigi-la. Ou, talvez, alterá-lo para que funcione da maneira que você deseja.

Além disso, não hackie apenas para se envolver. 95% dos meus patches no kernel do Linux nunca verão a luz do dia; tenho certeza de que ninguém os desejaria além de mim, e provavelmente seria forçado a passar por uma avaliação psiquiátrica se algum outro hacker competente do kernel os visse. Mas ainda gosto de minha implementação, piglatin_printk()que começou como uma piada de 1º de abril há vários anos :)

Embora sim, colocar seu código e seu processo de pensamento na frente de muitas outras pessoas competentes não tem preço, assim como aprender a se comunicar e colaborar. Um projeto solo é uma ótima maneira de mostrar o que não fazer. Dica, há mais do que apenas usar software de controle de versão, listas de discussão e um rastreador de erros.

Para começar, sugiro que procure Ohloh para encontrar o software que você possa estar interessado em usar primeiro. Faça o download, construa e brinque com ele. Então vá pegar outra coisa. Eventualmente, você começará a querer melhorar algo ou perceberá que tem o desejo de implementar algo completamente diferente do que encontrou.

A outra coisa que ajuda é trabalhar para uma empresa aberta e amigável. Minha empresa usa o Xen extensivamente, então eles não têm nenhum problema comigo encontrando bugs interessantes e corrigindo-os, já que precisaríamos fazer isso de qualquer maneira. Eles também não se importam com os funcionários que participam de coisas como RFCs e especificações de rascunho, já que usaremos o resultado.

Tim Post
fonte
+1 piglatin_printk ()? Parece hilário. Eu gostaria de ver isso em ação. Não é surpresa que a maioria dos patches do Linux Kernel tenha sido rejeitada, não há muito espaço para diversão / criatividade em um projeto tão crítico. Felizmente, existem muitos projetos menores que têm uma barreira de entrada muito menor para aceitar código - mesmo que as contribuições precisem de algum trabalho antes de serem confirmadas.
precisa
1
@EvanPlaice Eles não foram rejeitados, apenas nunca foram enviados;)
Tim Post
7

O OpenHatch foi criado especificamente para isso.

Citar:

O OpenHatch é uma organização sem fins lucrativos dedicada a combinar potenciais colaboradores de software livre com comunidades, ferramentas e educação.

Você pode procurar projetos por tipo, tecnologia, nível de habilidade necessário etc. e encontrar o que corresponde ao seu nível.

phw
fonte
Ótimo pequeno site :) Pode-se também conferir freecode.com
nha
4

Uma coisa que notei repetidamente quando se trata de pessoas que desejam iniciar o desenvolvimento de código aberto é que ficam impressionadas com a complexidade e magnitude dos grandes projetos. Eu enfrentei o mesmo problema há alguns anos e, pela minha experiência, é melhor não olhar para os projetos maiores imediatamente.

Depois de passar algum tempo olhando para os projetos que eu poderia gostar, percebi que eles ainda estavam fora do meu alcance e comecei a trabalhar em projetos muito pequenos por conta própria. Faço questão de apenas liberar o código no Github, independentemente de ser realmente relevante ou se outras pessoas começarem a usá-lo. Eventualmente, as pessoas podem começar a se interessar pelo que você faz. Mesmo assim, você ganhará confiança e capacidade técnica para avançar lentamente para projetos maiores e mais populares.

Soma de verificação
fonte
3

Existe um novo site específico para este código chamado 52, que incentiva novos desenvolvedores a se envolverem em código aberto iniciando um novo projeto OSS toda semana.

A idéia é que parecerá muito menos assustador para as pessoas que nunca estiveram envolvidas em código aberto antes e, com sorte, também se sentirá mais inclinado a se envolver em outros projetos de OSS.

Marcus Swope
fonte
1
Eu estive pesquisando e tenho algumas notas para adicionar. O Code52 é liderado por 3 desenvolvedores da empresa Readify, que afirmam ter conquistado o título de 'Parceiro do ano 2012 da Microsoft'. Embora os projetos estejam hospedados no GitHub, todos os projetos são gravados no WinJS (ou seja, destino Win8) e possuem a Licença Pública da Microsoft. De uma aparência superficial, a MPL é copiada para a esquerda, mas possui certas restrições que exigem que os derivativos herdem a mesma licença ou uma licença semelhante. Ou seja, é mais como a licença GPL do que a licença MIT, muito menos restritiva.
Evan Solha
O projeto parece muito atraente, mas não posso deixar de pensar que este é o recém-criado programa de compartilhamento digital de desenvolvedor de código aberto criado pela Microsoft para preencher o novo ecossistema do Windows 8 sem gastar um centavo. Para não parecer um chapéu de papel alumínio usando um barbeador, o MS não tem exatamente a melhor reputação quando se trata de se integrar ao código-fonte aberto.
Evan Solha
1
-1 Parece neste site basicamente morreu (há mais atualizações) mais de um ano atrás
Michael Durrant
3

Eu recomendo a leitura: http://open-advice.org/ .

O objetivo é ajudar aqueles que criam e mantêm comunidades, e aqueles que não estão confiantes sobre qual deles deseja ingressar ou como fazê-lo.

Caso contrário, encontre um projeto que tenha uma missão que ressoe com você, ou garfo e contribua para um que já seja útil para você.

Boa sorte.

user549213
fonte
3

Quando comecei, pesquisei opções on-line e provou ser difícil encontrar algo em que você possa se interessar como iniciante.

É difícil contribuir para alguns projetos, não porque sejam muito avançados, mas porque a comunidade não é acolhedora. Portanto, não desanime quando você bate em uma parede.

Durante a pesquisa, decidi montar uma lista de 10 projetos de código aberto que os iniciantes podem começar a apoiar sem processos estressantes. Aqui está o link para usar:

Dez projetos para iniciantes para apoiar e aprender com

Espero que você ache útil e você sempre pode adicionar mais, se achar legais!

Eenvincible
fonte
você se importaria de explicar mais sobre o que faz e por que o recomenda como resposta à pergunta? "Respostas apenas para links" não são bem-vindas no Stack Exchange
gnat
2

Sugiro iniciar um projeto por conta própria sobre um tópico do seu interesse.

Muito pode ser aprendido trabalhando em um projeto em geral. Não é necessário ver como alguém codifica para aprender a codificar melhor. E, às vezes, você realmente vê o que não deve fazer, pois as outras pessoas geralmente não são mais experientes do que você.

Geralmente, ajuda a ver o código de outras pessoas, mas você encontrará o código de outras pessoas em seu próprio projeto apenas através das bibliotecas e componentes que você usa.

A experiência ensinará o que é boas e más práticas.

Brian R. Bondy
fonte
1
Embora eu pense que essa é uma ótima idéia, fazê-lo como um projeto iniciante pode ser intimidador. Especialmente quando você não tem revisões de código ou outras pessoas que podem adicionar informações. Meus próprios projetos passaram por muitas reescritas e milhares de linhas de código porque ninguém me disse que X era melhor, um problema que ainda tenho. Juntar-se a um projeto estabelecido acelerará o aprendizado muito melhor
TheLQ
@TheLQ: Depende do seu nível de experiência, eu acho, fazer algo do zero irá ensinar muitas lições e coisas que você não aprenderia ingressando em uma equipe que já tem muitas coisas a serem feitas. Na minha opinião, existem bens e coisas ruins sobre o seu projeto ou sobre o de outra pessoa.
Brian R. Bondy
@TheLQ eu concordo completamente. É uma experiência muito valiosa ingressar em um projeto já existente, porque fornece uma idéia de como os projetos de código aberto são gerenciados e como a organização está estruturada. Depois de trabalhar no projeto bem-sucedido de outra pessoa, dar o salto para criar um dos meus foi uma caminhada no parque.
Evan Plaice
2

Sou o proprietário do projeto no código do google e estou procurando colaboradores. (No entanto, não utilizarei mal esta resposta para publicidade.) Portanto, minha opinião pode ser interessante para você.

Primeiro você terá que descobrir em que está interessado. Em seguida, desenvolva algum conhecimento em alguns campos relacionados aos seus interesses. Em seguida, encontre um projeto em que sua experiência seja exigida e necessária.

Quanto menor o projeto, menos contribuintes já existem, maiores as chances de os contribuidores serem procurados e você pode entrar em contato diretamente com os autores / proprietários do projeto. Diga-lhes a) qual é o seu conhecimento b) onde você vê que ele pode ser aplicado no projeto c) o que você acha que pode conseguir.

Lembre-se: apenas conhecer uma ou duas linguagens de programação convencionais não é perícia.

Ingo
fonte
Como você aconselharia alguém a determinar o que está interessado ou a desenvolver conhecimentos nessas áreas?
Adam Lear
2
@ Anna Não sei se entendi sua pergunta. Quero dizer, existem centenas de tópicos - de coisas de baixo nível, como protocolos de rede ou trabalhos internos de uma GPU, até tópicos altamente abstratos e quase matemáticos (análise, sistemas de tipos, teoria de categorias etc.). O maior gênio não dominará todos eles e ficará feliz em ter alguém que seja especialista em um campo em que ele, o gênio, não é. Mas quais são seus interesses realmente, quem pode dizer isso, menos você?
Ingo
1
Sim, descobrir os interesses talvez seja bastante pessoal (ou o conselho equivale a "tentar coisas diferentes e ver o que você gosta"), mas e ganhar experiência? Você diz que é mais do que apenas conhecer alguns idiomas. Então, dado um novo tópico / assunto, o que você faria para obter esse conhecimento? Para mim, ingressar em um projeto OSS seria uma parte desse processo, mas se eu estiver lendo certo, você está sugerindo que um seja um especialista antes de ingressar em um projeto.
Adam Lear
O que eu faria? Leia livros. Leia PDFs. Discuta com alguém que você conhece ou na rede. Experimente algo. Prática. Responda a todas as perguntas sobre SO que surgirem sobre esse tópico. Então, um dia, observe que poucos sabem melhor que você. - Não me leve muito a sério em relação ao "especialista", mas lembre-se, em projetos de código aberto, como é voluntário, não há como forçar alguém a trabalhar - daí pessoas que sabem o que estão fazendo e querem fazer exatamente o que é bem-vindo.
Ingo