Ici archive

Avez-vous déjà essayé de comprendre du code source complexe et vous êtes retrouvé perdu dans un dédale de variables et de fonctions qui semblent écrites dans une langue inconnue ? Si tel est le cas, vous savez à quel point un code illisible peut être frustrant. Heureusement, il existe une solution : le clean code, une pratique de code qui peut aider les développeurs à écrire un code clair, simple et facile à comprendre. Dans cet article, nous allons vous expliquer ce qu’est le clean code, pourquoi il est important et comment vous pouvez l’appliquer à votre propre développement de logiciel. Que vous soyez un développeur chevronné ou simplement curieux de savoir comment fonctionne le code, cet article est pour vous ! 

Mais c’est quoi, le clean code ? 

Le clean code est une pratique de développement logiciel qui vise à produire du code lisible et maintenable. Il s’agit d’une approche axée sur la qualité qui encourage les développeurs à adopter des conventions de codage cohérentes et à se concentrer sur la clarté, la simplicité et la robustesse du code. 

En quoi est-ce important ? 

Le clean code permet de produire un logiciel de qualité supérieure. En écrivant du code clair, les développeurs peuvent simplifier leur travail et accélérer le processus de développement. De plus, le code propre est plus facile à tester, à déboguer et à améliorer au fil du temps, ce qui permet de garantir une meilleure qualité et une plus grande évolutivité du logiciel. En fin de compte, le clean code favorise une meilleure collaboration entre les développeurs et garantit la pérennité d’un projet. 

Les fondements du code propre : les cinq piliers du succès 

La philosophie du clean code peut-être résumée aux piliers suivants :  

1 – La lisibilité

Le code doit être facile à lire et à comprendre pour les autres développeurs. Pour améliorer la lisibilité, vous pouvez utiliser des noms de variables clairs et compréhensibles, éviter les abréviations et les acronymes obscurs, ajouter des commentaires si nécessaire et organiser votre code avec des espaces et une indentation claire. 

var x=10;y=20;if(x>y){console.log("x est plus grand que y");} 

Dans cet exemple, le code est mal formaté, difficile à lire et à comprendre. Les variables sont mal nommées et les blocs de code ne sont pas suffisamment bien formés pour apparaître au premier coup d’œil. 

const ageUtilisateur = 10; 
const ageMinimum = 18; 
 
if (ageUtilisateur < ageMinimum) { 
  console.log("Vous devez avoir au moins 18 ans pour accéder à ce contenu"); 
} 

Ici en revanche, le code est aisément lisible, avec des variables bien nommées et des blocs de code définis. Il est ainsi plus facile à comprendre pour les autres développeurs et à maintenir à l’avenir. 

2 – La simplicité

Chaque bloc de code doit être simple et élégant, sans fioritures inutiles. Pour simplifier votre code, vous pouvez utiliser des structures de contrôle de flux simples, éviter les structures de données complexes et les algorithmes compliqués et supprimer les variables inutiles. 

var x = 10; 
var y = 20; 
var result = 0; 
for (var i = 0; i < x; i++) { 
  result += y; 
} 
console.log(result); 

Dans cet exemple de mauvaise pratique, le code est plus complexe qu’il ne devrait l’être. Les variables sont mal nommées, les structures de contrôle de flux et les boucles sont utilisées inutilement pour effectuer une simple opération mathématique. 

const nombreRepetitions = 10; 
const nombreAjouts = 20; 
 
const resultat = nombreRepetitions * nombreAjouts; 
console.log(resultat); 

Dans cet exemple de bonne pratique, le code est simplifié en utilisant des variables clairement nommées et en évitant les boucles et les structures de contrôle de flux. Le code est plus facile à comprendre et à maintenir. De plus, le calcul est effectué en une seule ligne de code, ce qui le rend plus efficace. 

3 – La modularité

Le code doit être organisé en modules clairement définis, ayant des responsabilités précises. Pour rendre votre code plus modulaire, vous pouvez diviser votre code en petites fonctions réutilisables, utiliser des variables globales avec parcimonie et éviter les effets de bord (lorsqu’une fonction modifie une variable qui n’est pas passée en paramètre). 

var utilisateurs = []; 
 
function ajouterUtilisateur(nom, age) { 
  utilisateurs.push({nom: nom, age: age}); 
} 
 
function trouverUtilisateur(nom) { 
  for (var i = 0; i < utilisateurs.length; i++) { 
    if (utilisateurs[i].nom === nom) { 
      return utilisateurs[i]; 
    } 
  } 
} 
 
