Confrontando l'ingegneria del software con l'ingegneria civile, sono stato sorpreso di osservare un diverso modo di pensare: qualsiasi ingegnere civile sa che se vuoi costruire una piccola capanna nel giardino puoi semplicemente ottenere i materiali e andare a costruirla mentre se vuoi costruire una casa di 10 piani (o, per esempio, qualcosa di simile a questo ) è necessario fare abbastanza alcuni matematica per essere sicuri che non cadrà a pezzi.
Al contrario, parlando con alcuni programmatori o leggendo blog o forum trovo spesso un'opinione diffusa che può essere formulata più o meno come segue: la teoria e i metodi formali sono per matematici / scienziati mentre la programmazione è più su come fare le cose .
Ciò che normalmente è implicito qui è che la programmazione è qualcosa di molto pratico e che anche se metodi formali, matematica, teoria degli algoritmi, linguaggi di programmazione chiari / coerenti, ecc., Possono essere argomenti interessanti, spesso non sono necessari se tutto ciò che si vuole è ottenere cose fatto .
Secondo la mia esperienza, direi che mentre non hai bisogno di molta teoria per mettere insieme uno script di 100 righe (la capanna), per sviluppare un'applicazione complessa (l'edificio di 10 piani) hai bisogno di un design strutturato, beh metodi definiti, un buon linguaggio di programmazione, buoni libri di testo in cui è possibile cercare algoritmi, ecc.
Quindi la teoria dell'IMO (la giusta quantità di) è uno degli strumenti per ottenere risultati .
La mia domanda è: perché alcuni programmatori pensano che ci sia un contrasto tra teoria (metodi formali) e pratica (fare le cose)?
È l'ingegneria del software (software edificio) percepito da molti come facile rispetto a, per esempio, ingegneria civile (costruzione di case)?
Oppure queste due discipline sono davvero diverse (a parte il software mission-critical, il fallimento del software è molto più accettabile del fallimento della costruzione)?
Cerco di riassumere, quello che ho capito dalle risposte finora.
- A differenza dell'ingegneria del software, nell'ingegneria civile è molto più chiaro quale quantità di teoria (modellistica, progettazione) sia necessaria per un determinato compito.
- Ciò è in parte dovuto al fatto che l'ingegneria civile è vecchia quanto il genere umano, mentre l'ingegneria del software esiste solo da alcuni decenni.
- Un altro motivo è il fatto che il software è un tipo di artefatto più volatile, con requisiti più flessibili (può essere consentito l'arresto anomalo), diverse strategie di marketing (un buon design può essere sacrificato per poterlo immettere rapidamente sul mercato), ecc.
Di conseguenza, è molto più difficile determinare quale sia la giusta quantità di progettazione / teoria appropriata nell'ingegneria del software (troppo poco -> codice disordinato, troppo -> non riesco mai a finire) perché non esiste una regola generale e solo (molta) esperienza può aiutare.
Quindi, se interpreto correttamente le tue risposte, questa incertezza su quanta teoria è davvero necessaria contribuisce ai sentimenti misti di amore / odio che alcuni programmatori hanno nei confronti della teoria.