Como engenheiro de software, qual a importância de ler o código de outros?

25

Eu sou um engenheiro de software iniciante (agora no segundo ano, formado em CS) e realmente luto para entender os programas de outras pessoas. Quero saber se essa habilidade (ou falta dela) pode ser uma desvantagem para mim e, se sim, como posso desenvolvê-la?

James Bond
fonte
1
Você sente que entende o código quando isso é explicado a você também ou você está apenas aprendendo por tentativa e erro?
JeffO 9/01/19
1
Por que isso está marcado com 'estilo de codificação'? É por isso que você está tendo problemas para ler o código porque está mal formatado? A capacidade de ler o código não significa que você precisa entender o código muito mal formatado ou ofuscado. Execute o código através de uma ferramenta de formatação primeiro, se ajudar.
Brandin
Basta ler um artigo esta manhã que me lembrou essa pergunta. Por que trabalhar no Chrome me fez desenvolver uma ferramenta para o código fonte de leitura
Eric Rei
Esta é uma grande pergunta! Eu tive uma pergunta de acompanhamento: se você trabalha principalmente sozinho em seu próprio código (por exemplo, como programador científico em um projeto pequeno), como você encontra um bom código para ler? Isso já foi perguntado antes: softwareengineering.stackexchange.com/questions/69892/…
Gaurav

Respostas:

49

É essencial.

A maneira como você o desenvolve é escrevendo seu próprio código (muitos deles) e, sim, lutando para ler o código de outras pessoas.

O problema, é claro, é que nem todo mundo pensa da mesma maneira que você. Eu estava em uma aula de Java do primeiro ano há muito tempo e recebemos uma tarefa. Ao contrário do que eu pensava (que era que as respostas convergiriam em três ou quatro soluções comuns), todos os alunos tinham uma solução única para a tarefa.

Daqui resulta que você deve ler um bom código.

Esse é um dos motivos pelos quais os Design Patterns se tornaram tão populares e por que você deve estudá-los. Os Padrões de Design fornecem um vocabulário comum para os programadores se comunicarem e ajustam sua mente para "melhores" maneiras de resolver problemas de computação.

Você também deve estudar algoritmos e estruturas de dados.

Corolário: você deve sempre se esforçar para escrever código que outros desenvolvedores possam entender prontamente.

Robert Harvey
fonte
7
Corolário: simples Comece por se esforçando para escrever código que você possa compreender facilmente :-)
gnasher729
4
Geralmente, uma boa resposta, exceto a parte sobre padrões. A maioria dos padrões do GoF (que é o que as pessoas pensam quando você usa o termo) é exagerada, refinada demais, concentrada demais em OO ou apenas antipadrões simples. E então o pessoal aparece aqui perguntando qual desses padrões eles devem usar para a solução. Por favor, nunca aconselhe os desenvolvedores a perder tempo com padrões.
David Arno
Para pequenos problemas (digamos, inverta os números em uma lista), as possíveis respostas devem convergir para um pequeno número de possíveis soluções. Boas atribuições devem exigir a solução de muitos desses problemas e organizar as soluções para esses problemas de alguma forma, para que o número total de soluções possíveis para a atribuição cresça muito rapidamente.
Brandin
15

Isso é muito importante.

Depois que você se formar e sair para o mundo, a maioria dos projetos nos quais você trabalhará já terá código contribuído por outras pessoas. Lucky é o programador que passa o tempo todo em projetos greenfield!

É uma habilidade adquirida através da prática e paciência e, em muitos casos, é uma habilidade na qual muitas pessoas não têm muita oportunidade de trabalhar até depois de se formarem e conseguirem o primeiro emprego. Relaxar!

