Lidar com colegas de trabalho que não possuem um estilo de codificação consistente?

30

O que você faz quando trabalha com alguém que tende a escrever códigos estilisticamente ruins? O código de que estou falando geralmente é tecnicamente correto, razoavelmente estruturado e pode até ser algoritmicamente elegante, mas parece feio . Nós temos:

  • Mistura de diferentes convenções de nomenclatura e títulos ( underscore_stylee camelCasee UpperCamele CAPStodos aplicados mais ou menos ao acaso de diferentes variáveis na mesma função)
  • Espaçamento bizarro e inconsistente, por exemplo Functioncall (arg1 ,arg2,arg3 );
  • Muitas palavras com erros ortográficos nos comentários e nomes de variáveis

Nós temos um bom sistema de revisão de código onde eu trabalho, então analisamos e consertamos as piores coisas. No entanto, é realmente insignificante enviar uma revisão de código que consiste em 50 linhas de "Adicione um espaço aqui. Soletre 'itarator' corretamente. Altere essa capitalização. Etc."

Como você incentivaria essa pessoa a ser mais cuidadosa e consistente com esses tipos de detalhes?

JSB ձոգչ
fonte
2
Ajuda "Impressoras bonitas". Além disso, sua empresa possui um guia de estilo?
Chrisaycock #
1
e os colegas de trabalho que não possuem gramática? ;)
Muad'Dib
4
@JSBangs: instale um verificador de estilo de pré-confirmação e faça com que ele se recuse. Isso fará com que eles sejam formatados corretamente rapidamente. Ou faça com que o gancho de pré-confirmação execute um formatador para você. Algumas coisas vão parecer, mas é melhor do que estranho é melhor do que "horrível", eu acho.
precisa saber é
3
Mais um pensamento - pode parecer insignificante, mas seu pequeno para um propósito (assumindo que a) há um padrão e que b) toda a gente concorda e adere a ele) codificação
Murph
3
Qual é o histórico deste programador? Parece que ele trabalhou para muitas empresas diferentes com muitas convenções de formatação de código diferentes, e seu cérebro as internalizou em uma confusão confusa. :-)
Carson63000

Respostas:

19

Concordar com uma convenção de codificação

Mesmo que este seja um pager. Sugiro que toda a equipe se sente e todos concordem com a convenção básica de codificação de trabalho que toda a equipe pode usar.

Noite escura
fonte
1
Absolutamente - então a) todo mundo está tentando alcançar o mesmo padrão e sabe o que é eb) sua rejeição na revisão de código pode ser reduzida para "falha em aderir aos padrões de codificação" (pelo menos se o arquivo como um todo for um bagunça - se for apenas uma ou duas coisas que você precisará ser específico)
Murph
Normalmente, nunca vi uma equipe conseguindo "concordar" em uma hora em uma convenção de código totalmente explícita para qualquer idioma :) Mas, se concordar, você quer dizer "discutir até discordância e depois impor por posição e autoridade", então isso trabalho. Você precisa se concentrar em alguns pontos porque não encontrará consenso, ou tem muita sorte com sua equipe.
haylem
28

Eu acho que você só precisa continuar fazendo o que está fazendo. Tenha um conjunto claro de diretrizes de codificação e aplique-as durante as revisões de código. Se um desenvolvedor obtém 50 ou 100 linhas de "Adicionar um espaço aqui" e "Soletrar 'iterador' corretamente" toda vez que ele tenta fazer o check-in de algo, e ele não tem permissão para fazer o check-in antes que todos sejam corrigidos, eventualmente ele terá que começar a escrever um código mais limpo apenas para evitar problemas.

Acho que, se você mesmo consertar essas coisas, como NimChimpsky sugeriu, estará limpando a casa para sempre.

Dima
fonte
5

