Ao conversar com colegas sobre princípios de design e desenvolvimento de software, notei que uma das fontes mais comuns de analogias é a indústria da construção. Nós construir software e consideramos a concepção e estrutura para ser a arquitetura .
Uma das melhores maneiras de aprender (ou ensinar) é através da análise de analogias - que outras analogias podem ser extraídas da construção? (já em uso comum em software ou não).
Forneça uma descrição ou sua experiência pessoal sobre como o conceito de programação é semelhante ao conceito de construção.
[Crédito aos conceitos de programação retirados das artes e humanidades pela idéia]
Respostas:
É daí que surgiram os padrões de design.
A pessoa que supostamente apresentou o conceito ao mundo foi Christopher Alexander em seu livro "A Pattern Language: Towns, Buildings, Construction" em 1977 . A partir daí, o Gang of Four (GoF) o pegou , e o resto é história.
Mesmo agora, durante palestras e livros sobre arquitetura e desenvolvimento de software, as analogias entre o mundo da construção e o mundo do desenvolvimento de software continuam prevalecendo.
Algumas analogias e referências que posso pensar ou lembrar:
(Se mais vierem à sua mente, eu os adicionarei.)
Há quem não pense que a analogia geral esteja correta, uma leitura recomendada para isso é The Software Construction Analogy is Broken . Além disso, há uma pergunta sobre isso no SO intitulada O que há de errado com a analogia entre software e construção civil? .
fonte
Pegamos muitas palavras e idéias da indústria da construção ao longo da história do desenvolvimento de software e, de fato, provavelmente levamos a muitas, e acho que não há mais nada a ser levado.
Levamos todo o processo de ter clientes fazendo uma especificação, depois um arquiteto planejando, depois engenheiros projetando e finalmente codificando macacos implementados na indústria da construção, e isso acabou sendo totalmente equivocado.
Isso ocorre porque, quando você constrói uma casa, se sua fundação está errada, você fica destruído. Sério effed. Elevar um prédio e substituir suas fundações custa mais do que desfazer tudo e começar de novo. Mas no software é completamente possível. Eu refiz um software cliente em uma solução cliente-servidor sem que o usuário percebesse nada, exceto que mudei o modem para a sala do servidor. É como substituir a fundação de concreto por um barco enquanto os habitantes dormiam.
Software não é como construção. E é por isso que toda a indústria de software se ativou no início dos anos ruins e todo o processo "em cascata" de execução de projetos foi substituído por processos ágeis em apenas alguns anos.
Quanto às palavras, muito é retirado da construção, certa e erradamente.
O framework é o mais óbvio ainda não adotado. E há canos .
fonte
Eu usei essa analogia ... muitos projetos de software começam porque a pessoa que precisa de algum software conhece o equivalente a um "trabalhador braçal", e eles contratam essa pessoa para construir o equivalente em software a um abrigo de jardim. É um aplicativo pequeno e útil que faz seu trabalho muito bem.
O cliente, em seguida, volta ao trabalhador manual, satisfeito com seu trabalho, e pede que ele mude o software para fazer mais uma coisa. Muitas vezes, esse novo recurso não tem muito a ver com a solicitação original, então é quase como se eles estivessem pedindo para você construir outra sala na parte de trás do galpão do jardim com uma entrada separada.
Então eles querem colocar uma luz dentro do galpão, para que eles tenham o ajudante de volta, e ele dirige um único circuito no painel principal da casa, instala um interruptor de corrente no teto de cada quarto e os conecta ao circuito .
O cliente decide então que deseja usar algumas ferramentas elétricas, mas ele continua acionando o disjuntor, então eles ligam para a pessoa de volta e ele realmente precisa interromper o único circuito que executou no painel principal e instalar um condutor maior e um sub-painel no galpão. Ele teve que passar o fio duas vezes e pagar por duas licenças elétricas, etc. Isso é ineficiente.
Então o cliente pede algo absurdo: você pode transformar meu galpão em uma garagem? Não quero que você refaça tudo o que fez ... Só quero que você a torne maior para que eu possa estacionar meu carro lá. Então, em muitos casos, o faz-tudo pensa "o cliente está sempre certo" e passa a acrescentar três lados do galpão para torná-lo maior, derrubando a parede entre as divisórias, etc. É claro que o teto termina flacidez porque não foi construído corretamente, etc.
Portanto, o cliente não está mais tão impressionado, mas ainda quer mais. Eles pedem repetidamente ao técnico para adicionar mais uma sala ou alterar a sala existente para fazer isso etc. Você acaba com algo que se parece com The Burrow e é tão arquitetonicamente bom.
Agora, a maioria das pessoas não é tola o suficiente para tentar isso no mundo da construção, mas isso acontece o tempo todo no mundo do software, porque as pessoas não fazem essas conexões:
Uma pessoa qualificada para construir um galpão de jardim realmente agradável não é necessariamente qualificada para construir uma casa.
Se você soubesse antecipadamente que iria construir uma casa em etapas, mas só iria começar como um abrigo de jardim, você faria as coisas de maneira diferente e o abrigo de jardim custaria muito mais (você colocaria uma almofada muito grossa, certifique-se de executar um condutor grande o suficiente para a carga total de uma casa pronta, etc.).
Em muitos casos, a atualização de um estágio para outro envolve desfazer muito do trabalho que foi feito anteriormente, tornando-o mais caro do que parece.
No mundo da construção, podemos dar ao cliente uma boa idéia de como será o resultado durante a fase de design, mas não temos essa capacidade no mundo do software. Se você chegou a esse ponto, basicamente escreveu uma parte significativa do software.
O Manifesto Ágil é o resultado de reconhecer que a analogia de software / construção está quebrada. Coisas como testes de unidade automatizados e ciclos de liberação iterativos não têm paralelo na construção. Essas coisas tiram vantagem do custo quase zero de ir do design ao protótipo (chamamos de compilação ou construção).
fonte
Os termos Concluir trabalho e Aparar vêm à mente.
A ideia de que é aceitável adiar algumas escolhas estéticas para quando as principais decisões estruturais estiverem completas.
fonte
Um velho ditado: meça duas vezes e corte uma vez.
Edit: Há uma seção no The Checklist Manifesto de Atul Gawande, que fala sobre o gerenciamento de grandes trabalhos de construção. Quando eles chegam a um ponto realmente complicado, eles se reúnem com os especialistas envolvidos para revisar o problema e verificar se ocorreu alguma coisa durante o projeto que todos deveriam conhecer. Provavelmente não podemos planejá-los com antecedência.
fonte
Existem limitações tanto na construção quanto na programação .
Se você, como cliente, não pode fazer exigências tão ridículas que prolonga um edifício acabado de hotel no fim de semana e coloca um aeroporto no piso subterrâneo e uma pista em sua cobertura, por que você não pode aceitar que nem todos os ajustes com o acabamento software é possível? Não é uma bola mágica de 0s e 1s, é uma estrutura de construção complexa, embora imaterial, mas com suas limitações também.
fonte
Eu trabalhei na construção através da escola e há lugares onde nem sequer são analogias, o mesmo conceito se aplica. Mas, muitas vezes, a tentação da comparação vai longe demais.
Quando trabalhei em uma estimativa de emprego, sabia que havia médias bastante firmes de quanto tempo levaria para fazer alguma coisa. Para fabricar vitrines de lojas, por exemplo, simplesmente contamos o número de juntas nos quadros dos planos e tivemos uma boa idéia de quanto tempo isso levaria. Assim como a programação, tivemos que levar em consideração as variáveis programadas, embora isso pudesse sugar sua vida. Por exemplo: ter uma equipe de encanamento aparecendo para descobrir que o estacionamento está sendo pavimentado e eles não podem entrar no prédio por causa do asfalto quente no caminho, é bastante caro.
No entanto, a construção tem milhares de anos de experiência para aproveitar. As regras fundamentais do comércio são dirigidas pelas mesmas leis da física que sempre foram. Os cálculos de carga de vento e carga morta são os mesmos de quando estavam sendo feitos com regras de slide. Melhorias em ferramentas e técnicas surgiram, mas em um ritmo glacial em comparação com o que experimentamos.
Por outro lado, ainda estamos descobrindo que muitos de nossos padrões e práticas precisam de espaço para melhorias. Singleton costumava ser uma boa ideia, agora a maioria dos que pensa a respeito prefere padrões de IoC / DI.
O que também nos falta é o significativo licenciamento e certificação. Em muitas áreas, mesmo para ser apenas um reparador e muito menos um instalador, um encanador deve ser licenciado ou trabalhar sob a supervisão de alguém que é. Para obter essa licença, é necessário um certo período de tempo trabalhando em campo. Não estou argumentando a favor ou contra o licenciamento, apenas apontando como é uma enorme diferença.
Obviamente, em ambos os campos, um arquiteto pode desenhar algo que não pode ser implementado.
fonte
Andaimes , "uma estrutura temporária usada para apoiar pessoas e materiais na construção ou reparo de edifícios e outras grandes estruturas". [definição da wikipedia]
Esse conceito funciona porque um andaime na programação pode ser criado rapidamente e fornece funcionalidade temporária até que a estrutura real esteja em vigor.
fonte
Conheço algumas empresas de construção que trabalham com o menor lance, fazem trabalhos mal feitos, evitam o que deveria ser um dever de garantia, concentram-se na data e não na qualidade e cobram um lucro ridículo pelo produto "acabado".
Mas não acho que programadores ou agências de consultoria tenham aprendido nada com essas práticas.
fonte
Bugs podem acabar sendo caros pra caramba, ou até matar pessoas?
fonte
Existem diretrizes básicas para projetos de engenharia complexos de qualquer disciplina:
etc.,
Os pontos em comum entre as disciplinas de arquitetura, engenharia civil e engenharia de software parecem resultar principalmente da ausência de linhas de montagem : todo projeto é único por si só.
fonte
Ao longo do tempo
Mas na indústria da construção, os trabalhadores recebem horas extras.
fonte
Uso de padrões, convenções e componentes pré-construídos. É provável que você não encontre esse tipo de problema.
fonte
Quando tudo que você tem é um martelo, tudo parece um prego. :)
fonte
Lesões por esforço repetitivo
Eles são um risco ocupacional em ambos os setores e devem ser tomadas precauções para evitá-los. Uma vez que eles começam, eles são difíceis de curar.
fonte