Reutilização de código como um problema
Eu estava pensando sobre essa questão sobre a entrega de software e voltei à questão da repetibilidade e / ou reprodutibilidade . Eles são importantes, porque se você não repetir um projeto, fica mais difícil melhorar o processo usado para criar o projeto. A engenharia envolve a melhoria constante dos processos envolvidos no projeto e na construção, a fim de produzir projetos de maior qualidade.
O software pode depender muito da reutilização devido à sua forma digital. Em vez de reescrever um módulo, basta chamá-lo novamente ou copiá-lo para o outro sistema. Alguns exemplos são autenticação / login ou talvez uma função de log. Existem muitos exemplos conhecidos para essas categorias, e a sabedoria convencional é reutilizar o que existe em vez de criar o seu próprio.
Algumas comparações com outras disciplinas
Construção
Por outro lado, a construção de sistemas físicos (edifícios, pontes) não é nem de longe tão reutilizável. É verdade que o projeto de uma casa pode ser reutilizado várias vezes para criar a mesma cópia da casa, mas a construção deve ser executada a cada vez. Cortar e colar não funciona assim no mundo analógico. Os projetos de pontes são menos reutilizáveis que as casas porque as condições do local variam.
Os construtores mestres são especialistas reconhecidos por terem projetado e / ou construído dezenas, centenas ou milhares de coisas em sua área. Por exemplo, Frank Lloyd Wright , arquiteto e designer de renome mundial designed more than 1,000 structures and completed 532 works
. Compare isso com Anders Hejlsberg, que criou “apenas” cinco idiomas (Turbo Pascal; Delphi; J ++; C #; TypeScript). De muitas maneiras, é uma comparação injusta porque os domínios são diferentes. Mas em um nível amplo, a produção quantificável de duas pessoas muito inteligentes é muito diferente.
Artes marciais
Os artistas marciais dirão que o domínio de um movimento vem apenas de milhares de repetições. Depois que uma boa parte dessas repetições é realizada, muitos artistas marciais ficam surpresos com a forma como um kata ou forma complexo anteriormente percebido se tornou simples. Os instrutores desses alunos também notarão como o movimento se torna mais fluido e objetivo, além de ter uma economia de movimento. Da mesma forma, artistas marciais experientes são capazes de captar katas mais complexas mais rapidamente do que estudantes menos experientes. A experiência da repetição deu a eles uma estrutura ou processo que lhes permite aprender mais rapidamente.
Carpintaria
Os marceneiros experimentam uma transformação semelhante. Os carpinteiros amadores sempre se referem ao primeiro projeto que exigia muitas gavetas. Se eles concluírem o projeto, obterão uma nova apreciação pelas eficiências que as linhas de montagem produzem. Existem outros benefícios, como uma melhor compreensão de como dispor as peças das gavetas no estoque de chapas para maximizar o uso da madeira. Comparados aos entusiastas, os marceneiros profissionais são capazes de projetar, iniciar e construir itens mais rapidamente, fabricados várias vezes antes. Eles também adquirem a capacidade de ver problemas inerentes ao design de outra pessoa que cometeram esse erro em seu trabalho.
Então, a reutilização de software impede que os desenvolvedores se tornem mais proficientes?
De muitas maneiras, o design e a construção de software são sempre novos. Não repetimos trabalhos anteriores, porque, se podemos reutilizar um módulo, biblioteca ou sistema, o fazemos. Preferencialmente, estenderemos um sistema existente antes de reescrever tudo do zero. Mas a repetição é o que nos permite encontrar eficiência no design e na construção. Qualquer pessoa que pratique um esporte ou atividade física lhe dirá que a repetição é a chave para se tornar um bom praticante.
Minha pergunta: a capacidade de reutilização do software impede a melhoria e a eficiência necessárias do processo decorrentes da repetição de um projeto?