Eu chamo BS para todos que disseram que erros de ortografia e formatação de nomes variáveis ​​não importam. Obviamente, eles apenas leram seu próprio código. E observe essa palavra ali - leia. Imagine ler um livro com muitos erros ortográficos, formatação incorreta, espaçamento inconsistente de linhas e várias outras preguiça que prevalecem em muitos códigos-fonte. Seria tedioso.

Para uma profissão em que sua sintaxe deve estar 100% correta para o trabalho, simplesmente não há desculpa para qualquer desenvolvedor real não ter um estilo de código limpo e consistente. Qualquer outra coisa é negligência e preguiça. Eu sempre questiono a correção do código mal formatado na implementação.

Código difícil
fonte
4

Nós temos um bom sistema de revisão de código onde eu trabalho, então analisamos e consertamos as piores coisas. No entanto, é realmente insignificante enviar uma revisão de código que consiste em 50 linhas de "Adicione um espaço aqui. Soletre 'itarator' corretamente. Altere essa capitalização. Etc."

Eu mesmo mudaria e depois adicionaria um comentário educado no código.

isso pressupõe que já exista um guia de estilo, conforme a pergunta:

Temos um bom sistema de revisão de código

Portanto, minha sugestão é um último recurso, acho que é tão rápido alterá-lo você mesmo e deixar um comentário, como enviar um e-mail ou o que for.

NimChimpsky
fonte
10
Isso envelhece bem rápido.
Robert Harvey
3
Provavelmente é mais rápido para você do que enviar um email e, em geral, mais rápido para a correção do problema, mas é mais lento do que se o problema não ocorrer em primeiro lugar.
precisa saber é
4

Penso que convenções como a nomeação de classes e variáveis ​​são importantes e devem ser seguidas através de um código elegante e eficiente também, mas correndo o risco de ter minha resposta rebaixada muitas vezes, tenho que dizer que, em geral, o paradigma "código bonito" que é empurrado muito ao redor está no IMHO muito sobrestimado.

Primeiro, o desenvolvedor que o escreveu terá que mantê-lo em primeiro lugar, e se ele for atropelado por um ônibus e outro programador não conseguir descobrir como isso funciona, porque o código não é "bonito", eu diria que o outro desenvolvedor não é muito bom de qualquer maneira. E há muitos formatadores / embelezadores automatizados por aí, então qualquer pessoa pode usá-los para embelezar o código, se necessário, sem perder tempo enquanto está "no fluxo" / "na zona".

Observe que não estou defendendo a codificação no estilo espaguete / vaqueiro aqui, na verdade, eu vi um código espaguete muito bem formatado (corpos de função que abrangem 4-5 telas, variáveis ​​globais espalhadas por diferentes arquivos de código-fonte, geralmente escolhas ruins de nomes etc).

Jas
fonte
O que você diz sobre códigos como este: stackoverflow.com/questions/6221098/save-mapview-as-a-bitmap/… Você ainda acha que o programador que lida com esse "estilo" é um programador ruim se ele tem sérios problemas com isso?
precisa saber é o seguinte
@WarrenFaith, você pode revisitar meu terceiro parágrafo, especialmente este artigo aqui: "Observe que não estou defendendo a codificação de estilo espaguete / cowboy aqui ...".
Jas
3

Um dos meus colegas escreve html de tal maneira que minha pele se arrepia. Imagine meu html agradável e estruturado com dois recuos espaciais, cortados em pedaços por tags adicionadas ao final do meu que terminam na mesma linha ou no seguinte como um bêbado que precisa dar um abraço em você para ficar em pé. Novas linhas raramente são recuadas, mas se estiverem, tenho certeza de que há algum buraco negro altamente caótico em alguma parte da galáxia emitindo valores irracionais de temperatura de tal maneira que, de alguma forma, seus dígitos espelham o número de espaços ou guias usados ​​em tal recuo por esta mulher. Se tiver sorte, vou ver uma tag de entrada fechada com " </input>". Pesadelo total que você pode entender.

