Eu escrevi muito sobre esse assunto no SoftwareEngineering.SE no passado e estava em situações semelhantes. Portanto, tentarei dar algumas dicas e destacar alguns problemas que notei ao ler sua pergunta.
Mas primeiro, vamos falar sobre um aspecto importante: seu papel na empresa.
Seu papel
Você pode ter um mandato explícito do seu chefe para aprimorar as coisas e também um lugar na hierarquia em que outros desenvolvedores precisam ouvir seus pedidos . Ou você pode estar entre colegas, tendo o mesmo papel e a mesma autoridade, sendo sua opção apenas ... bem ... uma opinião .
Nos dois casos, o que importa é menos o seu lugar na hierarquia e muito mais:
O que outros desenvolvedores pensam de você. Se eles o tratam como um cara chato que pede coisas estúpidas, você não vai longe. Eu já vi muitos casos em que líderes técnicos e gerentes de projeto não tinham absolutamente nenhuma influência sobre a equipe, porque a equipe sabia (ou pensava) que esses "líderes" não tinham formação técnica necessária para tomar as decisões que estavam tomando. Por outro lado, vi vários desenvolvedores que foram realmente ouvidos por seus colegas, porque sabiam que esses desenvolvedores são hábeis e experientes.
Quão sólida é sua equipe e o que as motiva. Imagine uma empresa em que todos os desenvolvedores sejam pagos por KLOC / mês. O que você diz sobre estilo é importante para seus colegas? Provavelmente não, porque raras são pessoas que querem receber menos. Em geral, se não for uma equipe, mas apenas um grupo de pessoas trabalhando no mesmo projeto, você não poderá melhorar nada.
Dependendo disso, você pode decidir se vale a pena fazer algum esforço. Se você não tem voz e não há coesão da equipe, basta procurar outro emprego. Se você é conhecido como um desenvolvedor talentoso e respeitado, e há um forte sentimento de equipe, poderá melhorar as coisas de maneira relativamente fácil, mesmo diante da hostilidade de seu chefe ou de outras equipes.
Em todos os casos, é essencial não pressionar a sua equipe. Trabalhe com eles, não contra eles. Não dê ordens a eles, mas guie-os para a meta.
Agora, as dicas.
Estilo
Uma vez pedi gentilmente que seguisse o estilo de codificação e a formatação da maioria dos códigos existentes (infelizmente não temos um documento formal de estilo de codificação). Mas não deu certo ...
Claro que não, pois não é assim que deve ser feito.
Estilo é chato .
O estilo a seguir é chato .
Escrever documentos no estilo de codificação é chato ( e muito difícil ; nem tente fazê-lo, a menos que você tenha trabalhado com o idioma por mais de dez anos).
O documento do estilo de leitura é chato .
Revisar código para erros de estilo é chato .
Trollar que meu estilo é melhor que o seu é emocionante , especialmente quando não há absolutamente nenhum benefício objetivo de um estilo em detrimento de outro. Sério, toda pessoa sã sabe que o jeito certo de escrever if (x)
é o jeito que eu escrevi, não if(x)
ou if ( x )
!
Portanto:
Não faça revisões de estilo. Este é o trabalho dos verificadores de estilo. Esses aplicativos atraentes têm alguns benefícios em seu cérebro: eles verificam o projeto inteiro em questão de milissegundos, não horas ou dias, e não cometem erros e não perdem erros de estilo.
Não escreva seu próprio padrão de estilo. Você fará errado de qualquer maneira, e seus colegas de trabalho farão com que você tenha feito más escolhas.
Não force os desenvolvedores a corrigir 2 000 erros de estilo.
Aplique o estilo automaticamente ao confirmar. Código com erros de estilo não tem lugar no controle de versão.
Faça isso desde o início do projeto. Configurar o controle de estilo em um projeto existente é difícil ou impossível.
Para saber mais sobre isso, leia a primeira seção de essa outra resposta sobre SE.SE .
Além disso:
- Não seja muito rigoroso. Por exemplo, escrever
jslint
código compatível é bastante irritante, portanto deve ser feito exclusivamente quando absolutamente necessário (ou se todos os membros da sua equipe estiverem felizes em usá-lo). O mesmo vale para ferramentas de verificação estática; por exemplo, a Análise de código do .NET no nível máximo pode ser muito opressiva e deprimente, além de trazer poucos benefícios; o mesmo conjunto de ferramentas em nível moderado, por outro lado, mostra-se muito útil.
Revisões de código
Agora que você não precisa se preocupar com estilo durante as revisões de código, pode se concentrar em coisas mais interessantes: aprimorando (vs. corrigindo) o código-fonte.
Pessoas diferentes reagem de maneira diferente às revisões de código. Alguns consideram isso uma oportunidade. Outros odeiam isso. Alguns ouvem tudo o que você lhes diz, fazem anotações e não discutem, mesmo que possam estar certos. Outros tentam argumentar em todos os pontos. Cabe a você encontrar uma maneira de lidar com cada desenvolvedor de acordo com a personalidade dela. Geralmente é útil para:
Faça análises de código em particular, especialmente quando o desenvolvedor é iniciante e escreve um código muito ruim.
Mostre que não há nada pessoal: você está revisando o código, não as habilidades da pessoa.
Mostrar o objetivo real de uma revisão de código. O objetivo não é mostrar o quão ruim é um desenvolvedor. O objetivo é oferecer oportunidades de melhoria.
Nunca discuta. Você não está aqui para convencer, mas para fornecer seus conhecimentos.
Nunca assuma que o revisor é o único que pode aprender algo com uma revisão. Você também está aqui para aprender, lendo o código e pedindo explicações sobre as partes que você não entende.
Depois que a revisão do código for concluída, verifique se a pessoa realmente aprimora seu código. Eu tive alguns casos em que os desenvolvedores pensaram que a revisão do código termina quando a reunião real termina. Eles saem e voltam aos seus novos recursos, tentando aplicar o que você compartilhou com eles apenas para o novo código. Ter uma ferramenta de rastreamento decente para revisão de código ajuda.
Observe que, independentemente de sua função específica na empresa e de sua experiência em comparação com outras, seu código também deve ser revisado. Você não deve ser o único a revisar o código de outras pessoas.
Em um projeto recente em que trabalhei como líder técnico, tive dificuldade em explicar aos meus colegas de trabalho que é seu papel fazer as revisões do código um do outro, incluindo o meu. O medo de um estagiário que está prestes a revisar o código de seu líder técnico desaparece assim que encontra os primeiros problemas no código - e quem de nós escreve um código sem falhas?
Treinamento
As revisões de código são uma excelente oportunidade para ensinar e aprender alguns dos aspectos de programação e design de software, mas outros requerem treinamento.
Se você for capaz de treinar seus colegas de trabalho, faça isso. Se sua gerência é hostil à idéia de treinamento, faça-o informalmente. Realizei essas sessões de treinamento em uma forma de reuniões informais ou, às vezes, apenas em discussões simples, às vezes interrompidas pela gerência e prosseguidas posteriormente.
Além do treinamento direto, certifique-se de conhecer bem os livros, como o Code Complete da McConnel , e converse sobre esses livros com seus colegas de trabalho. Sugira que eles leiam o código fonte de projetos de código aberto, dê exemplos específicos de código de alta qualidade. E, obviamente, escreva você mesmo um código de alta qualidade.
Concentre-se no contexto, não nas pessoas
Como posso resolver essa situação sem focar apenas na "má cultura da empresa", "graduados inexperientes" etc.
Esses graduados têm um objetivo: adquirir experiência, aprender coisas, tornar-se mais hábeis. Se, ano após ano, eles escrevem códigos ruins e não sabem nada sobre programação, provavelmente é porque sua equipe ou sua empresa não está dando a eles essa oportunidade.
Se você se concentrar no fato de sua equipe ter diplomados inexperientes, isso não ajudará. Em vez disso, concentre-se no que você pode fazer por eles e com eles. Revisões de código e treinamento são duas das técnicas para melhorar a situação.
A má cultura da empresa é uma fera diferente. Às vezes, isso pode ser alterado. Às vezes, não pode. Em todos os casos, lembre-se de que você faz parte desta empresa, portanto faz parte da cultura da empresa. Se você não pode alterá-lo e o achar inerentemente ruim, mais cedo ou mais tarde, terá que sair.
Acerte suas métricas
Como exatamente você mede o código agora? Você mede o número de confirmações por dia por desenvolvedor? Ou o KLOC por mês por programador? Ou talvez a cobertura do código? Ou o número de bugs encontrados e corrigidos? Ou o número de possíveis erros detectados pelos testes de regressão? Ou o número de reversões realizadas pelo servidor de Implantação Contínua?
As coisas que você mede são importantes, porque os membros da equipe estão adaptando seu trabalho aos fatores que são medidos. Por exemplo, em uma empresa em que tive que trabalhar alguns anos atrás, a única coisa que foi medida foi o tempo que passamos no escritório. Escusado será dizer que isso não foi encorajador para fornecer um código melhor, ou para trabalhar de forma mais inteligente, ou ... bem, para funcionar.
Descobrir reforços positivos e negativos e ajustar os fatores medidos ao longo do tempo é essencialmente a alavancagem que você tem dos membros da equipe. Quando feito corretamente, possibilita alcançar resultados que não serão alcançados por uma hierarquia simples.
As coisas que incomodam, tornam mensuráveis. Meça-os e torne os resultados públicos. Em seguida, trabalhe junto com outros membros da equipe para melhorar os resultados.
Por exemplo, vamos considerar que os membros da equipe cometem muitos erros de ortografia nos nomes de classes, membros e variáveis. Isso é chato. Como você pôde medir isso? Com um analisador, você pode extrair todas as palavras do código e, usando um corretor ortográfico, determinar a proporção de palavras que contêm erros e erros de digitação, digamos 16,7%.
Seu próximo passo é concordar com sua equipe sobre a proporção de metas. Pode ser de 15% para o próximo sprint, 10% para o próximo, 5% em seis semanas e 0% em dois meses. Essas métricas são recalculadas automaticamente em todas as confirmações e exibidas em uma tela grande no escritório.
Se você não atingir a taxa de meta, sua equipe poderá passar mais tempo corrigindo erros de ortografia. Ou sua equipe pode considerar melhor calcular a proporção por desenvolvedor e exibir essas informações também na tela grande. Ou sua equipe pode achar que o objetivo era otimista demais e que você deveria revê-lo.
Se você atingir a taxa de meta, o próximo passo é garantir que o número de erros e erros de digitação não aumente com o tempo. Para isso, você pode criar uma tarefa adicional em sua compilação que verifica erros de ortografia e falha na compilação se pelo menos um erro for encontrado. Agora que você se livrou desse problema, sua tela grande pode ser reutilizada para mostrar as novas estatísticas relevantes.
Conclusão
Acredito que todos os aspectos mencionados na sua pergunta podem ser resolvidos através das técnicas que incluí na minha resposta:
Quando outros desenvolvedores ingressaram no projeto, notei que eles usam um estilo de codificação diferente (às vezes um estilo completamente diferente)
Você tinha que aplicar o estilo automaticamente ao confirmar.
e geralmente não usam recursos de linguagem moderna como acessadores de propriedades (isso é relativamente novo no Objective-C).
As revisões de código e o treinamento estão aqui para transferir seu conhecimento do idioma.
Às vezes, eles inventavam suas próprias bicicletas em vez de usar recursos semelhantes da estrutura
As revisões de código e o treinamento estão aqui para transferir seu conhecimento da estrutura.
ou transferir conceitos de outras linguagens de programação ou padrões que aprenderam em nossa base de código.
Isso é uma coisa excelente. Parece uma oportunidade para você aprender com eles.
Muitas vezes, eles não podem nomear métodos ou variáveis corretamente por causa do inglês ruim
As revisões de código também devem se concentrar na nomeação adequada. Alguns IDEs também possuem corretores ortográficos.
Às vezes, acho que se não fosse pelo IDE, acho que eles escreveriam todo o código sem recuo ou formatação.
Claro que sim. O estilo é chato e deve ser automatizado.
Basicamente, eu odeio o código que eles escrevem.
Lembre-se da parte das revisões de código: “O objetivo não é mostrar o quão ruim é um desenvolvedor. O objetivo é oferecer oportunidades de melhoria. ”
É mal formatado / organizado e, às vezes, é radicalmente diferente do resto do projeto.
Verificação de estilo automatizada .
Fico muito chateado quando adicionam espaguete à minha obra de arte
Espere o que?! Peça de arte?! Adivinha? Algumas pessoas (incluindo você em seis meses) podem achar seu código longe de ser uma obra de arte. Enquanto isso, entenda que considerar o seu trabalho como uma obra de arte e o trabalho deles como lixo não ajudará ninguém. Incluindo você.
Parece cada vez mais que eles não podem se incomodar em aprender ou não se importam: eles apenas fazem o que é necessário com eles e vão para casa.
Claro que eles farão o que é necessário deles. Lembre-se: contexto, não pessoas e acerte suas métricas . Se o contexto exigir deles que eles se tornem melhores no que fazem, eles o farão. Se o contexto exigir o maior número possível de KLOC por mês e nada mais, eles também o farão.