function supprimerUtilisateur(nom) { 
  for (var i = 0; i < utilisateurs.length; i++) { 
    if (utilisateurs[i].nom === nom) { 
      utilisateurs.splice(i, 1) ; 
      break;
    } 
  } 
} 

Dans cet exemple, toutes les fonctions manipulent une variable globale utilisateurs, ce qui rend le code difficile à comprendre et à modifier. 

class GestionUtilisateurs { 
  constructor() { 
    this.utilisateurs = []; 
  } 
 
  ajouterUtilisateur(nom, age) { 
    this.utilisateurs.push({nom: nom, age: age}); 
  } 
 
  trouverUtilisateur(nom) { 
    for (var i = 0; i < this.utilisateurs.length; i++) { 
      if (this.utilisateurs[i].nom === nom) { 
        return this.utilisateurs[i]; 
      } 
    } 
  } 
 
  supprimerUtilisateur(nom) { 
    for (var i = 0; i < this.utilisateurs.length; i++) { 
      if (this.utilisateurs[i].nom === nom) { 
        this.utilisateurs.splice(i, 1); 
        break; 
      } 
    } 
  } 
} 
 
const gestionUtilisateurs = new GestionUtilisateurs(); 
gestionUtilisateurs.ajouterUtilisateur("Jean", 30); 
const utilisateur = gestionUtilisateurs.trouverUtilisateur("Jean"); 
gestionUtilisateurs.supprimerUtilisateur("Jean"); 

Ici, nous avons défini une classe GestionUtilisateurs qui encapsule toutes les fonctions de gestion des utilisateurs. Les fonctions sont des méthodes de la classe, ce qui rend leur relation avec la classe plus explicite. Nous avons également utilisé le mot-clé this pour faire référence aux propriétés et méthodes de l’objet instancié à partir de la classe. L’utilisation d’une classe offre une abstraction plus élevée du code et facilite la réutilisation du code. La classe peut être facilement instanciée plusieurs fois, ce qui permet de gérer plusieurs listes d’utilisateurs indépendantes. 

4 – L‘évolutivité

Le code doit être conçu pour être facilement modifiable et extensible au fil du temps. Pour rendre votre code plus évolutif, vous pouvez prévoir des extensions futures, utiliser des structures de données et des algorithmes flexibles et isoler les parties du code qui sont susceptibles de changer. 

function calculerPrixTotal(articles) { 
  let total = 0; 
  for (let i = 0; i < articles.length; i++) { 
    total += articles[i].prix; 
  } 
  return total; 
} 

Dans cet exemple, la fonction calculerPrixTotal prend un tableau d’objets d’articles et calcule le prix total en additionnant le prix de chaque article. Bien que cette fonction fonctionne correctement pour le moment, elle n’est pas évolutive car elle ne prend pas en compte les futurs changements de spécifications. Par exemple, si vous souhaitez ajouter une remise ou un code promotionnel à la commande, vous devrez modifier cette fonction existante, ce qui peut entraîner des erreurs ou des bogues. 

class Commande { 
  constructor() { 
    this.articles = []; 
    this.remise = 0; 
  } 
  
  ajouterArticle(article) { 
    this.articles.push(article); 
  } 
  
  calculerPrixTotal() { 
    let total = 0; 
    for (let i = 0; i < this.articles.length; i++) { 
      total += this.articles[i].prix; 
    } 
  
    return total - this.remise; 
  } 
  
  appliquerRemise(codePromo) { 
    // logique de vérification du code promo 
    // si code valide, assigner la remise appropriée 
    this.remise = calculerRemise(codePromo, this.articles); 
  } 
} 
 
function calculerRemise(codePromo, articles) { 
 // logique de calcul de remise 
  return remise; 
} 

Ici, nous utilisons plutôt une classe Commande pour encapsuler la logique de commande, ce qui rend le code plus évolutif. La classe contient des méthodes pour ajouter des articles à la commande, calculer le prix total de la commande et appliquer une remise. La logique de calcul de remise a été extraite dans une fonction séparée, ce qui rend la classe Commande plus cohérente et facile à comprendre. Si nous voulons ajouter une nouvelle fonctionnalité à la commande, comme l’application d’une taxe de vente, nous pouvons simplement ajouter une nouvelle méthode à la classe Commande sans avoir à modifier la logique existante. Cela rend le code plus évolutif et plus facile à maintenir à long terme. 

5 – La robustesse

Le code doit être résistant aux erreurs et aux pannes et capable de gérer les situations imprévues de manière élégante. Pour cela, il est important de prévoir les cas d’erreurs et de les gérer de manière adéquate, de valider les entrées de l’utilisateur et de gérer les exceptions de manière appropriée. Un code robuste est capable de faire face à des situations imprévues sans plantage et de fournir des informations d’erreur claires et précises pour aider les utilisateurs à comprendre les problèmes rencontrés. 