Ninguém parece entender isso também, ver como para a maioria dos superiores aqui, código organizado ou código não organizado, é como a diferença entre colocarmos queijo suíço ou queijo americano em nossos sanduíches, ou seja, eles realmente se importam menos. Comecei a deixar passar, porque estava estressado com outro projeto, e acho que ela começou a perceber o quão difícil era entender um código assim antes de querer melhorar. Meu conselho seria demonstrar por que é preferível estilizar seu código mais do que simplesmente dizer a eles para fazê-lo.

Neil
fonte
3

O código do qual estou falando geralmente é tecnicamente correto, razoavelmente estruturado e pode até ser algoritmicamente elegante ...

Fique feliz por ter conseguido tudo isso. A maioria dos programadores talvez dê a primeira coisa nessa lista. Eu acho que nomeação e espaçamento variáveis ​​são a coisa menos importante para se preocupar.

jjnguy
fonte
3
Os programadores passam mais tempo lendo código do que escrevendo código. Se o código é ilegível, o custo de estendê-lo ou mantê-lo se torna enorme. E se os nomes das variáveis ​​forem inconsistentes, com erros ortográficos e não descritivos, isso tornará o código ilegível.
Dima
@ Dima, é verdade, mas esse código que funciona e é elegante já é mais fácil de ler do que o código quebrado e deselegante.
Jjnguy
1
O que quero dizer é que você deve procurar um nome de variável, ou um nome de classe ou um nome de função e saber imediatamente como usá-lo sem precisar procurar em toda a base de códigos. Você também deve digitar o nome seguindo as convenções e acertá-lo sem precisar procurar. Eu recomendo que você leia "Código Limpo", de Robert C. Martin.
Dima
@ Dima, eu concordo que as variáveis ​​devem ter nomes descritivos. O OP não menciona que os nomes são ruins, apenas que são inconsistentes.
Jjnguy
1
Na minha experiência, quando os nomes são inconsistentes, eles também tendem a ser não descritivos. Mas há outro problema. Quando os nomes são inconsistentes, leva mais tempo para se lembrar do que são e você precisa gastar tempo procurando-os. Um bom IDE pode ajudar um pouco, mas não resolveria o problema completamente. A programação já coloca carga suficiente em seu cérebro, portanto, você deseja reduzir a quantidade de mapeamento mental e checagem dupla o máximo possível.
Dima
2

Parece que você precisa configurar e concordar com uma convenção de estilo. Caso contrário, você terá bibliotecas com 3 recuos de espaço, outras com 4, algumas que usam Camel Case e outras que usam underscore_case.

wheaties
fonte
2

As mudanças que você deseja fazer nas suas preferências pessoais ou você tem um padrão real a seguir? Se você não possui um padrão real, não faça isso. Primeiro defina um padrão. Em seguida, você pode obter um software que pode ser definido para refatorar o código para as configurações padrão (pelo menos em algumas coisas).

Se você possui um padrão, comece a aplicá-lo na revisão de código. Não há sentido em ter um padrão se você não o aplicar na revisão de código. Isso significará muito trabalho extra em manutenção, pois as pessoas terão que corrigir o código antigo que não atendeu ao padrão original quando o tocou.

Mesmo sem um padrão, insista em corrigir erros de ortografia em nomes de variáveis ​​(eu não me preocuparia particularmente com comentários), pois eles deixarão todo mundo que toca no código louco para sempre.

HLGEM
fonte
2

Os padrões de codificação precisam ser identificados para que todos saibam o que são e, em seguida, precisam ser aplicados. Deveria haver consequências para não seguir as regras.

Aqui estão as coisas que devem fornecer algum incentivo:

  1. As revisões de código serão tediosas e mais longas que o necessário.
  2. O código será rejeitado com mais frequência.
  3. Os horários não serão cumpridos.

Se essa pessoa não precisa se preocupar com isso, porque ninguém aplica suas regras ou elas não se importam se são improdutivas (e ninguém faz nada sobre isso), não há muito o que fazer.

