JavaRush /Blog Java /Random-FR /Qui est un ingénieur logiciel ? Génie logiciel VS « juste...

Qui est un ingénieur logiciel ? Génie logiciel VS « juste » programmation

Publié dans le groupe Random-FR
Nous attirons votre attention sur une adaptation d'un article de Samer Buna sur les différences entre l'ingénierie logicielle et la programmation, ou sur la différence entre le développement d'un concept logiciel et le « simple codage ».
Qui est un ingénieur logiciel ?  Génie logiciel VS
Tous les ingénieurs logiciels peuvent coder, mais tous les programmeurs ne peuvent pas développer des concepts logiciels. Certaines personnes n'aiment pas le terme « ingénieur logiciel » (alias ingénieur logiciel) car le plus souvent nous utilisons le mot « ingénieur » pour parler de quelque chose de plus physique – la construction, par exemple. Bien entendu, notre article ne porte pas sur le terme lui-même. Si cela vous provoque soudainement un rejet, cela peut facilement être remplacé par quelque chose lié à la créativité. « Software Creator », « Software Author »… ou encore « Software Creator » !
Lorsque nous parlons d'un « ingénieur logiciel », nous entendons une personne dont la tâche principale n'est pas seulement d'écrire du code, mais de créer une application de qualité. Et c'est là qu'il voit sa vocation, en appliquant une approche scientifique et des méthodes statistiques à son travail. Pour lui, la programmation n’est pas seulement un moyen de gagner de l’argent pour se nourrir.
La capacité de programmer ne fait pas automatiquement d’une personne un ingénieur logiciel. Tout le monde peut apprendre à coder, et c’est beaucoup plus facile qu’il n’y paraît. N'importe qui peut créer un programme simple pour son propre usage, mais cela ne garantit pas que le même programme fonctionnera pour d'autres. Mon exemple préféré est celui-ci : nous sommes nombreux à chanter sous la douche, mais, hélas, ce spectacle n'est pas toujours digne d'une scène professionnelle. Bien entendu, pour une expérience musicale de qualité, vous vous tournerez très probablement vers un pro. Avez-vous besoin de plus d'exemples?
  • Nous apprenons tous les mathématiques et l'écriture à l'école, mais cela ne fait pas de nous des mathématiciens et des écrivains.
  • La plupart d’entre nous sont capables de préparer un plat passable et parfois très savoureux, mais tout le monde n’oserait pas préparer une table pour 100 personnes pour un dîner à l’ambassade. Dans ce cas, nous engageons un cuisinier.
  • Êtes-vous prêt dès maintenant à confier entièrement la construction de votre nouvelle maison à l'enfant du voisin qui crée des chefs-d'œuvre impressionnants en Lego ?
Mon point principal que j’essaie de transmettre dans cet article est que les programmes simples sont très différents des programmes conçus par des ingénieurs. La définition la plus simple du processus de programmation : établir une séquence ordonnée d'actions pour un ordinateur afin d'obtenir quelque chose de spécifique en sortie, compte tenu de paramètres d'entrée donnés. Le processus de génie logiciel consiste en la conception, l’écriture, les tests et la conservation d’un programme informatique destiné à résoudre les problèmes de nombreux utilisateurs. Il s'agit de créer des solutions fiables et sécurisées qui résisteront à l'épreuve du temps et qui répondront à des défis peut-être inconnus, au-delà de l'évidence.
Qui est un ingénieur logiciel ?  Génie logiciel VS
Les ingénieurs logiciels savent tout sur les problèmes qu'ils résolvent, les solutions qu'ils proposent, les limites de ces solutions, leur confidentialité et leur sécurité. À mon avis, si une personne ne comprend pas l'essence du problème, elle ne devrait même pas commencer à programmer sa solution.

Esprit d'ingénierie - recherche de solutions appliquées

Les ingénieurs logiciels ne considèrent pas l’écriture de logiciels en soi comme leur objectif principal. Ils pensent en termes de satisfaction des besoins et de résolution de problèmes . Ceci est important car tous les problèmes ne nécessitent pas une solution logicielle. Certains d’entre eux peuvent être traités à l’aide de programmes existants. L’apparition de certains problèmes peut parfois être prédite à l’avance et, grâce à une conception de programme compétente, ils peuvent être évités à l’avenir.

