L'environnement de développement idéal pour une équipe

Tags :
  • MON
  • 2024-2025
  • temps 1
  • Développement
  • Environnement de développement
Auteurs :
  • Loïck Goupil-Hallay

Introduction à l'environnement de développement idéal pour une équipe

MON débutant

  • Utiliser un navigateur web
  • Travail en équipe

Table des matières

  1. Introduction
    1. Le Développeur
  2. Outils au poste
    1. Système d'exploitation
    2. Navigateur
    3. IDE
    4. Terminal
    5. Gestionnaire de versions
    6. Langages de programmation
    7. Conteneuristation
  3. Outils partagés
    1. Communication
    2. Partage de code source
    3. Gestion de projet
    4. Stockage d'artefacts
    5. Qualimétrie Logicielle
  4. Conclusion
  5. Lexique

Introduction

Dans le monde du développement logiciel, une équipe doit disposer d'un ensemble d'outils permettant assurer l'efficacité et la qualité de son travail. Ces outils sont essentiels non seulement pour coder, mais aussi pour partager et gérer le code, communiquer efficacement, analyser et tester les applications, ainsi que pour déployer des solutions robustes. Cette section vise à offrir un aperçu détaillé des outils incontournables qui facilitent chaque aspect du processus de développement.

L'objectif est de vous fournir une vue d'ensemble des outils et pratiques qui sont cruciaux pour le bon fonctionnement d'une équipe de développement, afin que vous ne soyiez pas perdu lorsque vous rejoindrez une équipe de développement.

Toutes les informations concernants les habitudes des développeurs seront tirées des résultats du sondage Stack Overflow Developer Survey 2024

Pour ceux qui souhaitent avoir un aperçu concret: Une implémentation de ces outils est réalisée dans mon POK sur le déploiement automatisé de l'environnement de développement pour une équipe.

Le Développeur

Le développeur est une créature étrange qui passe la majeure partie de son temps à écrire du code, à résoudre des problèmes et à boire du café. Il est souvent solitaire, mais il peut aussi travailler en équipe. Il est passionné par la technologie et aime apprendre de nouvelles choses. Il est curieux, créatif et persévérant. Il est capable de passer des heures à chercher une solution à un problème, sans jamais abandonner. Il est un peu geek, un peu artiste, un peu scientifique. Il aime les défis et les puzzles. Il n'aime pas les bugs, les retards, les réunions et les gens en général. Il est un peu bizarre, mais c'est ce qui fait son charme.

C'est généralement quelqu'un qui a des habitudes et qui aime personnaliser son environnement de travail, il ne faut donc pas le brusquer en lui imposant des outils qu'il n'aime pas. Il est important de lui laisser le choix de ses outils, tout en lui fournissant des recommandations et des bonnes pratiques.

Outils au poste

Cette section sert uniquement pour votre culture personnelle.
Vous trouverez ici une liste de recommandations basées sur les habitudes des développeurs.
Il est important de rappeler qu'il vaut mieux laisser le choix des outils du poste de travail à chaque développeur, en fonction de ses préférences et de ses besoins.

Un développeur a besoin d'un ensemble d'outils pour travailler efficacement. Ces outils sont installés sur le poste de travail de chaque développeur et sont essentiels pour coder, tester et déployer des applications.

Il est essentiel qu'un développeur puisse tester son code localement avant de le partager avec l'équipe. Premièrement car il est timide et n'aime pas que l'on puisse voir que ce qu'il fait ne fonctionne pas tout de suite. Pour cela, il doit disposer d'un environnement de développement complet, incluant un éditeur de texte, un terminal, un gestionnaire de versions, des langages de programmation, des outils de virtualisation et de conteneurisation.

Système d'exploitation

Définition: Le système d'exploitation (OS), c'est le logiciel qui permet à un ordinateur de fonctionner. Il gère les ressources matérielles de l'ordinateur, comme le processeur, la mémoire, le disque dur, etc. Ca lui qui permet de lancer des applications, de lire des fichiers, de se connecter à internet, etc.

