Comment expliquer le développement de logiciels modernes en langage simple
Certains principes de développement de logiciels, également connus sous le nom de programmation, ne changent jamais vraiment.
La programmation est la résolution de problèmes. La programmation est une communication, bien qu’avec une machine. La programmation est ce qui rend cette machine et des millions d’autres utilisables par les masses. La programmation est imparfaite, toujours un travail en cours. La programmation est un travail.
Préfacez le terme de longue date avec le mot moderne, mais comme dans, programmation moderne ou développement de logiciels modernes et vous dites en fait que les choses ont changé. Cela pourrait suggérer qu’il pourrait y avoir des phases pré-modernes et même anciennes de développement de logiciels, comme s’il s’agissait d’histoire de l’art plutôt que d’ordinateurs et de logiciels.
Le terme développement de logiciels modernes, en particulier, est utilisé avec une semi-régularité. Il est en effet utilisé pour indiquer que l’orateur (ou l’écrivain) fait référence à un logiciel qui est construit et exploité aujourd’hui, par opposition à un moment indéterminé dans le passé. Bien que certains principes de base ne vacillent pas, la plupart des logiciels d’aujourd’hui sont construits différemment et plus rapidement que par le passé.
[ Also read 6 things you can do with agile right now. ]
Les développeurs divisent les choses en petits morceaux, par exemple les applications que vous ou moi utilisons quotidiennement sur nos téléphones et ordinateurs portables peuvent en fait être composées de nombreuses applications plus petites, même si cela n’est pas visible pour un œil non averti.
De plus, les développeurs écrivent de plus en plus de code sans trop se soucier de l’endroit où il s’exécutera, car il sera empaqueté et déployé d’une manière, connue sous le nom de conteneurs, qui promet qu’il fonctionnera de manière cohérente dans pratiquement n’importe quel environnement (plus de détails ci-dessous). Pour certains professionnels de l’informatique, c’est bien différent de ce qu’ils étaient au début.
D’un autre côté, la programmation n’a pas vraiment changé du tout, comme en témoigne cette définition merveilleusement simple du logiciel de Mikhail Opletayev, CTO de Capitol Canary : Un logiciel est un ensemble d’instructions qui indiquent aux ordinateurs ce qu’ils doivent faire.
C’était vrai il y a 25 ans, et ce sera vrai dans 25 autres. Les logiciels sont ce qui fait fonctionner les machines et la plupart des entreprises de nos jours.
Qu’il s’agisse d’afficher une page Web ou de rendre un effet CGI dans le dernier film Marvel, tout se résume à un ingénieur écrivant un ensemble de commandes dans un langage spécial que les ordinateurs comprennent, explique Opletayev.
Encore une fois, ce qui a changé, c’est la façon dont ces ingénieurs écrivent leur code et ce qu’il advient lorsqu’ils ont terminé. Voici une introduction rapide sur les principes fondamentaux de l’évolution du développement logiciel et comment l’expliquer aux personnes non techniques de votre organisation au sens large.
Le développement de logiciels modernes est plus rapide et plus itératif
Le développement de logiciels l’effort nécessaire pour produire ces instructions qui disent aux ordinateurs ce qu’il faut faire, comme le dit Opletayev, était autrefois fait de ce qu’on appelle communément de manière monolithique. Cela signifie que toute l’application est construite à partir de zéro, pièce par pièce, petit à petit. Plus tard, lorsque de nouvelles fonctionnalités ou modifications doivent être apportées, vous traitez à nouveau l’ensemble de l’application, touchez une partie, touchez-les toutes. (Les personnes qui possèdent une maison plus ancienne pourraient comprendre l’application monolithique via une analogie de style « Cette vieille maison » : Remplacez ce vieux bois dur minable dans la salle à manger et vous pourriez très bien découvrir que vous avez également besoin de tous les nouveaux sous-planchers et de l’élimination des moisissures. )
[Also read Continuous integration: 5 key success factors. ]
Les logiciels monolithiques étaient également généralement conçus pour fonctionner dans des environnements très spécifiques, tels que sur un ordinateur portable d’utilisateur final ou sur un serveur physique exécutant un système d’exploitation spécifique, etc. et c’est tout. Si vous voulez qu’il s’exécute ailleurs, vous devrez (ré)écrire plus de code et probablement avoir plusieurs versions de ce qui est en fait la même application. Les applications monolithiques existent certes encore mais ce n’est plus la seule voie. De plus, les logiciels peuvent désormais être écrits une seule fois pour s’exécuter pratiquement n’importe où.
En termes simples, voici ce qui a changé :
Les approches modernes (comme DevOps) et les architectures (comme les microservices) ont permis aux équipes de développement de logiciels de créer des logiciels plus rapidement et de manière plus itérative. Vous n’avez pas à attendre des mois pour livrer une nouvelle fonctionnalité, car vous pouvez simplement écrire et livrer cette fonctionnalité plutôt que de bricoler l’ensemble du système.
Et vous n’avez pas à vous soucier autant des différents environnements, grâce aux conteneurs qui permettent aux développeurs de regrouper leur code et tous les autres composants et dépendances dont il a besoin pour s’exécuter, quel que soit l’environnement, de manière isolée. Cela signifie que la même application conteneurisée doit s’exécuter de la même manière sur l’ordinateur portable du développeur que sur un serveur physique dans un centre de données et sur une machine virtuelle dans un environnement cloud géré.
Vous n’avez pas à attendre des mois pour livrer une nouvelle fonctionnalité, car vous pouvez simplement écrire et livrer cette fonctionnalité plutôt que de bricoler l’ensemble du système.
Les personnes non techniques pourraient comprendre ce concept plus clairement avec un peu de nostalgie. Ravi Lachhman, directeur technique de Shipa.io, utilise le jeu de téléphone de l’enfance, dans lequel le premier joueur peut chuchoter au second, le bleu est ma couleur préférée qui se transforme en bleu La glace est intéressante au moment où le message atteint le _N_ème joueur vers le bas la ligne.
Si au lieu de chuchoter, vous écriviez simplement le message et le transmettez, ce ne serait pas vraiment un jeu, mais il n’y aurait pas non plus de confusion.
Le développement de logiciels est, à certains égards, similaire à un jeu de téléphone, dit Lacchman. Avec toutes les dépendances et configurations dont une application a besoin pour sortir dans la nature, recréer cet environnement à environnement (comme aller de personne à personne dans le jeu) prend du temps.
Les conteneurs ainsi qu’une multitude d’autres technologies et un abandon général du travail manuel en faveur de l’automatisation dans la mesure du possible s’apparentent à simplement écrire le message afin qu’il ne soit jamais mal compris, quelle que soit la distance parcourue. Cela fait gagner un temps incroyable et permet des mises à jour beaucoup plus rapides et plus fréquentes, en termes de jours ou même d’heures, pas de mois.
Construire et expédier exactement ce dont vous avez besoin, avec la vitesse de l’infrastructure conteneurisée, réduit le besoin d’interprétation et constitue certainement une triche pour la vitesse de développement de logiciels des développeurs, déclare Lachhman.
L’infrastructure moderne a également évolué
La vitesse accrue produite par les nouvelles méthodes d’écriture, de conditionnement et de déploiement de logiciels est fortement freinée par les modifications de l’infrastructure sur laquelle les logiciels s’exécutent.
Les principes de base ici restent vrais : une fois qu’un logiciel est écrit par des ingénieurs, il a besoin d’un ordinateur pour fonctionner, explique Opletayev. Pour certains logiciels, cela signifie un téléphone ou un ordinateur portable ; d’autres logiciels fonctionnent sur des ordinateurs plus puissants appelés serveurs ; et encore d’autres logiciels fonctionnent sur les deux. Opletayev donne un exemple opportun de ce dernier : par exemple, Zoom fonctionne sur votre ordinateur portable personnel et exploite de nombreux serveurs pour connecter les appels.
Pendant longtemps, ces serveurs étaient des machines physiques qui se trouvaient soit dans le siège social ou le centre de données, soit peut-être dans une colocation ou une installation d’hébergement ailleurs. Mais ensuite, le nuage est arrivé et a tout changé.
Avec le cloud computing, les entreprises pourraient louer des serveurs au lieu de les acheter (et de les entretenir), sans parler de toute une série d’autres infrastructures et services. Cela a changé la donne, car la puissance de feu informatique brute autrefois réservée aux plus grandes entreprises et gouvernements du monde est accessible à presque tout le monde. Et même pour ces grandes entreprises, cela a apporté de nouvelles économies d’échelle et des implémentations beaucoup plus rapides qui auraient été autrefois inaccessibles.
Au fur et à mesure que les entreprises grandissent et ont besoin de plus de puissance de calcul pour leurs logiciels, leur installation sur chaque serveur devient très fastidieuse et prend beaucoup de temps, explique Opletayev. Au lieu de cela, il peut être empaqueté avec toutes les bibliothèques et les dépendances nécessaires dans des conteneurs et facilement déployé sur des centaines, voire des milliers de serveurs. Là où la construction d’un centre de données pouvait prendre des mois il y a 20 ans, aujourd’hui une grande solution peut être déployée en quelques clics, ce qui entraîne de fortes augmentations de productivité.
« Là où il y a 20 ans, la construction d’un centre de données pouvait prendre des mois, aujourd’hui, une grande solution peut être déployée en quelques clics, ce qui entraîne de fortes augmentations de productivité.
Vous ne pouvez pas exagérer l’importance de ce changement, il s’avère que la modernité dans le développement de logiciels modernes est vraiment un gros problème.
Lachhman propose une délicieuse métaphore pour aider à expliquer l’importance de l’infrastructure et des services cloud aux personnes non techniques : un chef pâtissier qui prépare des cupcakes. En tant que professionnel dévoué, le chef souhaite utiliser les meilleurs ingrédients (code et autres composants logiciels) et outils (infrastructure et services associés) disponibles. Et ils n’ont pas un temps infini pour que leurs clients aient faim, et si vous ne leur livrez pas les sucreries qu’ils veulent, ils iront ailleurs.
Ainsi, le boulanger utilise un mélangeur automatique au lieu d’une cuillère, et ils utilisent un four au lieu de faire un feu à l’extérieur. Et voici où la métaphore de Lachhman clique vraiment : Le chef achète les œufs dans un magasin au lieu d’élever les poulets qui produisent ces œufs.
Les poulets sont des animaux merveilleux, mais ils fonctionnent ! Ils ont besoin de soins, de nourriture et d’un logement; ils peuvent tomber malades et, comme tous les êtres vivants, finiront par mourir. Une salle de serveurs est plus propre et sent beaucoup mieux qu’un poulailler, mais la comparaison est par ailleurs pertinente, tout comme les outils modernes et automatisés du boulanger.
Toutes ces commodités vous permettent, en tant que chef pâtissier, d’innover sur la saveur du cupcake et de l’ajuster au besoin sans avoir à recréer l’œuf, déclare Lachhman, ajoutant : Les services cloud ont fourni exactement cela : Les matières premières que les développeurs besoin pour exécuter et alimenter leurs applications.
Les processus, les méthodologies et la culture de développement de logiciels se sont améliorés
Les deux premiers changements tectoniques dans le développement de logiciels ont nécessité de nouvelles façons pour les équipes de travailler ensemble.
Bien qu’il s’agisse d’une généralisation, les équipes informatiques étaient autrefois beaucoup plus cloisonnées et disparates. Les développeurs ont fait leur travail, puis ont transmis le code aux opérations informatiques (c’est-à-dire aux opérations d’infrastructure) et n’y ont plus jamais pensé. De même, les tests/AQ, la sécurité et d’autres rôles n’ont touché le logiciel que lorsque c’était leur tour et l’ont fait dans un processus monolithique, pièce par pièce. Parfois, ces équipes ne s’asseyaient même pas au même étage ou dans le même bâtiment.
Bien que les distinctions entre les rôles professionnels demeurent, les équipes logicielles modernes sont devenues beaucoup plus hétérogènes et intégrées. Les frontières entre les fonctions ne sont pas aussi rigides, la responsabilité partagée est désormais une chose, et les tests et la sécurité ne sont (espérons-le) pas des vérifications rudimentaires avant un déploiement le vendredi après-midi.
Bien que les distinctions entre les rôles professionnels demeurent, les équipes logicielles modernes sont devenues beaucoup plus hétérogènes et intégrées.
La construction de grands systèmes nécessite plus d’un ingénieur, ce qui oblige les entreprises à disposer de processus permettant de coordonner le travail de plusieurs personnes ou de plusieurs équipes. Dans le monde d’aujourd’hui, la plupart des entreprises utilisent un processus appelé agile, dit Opletayev. Il permet aux entreprises de s’adapter rapidement à l’évolution rapide du marché et d’expédier les logiciels dont leurs clients ont besoin.
Il existe plusieurs saveurs (et encore plus d’opinions sur) l’agilité, mais il suffit de dire que c’est un bon proxy pour les processus, les méthodologies et les cultures qui engendrent un développement logiciel plus rapide et plus cohérent.DevOps et son frèreDevSecOps est un autre exemple majeur.CI/ CDest encore un autre exemple (connexe).
Le développement de logiciels modernes est plus profondément lié à la valeur commerciale
Choisissez votre logiciel axiome, c’est manger le monde, chaque entreprise est une entreprise de logiciels, etc. L’idée est simplement que le logiciel est vital pour pratiquement toute organisation petite ou grande, publique ou privée, ou par toute autre mesure opérant aujourd’hui.
Cela signifie pour le développement de logiciels modernes qu’il est devenu ou devrait devenir, dans le cas des retardataires, beaucoup plus clairement lié à l’impact sur l’entreprise. La valeur de tout ce qui précède n’est pas intrinsèque dans les résultats que ces changements évolutifs permettent.
Le développement de logiciels modernes devrait faire quelque chose de différent pour votre entreprise en améliorant l’expérience client et en générant des revenus ou vous devriez probablement vous demander pourquoi vous le faites, déclare Gordon Haff, évangéliste de la technologie chez Red Hat.
Le développement de logiciels modernes n’est pas vraiment une seule chose, le terme reflète la réalité qu’il existe plus d’options que jamais pour utiliser au mieux vos ressources informatiques limitées afin d’obtenir des résultats optimaux. Pour utiliser une autre métaphore, le développement de logiciels modernes ne signifie pas que vous devez démolir votre maison jusqu’aux poteaux et la reconstruire à partir de zéro.
Bien que l’idée que l’informatique n’ait pas d’importance a été largement surestimée à un moment donné, il n’en reste pas moins vrai que les services cloud, y compris les technologies SaaS, low-code et sans serveur, et même laisser les systèmes hérités seuls et différer leur modernisation s’ils sont fonctionnels tels quels sont tous des moyens de canaliser ressources de développement logiciel plus efficacement, dit Haff.
[ Get exercises and approaches that make disparate teams stronger. Read the digital transformation ebook:Transformation Takes Practice. ]