Le développement logiciel peut-il être considéré comme de l'ingénierie? Si non, quelles sont les choses qui lui manquent pour être qualifiée de discipline d'ingénierie? À cela se cette question sur le débordement de pile sur la différence entre un programmeur et un ingénieur logiciel .
Il y a le Software Engineering Institute à l'Université Carnigie Mellon qui prescrit et maintient les normes CMMI. Est-ce quelque chose qui transformera le développement en ingénierie?
terminology
professionalism
Vaibhav Garg
la source
la source
Réponses:
Oui, le génie logiciel est une discipline d'ingénierie.
Wikipedia définit l'ingénierie comme «l'application des mathématiques, ainsi que des connaissances scientifiques, économiques, sociales et pratiques afin d'inventer, d'innover, de concevoir, de construire, d'entretenir, de rechercher et d'améliorer les structures, machines, outils, systèmes, composants, matériaux , processus, solutions et organisations. " Le résultat de l'ingénierie logicielle est un système logiciel qui peut améliorer la vie des gens et peut impliquer une combinaison de connaissances scientifiques, mathématiques, économiques, sociales ou pratiques.
En termes de vision, académique et professionnelle, cela varie. Les programmes de génie logiciel peuvent être accrédités par ABET en tant que programmes d'ingénierie. Les ingénieurs logiciels peuvent être membres de l'IEEE. Certaines entreprises considèrent le génie logiciel comme une discipline d'ingénierie, tandis que d'autres ne le font pas - c'est vraiment un jeu d'enfant.
Le meilleur livre sur ce sujet est le développement de logiciels professionnels de Steve McConnell: programmes plus courts, produits de meilleure qualité, projets plus réussis, carrières améliorées . Il examine le génie logiciel en tant que profession, l'évolution d'un métier à une profession, la science du développement logiciel, la différence entre le génie logiciel et le génie logiciel (appliquer les pratiques d'ingénierie aux logiciels par rapport aux ingénieurs qui créent des logiciels, avec une étude de cas qui comprend mon alma mater ), la certification et les licences, et l'éthique.
Glenn Vanderburg a une série de conférences appelées "Real Software Engineering" qui a donné entre 2010 et 2015 lors d'un certain nombre de conférences, ainsi que deux conférences connexes, "Craft, Engineering, and the Essence of Programming" (données en 2011 en tant que keynote at RailsConf) and "Craft and Software Engineering" (donné en 2011 à QCon Londres). Je pense que ces discussions sont un argument assez complet pour expliquer pourquoi le génie logiciel est une discipline d'ingénierie.
Un argument, que Vanderburg soulève brièvement dans ses entretiens, est celui avancé par Jack W. Reeves en 1992 (et revu à nouveau en 2005) sur ce qu'est la conception de logiciels et comment le code est le résultat des activités de conception en génie logiciel ( c'est aussi discuté sur le wiki C2). Une fois que vous vous éloignez des anciennes écoles de pensée où la spécification et la modélisation sont la conception de logiciels et que le code est la conception de logiciels, certaines des relations entre le génie logiciel et d'autres disciplines de l'ingénierie deviennent plus évidentes. Certaines différences et les raisons de ces différences deviennent encore plus apparentes lorsque vous voyez que l'économie du développement logiciel est très différente de celle de nombreuses autres disciplines - la construction est bon marché (presque gratuite, dans de nombreux cas), tandis que la conception est la partie coûteuse.
Non. CMMI est un cadre d'amélioration des processus qui fournit aux organisations des conseils sur les types d'activités utiles lors de la création de logiciels. Les disciplines d'ingénierie ont généralement un processus d'ingénierie. Avoir un tel processus est important pour la réussite de projets de haute qualité. Cela dit, le CMMI (ou tout autre cadre ou méthodologie de processus) n'est qu'un outil unique - son utilisation ne vous fera pas passer magiquement d'un développeur à un ingénieur. Cependant, ne pas suivre une sorte de processus est, à mon avis, le signe d'un projet qui n'est pas un projet d'ingénierie.
C'est seulement autant de valeur que d'autres y mettent. Il y a des cours utiles et des cours inutiles. Il existe des certificats précieux et des certificats qui ne valent pas le papier sur lequel ils sont imprimés. Il y a beaucoup de facteurs, de qui approuve ou accrédite le cours ou qui délivre le certificat à votre industrie d'emploi actuelle à votre emploi actuel et où vous voulez aller.
la source
Issu d'une formation d'ingénieur typique, mais faisant carrière dans le développement de logiciels, je vois de grandes similitudes entre les deux mondes. Mis à part peut-être la définition exacte de l'ingénierie, je vois dans la pratique que le développement de logiciels n'est pas si différent du développement d'un produit physique. Au moins, je pense que cela ne devrait pas être très différent.
Que vous conceviez un avion ou une application logicielle, pour les deux vous devez:
J'ai lu quelque part dans une autre réponse que la conception de logiciels est différente parce que vous ne concevez pas tout avant de commencer la programmation. Eh bien, dans une moindre mesure, c'est également le cas lorsque vous concevez un produit physique. La conception, le prototypage et les tests sont un processus itératif.
De plus, lorsque les projets logiciels augmentent en taille, il devient plus important de définir des sous-systèmes, des composants et des interfaces clairs, ce qui est également similaire à la conception de produits complexes tels qu'un avion.
C'est pourquoi je considère le développement de logiciels comme de l'ingénierie.
la source
Je dirais que le génie logiciel existe bel et bien.
L'ingénierie implique l'application systématique de connaissances scientifiques à la résolution de problèmes. La complexité des problèmes qui sont abordés aujourd'hui ne sont pas si différents de ceux abordés par un ingénieur électricien dans la création d'un circuit ou un ingénieur chimiste dans la conception d'un processus de fabrication ou un ingénieur mécanique dans la création d'un appareil.
Le fait qu'il existe également une approche pratique de l'application des plans existants (développement dans ce cas) est simplement similaire au fait que dans d'autres domaines, quelqu'un d'autre exécute ces plans (par exemple, le travailleur de la construction).
Il est vrai que la plupart des développeurs réalisent également des tâches d'ingénierie logicielle, et que notre formation n'est souvent pas en programmation mais plutôt en génie logiciel. Nous nous salissons donc les mains, contrairement à un ingénieur civil.
Cependant, la capacité d'appliquer un langage et un programme de programmation ne fait pas de celui-ci un ingénieur: j'ai rencontré ma part de développeurs qui n'ont pas une vraie compréhension des complexités et des problèmes en dehors de leur morceau de code actuel.
Quant à votre question concernant la CMU: l'application d'une norme ou d'une pratique (par exemple, CMMI) ne transforme pas automatiquement le travail d'une personne en ingénierie. Cependant, le fait qu'il existe des organisations qui mènent des recherches scientifiques pour fournir de nouvelles pratiques est à nouveau un signe qu'il existe une chose telle que l'ingénierie.
la source
Non, ce n'est pas de l'ingénierie. Nous ne sommes pas si scientifiques et nous n'avons à passer aucun de ces tests d'ingénierie d'État. En fait, il est illégal de vous appeler un "ingénieur" logiciel à certains endroits en raison de ce manque de tests.
la source
À mon humble avis, le terme `` génie logiciel '' a été inventé pour essayer de mieux décrire la gamme de choses qu'un développeur fait, plutôt que d'être simplement un `` programmeur '' (qui a des connotations d'un processus mécanique avec peu de réflexion ou de créativité).
Personnellement, je préfère l'analogie émergente d'un développeur en tant qu '«artisan», défendu entre autres par les programmeurs pragmatiques.
Historiquement, les gens ont essayé d'analogier la création de logiciels avec la fabrication. Je pense que Jack Reeves a fait un assez bon argument pour discréditer cette idée dans son article What Is Software Design .
la source
De Wiki:
Ingénierie:
Développement de logiciels
Ils sont donc assez similaires et peuvent également signifier la même chose.
la source
De Dictionary.com: en · gi · neer · ing / ˌɛndʒəˈnɪərɪŋ /
–Nom 1. l'art ou la science de l'application pratique des connaissances des sciences pures, comme la physique ou la chimie, comme dans la construction de moteurs, ponts, bâtiments, mines, navires et usines chimiques.
Je dirais que la création de logiciels est l'application pratique des mathématiques et de l'informatique, et potentiellement de tout autre nombre de sciences pures en fonction de l'application.
[EDIT] FWIW, je ne m'appelle pas ingénieur logiciel, mais développeur de logiciels, donc je n'ai aucun intérêt personnel à cela.
la source
À mon avis, un ingénieur logiciel et un développeur de logiciels sont deux choses différentes.
Je vois un ingénieur logiciel comme quelqu'un qui fait de la planification, comme le cycle de vie du développement, les exigences / spécifications, etc ... Fondamentalement, un ingénieur logiciel s'occupe de beaucoup de documentation. Cela peut être accompli par un développeur de logiciels et / ou un chef de projet.
Un développeur de logiciels serait plus proche d'un programmeur mais avec plus de compétences dans d'autres domaines comme la gestion de bases de données, etc.
Une chose intéressante à évoquer est l' architecture . Quelqu'un qui est également impliqué dans la détermination du matériel / logiciel nécessaire pour le cycle de vie du projet.
la source
Je vais aller avec "Non" ici. Mon frère est ingénieur en mécanique, et il décrit l'ingénierie comme "L'art d'être bon marché":
"Les ingénieurs sont plus soucieux de faire avancer les choses le plus rapidement possible, au moindre coût possible, avec le moins de matériaux possible. "
En réaction, j'en suis venu à décrire le développement logiciel (pas le génie logiciel - ce sont vraiment deux domaines distincts) comme "L'art d'être efficace":
"Les développeurs sont plus soucieux de faire avancer les choses le plus rapidement possible, au moindre coût possible, avec le moins de répétitions possible. "
La différence se trouve dans la dernière partie de ces phrases.
la source
Non. Être ingénieur signifie que votre projet suit une chronologie de cause à effet - vous suivez les codes du bâtiment, donc votre bâtiment ne tombe pas (ou du moins vous ne pouvez pas être blâmé s'il le fait). En écrivant un logiciel, vous pouvez suivre toutes les directives en cours (et il y en a tellement de différentes!) Et il peut toujours se bloquer / planter / donner de mauvaises réponses (sauf si vous êtes impliqué dans le domaine remarquablement petit de l'écriture de programmes prouvables à côté - langages fonctionnels sans effet).
la source
Je vois un ingénieur (mécanique, structure, logiciel) comme quelqu'un qui conçoit le produit à l'avance en fonction des besoins compris et une compréhension de quoi et comment appliquer les matériaux pour répondre à ce besoin.
Par exemple, vous pouvez souvent voir un ingénieur en structure rechercher différentes résistances de l'acier et appliquer des règles de physique pour calculer les matériaux requis et comment ils doivent être mis en œuvre. L'ingénierie structurelle est un excellent exemple car vous vous retrouvez toujours avec un plan (spécification) de ce que vous allez construire avant de construire. Cela ne se produit pas toujours avec les logiciels.
Pour moi, la différence d'un ingénieur logiciel et d'un programmeur est que l'ingénieur est capable de construire la spécification de ce qui sera produit avant d'écrire du code, où un programmeur écrit simplement le code sur la base des spécifications de quelqu'un d'autre, ou est l'un de ceux programmeurs du Far West qui écrit du code sans spécifications. De plus, l'ingénieur a son diplôme.
Je compare la différence entre un travailleur de la construction et un ingénieur en structure à la différence entre un programmeur et un ingénieur logiciel.
Pour clarifier, je n'ai qu'un diplôme universitaire, donc je ne peux pas m'appeler ingénieur.
la source
Je ne considérerais pas le terme "ingénierie" comme le plus approprié pour décrire le développement logiciel, pour 2 raisons principales:
Il véhicule de nombreuses idées, concepts et soi-disant «règles d'or» provenant d'anciennes disciplines d'ingénierie telles que l'ingénierie industrielle, civile, navale ou mécanique. Je parle de règles dans la division du travail, les processus de production, les normes de qualité ... Ces plus souvent que marginalement appliquent aux logiciels.
Il ne parvient pas à décrire de manière satisfaisante ce que la programmation a plus que les autres disciplines (et je pense qu'elle a beaucoup plus et beaucoup différent), et quels nouveaux défis les développeurs doivent affronter au jour le jour par rapport à leurs homologues du traditionnel domaines d'ingénierie. La nature virtuelle et immatérielle du logiciel joue un rôle énorme à cet égard.
Le développement de logiciels a longtemps été considéré comme "juste une autre discipline d'ingénierie". Compte tenu des taux d'échec des projets logiciels que nous connaissons depuis qu'ils ont été mesurés, il est grand temps que nous reconnaissions le développement comme un animal entièrement nouveau, le code comme un matériau vraiment spécial et le cycle de vie des applications comme un type de cycle de production totalement différent, et nous arrêtons désespérément d'essayer leur appliquer de vieilles recettes.
la source
Oui, il faut pouvoir appliquer des normes et des principes pour arriver à un produit décent. Ce qui le rend difficile, c'est l'état d'esprit du client (c'est juste du code - cela ne devrait pas coûter si cher à changer), l'extrême difficulté à codifier ce que le produit doit faire en code machine (langage parlé / écrit à coder) et à quantifier " qualité". Votre définition de la qualité n'est pas la mienne.
C'est aussi la répétabilité. Prenez un ensemble d'exigences et donnez-le à deux équipes. Lorsque vous pouvez obtenir la même chose (sans que les équipes se parlent), vous êtes assez proche de l'ingénierie.
D'autres domaines de l'ingénierie ont également des pénalités et un examen et une approbation rigides. Responsabilité.
la source
Le génie logiciel n'est pas de l'ingénierie. À mon avis, la différence réside dans la quantité de créativité impliquée. En génie civil, par exemple, il peut y avoir très peu ou pas de créativité. C'est une bonne chose.
Pour construire un pont, vous avez un ensemble de spécifications (j'ai besoin de faire passer ce nombre de voitures de ce côté de la rivière à l'autre côté).
J'en déduis:
Ensuite, je dois faire approuver et vérifier la conception par un tiers (une autre entreprise) pour m'assurer que j'ai fait mes calculs correctement.
Ensuite, lorsque le pont sera effectivement construit, les travaux seront effectués par des personnes qualifiées de manière standard. Ils feront un travail qu'ils ont fait des centaines, voire des milliers de fois auparavant.
Ne vous méprenez pas, chaque projet de génie civil est différent, mais il semble que chaque fois que je développe une nouvelle application / site Web, les choses se font différemment.
la source
Oui, je suppose que le développement est un sous-ensemble de l'ingénierie:
Code Complete définit la «construction» comme étant synonyme de codage et de débogage (et de commentaires), également avec une conception détaillée au préalable et avec des tests unitaires et d'intégration par la suite. Le chapitre 1, Bienvenue dans la construction de logiciels (PDF) commence par énumérer de nombreux sujets dans le cycle de vie global du développement logiciel (y compris la définition des problèmes, l'architecture logicielle, la maintenance corrective, etc.), puis dit:
la source
Le développement logiciel est de l'ingénierie.
Quelques arguments avancés par d'autres pour expliquer pourquoi le génie logiciel ne répond pas aux normes d'ingénieur:
Certains disent que les ingénieurs sont chargés de concevoir des «choses» pour le bien public - les ICBM, les réservoirs, etc. sont-ils dans le bien public? Certains diraient oui (une bonne offensive est une bonne défense), d'autres diraient non. Cependant, je ne pense pas que quiconque soit en désaccord avec le fait que le gars qui conçoit le système de ciblage de chars de prochaine génération est un ingénieur. Le bien public peut être subjectif. En tout cas, beaucoup de logiciels sont dans l'intérêt public, donc le point est sans objet dans les deux cas.
D'autres disent que les ingénieurs conçoivent qu'ils ne construisent pas. J'ai vu plusieurs commentaires de type «les ingénieurs mécaniciens ne soudent pas». Je dirais que les ingénieurs mécaniciens produisent des plans - des conceptions détaillées que quelque chose d' autre implémente. Si un ingénieur en mécanique produit un plan et le transmet à une machine CNC, cela ne fait-il plus d'eux un ingénieur en mécanique - parce qu'une machine a effectué la mise en œuvre à la place d'une personne? Je dirais que le code source est un plan détaillé qui est envoyé à une machine qui fait l'implémentation et je ne vois pas en quoi cela est différent d'un code MechE alimentant une machine CNC. Et nous avons maintenant des imprimantes 3D, cela signifie-t-il la fin des ingénieurs mécaniciens? Sont-ils maintenant des développeurs mécaniques?
La licence est l'autre sujet que je vois venir. Actuellement, seules quelques juridictions octroient des licences aux ingénieurs logiciels. Il n'y a (jusqu'à présent) aucune licence à l'échelle des États-Unis pour les ingénieurs logiciels (je pense que seul le Texas le fait). Certains ont utilisé cela comme une raison pour affirmer que l'ingénierie logicielle ne devrait pas être appelée ingénierie. Le PE pour les ingénieurs logiciels arrive. Mais à un niveau plus philosophique, le simple fait que certains législateurs des États choisissent (ou non) d'appeler l'ingénierie de développement logiciel n'a aucun effet sur la réalité.
la source