(embora sua escola possua um programa cooperativo, isso lhe daria uma experiência de pré-graduação para trabalhar em grandes projetos que são escritos principalmente por outras pessoas E isso lhe dá créditos acadêmicos!

FrustratedWithFormsDesigner
fonte
7

É uma habilidade importante , dependendo das especificidades de onde você trabalha, pode até ser mais importante do que escrever o próprio código.

Como outras habilidades, a prática leva à perfeição! Tente ler o código de outro programador, depure-o e o que me ajuda pessoalmente, é refatorar ou melhorar pequenos pedaços de código e expandir a partir daí.

RMalke
fonte
Além disso, conhecer um projeto de código aberto que você usa e tentar entender como o código interno funciona pode ser útil
RMalke
4

Existem habilidades distintas na leitura e na escrita de código.

  • Um é a sintaxe. Saber como é uma declaração de método.
  • O outro é intenção. Saber por que o método existe e para qual finalidade ele serve.

Quanto à leitura versus escrita. Sim, a leitura é essencial.
Algumas máximas que ajudam muitos de nós são:

  • O código é lido 10 vezes (pelo menos) para cada vez que é gravado.
  • Alguém mais está lendo o código geralmente ... eu, no futuro, lendo o código.
  • Eu não defenderia meu estilo de código de mais de um ano atrás, ele melhorou desde então.

ESTÁ BEM. Então, isso é ótimo. Agora, vamos ao que você provavelmente está enfrentando.

omg, essa enorme base de código com dezenas de milhares de linhas de código-fonte e classes com centenas de linhas com dependências malucas e toda vez que tento seguir algo, tenho que manter 10 níveis na cabeça, etc. etc.
Parece familiar ? Sim. Respiração profunda. relaxar. É normal. É disso que os sistemas de produção são feitos. As pessoas sobrevivem (e florescem) nessas situações aparentemente incompreensíveis porque:

  • esperamos que existam testes e também ajudam a documentar o sistema.
  • programadores emparelham e muitas vezes traz mais que o dobro do resultado.
  • Um bom programador é bom em dizer que não entende até entender.
  • as alterações costumam ser apenas uma ou algumas linhas de código, ajudando a isolar o que testar
  • bases de código levam meses e até anos para se familiarizar com
Michael Durrant
fonte
E, finalmente, bons programadores escrevem mensagens de confirmação significativas ao confirmar alterações nos sistemas de controle de versão de origem. (Sinta-se livre para adicionar a responder)
rwong
1

A maioria dessas respostas se concentra na importância da leitura de código para o auto-aperfeiçoamento. Eu concordo plenamente e apoio.

Há outro ângulo em que se deve tomar cuidado - mesmo se você fosse um prodígio que não pudesse se beneficiar com a leitura de outras abordagens (impossível, mas por uma questão de argumento ...), ainda precisaria saber ler código por causa de uma conceito que basicamente não existe no cenário universitário: a grande maioria dos projetos da indústria são projetos de campo marrom (ou seja, integrados a uma base de código preexistente).

A necessidade de ler o código apenas para entender a base de código e os processos existentes é real. Sempre é possível fazer perguntas a outros desenvolvedores sobre código, mas isso pode levar tanto tempo. As pessoas saem, trocam de projeto ou o tempo passa simplesmente. Os detalhes de baixo nível desaparecem da memória e os programadores de manutenção aplicam patches. Em algum momento, não há uma única fonte de verdade, exceto o próprio código.

Uma boa higiene do código, guias de estilo, revisões de código e ajuda na documentação, mas em algum momento o código é a fonte da verdade para o que acontece e a única maneira de encontrar a resposta será obtê-lo você mesmo. Além de seus usos no autodesenvolvimento, a capacidade de ler códigos é uma habilidade distinta da escrita.

Michael
fonte
0

Compreender o código de outras pessoas é algo que você não pode escapar, pois provavelmente trabalhará em equipe, mesmo que não em equipe você pesquise no Google coisas diferentes e precisará entender o código de exemplo. Então, sim, é uma obrigação.

O que eu sinto é que todo mundo percebe que esse sentimento pode ser um pouco menor do que outro, especialmente no início. Você entende seu código melhor do que o código dos outros, pois passa muito mais tempo com seu próprio código do que o código de outra pessoa, pois você não apenas lê, mas escreve e estrutura isso em sua mente. Se você começar a gastar mais tempo com o código de outras pessoas e primeiro tentar ver que tipo de estrutura / fluxo está sendo usado, isso certamente fará com que você entenda melhor o código.

Para tornar meu argumento ainda mais convincente, se você tiver algum código que você escreveu há um ano, tente entendê-lo novamente e posso ter certeza de que você levará mais tempo, mas menos que o código de outros, para ter idéia de como estruturar seu código. código.

Espero que esta ajuda, não fique desapontado, é perfeitamente normal. Gaste mais tempo com o código e você poderá obtê-lo.

techExplorer
fonte
0

Bem, acabei de receber um projeto com cerca de 100.000 linhas de código escritas por uma equipe em um país diferente, e preciso fazer algumas alterações muito significativas em uma cópia do código nos próximos meses, deixando o mesmo código em comum quanto possível.

Você me diz como eu posso fazer meu trabalho sem a capacidade de ler o código de outras pessoas, rápido. Se você não consegue ler o código de outras pessoas, está completamente, totalmente preso.

gnasher729
fonte