"Les intellectuels résolvent les problèmes, les génies les empêchent"

- Albert Einstein

Qui est un ingénieur logiciel ?  Génie logiciel VS
Les problèmes complexes nécessitent souvent d’écrire de nombreux programmes. Certaines tâches nécessitent l'exécution d'applications en parallèle, tandis que d'autres nécessitent l'exécution séquentielle de plusieurs programmes. Un certain nombre de problèmes peuvent être résolus simplement en formant les utilisateurs. Avant de commencer à créer un programme, un ingénieur logiciel se pose un certain nombre de questions :
  • Quels problèmes dois-je résoudre ?
  • Que pouvez-vous faire d’autre que d’écrire du code pour les résoudre ?
  • Que puis-je faire pour faciliter ces tâches avec l'application ?

Qualité du programme et qualité du code

Les bons programmes sont clairs et lisibles. Ils sont faciles à étendre, fonctionnent bien avec d'autres programmes et ne seront pas un cauchemar à utiliser. La qualité du code n'est pas négociable. Il devrait être élevé, c'est tout. Quand on y réfléchit, des excuses telles que la mauvaise humeur du codeur ou des délais trop serrés (oh, ces délais !) sont inacceptables. L'un des aspects les plus importants du développement logiciel est de concevoir le programme de manière à ce qu'il soit facile à maintenir et à modifier à l'avenir (bonjour la POO !). Aujourd'hui, presque tous les logiciels sont modifiables, souvent ce processus se produit même sans la participation de l'utilisateur ou ne nécessite rien d'autre de la part de l'utilisateur que « votre programme a été mis à jour, cliquez sur OK ou sur Reporter ». Bien entendu, les utilisateurs ont le droit d'exiger de nouvelles fonctionnalités des applications (surtout lorsqu'il s'agit de logiciels d'entreprise de longue durée écrits en Java ou de jeux en ligne auxquels on peut jouer pendant des années).
Vous voulez en savoir plus sur la programmation Java ? Rejoignez le groupe Développeur Java !
Un morceau de code en soi peut difficilement être qualifié d’utile. La fonctionnalité utile d'un logiciel commence là où des éléments disparates d'applications communiquent entre eux, échangent des données et travaillent ensemble pour effectuer la tâche de présentation des données et des interfaces aux utilisateurs.
Qui est un ingénieur logiciel ?  Génie logiciel VS
Les programmes doivent être conçus en gardant ces points à l’esprit ! Quels messages reçoivent-ils ? Quels événements sont surveillés ? Comment se déroulent l’authentification et l’autorisation ? Un autre signe tout aussi important d'un bon programme est la clarté du code, et non le nombre de tests réussis par l'application ou même une bonne couverture des tests. Des questions en apparence simples : « Est-ce que quelqu'un d'autre que moi peut comprendre mon code ? », « Est-ce que je pourrai écrire ce code aujourd'hui et le comprendre dans quelques semaines ? Une citation populaire sur les deux choses les plus difficiles en programmation dit :

"Il n'y a que deux choses vraiment difficiles : l'invalidation du cache et la dénomination des entités"

—Phil Carlton.

La lisibilité du code est bien plus importante qu’on ne le croit généralement. Malheureusement, il n'est pas possible de définir des métriques ou des paramètres précis pour la clarté du code. La mémorisation des normes linguistiques généralement acceptées, des bons modèles logiciels et des méthodes de développement seront utiles en partie. Mais cela ne suffit généralement pas. Avec le temps et l’expérience, les vrais professionnels développent, pour ainsi dire, un « sens de la clarté », quelque chose qui s’apparente à l’intuition. Une métaphore d'écriture fonctionne bien ici : connaître beaucoup de mots ne vous aidera pas à écrire quelque chose de concis et de clair dans son sens.

"J'aurais écrit plus court, mais je n'ai pas eu le temps."

- Mark Twain.

