Beaucoup de développeurs de logiciels aiment rendre les choses compliquées. Ils obtiennent quelque chose qui pourrait être simple et facile et, en raison de ce que la plupart des gens racontent sur Internet, le rendent compliqué.
Les logiciels devraient être simples. Dit comme ça, il est facile de comprendre pourquoi tant de développeurs ont du mal à construire des logiciels à partir de zéro. Dans leur esprit, c’est une chose totalement complexe et difficile et ils restent complètement bloqués au milieu du processus.
Donc, la question est… Comment construire un logiciel à partir de zéro ?
Transcription de la vidéo
John Sonmez :
Hey, quoi de neuf ? John Sonmez de simpleprogrammer.com. Aujourd’hui, j’ai une question sur la construction de logiciels à partir de zéro. C’est une question que j’ai reçue beaucoup de fois de beaucoup de personnes différentes parce que c’est quelque chose qui est difficile à faire quand vous êtes un débutant, pour comprendre comment vous pourriez jamais faire cela.
Cette question vient d’Akash et il dit : « Hey John, vos vidéos sont géniales et j’apprécie hautement vos conseils. Un problème auquel je fais face est que lorsqu’il s’agit de construire un gros logiciel, je ne peux pas penser à la façon de concevoir l’ensemble à partir de zéro. Par exemple, comment décomposer le tout en mini-tâches, puis mettre en œuvre chaque sous-tâche et les assembler pour qu’elles fonctionnent. Ce serait très bien si vous pouvez me guider sur la façon de surmonter ce problème. Merci d’avance. »
Ce que je dirais ici, Akash, c’est que ce que vous voulez faire, c’est de penser – au lieu de penser à prendre un système entier, cette sorte d’approche descendante, de le décomposer en toutes ces pièces, d’assembler toutes ces pièces et de voir comment elles s’assemblent, et de construire ce Transformer massif ou ces Legos à partir de ces énormes Legos. Vous voulez penser au développement de logiciels plus comme une évolution.
Ce que je veux dire par là, c’est qu’il faut commencer par quelque chose de vraiment simple. Commencez avec la chose la plus simple qui pourrait éventuellement fonctionner et qui n’a pas beaucoup de fonctionnalités, puis faites évoluer cela là où vous voulez aller au lieu de faire ce qu’ils appellent une grande conception initiale. Cela ne veut pas dire qu’il ne faut jamais penser à l’architecture globale de la chose et qu’il ne faut pas avoir les conceptions et certaines choses en amont. Dans beaucoup de cas, vous n’avez pas à en faire autant que vous pensez en avoir besoin.
Maintenant, si vous concevez un logiciel qui va être intégré à l’intérieur d’un appareil électronique et qu’un ingénieur matériel va devoir développer le circuit ou une puce personnalisée, ou quelque chose pour que cela fonctionne, vous allez probablement devoir concevoir beaucoup de ces choses en amont et vous allez probablement devoir le faire. Vous pourriez même être limité à ce niveau. Pour la plupart des logiciels que nous construisons aujourd’hui, en particulier les applications web et les choses comme ça ou les applications mobiles, nous pourrions construire quelque chose qui est très, très basique et ensuite le faire évoluer, faire des changements pour le faire grandir et pour ajouter de la complexité selon les besoins.
Une chose – une raison pour laquelle c’est si important – c’est parce que le fléau du développement logiciel, une des pires choses dans le développement logiciel est la complexité. Cette chaîne s’appelle Simple Programmer et mon activité consiste à rendre le complexe simple, parce que c’est ce que nous devons faire. En tant que développeurs de logiciels, l’une de vos tâches principales est de combattre la complexité, car la complexité entre dans le système et le rend difficile à maintenir et à comprendre. Elle rend le système plus susceptible d’avoir des bogues et de tomber en panne. Nous voulons réduire la complexité autant que possible. Nous voulons simplifier. Nous devons commencer aussi simplement que possible, quelle est la chose la plus simple possible qui pourrait fonctionner ?
Bien souvent dans le monde de l’entrepreneuriat, ils appellent cela un MVP ou produit minimal viable. Ce que vous pouvez faire quand vous essayez de construire un grand système logiciel ou ce que vous pouvez faire, c’est que vous pouvez commencer vraiment petit. Commencez avec une très, très petite chose. J’essaie de me souvenir du livre, mais j’ai lu ce très bon livre sur quelque chose, je pense que c’était le développement piloté par les tests étape par étape ou quelque chose comme ça. Dans le livre, il concevait une application Notepad ou quelque chose comme ça. Il a commencé par un développement très, très incrémental, il a fait ça de manière très incrémentale et il a commencé par, je pense, son application avait besoin d’une base de données, mais il a commencé par ne pas avoir de base de données. Au lieu de cela, il a simplement stocké les données dans des fichiers texte qu’il lisait à partir des fichiers texte. Puis il est arrivé à son point où il avait besoin de les mettre réellement dans une base de données, et alors il a modifié le programme et lui a fait lire les mêmes données, sauf qu’il a créé une abstraction pour lire depuis la base de données.
C’est l’évolution naturelle des choses et c’est comme ça que vous pouvez construire ce logiciel complexe. Je vous garantis que la plupart des logiciels complexes qui sont effectivement construits aujourd’hui sont construits de cette manière. Une grande partie d’entre eux n’est pas conçue dès le départ, puis on construit toutes ces pièces en espérant et en priant qu’elles fonctionnent. Sinon, on finit par dépasser le budget et le calendrier. Malheureusement, cela arrive. Si vous voulez réussir, si vous voulez être capable de le faire, commencez par quelque chose de petit. Il n’y a rien qui soit difficile dans ce monde. Il n’y a rien qui soit complexe. C’est seulement qu’il est composé d’un tas de choses simples qui le font paraître complexe.
Vous pouvez construire l’architecture la plus complexe. Vous pouvez construire une chose énorme, mais vous devez commencer par le simple. Tout est composé de ce qui est simple. Ensuite, au lieu d’essayer de prendre tous ces morceaux, commencez simplement. Faites évoluer la chose. Commencez. Construisez quelque chose. Quelle est la chose la plus petite et la plus simple que vous pouvez mettre en place et qui s’approche le plus de la fonctionnalité ? Ensuite, commencez à ajouter des fonctionnalités. Au fur et à mesure que vous ajoutez les fonctionnalités, alors vous ajoutez l’architecture pour les supporter et vous créez des abstractions.
Un livre que je vais vous recommander qui vous aiderait probablement à faire cela s’appelle Clean Code. C’est l’un de mes livres préférés, écrit par Robert Martin. Je recommande définitivement ce livre, mais vous voulez faire évoluer votre architecture. L’autre chose que je dirais à ce sujet, c’est qu’au fur et à mesure que vous faites évoluer les choses, vous allez créer des abstractions pour que tout reste simple et que vous n’ayez jamais cette énorme, énorme complexité. Parfois, il faudra même réécrire tout ou partie du logiciel, mais ce n’est pas grave. C’est ainsi que fonctionne l’évolution des logiciels. C’est mieux que d’ajouter de la complexité.
Bien souvent, les développeurs de logiciels veulent optimiser prématurément. Ils veulent rendre les choses extrêmement flexibles. Ils font une optimisation prématurée sur le logiciel parce qu’ils essaient de construire ce système très, très robuste. Cela échoue souvent parce que nous ne savons pas ce que nous ne savons pas. Nous ne savons pas ce dont nous aurons besoin et il vaut mieux ne pas essayer de l’anticiper, mais simplement dire : « OK. Maintenant, j’ai besoin d’ajouter cette nouvelle fonctionnalité ou de faire fonctionner ceci de cette manière. Comment puis-je le faire évoluer ? »
Rappellez-vous que le développement de logiciels n’est pas comme un pont. Ce n’est pas comme si vous aviez posé du béton et que vous alliez maintenant changer l’architecture de la maison. Les logiciels sont malléables. C’est comme de l’argile. Vous pouvez le modifier. Il n’y a pas de coût élevé, très élevé, pour le modifier et le changer. Vous devez utiliser l’avantage de ce support autant que possible, ce qui se prête à un processus évolutif pour développer le logiciel, par opposition à une grande conception initiale.
J’espère que cela vous aidera Akash. Excellente question. Je pense que beaucoup de gens ont posé des questions à ce sujet dans le passé. Si vous avez une question pour moi, vous pouvez envoyer un courriel à [email protected]. Si vous aimez cette vidéo, cliquez sur le gros bouton » S’abonner » ci-dessous si vous ne l’avez pas encore fait. Si c’est le cas, je vous en remercie. Restez à l’écoute jusqu’à la prochaine fois. Prenez soin de vous.