Programmer ne consiste pas à écraser le clavier et à taper aussi vite que possible. Il ne s’agit pas de mémoriser religieusement les raccourcis clavier et de rendre finalement la souris obsolète. Il ne s’agit pas d’apprendre tous les langages de programmation existants, si tant est que cela soit possible. Un bon programmeur n’est pas défini par la marque, le prix, les performances et le système d’exploitation de son ordinateur, ni par ses préférences en matière d’éditeurs de code et d’IDE – VS Code, Atom, IntelliJ IDEA, Vim, Notepad++ ou autre. Contrairement à la croyance populaire grâce à de nombreux films hollywoodiens, la programmation n’est absolument pas équivalente au piratage.
De plus, elle va au-delà de la mémorisation de la syntaxe et des fonctionnalités intégrées d’un langage de programmation. La logique, les conditions, if
les énoncés et les algorithmes – en particulier ceux de tri – ne donnent pas une image complète de ce qu’est véritablement la programmation. Les mathématiques, la récursion, l’informatique et les modèles de conception ne lui rendent pas non plus justice. Bien qu’ils constituent une énorme partie de ce qu’est la programmation, ils ne sont qu’une pièce du puzzle.
Conception et planification
Avant d’écrire une seule ligne de code, la conception et l’architecture d’un projet sont minutieusement planifiées pour assurer ou au moins augmenter la probabilité d’avoir un cycle de développement fluide. C’est là que la conception logicielle entre en jeu. Les chaînes d’outils, les pipelines, les couches d’abstractions pour les API publiques et internes, la modularisation, les relations entre les objets et la structuration des bases de données sont tous planifiés pendant cette étape du développement.
Nous sommes des débogueurs vivants et respirants
L’art de la programmation nous oblige à sortir des sentiers battus et à résoudre les problèmes avec les solutions les plus pragmatiques, efficaces et réalisables. C’est probablement la raison pour laquelle nous sommes le plus souvent le « gars de l’informatique » ou le « support client » du foyer. C’est pratiquement notre travail de réparer ce qui est cassé. C’est comme si la « programmation » était une façon glorifiée de dire « résolution de problèmes ».
En d’autres termes, nous sommes des débogueurs vivants et respirants sur et hors de nos ordinateurs, et pour cette raison, il est important que nous sachions comment lire et écrire de la documentation. Une documentation appropriée – qui se présente sous la forme de véritables pages de documentation détaillée, ou aussi simple que de saupoudrer des commentaires valables à la base du code – sert d’une des plus importantes lignes de vie d’un programmeur. Sans elle, nous sommes perdus dans l’obscurité, incapables de remplir nos devoirs de débogueur. Peu ou pas de progrès peuvent être réalisés, car la plupart de notre temps serait consacré à l’expérimentation et à l’étude du fonctionnement d’un framework ou d’une base de code héritée. Globalement, il en résulterait une expérience de développeur terriblement affreuse.
Envisager tous les scénarios possibles
Le débogage est déjà assez difficile comme ça. Pour aggraver les choses, l’exécution du code n’est généralement pas linéaire. Les grands projets comportent de multiples « branches » de chemins d’exécution possibles en raison de la logique du programme avec l’instruction if
. Nous devons tenir compte de tous les scénarios et erreurs possibles, surtout s’il s’agit d’une entrée utilisateur. La charge cognitive nécessaire pour garder une trace de chaque chemin d’exécution possible rend la programmation d’autant plus difficile.
Expérience utilisateur
Sortant du monde du développement, nous remplissons les chaussures d’un utilisateur moyen. En plus de fournir des fonctionnalités, d’ajouter de nouvelles fonctionnalités, de corriger les bugs et de documenter notre base de code, nous nous concentrons également sur la façon dont un utilisateur moyen interagit avec notre application ou notre logiciel. Nous prenons en compte de multiples facteurs qui conduisent à une grande expérience utilisateur, tels que (mais sans s’y limiter) l’accessibilité, la convivialité, la facilité d’utilisation et de découverte, la conception de l’interface utilisateur, les thèmes de couleur, les animations fonctionnelles et les performances.
Performances et optimisation
En parlant de cela, les performances sont une énorme facette de la programmation en soi. Nous, en particulier ceux qui ont une formation en informatique, nous efforçons d’utiliser et d’écrire les algorithmes les plus efficaces en termes de temps et d’espace. Nous sommes obsédés par l’insondable échelle de temps des microsecondes afin de tirer le meilleur parti de notre mémoire, de nos processeurs et de nos GPU disponibles.
Dans le contexte du développement web, l’optimisation du réseau est un concept important à saisir. Nous sautons à travers des cerceaux pour minifier et compresser notre HTML, CSS, et JavaScript juste pour minimiser la charge utile d’une réponse du serveur. Les images et autres ressources diverses sont également compressées et chargées paresseusement pour minimiser la quantité de données que l’utilisateur doit télécharger avant qu’une page ne devienne significative et utilisable.
Cependant, il arrive que nous soyons trop obsédés par les performances. L’optimisation prématurée devient un problème lorsque nous nous préoccupons inutilement d’optimiser certaines parties d’une base de code au lieu de nous concentrer sur ce qui doit être fait pour un progrès et une productivité réels. Dans ce cas, nous devons avoir la sagesse de juger quelles parties de la base de code ont vraiment besoin d’être optimisées.
Sécurité
Au delà de l’interface utilisateur et de la logique de notre logiciel, en tant que programmeurs, nous sommes responsables de la sécurité de nos utilisateurs. À notre époque où les données sont très convoitées et fortement monétisées, il est plus important que jamais de s’assurer que les informations personnelles de nos utilisateurs sont en sécurité. Nous prenons des mesures supplémentaires pour protéger les données privées parce que nos utilisateurs ont confiance en nos logiciels. Si nous n’assumons pas cette responsabilité, nous ne sommes certainement pas de vrais programmeurs, même de loin.
On n’est jamais trop sûr quand on aborde la sécurité. En règle générale, nous « ne faisons jamais confiance à l’entrée de l’utilisateur ». On peut même considérer comme une « meilleure pratique » le fait de se donner beaucoup de mal pour aseptiser les données et les entrées utilisateur. Non seulement nous mettons nos logiciels et notre infrastructure en grand danger si nous n’y prenons pas garde, mais nous courons également le risque de compromettre les données sensibles des utilisateurs – les données mêmes que nous promettons de protéger en tant que programmeurs.
La sécurité n’est pas exclusive aux données et aux entrées utilisateur, cependant. Les virus, les vers, les chevaux de Troie, les logiciels publicitaires, les enregistreurs de frappe, les rançongiciels et d’autres formes de logiciels malveillants informatiques continuent de se propager et de tourmenter des millions et des millions d’ordinateurs et d’appareils dans le monde. Même après des décennies d’améliorations technologiques en matière de matériel et de logiciels, il n’existe pas de système invulnérable. La sécurité est simplement un métier qui est continuellement affiné mais qui ne sera jamais parfait car il y aura toujours quelques curieux qui enquêtent et cherchent toutes les façons possibles de « pirater » un système.
Pour cette raison, indépendamment du cas d’utilisation et de la base d’utilisateurs, nous concevons nos logiciels avec la sécurité à l’esprit comme l’une des principales priorités, sinon la principale. Nous faisons cela pour protéger nos utilisateurs des menaces susmentionnées qui peuvent causer des inconvénients tels que la perte de données, la corruption de fichiers et les pannes de système, pour n’en nommer que quelques-uns.
Le travail d’équipe fait fonctionner le rêve
Même s’il ne concerne pas nécessairement la programmation, le travail d’équipe joue un rôle extrêmement important dans le développement de logiciels. Avec toute la complexité et les parties mobiles de tout grand projet, il est impossible pour une seule personne de développer un logiciel de qualité au rythme soutenu d’une itération régulière ou sous les délais stricts et les contraintes de temps d’un client ou de toute entité de supervision.
C’est pourquoi nous avons diverses équipes de personnes qui se spécialisent dans l’une des nombreuses facettes de la programmation. Une seule personne n’aura jamais toutes les compétences et les connaissances nécessaires pour coller efficacement et de manière cohérente toutes les facettes. Une équipe peut être responsable de la conception et de l’accessibilité de l’interface utilisateur, tandis qu’une autre peut travailler sur la fonctionnalité du logiciel lui-même. Si toutes les compétences des différentes équipes spécialisées sont combinées, le logiciel résultant aura les meilleures fonctionnalités, l’expérience utilisateur, les performances et la sécurité qu’il peut avoir dans le cadre des contraintes financières et pratiques.
Pour la gestion du temps et le respect des délais, l’organisation et l’automatisation du flux de travail sont de la plus haute importance. Nous prenons le temps de configurer correctement nos outils de construction et nos pipelines car cela nous fera gagner beaucoup de temps à l’avenir. En général, le retour sur investissement augmente au fur et à mesure que le temps passe.
Bien travailler avec les autres
Pour développer l’idée de travail d’équipe et de coopération, nous établissons des relations saines avec nos pairs parce qu’en fin de compte, le succès d’un projet dépend grandement du succès de l’équipe qui le soutient. Nous nous efforçons d’encourager un environnement de travail favorable, où les aînés expérimentés guident les nouveaux venus avec prudence.
Puisque nous développons des logiciels en équipe, nous devons être attentifs aux autres qui lisent notre code. Pour que le cycle de développement reste viable à long terme, la lisibilité et la maintenabilité sont considérées comme tout aussi importantes que la logique et la fonctionnalité d’un projet. Nous écrivons constamment un bon code, lisible, tout en fournissant des messages de commit et une documentation informatifs, car ceux-ci nous aideront certainement, ainsi que les autres, à mieux comprendre notre code.
En parlant des autres qui lisent notre code, une revue de code est une excellente occasion d’en apprendre davantage sur les meilleures pratiques de programmation. C’est aussi une autre façon de nous familiariser avec une base de code et sa conception et son architecture sous-jacentes. Bien que la critique constructive soit désagréable et difficile à gérer du côté de la personne qui la reçoit, il est important de la prendre comme un conseil avisé afin de nous améliorer en tant que programmeurs.
La programmation est difficile
La programmation englobe de nombreux aspects au-delà de la fonctionnalité, tels que l’expérience utilisateur, les performances, la sécurité et le travail d’équipe. Il ne suffit pas de se concentrer strictement sur un seul aspect en omettant les autres. Pour les projets de taille et d’importance notables, il ne s’agit pas simplement de taper quelques lignes de code. Il faut beaucoup de planification, de conception, de réflexion et de coopération en équipe pour réussir. En fait, on passe plus de temps à réfléchir qu’à taper lorsqu’on programme, surtout pendant les longues sessions de débogage.
En fin de compte, la programmation est vraiment une question d’apprentissage continu et non stop. L’adaptabilité et l’apprentissage constant sont les clés pour survivre dans cette industrie. Nous ne pouvons pas espérer rester pertinents si nous ne faisons pas notre part pour continuer à apprendre. Dans une industrie aussi volatile d’amélioration technologique exponentielle, nous devons suivre son rythme rapide de peur de finir dans la poussière.
Je veux conclure cet article en reconnaissant le travail acharné de tous les développeurs du monde entier. Pour écrire cet article, j’ai dû réfléchir au flux de travail quotidien d’une équipe de développeurs. J’ai dû examiner les nombreux aspects de la programmation et du développement de logiciels qui passent généralement inaperçus. Depuis lors, j’apprécie davantage tous les logiciels installés dans mon ordinateur. À cette fin, j’encourage tout le monde à remercier un programmeur aujourd’hui, quelle que soit son expérience. Où serions-nous sans eux ?
Ne prenez jamais leur dur labeur pour acquis.