Les résultats du sondage OS donne la part des développeurs qui ont utilisé chaque OS de manière extensive au cours de l'année, dans le cadre professionnel:

%%{init: {'theme': 'dark'}}%%
xychart-beta horizontal
  x-axis ["Linux", "Windows", "MacOS", "WSL"]
  y-axis "" 0 --> 65
  bar [57.3, 47.6, 31.8, 16.8]
Linux Windows MacOS

En règle générale, les développeurs préfèrent utiliser tout ce qui n'est pas Windows, car c'est plus stable, plus rapide, plus sécurisé. Un autre avantage est que ces systèmes d'exploitation sont hautement personnalisables, ce qui permet de les adapter à ses besoins.
Le départage entre MacOS et Linux se fait en fonction des préférences personnelles de chacun, et surtout en fonction des préférences pécuniaires de l'entreprise, car fournir une flotte de Macs à tous les développeurs coûte beaucoup plus cher que de fournir des PC sous Linux.

Navigateur

Définition: Un navigateur web est un logiciel qui permet de consulter des sites web. Il permet de lire du texte, de regarder des images, de regarder des vidéos, de remplir des formulaires, etc.

Il existe 3 familles de navigateurs web:

  • Les navigateurs basés sur Chromium (Google Chrome, Microsoft Edge, Opera, Brave, Vivaldi, etc.)
  • Les navigateurs basés sur Gecko (Mozilla Firefox)
  • Les navigateurs basés sur WebKit (Safari)

Pour les postes de travail, les parts de marché sont les suivantes:

%%{init: {'theme': 'forest', 'themeVariables': {'pie1': '#3498db', 'pie2': '#e74c3c', 'pie3': '#2ecc71', 'pie4': '#f39c12'}}}%%
pie
  "Chromium" : 81.24
  "Firefox" : 6.64
  "Safari" : 8.79
  "Autres" : 3.33
Google Chrome Microsoft Edge Mozilla Firefox Safari

Sur chacun de ces navigateurs, il est possible d'installer des extensions qui permettent d'ajouter des fonctionnalités supplémentaires. Certaines des extensions populaires sont:

Il est aussi possible (au niveau de l'entreprise ou du développeur) d'appliquer un profil de sécurité pour limiter les risques de sécurité liés à la navigation web. Tous les navigateurs modernes proposent des fonctionnalités de sécurité avancées, comme la protection contre le pistage, le blocage des publicités, le blocage des scripts malveillants, etc.

Il n'y a donc pas de navigateur idéal, chacun a ses avantages et ses inconvénients. Il est donc important de choisir un navigateur qui correspond à ses préférences, plutôt que de suivre la tendance.

IDE

Définition: Un IDE (Integrated Development Environment) est un logiciel qui regroupe un ensemble d'outils pour faciliter le développement logiciel. Il permet d'écrire du code, de le compiler, de le déboguer, de le tester, etc.

Les résultats du sondage IDE montre que les développeurs ont utilisé au moins une fois dans l'année, dans le cadre professionnel:

%%{init: {'theme': 'forest'}}%%
xychart-beta horizontal
  x-axis ["Visual Studio Code", "Visual Studio", "IntelliJ IDEA", "Notepad++", "Vim", "Android Studio", "PyCharm", "Jupyter Notebook/JupyterLab", "Neovim", "Sublime Text", "Eclipse"]
  y-axis "" 0 --> 80
  bar [73.6, 29.3, 26.8, 23.9, 21.6, 16.1, 15.1, 12.8, 12.5, 10.9, 9.4]
Visual Studio Code Visual Studio IntelliJ IDEA Eclipse Notepad++ Vim Android Studio
Jusqu'à récemment, les 3 IDE les plus populaires étaient Visual Studio Code, IntelliJ IDEA et Eclipse. Mais depuis quelques années, Visual Studio Code a pris une longueur d'avance sur ses concurrents, grâce à sa simplicité, sa légèreté, sa rapidité et sa richesse en extensions, le fait qu'il soit gratuit. Il permet notamment l'intégration d'IA pour la complétion de code, le refactoring, le débogage. Il est devenu l'IDE de référence pour de nombreux développeurs, quel que soit le langage de programmation utilisé.

D'un autre côté, Eclipse est en perte de vitesse, car il est perçu comme étant trop lourd, trop complexe, trop lent et trop peu personnalisable. Il est encore utilisé dans certaines entreprises, notamment celles qui développent en Java, mais il est en train d'être remplacé par IntelliJ IDEA.

Les outils de JetBrains (IntelliJ IDEA, PyCharm, WebStorm, etc.) sont toujours très populaires, aussi riche en extensions, très performants (sans IA) sur la complétion de code, le refactoring, le débogage, etc. Ils permettent aussi l'intégration d'IA par dessus les fonctionnalités déjà existantes. Mais ils sont payants, ce qui peut être un frein pour certaines entreprises. Ils sont souvent utilisés par les développeurs qui travaillent sur des projets complexes, qui nécessitent des fonctionnalités avancées.

Il n'est pas rare de voir des développeurs utiliser plusieurs IDE en même temps, en fonction du langage de programmation, du projet, de l'équipe, etc. Il est donc important de choisir un IDE qui correspond à ses besoins, plutôt que de suivre la tendance.

Terminal

Définition: Un terminal est un logiciel qui permet d'interagir avec le système d'exploitation en ligne de commande. Il permet de lancer des programmes, de manipuler des fichiers, de gérer des processus, etc.

Chaque poste de travail est livré avec un terminal par défaut, mais il est possible d'installer des terminaux plus avancés, comme Hyper, iTerm2, Windows Terminal, etc. Ces terminaux offrent des fonctionnalités supplémentaires, comme la coloration syntaxique, la complétion automatique, la gestion des onglets, etc.

Il existe des outils permettant d'améliorer l'expérience du développeur sur le terminal, permettant de le personnaliser à la fois visuellement et fonctionnellement.

  • Oh My Zsh: Framework de configuration pour Zsh (ne fonctionne pas sur Windows)
  • Starship: Prompt minimaliste, rapide et hautement personnalisable (fonctionne sur tous les systèmes d'exploitation)

Gestionnaire de versions

Définition: Un gestionnaire de versions est un logiciel qui permet de gérer les différentes versions d'un projet. Il permet de suivre les modifications apportées au code, de revenir en arrière, de fusionner des branches,...

Il n'y a pas de débat sur le fait que Git est le gestionnaire de versions le plus populaire, avec une part de marché de 89.48% en 2024. Il est utilisé par la plupart des développeurs, quel que soit le langage de programmation, le projet, l'équipe, etc. Il est rapide, fiable, sécurisé, flexible, distribué, etc. Il permet de travailler en mode déconnecté, de gérer des branches, de fusionner des branches, de réécrire l'historique, etc.

Pensez donc à installer Git sur votre poste de travail, et à vous familiariser avec les commandes de base, comme git clone, git add, git commit, git push, git pull, git merge, git rebase, etc.

Langages de programmation

Définition: Un langage de programmation est un langage formel qui permet de décrire des algorithmes et de les exécuter sur un ordinateur. Il existe des centaines de langages de programmation, chacun ayant ses avantages et ses inconvénients.

Il faut penser à installer les langages et compilateurs nécessaires pour travailler sur les projets en cours. Pas de recommandation particulière, chaque langage a ses avantages et ses inconvénients, il est donc important de choisir un langage qui correspond à ses besoins, plutôt que de suivre la tendance.

Java C++ JavaScript Python Go Rust PHP

Conteneurisation

Définition: La conteneurisation est une technique qui permet d'isoler une application et ses dépendances dans un conteneur isolé en dehors de son système d'exploitation. Cela permet de garantir que l'application fonctionne de la même manière, quel que soit l'environnement dans lequel elle est exécutée. C'est une technique très utilisée dans le développement logiciel moderne.

Les conteneurs sont devenus un outil incontournable pour les développeurs, car ils permettent de créer des environnements de développement reproductibles, portables, légers, sécurisés. Ils permettent principalement de tester des applications dans des environnements isolés, de déployer des applications dans des environnements hétérogènes, de gérer des applications à grande échelle.

Le Sondage sur les outils montre que 58.7% des développeurs professionnels ont utilisé au moins une fois dans l'année, dans le cadre professionnel, un outil de conteneurisation.

Les outils

Docker

L'outil de conteneurisation le plus populaire est Docker, avec une part de marché de 83.03% en 2024. Il est utilisé par la plupart des développeurs, quel que soit le langage de programmation. Il est rapide, fiable, sécurisé, flexible. Attention cependant car docker est un outil sous license propriétaire, il est donc important de bien lire les conditions d'utilisation avant de l'utiliser.

Podman

Une alternative open-source à Docker est Podman, il est compatible avec les images Docker et permet de gérer des conteneurs de la même manière que Docker.

Tous ces outils sont essentiels pour un développeur. Il faut veiller à maintenir ces outils, ainsi que le poste à jour pour garantir la sécurité et la stabilité du poste de travail.

Outils partagés

Les outils partagés sont des outils qui permettent à une équipe de travailler ensemble, de partager des informations, de collaborer sur des projets, de communiquer efficacement, de gérer des tâches, de suivre des projets, de déployer des applications et de surveiller leur bon fonctionnement.

Le Sondage sur les outils de suivi des travaux & documentation donne les résultats suivants parmis les développeurs professionnels:

%%{init: {'theme': 'forest'}}%%
xychart-beta horizontal
  x-axis ["Jira", "Confluence", "Markdown file", "Trello", "Azure Devops", "Notion", "GitHub Discussions", "Miro", "Obsidian"]
  y-axis "" 0 --> 65
  bar [57.5, 35.3, 27.7, 18.9, 18.3, 18.1, 16.2, 14.9, 11.8]

Ces résultats seront détaillés dans les sections suivantes.

Communication

La communication est un élément clé pour le bon fonctionnement d'une équipe.
Au sein d'une équipe de développement, les développeurs ont besoin de pouvoir communiquer de manière fluide et efficace, que ce soit pour partager des informations, poser des questions, résoudre des problèmes, prendre des décisions. Il existe de nombreux outils de communication qui permettent de faciliter la collaboration au sein d'une équipe.
Les résultats du sondage sur les outils de communication met en lumière une diversité d'outils utilisés par les développeurs professionnels:

%%{init: {'theme': 'default'}}%%
xychart-beta horizontal
  x-axis ["Microsoft Teams", "Slack", "Zoom", "Google Meet", "Discord", "WhatsApp", "Telegram", "Skype",  "Google Chat", "Signal"]
  y-axis "" 0 --> 60
  bar [56.2, 49.1, 39.8, 39.1, 33.6, 28.8, 19.4, 12.5, 11.1, 11]

Ces outils permettent de communiquer de différentes manières, que ce soit par chat, par appel vidéo, par email, par téléphone, etc. Il est important de choisir un outil de communication qui correspond aux besoins de l'équipe. De plus il faut s'assurer que les outils de communication utilisés sont sécurisés, fiables, faciles à prendre en main pour les nouveaux arrivants, simples à utiliser, compatibles avec les autres outils de l'équipe. Ils ne doivent pas être intrusifs, ne pas être trop bruyants, ne pas être trop lents, ne pas être trop lourds.

Outils propriétaires

Parmis les outils de communication, on remarque une domination dans le monde professionnel par les logiciels propriétaires (Microsoft Teams, Slack, Zoom, Google Meet & Chat, Skype, Discord, WhatsApp). Ils sont souvent choisis pour leur simplicité d'utilisation, leur compatibilité (pour intégration) avec les autres outils de l'entreprise, leur support technique, leur sécurité, leur fiabilité, leur performance, leur évolutivité, leur mise à jour régulières.

Microsoft Teams Slack Zoom Google Meet WhatsApp Discord Skype

Outils open source

Il existe des alternatives open source à ces outils, qui sont souvent plus respectueuses de la vie privée et de la sécurité des données. Ces alternatives offrent souvent les mêmes fonctionnalités avec parfois une moins bonne intégration avec les autres outils de l'entreprise, un support technique moins réactif et des mises à jour moins fréquentes. Il faut donc peser le pour et le contre avant de choisir un outil de communication.

Telegram Signal Mattermost Mumble

Partage de code source

Définition: Le partage de code source, c'est partager sur une plateforme centralisée le code source d'un projet, pour permettre à l'équipe de travailler ensemble, de suivre les modifications apportées au code, de revenir en arrière, de fusionner des branches, de gérer des conflits, et toute autre tâche liée à la gestion des versions.
C'est l'élément central du travail d'une équipe de développement.

Les fonctionnalités attendues d'une plateforme de partage de code source sont:

GitHub GitLab Bitbucket Azure Devops SourceForge

Gestion de projet

Définition: La gestion de projet, c'est l'ensemble des activités qui permettent de planifier, d'organiser, de suivre, de contrôler et de clôturer un projet.
C'est un élément essentiel pour garantir le bon déroulement d'un projet, pour respecter les délais, les coûts, la qualité, les risques, les parties prenantes, les objectifs, les contraintes, les ressources, les livrables, les dépendances, les priorités, les changements, les problèmes, les conflits, les décisions, les actions, les réunions, les rapports, les documents, les outils, les méthodes, les normes, les bonnes pratiques, les leçons apprises, les succès, les échecs, les améliorations, les innovations, les évolutions, les révolutions.

La plupart des plateformes de partage de code source offrent des fonctionnalités plus ou moins avancées de gestion de projet. Cependant elles peuvent être difficiles à prendre en main pour le reste de l'équipe qui n'est pas développeur, elles peuvent aussi manquer de fonctionnalités avancées de gestion de projet.
En fonction de la composition de l'équipe et des besoins du projet, il peut être intéressant de choisir un outil de gestion de projet dédié, qui offre des fonctionnalités plus avancées, plus intuitives, plus adaptées à la gestion de projet.

Jira Confluence Trello

Stockage d'artefacts

Définition: Le stockage d'artefacts, c'est stocker sur une plateforme centralisée les artefacts d'un projet, pour permettre à l'équipe de délivrer du contenu utilisable marquant l'avancement du projet.

Les artefacts peuvent être:

Les fonctionnalités attendues d'une plateforme de stockage d'artefacts sont:

Nexus Repository MinIO Harbor Artifactory GitHub Packages Quay

Qualimétrie Logicielle

Définition: La qualimétrie logicielle, c'est l'ensemble des activités qui permettent d'analyser la qualité d'un logiciel, de détecter les défauts, les erreurs, les bugs, les vulnérabilités, les failles, les incohérences, les incompatibilités, les inefficacités. Cela repose sur 2 piliers:

Lorsque le travail est bien fait, ces outils sont directement intégrés tout au long du processus de développement, dans ce qu'on appelle des pipelines CI/CD (Continuous Integration/Continuous Deployment). Ainsi chaque modification du code est automatiquement analysée et testée, puis validée. Cela permet de détecter les erreurs le plus tôt possible, de les corriger rapidement, de garantir la qualité du code, de réduire les risques, de gagner du temps, de gagner de l'argent, de gagner en confiance, de gagner en compétitivité.

Les fonctionnalités attendues d'une plateforme de qualimétrie logicielle sont:

SonarQube CodeClimate Codacy SQuORE

Conclusion

Il existe une quantité impressionnante d'outils pour les développeurs. Chaque outil répond à des problématiques spécifiques et s'intègre plus ou moins gracieusement dans un écosystème déjà existant.

La technologie choisie n'est jamais une fin en soi, mais un moyen de répondre à un besoin. Il ne faut jamais s'enfermer dans un outil, mais être prêt à changer si un outil plus adapté se présente.

Il faut savoir choisir les outils qui correspondent le mieux aux besoins de son équipe en s'adaptant aux contraintes de budget et de fonctionnalités. Il est important de ne pas se laisser influencer par les tendances, mais de choisir des outils qui sont adaptés à ses besoins.

Lexique