JeffO
fonte
2

Eu ficaria tentado a sugerir um bate-papo particular e ver se vocês dois poderiam encontrar uma causa raiz:

  1. O colega de trabalho está com pressa e porque alguém queria o código ontem, a pessoa está tentando fazer com que algo funcione o mais rápido possível? Essa pode ser uma oportunidade para informar essa pessoa a se concentrar mais na qualidade do que na velocidade do trabalho. Um mantra como "Não se apresse" pode ser útil se isso não for contraproducente.

  2. Como a pessoa vê seu trabalho? Se houver um sentimento de orgulho, você poderá usar um ângulo para conseguir que alguém melhore. Se é apenas um trabalho que paga as contas, pode ser muito mais difícil obter alterações. Eles sabem que não estão fazendo um ótimo trabalho, mas estão tão perto disso?

  3. Essa pessoa não concorda com as convenções e está tentando codificar em protesto? Nesse caso, você pode ter um grande problema, mas vale a pena descobrir se é esse o caso ou se a pessoa é apenas preguiçosa? Que tipos de motivação podem ser úteis aqui, por exemplo, você poderia apelar à ganância, ao orgulho ou a algum outro vício para fazer a pessoa melhorar. Isso é sorrateiro, mas possivelmente eficaz se tentar a rota do cara legal não chegar a lugar algum.

  4. Como conquistar amigos e influenciar as pessoas tem algumas sugestões em termos de persuasão que podem funcionar, como elogiar melhorias e dar à pessoa uma boa reputação para defender.

Quanto ao motivo pelo qual isso deve ser feito em particular, aqui estão algumas razões:

  1. Há uma boa chance de humilhação, crítica ou outro desconforto que é melhor manter atrás de uma porta do que deixar de fora onde alguém pode sentir que seu personagem está sendo assassinado.

  2. Você quer incentivar essa outra pessoa a se abrir um pouco. Um desafio aqui é que algumas pessoas são tão protegidas que pode levar muito tempo para derrubá-las.

  3. Se possível, sugiro tentar fazer isso um pouco longe do escritório. Sair para almoçar, passear ou fazer algo para que os arredores sejam alterados o suficiente para que a pessoa possa se sentir um pouco mais confortável. Isso pode ser um desafio e requer conhecer a pessoa, mas a idéia aqui é que no escritório algumas pessoas usem uma máscara de trabalho que provavelmente não será útil aqui.

  4. Esteja preparado para que a conversa fique um pouco quente ou feia, mas isso pode ser um bom sinal se você puder manter a outra pessoa envolvida e ter um bom diálogo. Algumas pessoas gostam de manter as coisas ao ar livre e outras podem preferir maneiras mais sutis de fazer as coisas. A chave é garantir que você esteja ouvindo a outra pessoa o suficiente para ter empatia e tentar entender o lado deles.

JB King
fonte
2

Temos um teste JUnit que procura por problemas de formatação. Ele é executado como parte da compilação. Eu fico cada vez mais omitindo um espaço entre if, while ou for e o parêntese de abertura. Nosso código é formatado consistentemente.

http://code.google.com/p/kawala/wiki/BadCodeSnippetsRunner

Kevin Peterson
fonte
1

O embelezamento de código, como não criptografar , poderá resolver alguns dos seus problemas. Se você está pronto para pagar por isso, existem softwares de alto nível que incorporam as regras no próprio código-fonte, como a Parasoft . A Parasoft torna obrigatório escrever o código em estilo uniforme. Você também pode incorporar suas próprias regras. Quando essas ferramentas são usadas, os desenvolvedores são forçados a usar um estilo uniforme. E depois de um tempo eles vão se acostumar.

Manoj R
fonte
1

Se você usar o Eclipse, ative Salvar Ações para os Editores de Java e peça a todos para usá-lo. Isso corrige os problemas de formatação a cada salvamento, mas não corrige a capitalização incorreta. Pode ser bastante útil!

