Sei sulla pagina 1di 6

Crie projetos bem-sucedidos em Python

Patrick T. Altman 27/Jan/2012


VP of Engineering
Eldarion

A criação de um projeto de software livre bem-sucedido em Python envolve mais do que apenas escrever
um código útil. Envolve a participação da comunidade, mais oportunidades de cooperação, habilidade e
suporte. Explore as melhores práticas para ajudá-lo a criar seu próprio projeto bem-sucedido.

O ecossistema para projetos de software livre em Python é rico e diversificado. isso permite que você fique
sobre ombros de gigantes na produção de seu próximo projeto de software livre. Além disso, significa que
há um conjunto de normas e melhores práticas da comunidade. Ao aderir a essas convenções e aplicar as
práticas em seu projeto, você pode obter uma adoção mais ampla de seu software.

Este artigo cobre as práticas que funcionaram bem para a criação de projetos grandes e pequenos que
obtiveram grandes comunidades de usuários. As sugestões oferecidas aqui são razoáveis e fazem sentido. No
entanto, como os resultados podem variar, não as considere um dogma.

Primeiro, vamos discutir como separar os processos pode gerar uma comunidade mais forte, com mais
rendimento em todo o espectro que envolve escrever, manter e suportar o software de código aberto.

Colaboração versus cooperação


Durante a DjangoCon 2011, David Eaves fez um discurso de abertura que colocou eloquentemente em
palavras a noção de que, embora tenham definições parecidas, há uma diferença sutil entre as palavras
colaboração e cooperação:

"Eu argumentaria que colaboração, ao contrário de cooperação, exige que as partes estejam
envolvidas em um projeto a fim de resolver problemas em conjunto."

Eaves segue dedicando uma postagem inteira especificamente ao modo como o GitHub foi a força motriz
para a inovação do funcionamento do software livre—especificamente, o aspecto do gerenciamento da
comunidade. Em "How GitHub Saved OpenSource" (consulte Recursos), Eaves afirma:

"Acredito que os projetos de software livre funcionam melhor quando os contribuidores


conseguem participar de uma cooperação com baixo custo de transação e a colaboração com

© Copyright IBM Corporation 2012. Todos os direitos reservados. Marcas Registradas


Crie projetos bem-sucedidos em Python Página 1 de 6
developerWorks® ibm.com/developerWorks/br/

alto custo de transação é minimizada. A genialidade do software livre é que ele não precisa
de um grupo para debater sobre cada problema e resolver os problemas coletivamente, mas
justamente o oposto."
Ele continua falando sobre o valor da ramificação e como ela reduz os custos elevados de colaboração,
permitindo a cooperação de baixo custo entre as pessoas capazes de levar um projeto adiante sem permissão.
Essa ramificação afasta a necessidade de coordenação até que as soluções estejam prontas para serem
mescladas, possibilitando uma experimentação muito mais rápida e dinâmica.

É possível moldar seu projeto de maneiras parecidas, com o mesmo objetivo de aumentar a cooperação de
baixo custo e minimizando a colaboração cara durante as fases de composição, manutenção e suporte de seu
projeto.

Composição
Começando com uma página em branco, você está criando algo novo, está fazendo algo inovador—ou talvez
algo um pouquinho diferente do que já existe. Não há nada como começar um novo projeto e compartilhar
com o mundo o produto de seus esforços.

Diferentemente da manutenção, quando você está escrevendo, está criando algo novo em vez de modificar
ou corrigir algo que já existe. Escrever e criar um projeto é uma forma de arte, além de ser uma ciência.
Outros verão a implementação e julgarão a qualidade do código, e seu nome está nele para sempre.

Portanto, é importante entender a mentalidade de um artesão e abordar a composição de um software


adequadamente. Escrever seu novo projeto também significa mais do que gerar o código: a criação de seu
projeto inclui escrever um código com um estilo agradável, prazeroso de ler, criar testes que validem a
funcionalidade de seu projeto, quando apropriado, e produzir uma documentação completa e útil.

Artesanato
Arte geralmente se refere a um negócio ou ocupação artística que exige uma qualificação especial para fazer
algo manualmente, normalmente um objeto físico feito em produção de pequena escala. Você pode alongar
essa definição e aplicá-la a softwares no sentido de que um artesão de software se concentra na qualidade em
vez de volume.

Para o artesão, é importante que o produto seja cativante, não apenas funcional. Especificamente, em
softwares, um artesão trabalha para se certificar de que o código esteja limpo e esteticamente agradável,
que as interfaces de programação de aplicativos (APIs) estejam bonitas e que a documentação e os testes
proporcionem aos usuários uma sensação de trabalharem com um produto sólido.

