Comparando a engenharia de software com a engenharia civil, fiquei surpreso ao observar uma maneira diferente de pensar: qualquer engenheiro civil sabe que, se você quiser construir uma pequena cabana no jardim, poderá obter os materiais e construí-lo, enquanto que, se quiser construir uma casa de 10 andares (ou, por exemplo, algo como este ) que você precisa fazer muito algumas matemática para ter certeza que ele não vai desmoronar.
Por outro lado, conversando com alguns programadores ou lendo blogs ou fóruns, muitas vezes encontro uma opinião ampla que pode ser formulada mais ou menos da seguinte maneira: teoria e métodos formais são para matemáticos / cientistas, enquanto a programação é mais para fazer as coisas .
O que normalmente está implícito aqui é que a programação é algo muito prático e que, embora métodos formais, matemática, teoria de algoritmos, linguagens de programação limpas / coerentes, etc, possam ser tópicos interessantes, muitas vezes não são necessários se tudo o que se quer é conseguir coisas feito .
De acordo com minha experiência, eu diria que, embora você não precise de muita teoria para montar um script de 100 linhas (a cabana), para desenvolver um aplicativo complexo (o prédio de 10 andares), você precisa de um design estruturado, bem -definidos métodos, uma boa linguagem de programação, bons livros de texto onde você pode procurar algoritmos, etc.
Portanto, a teoria da IMO (a quantidade certa de) é uma das ferramentas para realizar as tarefas .
Minha pergunta é por que alguns programadores pensam que existe um contraste entre teoria (métodos formais) e prática (fazer as coisas)?
A engenharia de software (software de construção) é percebida por muitos como fácil em comparação com, digamos, a engenharia civil (construção de casas)?
Ou essas duas disciplinas são realmente diferentes (além do software de missão crítica, a falha de software é muito mais aceitável do que a falha de construção)?
Tento resumir o que entendi das respostas até agora.
- Ao contrário da engenharia de software, na engenharia civil é muito mais claro que quantidade de teoria (modelagem, design) é necessária para uma determinada tarefa.
- Isso se deve em parte ao fato de que a engenharia civil é tão antiga quanto a humanidade, enquanto a engenharia de software existe há apenas algumas décadas.
- Outro motivo é o fato de o software ser um tipo de artefato mais volátil, com requisitos mais flexíveis (pode ser permitido travar), diferentes estratégias de marketing (um bom design pode ser sacrificado para colocá-lo no mercado rapidamente), etc.
Como conseqüência, é muito mais difícil determinar qual a quantidade certa de projeto / teoria é apropriada na engenharia de software (muito pouco -> código confuso, muito -> nunca consigo terminar) porque não há regra geral e apenas (muita) experiência pode ajudar.
Portanto, se eu interpretar suas respostas corretamente, essa incerteza sobre quanta teoria é realmente necessária contribui para os sentimentos mistos de amor / ódio que alguns programadores têm em relação à teoria.