function division(a, b) { 
  return a / b; 
} 

Dans cet exemple, si la variable b est égale à zéro, une erreur de division par zéro se produira. Cette erreur peut causer des plantages imprévus et des comportements indésirables du programme. 

function division(a, b) { 
  if (b === 0) { 
    throw new Error('Division par zéro impossible'); 
  } 
  return a / b; 
} 

Dans cet exemple, nous avons ajouté une vérification pour éviter la division par zéro. Si la valeur de b est égale à zéro, nous levons une exception avec un message clair pour informer l’utilisateur du problème. Ainsi, le programme ne plante pas et l’utilisateur est informé du problème. 

Le Clean Code, c’est donc penser à long terme

La qualité du code est une préoccupation constante pour tout développeur soucieux de produire des logiciels de qualité. Le clean code fournit des principes et pratiques qui permettent d’écrire du code clair, simple, lisible et facilement évolutif. En respectant ces principes, les développeurs peuvent créer des programmes durables, efficaces et évolutifs et ainsi contribuer à l’amélioration globale de la qualité du code dans leur entreprise ou leur communauté de développement.

En somme, le clean code est un moyen de travailler plus intelligemment et de créer des logiciels de qualité supérieure pour répondre aux besoins des utilisateurs finaux. L’adoption de ses pratiques est essentielle pour tout développeur qui souhaite améliorer sa productivité, son efficacité et son impact dans le domaine de la programmation.

Vous souhaitez en savoir plus ? Contactez notre équipe de développeurs à la Factory !

Rédigé par Daniel Azevedo, Manager et Lead Developer à la Factory 

À peine quatre mois après sa disponibilité auprès du grand public, Chat GPT 3 publié par Open AI a occasionné un fantastique coup de projecteur sur un champ particulier de l’intelligence artificielle : l’IA générative.

Martin Alteirac, Manager en charge des activités d’intelligence artificielle chez Saegus, dresse le bilan de ces derniers mois et dessine les premières perspectives concrètes en termes d’usages en entreprise de ces technologies.

4 mois après la présentation de Chat GPT par Open AI, qu’en retiens-tu ?

Tout d’abord, il est très intéressant de voir comment OpenAI a réussi, sur la base de différentes briques technologies préexistantes sur lesquelles de nombreuses autres sociétés tech travaillent, à créer un service disruptif qui génère à très court terme un engouement et une adoption massive.

ChatGPT a atteint les 100 millions d’utilisateurs mensuels actifs à peine 2 mois après sa publication, là ou Instagram a mis 2 ans et demi et TikTok presque un an pour atteindre un tel niveau d’adoption.

Cette réussite tient évidemment à la performance des différentes briques technologiques, mais surtout à mon sens à leur intégration dans une interface simple d’utilisation dont tout un chacun peut se saisir pour des usages du quotidien.

Il est également intéressant de voir à quel point cette large adoption a permis à ces technologies d’être utilisées dans des contextes et pour des usages que même ses créateurs n’avaient pas imaginés. C’est cette adoption à grande échelle qui permet de mesurer à quel point les LLM (Large Language Models) peuvent réaliser des tâches complexes et diverses à condition qu’on sache comment les utiliser.

Comment vois-tu la propagation de ces technologies dans notre quotidien ?

Je pense que trois grands types d’usages vont se démocratiser dans les prochains mois :

  • Le premier type d’usage est l’usage grand public : dans les mois à venir, il est probable qu’OpenAI parvienne à entrainer des modèles toujours plus grands sur des données toujours plus récentes, et que ce type de technologie parvienne à faciliter et accélérer la recherche et la création de contenus à partir de données publiques et typiquement remplacer à terme les moteurs de recherche,
  • Le deuxième type d’usage me semble être plutôt “bureautique” : il est quasiment certain que les capacités de synthèse et de génération de texte de ces IA vont devenir les meilleurs alliées de nos tâches récurrentes du quotidien – gestion des emails, création de contenu corporate ( présentations powerpoint, documents word… ) ;
  • Enfin, de nouveaux cas d’usages vont émerger : des cas d’usages où les équipes Data vont s’emparer des différentes briques technologiques qui constituent un outil comme Chat GPT pour développer de nouveaux cas d’usages internes. Il faudra pour ces cas d’usages apprendre à compléter le « savoir » de Chat GPT pour que ses réponses soient pertinentes dans un contexte d’entreprise, tout en préservant la confidentialité des données utilisées.

C’est sur ce troisième type d’usage que nos équipes travaillent aujourd’hui principalement.

