Como você diz a alguém que está escrevendo um código incorreto? [fechadas]


217

Eu tenho trabalhado com um pequeno grupo de pessoas em um projeto de codificação por diversão. É um grupo organizado e bastante coeso. As pessoas com quem trabalho têm vários conjuntos de habilidades relacionadas à programação, mas alguns deles usam métodos errados antigos ou totalmente errados, como variáveis ​​globais excessivas, más convenções de nomenclatura e outras coisas. Enquanto as coisas funcionam, a implementação é ruim. Qual é uma boa maneira de pedir ou apresentá-los educadamente para usar uma metodologia melhor, sem que ela pareça questionar (ou insultar) sua experiência e / ou educação?


Max, é você? Não importa, posso dizer que é você pelo ícone do TF2 Engineer que você sempre usa. Você está dizendo que meu código é ruim? ... ... ... ... as coisas que digo quando são 5 minutos até eu sair do trabalho e não ter mais nada a fazer.
Powerlord

Não estou tentando destacar nenhum incidente específico, nem tentando dizer que meu código é perfeito e incrível, é apenas que sinto que esse é um assunto complicado e estou muito interessado em segundas opiniões sobre esse assunto.
Maximillian

14
suponho rir cada vez que você olhar para a sua tela é fora de questão ...
Steven A. Lowe

57
Reverter cada um de seus commits com uma mensagem de "Acho melhor se todos fingirmos que isso nunca aconteceu" é uma opção?
Draemon 15/10/08

1
Se você ler estouro de pilha, você é um bom programador :-)
Matthew Farwell

Respostas:


188

Introduza perguntas para fazê-los perceber que o que estão fazendo está errado. Por exemplo, faça este tipo de pergunta:

Por que você decidiu fazer disso uma variável global?

Por que você deu esse nome?

Isso é interessante. Eu costumo fazer o meu assim porque [Insira o motivo pelo qual você é melhor]

Isso funciona? Eu normalmente [insira como você os faria parecer bobos]

Eu acho que a maneira ideal de fazer isso é sutilmente perguntar a eles por que eles codificam de uma certa maneira. Você pode achar que eles acreditam que existem benefícios para outros métodos. A menos que eu soubesse que o motivo de seu estilo de codificação era devido a informações erradas, eu nunca julgaria o meu caminho como melhor sem um bom motivo. A melhor maneira de fazer isso é perguntar-lhes por que eles escolheram esse caminho; certifique-se de parecer interessado no raciocínio deles, porque é isso que você precisa atacar, não a capacidade deles.

Um padrão de codificação definitivamente ajudará, mas se fosse a resposta para todos os projetos de software, estaríamos todos bebendo cocktails em nossas ilhas particulares no paraíso. Na realidade, somos todos propensos a problemas e os projetos de software ainda têm uma baixa taxa de sucesso. Penso que o problema deve-se principalmente à capacidade individual e não a convenções, e é por isso que sugiro trabalhar com os problemas em grupo quando um problema surge na cabeça feia.

Mais importante, NÃO presuma imediatamente que seu caminho é melhor . Na realidade, provavelmente é, mas estamos lidando com a opinião de outra pessoa e para ela existe apenas uma solução. Nunca diga que seu caminho é a melhor maneira de fazê-lo, a menos que você queira que eles o vejam como um perdedor presunçoso.


Essa é uma boa técnica e provavelmente a mais apropriada em um ambiente profissional. Se o seu colega responder a perguntas como essa de maneira irreverente, em vez de realmente considerá-las, ou tiver respostas esfarrapadas, é provável que eles ignorem um padrão de código ou outra "autoridade" também.
Greg D

1
Eu concordo, mas minha queixa é principalmente lidar com programadores sensíveis. Se você disser diretamente a alguém que seu código está errado, é claro que ele não ficará muito feliz. É bobagem, mas trabalhar e aprender os problemas com eles provavelmente trará o melhor resultado para todos.
Mike B

24
Penso que perguntas como "Por que você deu esse nome?" estão perto, mas não exatamente. Isso imediatamente me faz pensar defensivamente sobre minhas decisões. "Isso é interessante. Geralmente faço o meu assim porque [Insira o motivo pelo qual você é melhor]" é muito melhor porque me faz pensar em outras maneiras além daquilo que eu já decidi. Com o último tom, tenho muito mais probabilidade de ver a luz.
Bill the Lizard