La capacité de corriger les bogues rapidement et facilement est une caractéristique clé d’un bon logiciel. Les erreurs dans le programme doivent envoyer des messages clairs et être enregistrées de manière centralisée pour le suivi. Lorsqu'une nouvelle erreur est signalée, la personne qui la corrigera doit avoir la capacité de la déboguer. Il doit se connecter facilement au système, accéder aux informations d'exécution à tout moment et également pouvoir vérifier facilement la fonctionnalité de n'importe quelle partie du système.

Environnements et tests

Lorsque les ingénieurs logiciels développent des applications, ils font de leur mieux pour s’assurer qu’elles fonctionnent sur des ordinateurs d’architectures différentes et avec des systèmes d’exploitation différents. Il est important que le logiciel fonctionne à différentes résolutions et orientations d'écran, et également qu'il ne « consomme » pas plus de mémoire et de puissance de traitement que nécessaire.
Qui est un ingénieur logiciel ?  Génie logiciel VS
Lorsqu'il s'agit d'applications Web, elles doivent fonctionner dans tous les principaux navigateurs. Lors de la création d'une application de bureau, vous devez vous assurer qu'elle se lance et fonctionne correctement sur Mac, Windows et Linux. Eh bien, le programme dépend des données, alors l'application devrait fonctionner même en cas de connexion de données lente ou de son absence. Pour écrire un logiciel, les ingénieurs réfléchissent à toutes sortes d’options de scénarios et prévoient de les tester. Tout commence par le choix de l'option idéale dans laquelle tout fonctionne sans erreur. Ils documentent ensuite tout problème potentiel et les inscrivent dans le plan de test. Certains ingénieurs commencent par écrire du code, qu’ils appellent un scénario de test, qui simule des scénarios pour tous les problèmes et erreurs probables. Et puis un programme est écrit qui peut fonctionner avec n'importe laquelle des options envisagées. La capacité unique d’un ingénieur logiciel talentueux n’est pas de savoir comment écrire du code, mais de comprendre exactement ce que l’application doit faire comme résultat et comment y parvenir. Lorsque les exigences logicielles du client sont incomplètes et éventuellement ambiguës, l'ingénieur doit les évaluer et les « comprendre » correctement.

Coût et efficacité

Un ingénieur logiciel peut résoudre le problème rapidement dans la plupart des cas. Si vous pensez que l'embauche d'un programmeur expérimenté « cher » augmentera vos coûts, détrompez-vous. Plus le programmeur embauché est expérimenté, plus il sera en mesure de fournir rapidement une solution simple, soignée, fiable et facile à utiliser. À long terme, cela réduira certainement les coûts de développement de logiciels.
Qui est un ingénieur logiciel ?  Génie logiciel VS
Il faut également prendre en compte les coûts d'exécution du programme. Tout programme utilise des ressources informatiques, et celles-ci ne sont pas gratuites.
Le travail d'un ingénieur logiciel consiste à écrire du code efficace qui n'utilise pas inutilement de ressources informatiques.
Par exemple, la mise en cache des données fréquemment consultées est l'une des stratégies possibles utilisées pour atteindre le résultat souhaité. Mais ce n’est qu’un parmi des centaines d’outils et de solutions susceptibles de rendre un programme plus rapide et plus efficace. Un programmeur débutant peut vous proposer une solution bon marché, mais l'utilisation d'une telle solution vous coûtera finalement beaucoup plus cher, à vous et à vos clients, que si vous travailliez avec un développeur expérimenté qui a créé une solution efficace en premier lieu.

Focus sur l'expérience utilisateur