Trabalhar nessa mentalidade é recompensador para a alma e a fonte de muita diversão com a produção de
softwares livres: você está livre dos prazos, clientes e outras demandas externas. Relaxe e desfrute da criação
de algo belo.

Estilo de código e linting


Python Enhancement Proposal (PEP) 8 (consulte Recursos) é um guia de estilo detalhado sobre Python no
qual você deveria basear seu projeto Python (ou pelo menos o guia de estilo de seu projeto). Não precisa

Crie projetos bem-sucedidos em Python Página 2 de 6


ibm.com/developerWorks/br/ developerWorks®

ser dogmático com relação ao PEP 8, mas quanto mais próximo seu trabalho chegar do PEP 8, mais fácil
será que outros desenvolvedores em Python enviem correções de limpeza no estilo padrão da comunidade
Python.

Além da conformidade com o estilo, o conceito de linting de código é valioso para encontrar erros como a
falta de variáveis de importações e não definidas. Há diversos linters, ou ferramentas, além dos verificadores
de estilo que o ajudarão a inspecionar seu código a fim de encontrar desvios de um conjunto padrão de
regras ou regras configuradas por você. Os utilitários mais populares são:

• pyflakes
• pylint
• pep8

Consulte Recursos para obter links para essas ferramentas.

Qualquer que seja o conjunto convenções que você escolher usar, se elas desviarem do PEP 8, recomendo
documentá-las para avisar as pessoas que quiserem contribuir com seu projeto sobre o estilo de código que
você usa. Melhor ser explícito do que implícito.

pyflakesé um linter particularmente útil. É um bom equilíbrio de funcionalidade útil, localização e realce de
erros sem ser excessivo com pequenas excentricidades. Veja um exemplo de sessão usando o pyflakes em um
projeto Python:

$ pyflakes kaleo
kaleo/forms.py:1: 'form' imported but unused
kaleo/forms.py:4: undefined name 'forms'
kaleo/forms.py:6: undefined name 'forms'

Imediatamente, a ferramenta me informa sobre um erro de digitação importe. Analisando kaleo/forms.py, eu


vejo:

1: from django import form


2:
3: class InviteForm(forms.Form):
4: email_address = forms.EmailField()

...que me diz para mudar a linha 1 para from django import forms.

Testes
É sempre bom ter testes em seu projeto que validem o funcionamento de seu código, a fim de impedir que
regressões passem despercebidas, e, em alguns casos, sirvam como uma forma de documentação, na qual ler
o código do teste pode informar as outras pessoas sobre o modo de funcionamento da API de sua biblioteca.

Dito isso, eu não julgaria a integridade ou viabilidade de um projeto no fato de ele incluir testes ou na
integridade desses testes. A presença de testes não garante a qualidade do código. Talvez seja uma ideia
controversa, mas eu acredito que é melhor não ter testes do que testar algo errado. Ao escrever testes, é
importante considerar a inserção de diversas entradas para cada unidade que está sendo testada.

Crie projetos bem-sucedidos em Python Página 3 de 6


developerWorks® ibm.com/developerWorks/br/

Documentação
No entanto, ao contrário dos testes, você pode julgar a qualidade e o artesanato de um projeto com base na
qualidade e extensão de sua documentação. Aborde a criação e manutenção de sua documentação da mesma
forma que aborda seu código. Uma documentação bem escrita e detalhada inspirará contribuidores a seguir o
exemplo e a tornar seu projeto mais acessível aos usuários.

Com ferramentas como Sphinx e Read the Docs (consulte Recursos), é possível ter documentos publicados,
atualizados e com uma aparência fantástica. Usar essas ferramentas é tão simples quanto escrever as palavras
e realizar os commits. Crie o hábito de realizar alterações na documentação com commits o quanto for
apropriado.

Manutenção
Depois de lançar a primeira versão do Python Package Index (PyPI), anunciá-la por meio de vários Tweets
e postagens de blog e começar a receber alguns usuários, você precisa adicionar a manutenção a quaisquer
continuações de atividades de criação. Os usuários relatarão bugs, solicitarão recursos, farão perguntas que
não estão óbvias na documentação e muito mais.

Algumas coisas você optará por não fazer e sugerirá soluções; mas outras você desejará corrigir na
documentação ou no código. Usar um distributed version control system (DVCS) como o git e lançar
pacotes de desenvolvedor frequentes pode facilitar muito a manutenção.

Controle de origem
Há muitos DVCSs disponíveis, incluindo o git e o mercurial (consulte Recursos). Não importa qual sistema
de controle de versão que você escolha, certifique-se de que oferece controle de origem, fornecendo a
capacidade de ramificar seu projeto entre usuários, para que eles trabalhem nos bugs por conta própria.