1
De certa forma, eles deveriam estar pensando defensivamente. Se eu apenas lhes mostrar minha maneira de fazer as coisas, eles podem simplesmente decidir seguir o método que conhecem. Um compromisso seria bom, dizendo como você o faria e depois adicionando sutilmente por que seu método é mais rápido / melhor / etc.
Mike B

E se houver uma resposta consistente, é algo como: "porque é muito trabalhoso mudar isso" (geralmente é devido à enorme quantidade de código existente) ou "porque sempre fizemos dessa maneira e funcionou bem" "?
Dimitri C.

85

Comece a fazer revisões de código ou emparelhar a programação.

Se a equipe não aceitar isso, tente revisões semanais de design. Toda semana, reúna-se por uma hora e fale sobre um pedaço de código. Se as pessoas parecerem defensivas, escolha um código antigo ao qual ninguém mais se apegue emocionalmente, pelo menos no começo.

Como @JesperE: disse, concentre-se no código, não no codificador.

Quando você vê algo que acha que deveria ser diferente, mas outros não vêem da mesma maneira, comece fazendo perguntas que levem às deficiências, em vez de apontá-las. Por exemplo:

Globals : Você acha que vamos querer ter mais de um desses? Você acha que queremos controlar o acesso a isso?

Estado mutável : Você acha que queremos manipular isso de outro thread?

Também acho útil me concentrar nas minhas limitações, o que pode ajudar as pessoas a relaxar. Por exemplo:

funções longas : meu cérebro não é grande o suficiente para armazenar tudo isso de uma vez. Como podemos fazer pedaços menores com os quais eu possa lidar?

nomes ruins : fico confuso com bastante facilidade ao ler código claro; quando os nomes são enganosos, não há esperança para mim.

Por fim, o objetivo não é ensinar sua equipe a codificar melhor. É estabelecer uma cultura de aprendizado em sua equipe. Onde cada pessoa procura ajuda para se tornar um programador melhor.


Destacado - se todos os membros da equipe tiverem seu código revisado por pares. as pessoas que você acha que tem maus hábitos não vai se sentir vítima
NotJarvis

2
Se seus colegas respondem bem a essas coisas, são mais gentis que os meus. Quando tento fazer comentários como esse, geralmente me dizem para lidar com isso. Ou talvez tratado com um monólogo de várias páginas sobre como o caminho é o único. Mesmo que o .Net tenha construído na análise de string para número inteiro, dangit.
Greg D

@ Greg: Ai. Tough multidão que você chegou lá!
Jay Bazuzi

3
Relacionado a nomes ruins: leia sobre o efeito Stroop. Tente ler as cores, não as palavras. Agora pense em como você nomeia variáveis. Se você não encontrar bons nomes que descrevam realmente para que as variáveis ​​são usadas, será difícil ler e entender seu código quando voltar a ele mais tarde.
Igor Popov

lol @ "emocionalmente ligado ao código". se você tem esses problemas em sua equipe, na minha opinião, é hora de encontrar outra equipe para trabalhar.
dtc

45

Introduzir a idéia de um padrão de código. O mais importante sobre um padrão de código é que ele propõe a idéia de consistência na base de código ( idealmente , todo o código deve parecer que foi escrito por uma pessoa em uma sessão), o que levará a um código mais compreensível e sustentável.


1
De fato. Algo que temos em nossas análises de código é que, se o código não for consistente com o padrão, o revisor para de ler e não volta ao código até que esteja em conformidade.

1
Uma das maneiras melhores e mais simples de aplicá-lo.
Scott Dorman

Eu acho que depende da natureza dos problemas. Mesmo com um padrão de codificação, ainda existem várias maneiras de fazer as coisas, e talvez algumas das falhas sejam separadas dos padrões impostos.
Mike B

2
@ Scott Durman: "todo o código deve parecer que foi escrito por uma pessoa em uma sessão" ... LOL !!! ;-)
Galwegian

5
@Galwegian: Primeiro, se você vai usar meu nome completo, pelo menos soletre-o corretamente. :) Por que essa afirmação é engraçada para você? Como eu disse, é o ideal de um padrão de código. Eu nunca disse que era completamente viável, mas dá um objetivo claro e bem definido de trabalhar com rebocadores.
22468 Scott Dorman

23

Você tem que explicar por que seu caminho é melhor .

Explique por que uma função é melhor do que recortar e colar.

Explique por que uma matriz é melhor que $ foo1, $ foo2, $ foo3.

Explique por que variáveis ​​globais são perigosas e que variáveis ​​locais tornarão a vida mais fácil.

Simplesmente criar um padrão de codificação e dizer "faça isso" é inútil porque não explica ao programador por que é uma coisa boa.


1
Eu acho que isso se aplica a praticamente todos os mandamentos possíveis (não apenas aos relacionados à programação).
Dimitri C.

"definir um padrão de codificação e dizer 'faça isso' é inútil" - primeiro, um bom documento escrito sobre padrões de codificação deve incluir uma justificativa para cada argumento, segundo, mesmo sem essa justificativa, dificilmente é inútil - ainda pode ser usado como um item de referência, se acordado pela equipe, quando for encontrado algum código que não o siga, para evitar discussões intermináveis ​​sobre "mas eu gosto dessa maneira!"
Johann Gerell

14

Primeiro, eu teria cuidado para não julgar rápido demais. É fácil descartar um código como ruim, quando pode haver boas razões para isso (por exemplo: trabalhar com código legado com convenções estranhas). Mas vamos assumir por um momento que eles são realmente ruins.

Você pode sugerir o estabelecimento de um padrão de codificação, com base nas informações da equipe. Mas você realmente precisa levar em consideração as opiniões deles, e não apenas impor sua visão de como deve ser um bom código.

Outra opção é trazer livros técnicos para o escritório (Código Completo, C ++ Efetivo, Programador Pragmático ...) e oferecer emprestá-lo a outras pessoas ("Ei, eu terminei com isso, alguém gostaria de emprestá-lo?" )


12

Se possível, verifique se eles entendem que você está criticando o código deles , não eles pessoalmente.


10

Sugira uma alternativa melhor de maneira não conflituosa.

"Ei, acho que assim também funcionará. O que vocês acham?" [Gesticule para obviamente um código melhor na sua tela]


10

Faça revisões de código e comece revendo SEU código.

Isso deixará as pessoas à vontade com todo o processo de revisão de código, porque você está iniciando o processo revisando seu próprio código em vez do deles. Começar com o seu código também dará bons exemplos de como fazer as coisas.


8

Eles podem pensar que seu estilo fede também. Reúna a equipe para discutir um conjunto consistente de diretrizes de estilo de codificação. Concordo com alguma coisa. Se isso não se enquadra no seu estilo, o que importa é escolher um estilo, desde que consistente.


Oh, isso certamente é verdade! "Por que você está usando uma classe para reter uma string enquanto pode usar rotinas C de baixo nível para manipular as strings (incluindo alocação / desalocação de memória e adição manual de um terminador 0)?" E, de fato, esses programadores costumam usar seu estilo de programação para concluir com êxito grandes projetos, estranhos, mas verdadeiros.
Dimitri C.

7

Por exemplo. Mostre a eles o caminho certo.

Vá devagar. Não os engane por todos os pequenos erros logo de cara, apenas comece com coisas que realmente importam.


7

A idéia padrão do código é boa.

Mas considere não dizer nada, principalmente porque é divertido, presumivelmente com pessoas de quem você é amigo. É apenas código ...


1
Eu gosto deste ponto, quanto a este projeto, 'se funcionar, funciona' será suficiente, mas sinto que encontrar uma maneira apropriada de lidar com o problema ajudará muito mais do que o instinto inicial de apontar e dizer ' Isto está errado'.
Maximillian

7
"É apenas código"? É apenas o produto de seu esforço, sua face profissional, sua contribuição para a empresa ou para a humanidade em geral. Quem se importa se é bom ou ruim? Aposto que seus colegas de trabalho estão lendo furiosamente esse tópico, tentando descobrir como dizer que seu "código justo" é lixo.

4
É apenas código? Helloooo pesadelo de manutenção.
MetalMikester 5/08/09

6