Un bon programmeur se développe en gardant à l'esprit l'expérience utilisateur (UX). L’interaction homme-machine est un sujet qui suscite une infinité de recherches et de solutions. Plus de solutions sont appliquées, meilleur sera le programme. Voici quelques exemples, juste pour vous donner une idée de ce qu’est cette direction :
  • Lors de la conception de formulaires de saisie de données tels que le courrier électronique, un bon programme doit ignorer la casse de l'adresse e-mail. Cela ne devrait pas générer d'erreur si la touche CAPSLOCK est enfoncée car l'adresse e-mail est unique en minuscules. Si le programme accepte une nouvelle adresse e-mail en entrée, vérifiez-la dès le début du processus de saisie pour alerter l'utilisateur qu'il utilise un format d'adresse incorrect. Cette solution inclut à la fois des vérifications évidentes comme le signe « @ » manquant, et des vérifications moins évidentes, comme la vérification du mauvais ordre des caractères comme « gmail.ocm ».

  • Lorsque l'utilisateur est redirigé vers une action, un bon programme doit se souvenir de sa position actuelle et le renvoyer une fois qu'il a terminé. Un bon programme doit également mémoriser les données déjà transmises par l'utilisateur, ce qui est important pour une interaction ultérieure avec lui.

    Disons que vous recherchez un voyage en avion en tant qu'invité sur Expedia. Plus tard, vous décidez de créer un compte. L'application devrait enregistrer toutes vos recherches précédentes dans le nouveau compte et vous devriez pouvoir y accéder depuis d'autres appareils.


  • Qui est un ingénieur logiciel ?  Génie logiciel VS
  • Un bon programme est conçu en tenant compte des scénarios de comportement des utilisateurs. Vous n’avez pas seulement besoin d’ajouter de nouvelles fonctionnalités de manière ponctuelle ; mettez-vous à la place de l’utilisateur. Un jour, je réservais des billets d'avion et j'ai oublié d'indiquer mon numéro de voyageur fréquent. Après avoir reçu la confirmation, j'ai décidé d'aller sur le site Web de la compagnie aérienne et de l'ajouter pour bénéficier de la réduction. Pour comprendre comment faire cela, j'ai bidouillé le site pendant 10 bonnes minutes. L'application était si peu évidente que j'ai simplement parcouru sans but les différentes pages du site afin de trouver ce dont j'avais besoin. Plus tard, j'ai découvert que j'avais déjà atterri plusieurs fois sur la bonne page, mais je ne l'ai même pas compris, car le champ dont j'avais besoin était perdu parmi d'autres champs similaires de forme énorme.

    Il s'est avéré que pour modifier les informations du voyage, je devais faire défiler une vingtaine de lignes du formulaire, saisir le numéro de carte de fidélité et le numéro de téléphone, sans lesquels le formulaire ne pourrait pas être envoyé pour vérification. Ceci est un exemple de programme qui a été développé sans réfléchir au niveau de confort de l'utilisateur.

Fiabilité, sécurité et sûreté

À mon avis, la différence la plus importante entre un développeur de logiciels professionnel et un amateur est la prise en compte de paramètres tels que la fiabilité, la sécurité et la sûreté de l'application lors de sa création.
Un vrai professionnel sait qu’il est responsable de la sûreté et de la sécurité de sa solution.
Certaines parties du programme doivent tolérer les entrées incorrectes, les états incorrects et les interactions incorrectes. C’est en effet très difficile à appliquer et c’est la principale raison pour laquelle nous entendons des histoires de personnes qui meurent à cause de bugs logiciels. Les utilisateurs ont saisi, saisissent et continueront de saisir des données incorrectes dans le programme. Cela doit être accepté comme un fait. D’ailleurs, certains le feront exprès, dans le but de casser l’application et d’accéder aux ressources dont elle dispose.
Qui est un ingénieur logiciel ?  Génie logiciel VS
Voici un exemple concret : la personne présumée responsable de la récente violation de données d'Equifax est accusée d'avoir manqué à ses responsabilités professionnelles, qui consistaient à développer des solutions pour résister aux entrées malveillantes et malveillantes dans tous les produits logiciels mis à la disposition du public. Les incidents liés à la sécurité des informations impliquent non seulement des saisies incorrectes et malveillantes, mais également des données mal saisies. Si un utilisateur a oublié son mot de passe, combien de fois peut-il tenter de le saisir ? Allez-vous le bloquer après cela ? Que se passe-t-il si quelqu'un d'autre essaie de bloquer son compte ? Un utilisateur peut-il transmettre ses informations d'identification via un canal de données non crypté ? Que se passe-t-il si la demande de connexion provient d'un endroit inhabituel ? Que ferez-vous si la tentative de connexion semble automatique ? Qu'avez-vous fait pour protéger vos utilisateurs contre les scripts intersites, la falsification de requêtes intersites et le phishing courant ? Avez-vous une stratégie de sauvegarde en cas d'attaque DDoS sur vos serveurs ? Ces questions mettent en évidence quelques-uns des problèmes qui doivent être pris en compte. Le programme protégé n'enregistre pas les informations importantes sous forme de texte. Il le protège avec un chiffrement unidirectionnel complexe (facile à chiffrer mais presque impossible à déchiffrer sans la clé). Ce sont des mesures de sauvegarde au cas où le programme serait piraté. Les pirates découvriront des données cryptées qui leur sont inutiles. Des problèmes inattendus surviennent même dans les meilleurs programmes. Un programmeur qui n’est pas préparé à ces situations peut difficilement être qualifié de professionnel. Tant qu’il ne s’attend pas à un comportement inattendu, il n’est pas ingénieur. Il est « l’auteur de programmes dangereux ». Les erreurs dans les programmes ne sont pas toujours évidentes. Notre capacité intellectuelle à anticiper et prévenir les erreurs connues est limitée. C'est pourquoi les ingénieurs logiciels comprennent l'importance de bons outils pour leur permettre d'écrire des logiciels corrects et sécurisés.

