Primeiro, um pouco de histórico: meu atual gerente de desenvolvimento está aproveitando outra oportunidade no final desta semana, deixando nossa equipe com quatro desenvolvedores em período integral, um estagiário em período parcial e um web designer (que é tecnicamente parte do Marketing, não do AppDev). No momento, não estamos promovendo ou contratando um novo gerente.
O gerente anterior nunca teve tempo para criar um conjunto de padrões de codificação a seguir (para colocar isso em perspectiva: meu aniversário de um ano neste trabalho é daqui a duas semanas e eu converso com ele sobre padrões desde Eu comecei). Devido a isso, todos nós, quatro desenvolvedores, escrevemos código da nossa maneira: alguns de nós seguem as convenções de nomenclatura da Microsoft para .NET, alguns usam notação húngara, outros usam uma mistura (por exemplo, mixagem PascalCase
e camelCase
nomes de parâmetros) e é totalmente aleatório quando você abre um arquivo de código que padrão ele seguirá - a única coisa consistente é que as chaves estão em linhas separadas.
Dois dos meus três colegas de trabalho entraram em contato comigo para criar um documento de codificação padrão que podemos usar e forçar a avançar (embora eu não seja tecnicamente o desenvolvedor mais sênior, o quarto desenvolvedor está aqui há vários anos, dois colegas de trabalho e o estagiário procura aconselhamento / orientação, mas não temos um líder de equipe). Eu pretendo fazer isso há algum tempo, mas o gerente que partia sempre o colocava em segundo plano; sua partida agora nos dá a chance de levar algum tempo e configurar as coisas corretamente para facilitar um ambiente de software adequado e não a mistura apressada que temos atualmente.
Como devo fazer isso e apresentar esse padrão à minha equipe sem causar atrito? Não quero que pareça que estou "assumindo o controle", embora me oferecessem o cargo de gerente que aceitaria. Como eu disse, dois de três outros desenvolvedores estão a bordo comigo, criando um, mas o quarto (o verdadeiro "senior" em questão de tempo) pode ou não aceitá-lo. Eu pretendo começar com as convenções .Net da Microsoft (por exemplo, não use a Notação Húngara), adicionar algumas preferências pessoais (por exemplo, _camelcase
para campos) e chamar especificamente determinadas práticas estranhas que usamos aqui como não devem ser usadas (por exemplo, nomear uma classe com sublinhado no início), mas o que mais devo incluir? Eu não quero entrar em diretrizes arquitetônicas como que vontade causam atrito e temos uma base de código existente muito grande e fedorenta que não iria aderir a ela, e não estamos nem perto de chegar a uma estratégia de refatoração.
Para resumir: Além das convenções básicas de nomenclatura, o que devo incluir em um documento sobre padrões de codificação (os exemplos seriam ótimos - não consegui encontrar exemplos concretos de como deve ser esse documento) e como devo apresentá-lo à minha equipe sem parecer o novo ditador.
fonte
Respostas:
Você também diz:
Parece que você já tem algum apoio da maioria da equipe. Faça da criação do documento algo que é feito por todos vocês (todos os quatro, se possível). Se isso consumir muito tempo, crie seu documento e mostre-o como rascunho para seus colegas. Depois que todos concordarem e finalizarem uma versão, você estará pronto.
Um bom lugar para começar é dar uma olhada nas diferentes regras do stylecop - você não precisa seguir todas elas, mas elas dão uma idéia do que o documento deve conter. Como um bônus adicional, você pode implementar facilmente o stylecop em suas soluções e até integrar-se a uma compilação automatizada (falhando na compilação se houver violações).
Para resumir:
Veja as ferramentas e os padrões existentes para decidir o que você deseja no seu.
Para evitar parecer um ditador, faça da mudança uma colaboração.
fonte
Nada.
Não tenha pressa. Vai devagar. Não perca tempo escrevendo. As convenções de codificação só funcionam quando fazem parte da cultura comum.
Se eles não fazem parte da cultura, são simplesmente ignorados.
Revisões de código. É um ótimo lugar para apresentar o problema resolvido pelas convenções de codificação.
Na maioria das vezes, as convenções são simplesmente uma perda de tempo. Quando você tem um problema real (ou seja, programas ilegíveis) que pode resolver por meio de convenções de codificação, pode obter 100% de conformidade rapidamente.
As convenções de codificação que são apenas preferências pessoais não resolvem um problema. E, de fato, durante uma revisão de código, você pode descobrir algo melhor e realmente alterar sua preferência pessoal.
Não canonize muito em um documento de convenções de codificação. Trabalhe cooperativamente para chegar a um entendimento comum.
Política ruim.
Um padrão arquitetural nunca é algo com 100% de aderência. Não pode ser É sempre uma descrição "prospectiva", na qual o desenvolvimento evolui.
Toda boa idéia arquitetônica levará a uma nova direção arquitetônica. E é assim que a inovação se parece - um caminho, não um objetivo.
Boa. Não desenvolva um. Com isso, quero dizer "não sufoque a inovação escrevendo muitas coisas que podem ou não ser a melhor abordagem possível".
fonte
Com algo como convenções de codificação, eu diria que qualquer convenção específica deve ser 100% unânime ou encontrar algum meio termo que a torne 100% unânime.
Estabeleça um prazo para o documento ser concluído, isso forçará outras pessoas a levarem a sério.
Faça o trabalho de compilar o documento, ninguém terá vontade de ajudá-lo, mas se você é o proprietário do trabalho, ninguém lutará com você.
Envie propostas para várias convenções de codificação com base em estilos diferentes que existem na base de código agora. Obtenha feedback e marque uma reunião em que eles possam ser votados.
Ninguém sai da reunião até que cada convenção chegue a um acordo 100% unânime
As novas pessoas da equipe terão que respeitar o documento e não terão voz. É como a Constituição naquele ponto.
Ah, e nenhuma notação húngara. Sério, eu preferiria ocultar meus olhos do que ter que olhar o código na notação húngara.
fonte
_Customer oCust = new _Customer();
me faz balançar a cabeça em perplexidade.Os padrões de codificação serão um desafio para serem aceitos. Algumas pessoas gostam de codificar em sua caixa de areia e apenas fazem suas coisas, apesar de poder causar problemas se quebrar e outras tentarem corrigi-la.
Se você estiver usando o Visual Studio com .NET, dê uma olhada no StyleCop. Você pode usar os conjuntos de regras predefinidos ou escrever seus próprios. Em seguida, peça a todos que concordem, antes das revisões de código (se houver), de que devem seguir as configurações.
fonte
Do ponto de vista técnico:
Indique as inconsistências que realmente são um problema para a equipe e defina regras de codificação para solucionar esses problemas.
Do ponto de vista relacional:
Se você quiser envolver o sênior, inspire-se nas convenções de codificação dele.
fonte
GetFoo
método e, em seguida, umGetFoo_WithSomethingElse
método que tem a mesma coisa, mas com um parâmetro extra, com toda a lógica copiada e depois a extra bits adicionados) e ele não entende o design da classe além de apenas colocar muita lógica em um arquivo code-behind. O gerente que partiu não se importava em fazer as coisas de maneira diferente, apenas seguiu esse estilo.Contanto que você não seja o novo gerente de sua equipe, você precisa de consenso sobre a existência de um padrão de codificação (e se você fosse o gerente, realmente deveria tentar obter consenso na equipe antes de tomar essa decisão "de cima" "). E pode parecer simples, mas apenas conversar - especialmente conversando com o quarto desenvolvedor - pode resolver isso.
fonte
Você tem uma empresa Wiki? Ou, na sua falta, um servidor no qual você pode soltar um?
Nesse caso, basta criar uma página. Chame de documento vivo. Coloque alguns padrões não controversos e incentive todos os demais a colaborar. Continue adicionando itens a cada poucas semanas, incentive a discussão, mas de uma maneira que diga "se ninguém discordar, devemos esperar que isso seja seguido". Se puder, convença todos a assinar os documentos de normas, para poder ver as alterações feitas por seus colegas.
Tente também fazer com que a equipe comece as revisões de código. Todo trabalho passa por dois desenvolvedores. Isso incentivará a discussão e a aplicação de padrões e fará com que todos sejam iguais, e não um desenvolvedor que dite as regras.
Edite em resposta ao comentário:
Você pode vender revisões de código como uma maneira de o Dev # 4 espalhar sua sabedoria. Mesmo quando seu código está sendo revisado, é uma oportunidade para as pessoas verem seu código mágico e se deleitarem com ele. Realmente, é uma maneira de promover a discussão. Nos casos em que o codificador e o revisor não concordam, deve ir para a equipe. Onde a equipe não concorda, a pesquisa deve ser feita.
Falando em pesquisa, faça algumas revisões de código. Ninguém cuja opinião conta muito pensa que é uma má ideia. Coloque isso na equipe, incluindo o CIO, em um email com muitos links. É difícil argumentar contra eles sem parecer um idiota obstrutivo.
Aqui estão alguns para você começar:
Quanto a um Wiki, eu realmente recomendaria reservar um tempo para configurá-lo (os Wikis dão a ilusão de colaboração, mesmo quando ela não está realmente lá). Mas se você não puder, um documento do Word em uma unidade compartilhada fará o trabalho.
fonte
Os padrões de comentários e espaços em branco são bons, juntamente com as ferramentas para migrar entre diferentes estilos. Eu uso guias no meu código python, que é considerado um estilo ruim. No entanto, uma função simples do VIM converte entre os dois, conforme necessário.
Além disso, pense nos níveis de compreensão do código. O objetivo de um estilo é comunicar informações ao programador que está lendo o código. Se você pode entender
reduce(lambda x, y: x+y, map(lambda x: x + 1, theList))
, mas seus colegas de trabalho preferem ver:Então isso é importante para ser resolvido. Mesmo com espaço em branco. Você precisa descobrir com que nível de compactação de código todos estão confortáveis.
Por fim, como são cortados os novos projetos e os projetos atuais? Uma classe por arquivo, as funções utilitárias seguem um esquema de nomenclatura, nenhuma variável global ou vazamento de escopo, arquivos de projeto aleatórios são ortogonais e pouco acoplados, e assim por diante. Isso fornece uma importante base de entendimento para todos. Não importa qual é o padrão de codificação, se todo projeto estiver tão entrelaçado que eu tenho que passar por toda a base de código e realmente fazer o grok do projeto antes de mexer
foo()
.fonte