Seções iMasters
Python + Software Livre

Crie projetos bem-sucedidos em Python

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

O 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 ser dogmático com relação ao PEP 8, mas quanto mais próximo dele o seu trabalho chegar, 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.

O pyflakes é um linter particularmente interessante. É 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:

 from django import form

 class InviteForm(forms.Form):
    email_address = forms.EmailField()

O 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 dele 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.

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.

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.

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 dele, 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 e-mails, 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.

Recursos

Aprender

Obter produtos e tecnologias

  • Há muitos linters disponíveis para uso. Entre as opções populares estão pyflakes, pylint e o verificador de guia de estilo Python pep8.
  • Quando você estiver pronto para adicionar a documentação para seu projeto, várias ferramentas on-line poderão facilitar o trabalho. Duas opções são Sphinx e Read the Docs.
  • git e Mercurial ambos criam excelentes DVCSs.

Discutir

***

Sobre o autor: 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.

 

Comente também

1 Comentário

Qual a sua opinião?