Solicitações de pull
Uma solicitação de pull é uma mensagem enviada a outras ramificações—normalmente a ramificação
pai—do repositório de uma pessoa, solicitando que o proprietário desse repositório aplique um lote de
alterações ou commits. Como o processo de solicitação de pull aumenta a cooperação enquanto reduz
o custo da colaboração, o ciclo de inovação pode acelerar.

A velocidade com a qual as alterações são feitas depende de muitos fatores. Um fator crítico é o público
alvo (por exemplo, outros desenvolvedores, usuários finais não técnicos). Se você estiver escrevendo para
desenvolvedores, incentivar relatórios de bug ou solicitações de recurso acompanhadas de solicitações de
pull pode realmente reduzir o fardo sobre a pessoa que realiza a manutenção. Também aumenta o sentido de
comunidade, uma vez que as contribuições das pessoas são mescladas em versões futuras.

Construções Dev
Convém lançar versões dev logo no início e com frequência, muitas vezes após cada conjunto de correções
adicionais. Isso permitirá que outros desenvolvedores que estão usando seu projeto em seus trabalhos
executem as alterações mais recentes em seu projeto com mais facilidade. Quanto mais pessoas usarem o
código em situações diferentes, maior será a qualidade quando chegar o momento de lançar uma nova versão
estável.

Crie projetos bem-sucedidos em Python Página 4 de 6


ibm.com/developerWorks/br/ developerWorks®

Suporte
O suporte anda lado a lado com a manutenção. É fundamental participar e desenvolver uma comunidade
com base em seus usuários e contribuidores. Confira poderes a outras pessoas para ajudá-lo com o suporte
e você estará aumentando o fator de cooperação geral de seu projeto, permitindo uma melhor escalabilidade
no tamanho de seu projeto, assim como o aumento natural em ideias para resolução dos problemas dos
usuários.

Para esse fim, lembre-se de oferecer diversos canais para aumentar o alcance e facilitar a participação dos
usuários e a realização do projeto. As opções de canal incluem IRC, listas de correspondência e mídias
sociais, como o Twitter.

IRC
Configurar um canal em um IRC como o freenode é uma boa ideia. Eu configurei uma para meu projeto,
nashvegas; e, embora seja raro existir algum outro usuário além de mim, meu cliente IRC executa sem
interrupções em segundo plano. Quando o usuário ocasional tem um pergunta, eu consigo responder com
pouco custo transacional para mim e de uma forma muito mais dinâmica do que por email.

Lista de emails
É uma prática padrão para a maioria dos projetos de software livre ter uma lista de emails para suporte e
também discutir o progresso do desenvolvimento entre os contribuidores. Recomendo manter apenas uma
lista de emails, dividindo-a em listas de "usuários" e "dev" somente quando o volume ficar tão cheio que
cause ruído para um grupo ou outro.

Twitter
Obtenha um manipulador do Twitter para seu projeto, no qual as pessoas possam conversar publicamente
com você sobre seu trabalho. Uma conta do Twitter também pode servir como um ótimo local para fazer
anúncios sobre o projeto.

Conclusão
Escrever e contribuir com softwares livres na comunidade Python pode ser uma experiência divertida e
recompensador. Concentrar-se e, reduzir a colaboração de alto custo enquanto aumenta as oportunidades
para a cooperação de baixo custo pode ajudar seus projetos e crescerem com contribuidores ativos. No
software livre, você tem muita liberdade para ser um artesão quando se trata de seu projeto: aproveite ao
máximo isso e divirta-se. Concentre-se no estilo de código consistente, testes sólidos e documentação bem
escrita para aprimorar a taxa de adoção de seu projeto por usuários e outros desenvolvedores. Além disso,
use um DVCS, fique atento às solicitações de pull e publique versões de desenvolvimento frequentes.
Finalmente, é possível aumentar ainda mais a adoção e crescimento de seu projeto fornecendo vários canais
de suporte e permitindo que a comunidade o auxilie no fornecimento desse suporte.

Crie projetos bem-sucedidos em Python Página 5 de 6


developerWorks® ibm.com/developerWorks/br/

Sobre o autor
Patrick T. Altman

Patrick Altman é um dos desenvolvedores principais do Pinax, criou e contribui com vários
outros projetos de software livre. Ele é o atual VP de Engenharia na Eldarion. Anteriormente,
Patrick foi Engenheiro de Software Principal na StudioNow, que mais tarde foi vendida para a
AOL. Atualmente, ele mora em Nashville, Tennessee, EUA, com sua esposa e três filhos.

© Copyright IBM Corporation 2012. Todos os direitos reservados.


(www.ibm.com/legal/copytrade.shtml)
Marcas Registradas
(www.ibm.com/developerworks/br/ibm/trademarks/)

Crie projetos bem-sucedidos em Python Página 6 de 6

Potrebbero piacerti anche