À propos de ces usages spécifiques, peux-tu nous en dire plus sur les travaux en cours ?

Notre premier axe est centré sur la formation de nos équipes et la préparation de plusieurs démonstrateurs permettant de faciliter l’évaluation de la capacité de ces technologies à répondre à des problématiques dans un contexte d’entreprise. Ces démonstrateurs illustrent la performance de ces IA génératives en combinant plusieurs options :

  • Utilisation de données structurées au sein de systèmes d’information ou utilisation de données non-structurées (fichiers PDF ou word…) ;
  • Enrichissement du contexte d’une requête ou fine-tuning des modèles existants grâce aux données récoltées.

En se basant sur ces techniques, il devient possible d’utiliser un chatbot pour des usages internes sans partager de données sensibles avec OpenAI, notamment dans le domaine de l’analyse de contenus texte volumineux :

  • Avis clients sur une plateforme e-commerce ;
  • Verbatims envoyés à un service client pour demander du support ;
  • Documentation interne sous forme de procédures ou contrats, par exemple.

Le deuxième axe est plutôt destiné à compléter notre expertise en développement de produits et solutions d’intelligence artificielle grâce à l’utilisation de modèles pré-entrainés. C’est le deuxième changement majeur induit par ces nouveaux acteurs : la tendance de plus en plus répandue à ne pas systématiquement développer et entrainer des algorithmes custom mais à utiliser des modèles prédéveloppés.

Ce nouveau pan de l’intelligence artificielle va ouvrir la voie à une pratique plus collaborative de l’intelligence artificielle grâce à laquelle des communautés vont collaborer pour mettre à disposition du public des modèles généralistes très performants mais dont on va devoir apprendre à compléter l’apprentissage pour l’adapter à un contexte d’entreprise précis.

Vous souhaitez en savoir plus ?

Saegus est convaincu que la meilleure façon de former et d’accompagner les équipes est de les immerger dans la pratique et les expériences concrètes. C’est pourquoi nous avons imaginé un événement unique et axé sur la pratique pour accélérer l’adoption de Miro auprès de nos consultant·es.

L’ambition de la Miro Week ? Proposer une expérience gamifiée, ludique et engageante pour permettre aux consultants :

  • D’adopter et explorer l’outil de manière accélérée, peu importe leur profil et niveau de maturité ;
  • De recevoir un accompagnement personnalisé selon les besoins de chaque expertise.

Cet événement trouve sa place dans la lignée d’un partenariat entre Saegus et Miro visant à créer des synergies au service des équipes, à explorer les nouveaux usages et à co-construire les nouvelles pratiques de collaboration. Auprès de nos clients, nous sommes ainsi capables de mieux répondre aux enjeux de collaboration et d’être plus innovants dans les formats de collaborations visuelles. Pour en savoir plus sur ce partenariat, c’est par ici.

La Miro Week : how to

Organisé en quatre temps, l’évènement était animé par des temps d’échange entre les consultant·es et les équipes de Miro portant sur les cas d’usages, les fonctionnalités et les astuces d’utilisation de la plateforme. Le plus ? Chacun·e a pu partager ses expériences et conseils découverts au fil de ses missions avec les membres de l’équipe.

Nos équipes ont également rythmée la semaine par des challenges et tips destinés aux saegusien·nes.

Faire ou refaire découvrir Miro de manière ludique et apprenante : telle était l’ambition de l’évènement. C’était important pour nous de démarrer ce nouveau partenariat par un évènement marquant chez Saegus et l’objectif est réussi ! Nous souhaitions créer plus de lien entre nos équipes et celles de Miro et aller plus loin dans la découverte d’usages collaboratifs. C’était aussi un très bon moyen d’identifier les différents besoins d’accompagnement sur l’outil. Je recommande à toute entreprise qui souhaite faire adopter Miro en interne de démarrer par une Miro Week 

Chloé Berthier, Consultante Acceleration Tactics chez Saegus

Au programme de cette semaine, proposée en présentiel et à distance pour permettre au plus grand nombre d’y participer :

  • Jour 1 : session de lancement avec une présentation du partenariat et de Miro et lancement des challenges ;
  • Jour 2 : retours d’expériences par des expert·es Saegus ;
  • Jour 3 : retours d’expériences par des expert·es Saegus & clôture des challenges ;
  • Jour 4 : clôture de la Miro Week, annonce des gagnants des challenges et remise des cadeaux.