texto alternativo


fonte
1

Quão difícil é seguir as convenções de estilo? Eu entendo os erros ortográficos, mas o resto é um indicador de pensamento e codificação desleixados. Diga à pessoa que ela precisa ser mais consistente no que diz respeito ao código de produção, porque eles não são os únicos que o examinarão. É simplesmente rude, egoísta e imprudente escrever código de produção em um estilo inconsistente.

davidk01
fonte
0

RI MUITO. Você absolutamente odiaria o meu código. Não sei soletrar para salvar minha vida e não me importo.

Mas sei que algumas pessoas realmente se importam com essas coisas.

Eu sugiro que você demitir a pessoa que escreve esse código feio, se não mudar, e encontrar alguém que torne as coisas realmente bonitas e espero que possa escrever código que

geralmente é tecnicamente correto, razoavelmente estruturado e pode até ser algoritmicamente elegante

e se eles não puderem, pelo menos você pode mostrar o código bonito quebrado ao cliente e vendê-lo!

Mas seriamente. Concentre-se nas coisas realmente importantes primeiro. Se você não consegue encontrar uma razão boa e sólida fora de "isso machuca minhas delicadas sensibilidades", então a ignore por enquanto. Se é realmente importante, sente-se com a pessoa e convença-a dessa importância. Coisas como padrões que facilitam a diferença entre nível de classe, nível de método, variáveis ​​compartilhadas e constantes fazem a diferença. Se o codificador em questão se importar com sua profissão, ele entenderá e tentará fazer a coisa certa.

ElGringoGrande
fonte
5
Se os nomes das variáveis ​​estiverem incorretos, o próximo usuário que usar seu código precisará gastar mais tempo corrigindo erros do compilador quando os digitar corretamente. Não se trata de "sensibilidades delicadas". Essas coisas aparentemente triviais causam erros, que causam frustração, o que causa mais erros. Tudo isso resulta em enormes custos de manutenção de código.
Dima
4
É um pouco mais do que "sensibilidade delicada", mas a produtividade não me importo com alguém com estilos de codificação ligeiramente diferentes, ocasionalmente esquecendo um espaço, etc ... Não somos perfeitos. Mas quando o arquivo inteiro parece ter sido gravado por um estudante de graduação, com espaçamento de linha inconsistente, posições, recuo e fluxo geral de código, basta pressionar o botão "rejeitar" (ou reverter) muito rapidamente.
haylem
2
Muitos projetos de código aberto bem-sucedidos (incluindo o linux) fazem isso: se você não tem o estilo certo (e os testes de unidade), ele é rejeitado. Pena que foi boa e resolveu um problema real: nem sempre é possível corrigir o código de outras pessoas. No geral, você perde menos tempo e dinheiro apenas transmitindo um pedaço ocasional de gênio que passa, mas parece um inferno ou é impossível de manter.
haylem
1
Coisas engraçadas. Mas é claro que o ponto principal parece estar esquecido. Você primeiro coloca o cara a bordo com as coisas óbvias pelas quais você pode se defender. Então você trabalha nas coisas menos importantes. Existem maneiras de trabalhar com pessoas fora de apenas sufocá-las com regras. E talvez, apenas talvez, a multidão do TOC possa comprometer um pouco ou aprender por que existe tanta variabilidade no código dos outros. Na verdade, pode haver uma causa ou razão.
ElGringoGrande
0

Minha solução ao lidar com recursos terceirizados que não deram a &% $ # sobre formatação (ou bugs facilmente evitáveis) foi fazer com que o servidor de compilação reforçasse isso. Criei um trabalho de servidor de CI que executava todas as noites que fazia o check-out do código, executava o Jalopy e o findbugs e depois fazia o check-in novamente. Depois que a outra equipe aprendeu que o não uso das convenções de código padrão tornaria o trabalho mais difícil, eles começaram a usar o IDE para manter um formato padrão.

sal
fonte