Há alguns conselhos realmente bons no livro de Gerry Weinberg, "A psicologia da programação de computadores" - toda a sua noção de "programação sem ego" é sobre como ajudar as pessoas a aceitar as críticas ao seu código como distintas das críticas a si mesmas.


5

Más práticas de nomeação: sempre imperdoável.

E sim, nem sempre assuma que seu caminho é melhor ... Pode ser difícil, mas a objetividade deve ser mantida.

Eu tive uma experiência com um codificador que tinha nomes de funções tão horríveis que o código era pior do que ilegível. As funções mentiram sobre o que eles fizeram, o código não fazia sentido. E eles eram protetores / resistentes a ter alguém para mudar seu código. quando confrontados de maneira muito educada, eles admitiram que o nome não era bom, mas queriam manter a propriedade do código e voltariam a corrigi-lo "posteriormente". Isso é passado agora, mas como você lida com uma situação em que o erro é RECONHECIDO, mas protegido? Isso continuou por um longo tempo e eu não tinha ideia de como romper essa barreira.

Variáveis ​​globais: Eu próprio não gosto muito de variáveis ​​globais, mas conheço alguns programadores excelentes que gostam muito deles. Tanto que acredito que eles não são tão ruins em muitas situações, pois permitem maior clareza e facilidade de depuração. (por favor, não me chame / faça voto negativo :)) Tudo se resume a, eu vi muitos códigos muito bons, eficazes e sem erros que usavam variáveis ​​globais (não inseridas por mim!) e uma grande quantidade de bugs, impossível ler / manter / corrigir códigos que usavam meticulosamente padrões adequados. Talvez lá é um lugar (embora encolhendo talvez) para variáveis globais? Estou pensando em repensar minha posição com base em evidências.


5

Inicie um wiki na sua rede usando algum software wiki.

Inicie uma categoria em seu site chamada "práticas recomendadas" ou "padrões de codificação" ou algo assim.

Aponte todos para isso. Permitir feedback.

Quando você faz lançamentos do software, peça à pessoa cujo trabalho é colocar o código na compilação pressionando os desenvolvedores, apontando-os para as páginas do Wiki nele.

Eu fiz isso na minha organização e demorou vários meses para as pessoas realmente se interessarem em usar o Wiki, mas agora esse recurso é indispensável.


4

Se você tem um padrão pouco amplo de codificação, é possível apontar para isso ou indicar que não pode seguir o código porque não é o formato correto.

Se você não possui um formato de codificação, agora seria um bom momento para instalá-lo. Algo como as respostas a esta pergunta pode ser útil: /programming/4121/team-coding-styles


4

Eu sempre vou com a linha 'Isto é o que eu faria'. Eu não tento dar uma palestra e dizer que o código é um lixo, mas apenas dou um ponto de vista alternativo que, esperançosamente, pode mostrar a eles algo que é obviamente um pouco melhor.


3

Peça às pessoas em questão que preparem uma apresentação para o restante do grupo no código de um módulo representativo que eles escreveram e deixe que as perguntas e respostas tomem conta dele (confie em mim, sim, e se for um bom grupo, nem deveria ficar feio).


3

Eu amo código, e nunca tive nenhum curso em minha vida sobre algo relacionado à informática. Comecei muito mal e comecei a aprender com exemplos, mas o que sempre me lembro e me lembrei desde que li o livro "Gang Of Four" era :

"Todos podem escrever código que é entendido por uma máquina, mas nem todos podem escrever código que é entendido por um ser humano"

com isso em mente, há muito a ser feito no código;)


Eu também achei isso verdade. Boa leitura: Coisas que você nunca deve fazer, parte I de Joel Spolsky joelonsoftware.com/articles/fog0000000069.html Ele diz em suas palavras: "É mais difícil ler código do que escrevê-lo".
Mjn 28/03/09

3

Não consigo enfatizar paciência o suficiente. Eu vi esse tipo exato de coisa sair pela culatra principalmente porque alguém queria que as mudanças acontecessem AGORA. Poucos ambientes precisam dos benefícios da evolução, não da revolução. E, ao forçar a mudança hoje, pode criar um ambiente muito infeliz para todos.

O buy-in é fundamental. E sua abordagem precisa levar em consideração o ambiente em que você está.