Quelques exemples d’activités proposées :

  • 1 session de lancement et 1 session de clôture
  • 1 présentation de Miro par l’équipe Miro France
  • 2 challenges gamifiés permettant aux participants d’explorer l’outil et de gagner des lots
  • 4 d’expériences de la part d’experts de chaque département ayant utilisé Miro en mission
  • 2 tips partagés chaque jour partagés sur tous les canaux (Teams, écrans phygitaux,..)
  • Plus de 20 lots à remporter

Les sessions keynote

En ouverture de l’événement, nous avons eu le plaisir d’accueillir les équipes de Miro France, qui ont présenté aux saegusien·nes la plateforme et la roadmap des nouvelles fonctionnalités en avant-première.

Des retours d’expérience par expertises

Les saegusien·nes ont pleinement pris part à cet événement en proposant leurs retours d’expérience sur des usages de l’outil, comme :

  • Animer et faciliter un hackathon d’innovation de deux jours sur Miro à l’appui d’une expérience gamifiée ;
  • Cadrer un atelier sur Miro pour engager la transformation digitale des outils de collaboration et communication en utilisant des fonctionnalités comme le brainstorming ou la priorisation ;
  • Cadrer, itérer et valider une gouvernance de la donnée via une suite d’ateliers sur Miro ;
  • S’appuyer sur Miro pour passer de l’idée à un prototype testable en utilisant des outils comme le mindmapping, le prototypage ou le story mapping.

J’ai été convié pour intervenir à la Miro Week sur un retour d’expérience d’une mission. Le sujet ? Préparer, faciliter et restituer un Hackhaton d’innovation sur Miro et de manière gamifiée. Notre intervention à la Miro Week a été une opportunité exceptionnelle de partager nos réalisations, notre retour d’expérience ainsi que les supports de travail Miro que nous avons réalisés et dont nous sommes fiers. Pour les saegusiens, c’était une bonne occasion de découvrir les fonctionnalités avancées de l’outil et de s’en inspirer pour leurs propres projets.

Huanxu Liu, Consultant Acceleration Tactics chez Saegus

Des challenges gamifiés

Pour challenger nos consultant·es – qui ont le sens du défi -, nous leur avons proposé deux challenges : un quizz et la “meilleure vitrine Miro”, regroupant les plus beaux tableaux et visuels créés par nos équipes. Voici quelques exemples de leurs plus belles réalisations :

Cette semaine a permis aux équipes d’aller plus loin dans l’usage de Miro. Les différents cas d’usages partagés lors de la semaine ont aidé à comprendre les nombreuses possibilités offertes par la plateforme. Les saegusien·nes ont également eu l’opportunité d’échanger avec les équipes de Miro sur les meilleures pratiques pour utiliser l’outil de manière efficace.

Nous sommes ravis de travailler avec Saegus et de jouer un rôle qui permet au Saegusiens de continuer à innover non seulement dans leurs projets quotidiens mais aussi chez leurs clients. La collaboration avec Saegus a apporté de nombreux avantages à notre entreprise, tels que l’amélioration de notre offre de produits et services, le développement de notre marché et une augmentation de la marque Miro auprès de notre public cible en France. Leur équipe est extrêmement compétente et dévouée, travaillant en étroite collaboration avec nous pour répondre à nos besoins et objectifs spécifiques. Leur engagement envers l’excellence et la satisfaction de leurs clients est exemplaire, et nous sommes fiers de faire partie de leur réseau de partenaires.

Florence Le, Strategic Marketing France chez Miro

La suite des aventures entre Saegus et Miro ?

Nous ne nous arrêtons pas là ! Pour continuer cette belle aventure, nos équipes ont créé un plan de suivi et d’événements pour maintenir l’engouement généré par la Miro Week.

En interne, l’objectif est de continuer à partager des assets Miro aux saegusien·nes pour qu’ils·elles puissent d’explorer de nouveaux usages en continu, sous la forme de fiches conseils et tips, ou de partages sur la roadmap d’évolution de la plateforme par exemple. Un parcours de formation complémentaire a été proposé à tou·tes à la suite de cet événement.

La suite : animer des meet-up sur les usages et fonctionnalités de Miro, des évènements internes… et bien plus encore !

Cet évènement vous intéresse ?

À propos de Saegus

Saegus s’est donné pour mission de faire découvrir, essayer et adopter le meilleur des usages du digital, et créer des approches uniques et innovantes centrées sur les utilisateurs pour résoudre les problématiques complexes de ses clients.  

Pour un savoir plus : https://saegus.com/fr/

À propos de Miro

Miro est une solution de tableau blanc collaboratif proposant une multitude de fonctionnalités et répondant à de multiples besoins d’équipes : réunions, ateliers, brainstorming, workflows agiles, UX design, mind mapping…

Pour en savoir plus : https://miro.com/app/dashboard/