Beim Vergleich von Software-Engineering und Bauingenieurwesen war ich überrascht, dass jeder Bauingenieur weiß, dass man, wenn man eine kleine Hütte im Garten bauen möchte, einfach die Materialien holen und sie bauen kann, während man bauen möchte ein 10-stöckiges Haus (oder, zum Beispiel so etwas wie diese ) Sie ganz ein paar Mathe tun müssen , um sicher zu sein , dass es nicht auseinander fallen.
Wenn ich dagegen mit einigen Programmierern spreche oder Blogs oder Foren lese, finde ich oft eine weit verbreitete Meinung, die sich mehr oder weniger wie folgt formulieren lässt: Theorie und formale Methoden richten sich an Mathematiker / Wissenschaftler, während beim Programmieren mehr darum geht, Dinge zu erledigen .
Was ist in der Regel hier angedeutet ist , dass die Programmierung ist etwas sehr praktisch und dass , obwohl formale Methoden, Mathematik, Algorithmik, sauber / kohärente Programmiersprachen, usw., können interessante Themen sein, sind sie oft nicht erforderlich , wenn alles , was man will , ist auf die Dinge fertig .
Nach meiner Erfahrung würde ich sagen, dass Sie, während Sie nicht viel Theorie brauchen, um ein 100-zeiliges Skript (die Hütte) zu erstellen, um eine komplexe Anwendung (das 10-stöckige Gebäude) zu entwickeln, auch einen strukturierten Entwurf benötigen -definierte Methoden, eine gute Programmiersprache, gute Lehrbücher, in denen Sie Algorithmen nachschlagen können usw.
Daher ist die IMO- Theorie (die richtige Menge an Theorie) eines der Werkzeuge , um Dinge zu erledigen .
Meine Frage ist, warum einige Programmierer denken, dass es einen Kontrast zwischen Theorie (formale Methoden) und Praxis (Dinge erledigen) gibt?
Wird Software Engineering (Gebäudesoftware) von vielen als einfach empfunden, verglichen mit z. B. Tiefbau (Gebäudehäuser)?
Oder sind diese beiden Disziplinen wirklich unterschiedlich (abgesehen von unternehmenskritischer Software ist ein Softwarefehler weitaus akzeptabler als ein Gebäudefehler)?
Ich versuche zusammenzufassen, was ich aus den bisherigen Antworten verstanden habe.
- Im Gegensatz zum Software Engineering ist im Bauingenieurwesen viel klarer, welcher theoretische Umfang (Modellierung, Design) für eine bestimmte Aufgabe benötigt wird.
- Dies liegt zum Teil daran, dass das Bauwesen so alt ist wie die Menschheit, während es das Software-Engineering erst seit einigen Jahrzehnten gibt.
- Ein weiterer Grund ist die Tatsache, dass Software eine volatilere Art von Artefakt ist, mit flexibleren Anforderungen (möglicherweise darf sie abstürzen), unterschiedlichen Marketingstrategien (gutes Design kann geopfert werden, um es schnell auf den Markt zu bringen) usw.
Infolgedessen ist es viel schwieriger zu bestimmen, welche Menge an Design / Theorie im Software-Engineering angemessen ist (zu wenig -> chaotischer Code, zu viel -> ich kann nie fertig werden), da es keine allgemeine Regel gibt und nur (viel) Erfahrung kann helfen.
Wenn ich Ihre Antworten richtig interpretiere, trägt diese Unsicherheit darüber, wie viel Theorie wirklich benötigt wird, zu den gemischten Liebes- / Hass-Gefühlen bei, die manche Programmierer gegenüber der Theorie haben.