Parece que você está em um ambiente que tem muita "individualidade". Então ... eu não sugeriria um conjunto de padrões de codificação. Acontece que você deseja pegar esse projeto "divertido" e transformá-lo em um projeto de trabalho altamente estruturado (oh, ótimo, o que vem a seguir ... documentos funcionais?). Em vez disso, como alguém disse, você terá que lidar com isso até certo ponto.

Seja paciente e trabalhe para educar os outros em sua direção. Comece com as arestas (pontos em que seu código interage com outras pessoas) e, ao interagir com o código, tente aproveitar a oportunidade para discutir a interface que eles criaram e pergunte se seria bom se eles fossem alterados (por você ou eles). E explique completamente por que você deseja a alteração ("ela ajudará a lidar melhor com a alteração dos atributos do subsistema" ou o que for). Não escolha nada e tente mudar tudo que você vê como errado. Depois que você interage com outras pessoas no limite, elas devem começar a ver como isso as beneficiaria no núcleo de seu código (e, se você conseguir impulso suficiente, vá mais fundo e comece a discutir técnicas modernas e os benefícios dos padrões de codificação). Se eles ainda não vêem ... talvez você '

Paciência. Evolução, não revolução.

Boa sorte.


3

Coloco uma toga e abro uma lata de método socrático.

O método socrático, nomeado em homenagem ao filósofo grego clássico Sócrates, é uma forma de investigação filosófica na qual o questionador explora as implicações das posições dos outros, para estimular o pensamento racional e iluminar idéias. Esse método dialético geralmente envolve uma discussão de oposição, na qual a defesa de um ponto de vista se opõe a outro; um participante pode levar outro a se contradizer de algum modo, reforçando o próprio ponto de vista do investigador.


O problema com o método socrático é que ninguém tem paciência nem vontade de segui-lo.
Patrick Szalapski

2

Muitas das respostas aqui se referem à formatação de código que atualmente não é particularmente relevante, pois a maioria dos IDEs reformata seu código no estilo que você escolher. O que realmente importa é como o código funciona, e o pôster tem razão em examinar variáveis ​​globais, copiar e colar código e minha irritação, convenções de nomenclatura. Existe código ruim e pouco tem a ver com o formato.

A parte boa é que a maioria é ruim por um motivo muito bom, e esses motivos geralmente são quantificáveis ​​e explicáveis. Portanto, de uma maneira não conflituosa, explique os motivos. Em muitos casos, você pode até dar ao escritor cenários em que os problemas se tornam óbvios.


2

Eu não sou o desenvolvedor líder do meu projeto e, portanto, não posso impor padrões de codificação, mas descobri que o código incorreto geralmente causa um problema mais cedo ou mais tarde, e quando isso acontece, eu estou lá com uma ideia ou solução mais limpa.

Ao não injectar na época e adotar uma abordagem mais natural, ganhei mais confiança com o líder, e ele muitas vezes se volta para mim em busca de idéias e me inclui no design de arquitetura e na estratégia de implantação usada para o projeto.


2

As pessoas que escrevem códigos ruins são apenas um sintoma de ignorância (que é diferente de ser burra). Aqui estão algumas dicas para lidar com essas pessoas.

  • A própria experiência dos povos deixa uma impressão mais forte do que você dirá.
  • Algumas pessoas não são apaixonadas pelo código que produzem e não ouvem nada do que você diz
  • A programação emparelhada pode ajudar a compartilhar idéias, mas mudar quem está dirigindo ou eles apenas verificam o email no telefone
  • Não os afogue demais, eu achei que a Integração Contínua precisava ser explicada algumas vezes para alguns desenvolvedores mais antigos
  • Deixe-os entusiasmados novamente e eles vão querer aprender. Pode ser algo tão simples quanto programar robôs por um dia
  • CONFIE NA SUA EQUIPE, os padrões de codificação e as ferramentas que os verificam no momento da construção geralmente nunca são lidos ou irritantes.
  • Remova a propriedade do código. Em alguns projetos, você verá silos de código ou formigueiros onde as pessoas dizem que esse é o meu código e você não pode alterá-lo. Isso é muito ruim e você pode usar a programação emparelhada para removê-lo.

1
Eu acredito que a ignorância deliberada pode ser descrita como burra? É o mesmo que não estar disposto a aprender.
9119 Adam Naylor