Outils requis

Il ne fait aucun doute que nous avons besoin d’outils de développement différents et efficaces. Leur rôle est souvent sous-estimé, mais en réalité, ils permettent d'économiser beaucoup de temps et d'efforts, simplifiant considérablement certaines tâches. Imaginez si vous deviez encore télécharger des fichiers via FTP pour le déploiement, pour ainsi dire, à l'ancienne. Imaginez déboguer des problèmes de réseau et de performances sans Chrome DevTools ! Et comme il serait inefficace d’écrire du code JavaScript sans ESlit et Prettier de nos jours !
Qui est un ingénieur logiciel ?  Génie logiciel VS
Tout outil réduisant le temps de retour d'information lors de l'écriture du code devrait être le bienvenu. Lorsque je trouve un outil qui ne m'était pas familier auparavant, mais qui est vraiment utile et efficace, je ne peux que regretter de ne pas l'avoir utilisé avant ce moment heureux.
Des outils meilleurs et plus modernes vous aideront à devenir un meilleur programmeur. Trouvez-les, utilisez-les, appréciez-les et, si vous le pouvez, améliorez-les. Et ne vous attardez pas sur la même chose : qui sait, peut-être qu'avec un nouvel outil, vous passerez du temps à installer et à apprendre une fois, et vous résoudrez ensuite les problèmes plusieurs fois plus rapidement ?

L'évolution du génie logiciel

Personne ne peut apprendre le génie logiciel en deux mois, six mois ou même un an. On ne vous apprendra pas comment devenir ingénieur logiciel dans un cours, une université ou un camp d'entraînement. J'étudie depuis plus de vingt ans et je continue d'étudier maintenant. Je n'ai pu me qualifier confortablement de programmeur expérimenté qu'après une décennie d'apprentissage, de développement, de création et de maintenance d'applications utilisées par des milliers d'utilisateurs. Le génie logiciel n’est pas pour tout le monde, mais tout le monde devrait apprendre à résoudre ses problèmes à l’aide d’un ordinateur. Si vous pouvez apprendre à écrire des programmes simples, vous devriez le faire. Si vous pouvez apprendre à utiliser des logiciels accessibles au public, vous devriez le faire. Si vous pouvez apprendre à utiliser un logiciel open source et à le personnaliser vous-même, vous disposez d’un super pouvoir ! Chaque jour apporte aux développeurs de nouveaux défis, de nouveaux problèmes, c'est pourquoi l'ingénierie logicielle est nécessaire. La tâche principale de cette profession est de créer des logiciels afin qu'une personne ordinaire n'ait pas à s'en occuper pendant de nombreuses années. Ainsi, il n’est pas nécessaire de faire de longues études pour interagir avec les programmes. Et pourtant, les ingénieurs logiciels réfléchissent constamment à la création de meilleurs outils capables de résoudre des problèmes connus plus complexes et font tout leur possible pour garantir que de nouveaux problèmes apparaissent aussi rarement que possible.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION