Eu trabalho com uma equipe que cresceu de 2 desenvolvedores para 10 em menos de um ano. Eu era o número 3 e o primeiro a levantar uma questão de padrões de codificação. Os dois desenvolvedores originais estavam trabalhando lado a lado há alguns anos e haviam adotado um padrão comum que me parecia estranho. Tivemos exatamente os mesmos problemas que você está descrevendo.
O que fizemos foi:
Padrões de codificação de pesquisa
Passamos alguns dias verificando projetos de código aberto estabelecidos. Sabíamos que a equipe se expandiria rapidamente e estávamos procurando soluções reais baseadas em projetos reais e não em algumas diretrizes genéricas. Também não nos importamos com os padrões de codificação ideais, mas com um conjunto de regras e diretrizes que fariam sentido e não exigiriam a refatoração de toda a nossa base de código. Estávamos procurando um hack de padrões de codificação, se você quiser.
Nós três decidimos que os melhores padrões de codificação disponíveis para um projeto PHP estabelecido eram os seguidos pelo Zend Framework. Felizmente, o pessoal do Zend Framework fornece um documento de padrões de codificação muito abrangente .
Criando nossos próprios padrões de codificação
Obviamente, aplicar os padrões de codificação de outro projeto em nosso projeto como não fazia sentido. Usamos o documento do Zend Framework como modelo:
- Primeiro, removemos tudo o que não se aplicava ao nosso projeto
- Então mudamos tudo que percebemos como uma questão de estilo para o nosso estilo
- E finalmente escrevemos tudo
Portanto, tínhamos um documento bastante grande em nossas mãos, armazenado em nosso wiki chique , foi uma boa leitura, acordada por todos nós. E completamente inútil por si só.
Permanecendo fiel à nossa promessa
Nossa base de código na época era de cerca de 1 * 10 ^ 6 sloc. Sabíamos que, desde que adotamos padrões formais de codificação, tivemos que começar a refatorar nosso código, mas na época estávamos pressionados por outros problemas. Por isso, decidimos refatorar nossas bibliotecas básicas, um mero sloc 5 * 10 ^ 3.
Designamos um de nós para ser o mestre dos padrões de codificação (usamos palavrões locais no lugar do mestre ) com a responsabilidade de verificar e fazer cumprir os padrões. Reciclamos o papel a cada poucos sprints. Eu fui o primeiro e deu muito trabalho, pois tive que monitorar quase todos os commit.
Tivemos várias novas discussões e pequenos adendos ao documento original durante meu mandato e, finalmente, tivemos um documento um tanto estável. Nós mudamos de vez em quando, mas a maioria dessas mudanças está nos novos recursos da linguagem, já que o PHP 5.3 foi uma versão importante em todos os aspectos, exceto no nome.
Lidando com o novo cara
Quando o novo cara chegou, chegou a hora de testar nossos padrões de codificação. Após uma pequena introdução à nossa base de código, pedimos que ele avaliasse nosso documento sobre padrões de codificação. Ele quase chorou. Parecia que ele fazia tudo de maneira diferente.
Como eu era o mestre dos padrões de codificação na época, cabia a mim avaliar sua opinião e revisar o documento de acordo. Suas propostas foram:
- Questões de estilo pessoal (rejeitadas sumariamente)
- Padrões que faziam sentido para o seu background Java, mas não tanto com o PHP (demitido)
- Convenções que ele carregou de sua breve exposição ao PHP (algumas foram descartadas, mas muitas se mostraram convenções populares que nunca pensamos ou descobrimos em nossa pesquisa inicial)
Nas duas semanas seguintes, ele recebeu uma tarefa simples: atualizar várias partes de nossa base de código com os padrões. Eu tive que escolher cuidadosamente essas partes com base em algumas regras:
- O código deve ser relativamente fácil para alguém não familiarizado com nossa base de código (e PHP em geral)
- O código deve estar no que ele foi contratado para fazer
Eu monitorei seu processo e ele fez um bom trabalho. Identificamos várias partes do código que eram impossíveis de caber em nosso documento e revisadas de acordo (código e / ou padrões, o que fizesse mais sentido)
E então outro cara novo chegou. Repetimos o processo (mestre diferente desta vez) e funcionou novamente. E de novo.
Em conclusão
- Crie um documento de padrões de codificação, mas certifique-se de que seus padrões não sejam exclusivamente seus, mas que reflitam padrões comuns na comunidade mais ampla de sua plataforma.
- Atribua uma função semelhante ao nosso mestre de padrões de codificação. Alguém para monitorar pelo menos um novo código, e especialmente um novo código de novos membros. Recicle o papel, pois é extremamente chato.
- Sempre avalie a entrada de um novo membro. Sempre revise seus padrões, se isso fizer sentido. Seu documento de normas de codificação deve estar evoluindo, mas lentamente. Você não deseja refatorar sua base de código a cada iteração.
- Reserve algum tempo para que cada novo membro aprenda e se adapte aos seus padrões e convenções. Aprenda fazendo o melhor trabalho nessas situações.
- O Wiki faz maravilhas para esses documentos.
- As revisões de código fazem maravilhas para qualquer situação!
Em algum momento do processo, foi sugerido o uso de um gancho de pré-confirmação para automatizar a verificação dos padrões. Decidimos contra isso por vários motivos; existem algumas discussões interessantes sobre o StackOverflow sobre o assunto:
Alguns são específicos do PHP, mas as respostas se aplicam a todas as plataformas.