O exemplo disso é um cara que é físico em particular, mas não consegue uma namorada. Ele é obviamente um cara inteligente, mas ignorante sobre as mulheres.
10119 Scott Cowan

2

Em vez de fazê-los escrever código, faça com que mantenham seu código.

Até que eles tenham que manter sua pilha de espaguete fumegante, eles nunca entenderão o quão ruim são na codificação.


Melhor ainda: peça para eles manterem o código de outros desenvolvedores. Isso também pode ajudar a melhorar a comunicação entre eles ...
mjn

Isso é muito menos antagônica, também :-)
JDrago

2

Ninguém gosta de ouvir alguém dizendo que seu trabalho é péssimo, mas qualquer pessoa sã gostaria de receber orientação e maneiras de evitar trabalhos desnecessários.

Uma escola de ensino até diz que você não deve apontar erros, mas concentrar o que é feito da maneira correta. Por exemplo, em vez de apontar códigos incompreensíveis como ruins, você deve apontar onde o código deles é particularmente fácil de ler. No primeiro caso, você está preparando os outros para pensar e agir como programadores ruins. No caso posterior, você está começando a pensar como um profissional qualificado.


2

Eu tenho um senário semelhante com os caras com quem trabalho .. Eles não têm a exposição à codificação tanto quanto eu, mas ainda são úteis na codificação.

Em vez de eu deixar fazer o que eles querem e voltar e editar a coisa toda. Normalmente, apenas os sento e mostro duas maneiras de fazer as coisas. Do seu jeito e do meu jeito, a partir disso, discutimos os prós e contras de cada método e, portanto, chegamos a um melhor entendimento e uma melhor conclusão sobre como devemos programar.

Aqui está a parte realmente surpreendente. Às vezes, eles apresentam perguntas para as quais nem tenho respostas e, após a pesquisa, todos temos um melhor conceito de metodologia e estrutura.

  1. Discutir.
  2. Mostre a eles o porquê
  3. Nem pense que você está sempre certo. Às vezes, até eles ensinam algo novo.

Isso é o que eu faria se fosse você: D


1

Provavelmente um pouco tarde após o efeito, mas é aí que um padrão de codificação acordado é uma coisa boa.


1

Eu sinceramente acredito que o código de alguém é melhor quando é mais fácil alterar, depurar, navegar, entender, configurar, testar e publicar (ufa).

Dito isso, acho que é impossível dizer a alguém que seu código é ruim sem que ele explique o que faz ou como alguém deve melhorá-lo depois (como criar uma nova funcionalidade ou depurar).

Só então a mente deles se encaixa e alguém será capaz de ver isso:

  • Alterações no valor das variáveis ​​globais quase sempre não são rastreáveis
  • Funções enormes são difíceis de ler e entender
  • Os padrões facilitam o aprimoramento do seu código (desde que você obedeça às regras deles)
  • (etc ...)

Talvez uma sessão de programação em pares deva fazer o truque. Quanto à imposição de padrões de codificação - isso ajuda, mas eles estão muito longe de realmente definir o que é um bom código.


1

Você provavelmente deseja se concentrar no impacto do código incorreto, e não no que pode ser descartado como apenas sua opinião subjetiva sobre se é um estilo bom ou ruim.


1

Informe-se sobre alguns dos segmentos de código "ruins" em particular, com a possibilidade de que seja realmente um código razoável (não importa o quão predisposto você seja), ou que talvez haja circunstâncias atenuantes. Se você ainda está convencido de que o código é simplesmente ruim - e que a fonte realmente é essa pessoa - vá embora. Uma das várias coisas pode acontecer: 1) a pessoa percebe e toma alguma ação corretiva; 2) a pessoa não faz nada (é inconsciente ou não se importa tanto quanto você).

Se o número 2 acontecer, ou o número 1 não resultar em melhoria suficiente do seu ponto de vista, e estiver prejudicando o projeto e / ou afetando você o suficiente, talvez seja a hora de iniciar uma campanha para estabelecer / aplicar padrões dentro O time. Isso requer adesão da gerência, mas é mais eficaz quando instigado a partir das bases.

Boa sorte com isso. Eu sinto sua dor irmão.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.