Como posso julgar se um projeto é particularmente complexo ou se sou lento em buscá-lo?

16

Estou fazendo pouco progresso em um grande projeto. A fonte é maciça, muitas camadas de objetos, código de macarrão, gráficos de diamante duplo de herança múltipla, recursos semi-cozidos congelados quando o escritor original foi embora e ninguém sabe por que muitas peças foram projetadas da maneira que eram.

Suponho que qualquer programador competente teria algum problema em descobrir tudo o suficiente para corrigir bugs, finalizar as coisas pela metade e adicionar novos recursos. No entanto, suspeito que estou indo mais devagar do que um programador típico.

Como julgo se a fonte é incomumente ruim e estou indo tão bem quanto qualquer um poderia, versus a fonte é típica de um projeto como esse e eu sou pouco inteligente ou pouco qualificada?

DarenW
fonte
11
Compreender o código dos outros é um ato de empatia. Esqueça a rapidez com que você está indo e também esqueça o quanto são idiotas as pessoas que escreveram o código. Descobrir isso é um exercício de flexibilidade. Suponha que a fonte seja incomumente ruim e que você esteja com excesso de habilidades, volte ao trabalho e pare de se intrometer nesses fóruns estúpidos. O que se aplica a mim também ... Eu tenho um código para discutir.
Dan Rosenstark
2
Especialmente esqueça "que monte de ..." quando essas pessoas são o chefe, o irmão do chefe, o chefe do chefe ou o sobrinho do chefe, etc!
darenw
2
Ah, o "porquê" ausente. Lembre-se de colocá-los quando descobrir.
@ DarenW - é código de espaguete, não código de macarrão: D (Desculpe, eu precisava).
Jas
1
@Jas google para código de macarrão ... há mais tipos de massas do que apenas spaghetti ;-)
Jürgen A. Erhard

Respostas:

6

A única maneira de decidir essa questão é adquirir muito mais programadores para resolver o mesmo problema e verificar se eles se saem melhor.

Obviamente, isso raramente é prático, a tarefa recaiu sobre você e desde que você esteja fazendo o melhor possível, pesquisando onde seu conhecimento falha. Desmembrando onde a complexidade o persegue e mantendo quem se importa bem informado sobre seu progresso. Então eu não me preocuparia e continuaria.

Orbling
fonte
16

Primeiro, eu não gastaria muito tempo me preocupando com o fato de você ser "esperto ou pouco qualificado". Alguns projetos são difíceis de entender, e os grandes costumam demorar um pouco para se atualizar. Pensar que você é "estúpido" ou não está preparado para a tarefa não o ajudará de forma alguma.

Parece que você precisa de ajuda com o código, então considere seus recursos. Você tem acesso aos codificadores originais? Se estiverem disponíveis, podem ser bons recursos para obter informações. Que documentação está disponível? Se a documentação for escassa, retire um caderno e comece a criar sua própria documentação pessoal.

A grande idéia aqui é que você deve esperar que esse processo leve tempo, e quanto menos tempo você se dedicar mentalmente, mais energia terá para analisar o código e descobrir. Boa sorte!

Zeke
fonte
5
+1 Pode levar mais de 6 meses para realmente começar a conhecer alguns sistemas complexos o suficiente para serem proficientes neles. Mesmo que a base de código seja "boa", diferentes desenvolvedores e equipes têm estilos diferentes, e às vezes leva tempo para se orientar.
Ryan Hayes
3
@Ryan, e 6 meses depois disso, você se torna parte do problema :)
Benjol
@ Benjol Sim, eu estive lá.
Ryan Hayes
FWIW, quando estive neste barco (várias vezes!), Achei mais útil fazer pausas frequentes do que apenas sentar e rastejar sobre o código. Ao fazer uma pausa, levante-se e afaste-se fisicamente do computador. Estique, olhe pela janela, pense no que você acabou de ver, depois volte e veja um pouco mais. YMMV, mas me vi fazendo um progresso muito melhor quando fiz isso. Boa sorte!
TMN
+1 para criar sua própria documentação pessoal. Quando faço esse trabalho, acho que fazer muitas anotações (no código ou no papel) e desenhar muitos diagramas (que geralmente significam algo para mim no momento) ajuda. Uma vantagem adicional a tudo o que é o reforço dos conceitos em sua própria mente.
Andy Hunt
6

Já viu a curva de aprendizado. A curva de aprendizado

A teoria diz que, inicialmente, leva tempo para avançar. O truque é passar o ponto de aceleração rapidamente. Se você estiver travando regularmente, peça ajuda ao seu gerente ou, pelo menos, mantenha-o informado sobre os problemas que enfrentou. Contanto que você esteja bem para agendar sem problemas.

Manoj R
fonte
2

Dissecá-lo, uma vez pedaço de cada vez

Sua situação é muito comum: "entender o que acontece " leva tempo, como outros já mencionaram.

O que eu acho é que, se você o abordar "uma peça de cada vez" , independentemente de quão complexo seja um projeto, você descobrirá. Você só precisa ser lógico sobre isso.

Comece com um botão, digitar o código-fonte , colocar pontos de interrupção, ver passo a passo o que está acontecendo. Há duas coisas que você precisa cumprir:

  • A visão geral de alto nível.
  • Os detalhes detalhados que implementam a funcionalidade desejada acima.
  • Depois de entender partes, re-fatore-o.
Noite escura
fonte
"Uma peça de cada vez" pode funcionar em outros projetos, mas isso tem tantas classes derivadas de outras, aulas de amigos, ponteiros para as entranhas umas das outras que existem poucas partes que podem ser entendidas independentemente.
darenw
Tenho certeza de que é um labirinto complexo (algo que "cresceu" ao longo do tempo). No entanto, se você começar com uma função, está me dizendo que não é capaz de rastreá-la de ponta a ponta?
Darknight
Rastrear o fluxo de dados ou a sequência de eventos quando, por exemplo, o usuário clica em um botão, se tornou impossível.
darenw
1

Que tal adotar uma visão diferente: o que você precisa saber sobre esse código e tem uma maneira de medir isso? Por exemplo, se você está tentando corrigir um bug, isso pode exigir um tipo diferente de mergulho do que se você estivesse tentando migrar o código de um idioma para outro, por exemplo, passando de VBScript para C #. Se você está tentando obter todos os requisitos do código atual, isso pode levar um tempo, embora eu suspeite que a maioria das pessoas tenha esse tipo de problema.

JB King
fonte
Eu gosto deste comentário. É preciso ter um objetivo específico e trabalhar para que esse objetivo (e somente esse) seja realizado. Caso contrário, você se perderá - muito parecido com um mapa.
precisa saber é o seguinte
1

Enquanto aprendem algo novo, muitos alunos pensam: “Caramba, isso é difícil para mim. Eu me pergunto se sou estúpido. ”
Antes de prosseguir, certifique-se de que você não é estúpido e que algumas coisas são difíceis. ...

Sr. Aaron Hillegass com as palavras inteligentes.

Você não é estúpido, não é lento e não é subestimado. Estou no mesmo barco, assumi uma nova função e a base de código existente é incrivelmente grande e mostra sinais de ser repetidamente superdesenvolvida, levei semanas para chegar a um ponto em que sinto que estou conseguindo perto da velocidade máxima. Imagine que o projeto seja como aprender um novo idioma inteiro, não acontece da noite para o dia, mas exige paciência.

Nicholas Smith
fonte