En comparant génie logiciel et génie civil, j'ai été surpris d'observer une façon de penser différente: tout ingénieur civil sait que si vous voulez construire une petite hutte dans le jardin, vous pouvez simplement obtenir les matériaux et aller la construire, alors que si vous voulez construire une maison de 10 étages (ou quelque chose comme ça ), vous devez faire quelques calculs pour vous assurer qu’elle ne tombera pas en morceaux.
En revanche, en parlant avec certains programmeurs ou en lisant des blogs ou des forums, je trouve souvent une opinion largement répandue qui peut être formulée plus ou moins comme suit: la théorie et les méthodes formelles sont destinées aux mathématiciens / scientifiques, tandis que la programmation consiste davantage à faire avancer les choses .
Ce qui est normalement impliqué ici est que la programmation est quelque chose de très pratique et que même si les méthodes formelles, les mathématiques, la théorie de l’algorithme, les langages de programmation propres / cohérents, etc., peuvent être des sujets intéressants, ils ne sont souvent pas nécessaires si l’on veut simplement obtenir des résultats. fait .
Selon mon expérience, je dirais que même si vous avez besoin de peu de théorie pour assembler un script de 100 lignes (la cabane), afin de développer une application complexe (le bâtiment de 10 étages), vous avez besoin d'une conception structurée, ainsi -des méthodes définies, un bon langage de programmation, de bons manuels où vous pouvez rechercher des algorithmes, etc.
Donc, la théorie de l’ OMI (la bonne quantité) est l’un des outils pour faire avancer les choses .
Ma question est la suivante: pourquoi certains programmeurs pensent-ils qu’il existe un contraste entre la théorie (méthodes formelles) et la pratique (faire avancer les choses)?
L'ingénierie logicielle (logiciels de construction) est-elle perçue par beaucoup comme facile, comparée au génie civil (construction de maisons)?
Ou bien ces deux disciplines sont-elles vraiment différentes (à part les logiciels critiques, les échecs logiciels sont beaucoup plus acceptables que les échecs de construction)?
J'essaie de résumer ce que j'ai compris des réponses jusqu'à présent.
- Contrairement au génie logiciel, en génie civil, la quantité de théorie nécessaire (modélisation, conception) est nécessaire pour une tâche donnée.
- Cela est dû en partie au fait que le génie civil est aussi vieux que l’humanité alors que le génie logiciel n’existe que depuis quelques décennies.
- Une autre raison est le fait que le logiciel est un type d'artefact plus volatil, avec des exigences plus souples (il peut être autorisé à planter), des stratégies de marketing différentes (un bon design peut être sacrifié pour le mettre rapidement sur le marché), etc.
En conséquence, il est beaucoup plus difficile de déterminer quelle est la bonne quantité de conception / théorie appropriée en génie logiciel (trop peu -> code en désordre, trop -> je ne peux jamais avoir fini) car il n’ya pas de règle générale et seulement (beaucoup) d'expérience peut aider.
Donc, si j’interprète correctement vos réponses, cette incertitude sur le besoin réel de théorie contribue à la confusion des sentiments amour / haine de certains programmeurs.