Conception et architecture logiciels à l’ère de l’IA: jouez au jeu «CRC» | Par Damon Feldman | Mars 2025

 Conception et architecture logiciels à l’ère de l’IA: jouez au jeu «CRC» | Par Damon Feldman | Mars 2025


Génie logiciel

Une ancienne technique comble un écart de compétences communs pour les développeurs qui ont besoin de devenir des architectes et des codeurs de l’IA

Le développement de logiciels a radicalement changé au cours des deux dernières décennies, et j’en ai été en témoigne beaucoup. Aujourd’hui, le codage basé sur les modèles domine – les développeurs saisissent fréquemment des extraits de configuration, du code ou un ordinateur portable Python de Stack Exchange ou GitHub, puis de l’ajustement et de l’étendue plutôt que de concevoir un système à partir de zéro.

Ou les développeurs utilisent simplement l’IA. Pour le meilleur ou pour le pire, l’IA peut lancer le code du passe-partout plus rapidement et mieux que n’importe quel humain. Il n’a pas la créativité et la pensée à grande échelle (à ce jour) pour obtenir la bonne structure, mais peut synthétiser des millions d’exemples typiques en code de travail en quelques minutes.

Cet article a quelques documents de vue d’ensemble dans les deux sections suivantes, puis une transcription complète d’une session de conception CRC hypothétique pour illustrer l’approche.

Où s’adaptent les développeurs maintenant?

Notre vraie valeur en tant qu’humains se trouve maintenant dans structuration et guidage de l’IA, et dans Conception de logiciels Pour être maintenable, évolutif et intuitif – fournissant l’échafaudage global pour que l’IA puisse remplir de détails.

Malheureusement, car une grande partie du développement de logiciels a été subsumée par l’IA ou le codage coupé / coller / tweak, notre muscle pour la conception s’est permis collectivement. Cela laisse les développeurs – en particulier le junior ou le milieu de carrière – avec exactement les mauvais ensembles de compétences et aucun chemin clair pour évoluer en architectes.

Pour construire et affiner la compétence de l’architecture et de la pensée du designnous pouvons dépoussiérer une technique puissante mais souvent négligée appelée Jeu de rôle CRC (Class-Responsibility-Collaborator Role Play).

Le jeu de rôle CRC illustre le processus de conception des logiciels en jouant en quelque sorte un jeu interactif et conversationnel, où un groupe de participants assume chacun les rôles de différents composants système, et décide collectivement Ce que leur propre module ou classe devrait faire (Quelles fonctions ou méthodes il devrait exposer) et comment il devrait collaborer et déléguer à d’autres composants. L’exercice oblige les concepteurs de:

  • Pense Du point de vue de chaque appelants’assurer que les fonctions / méthodes sont intuitives et utiles et conduisent à un code propre dans chaque appelant.
  • Évoluer Interfaces de classe / module récursivementchaque personne personnifiant un module ou une classe pour affiner les propres responsabilités de ce module tout en remettant des détails à la personne suivante pour faire de même.
  • Pensez et apprenez Quelle logique appartient oùcomme chaque participant agit comme un portier pour leur module, basé sur un clair Responsabilité.
  • Favoriser Conception modulaire, maintenable et évolutiveen veillant à ce que les composants logiciels aient une frontière claire basée sur ces responsabilités et exposent des interfaces simples intuitives basées sur les besoins des appels.

Pour illustrer cette technique en action, les sections suivantes vous guideront à travers un (synthétique) Session de jeu de rôles CRC où une équipe conçoit en collaboration Éléments d’une application de liste de TODO avec une hiérarchisation, une catégorisation et une planification alimentées par l’IA.

À la fin, vous verrez comment Un design structuré mais dynamique émerge naturellementconduisant à des logiciels plus propres et plus maintenables.

L’exercice n’est pas seulement un moyen de créer du code modulaire et propre – c’est un moyen d’apprendre et de développer des muscles autour de la pensée de considérations de conception de niveau supérieur toute la journée, chaque jour.

Installation

Nous supposons que nous avons / avons besoin de cours: Tâche, todist, catégoriseur, vectordb, calendrier, dbmanager, ui, et aussi un utilisateur, et que nous avons (arbitrairement) 4 personnes afin que chaque personne «joue» deux rôles dans ce cas.

Tâche

Créez des fonctionnalités dans une application ToDo List pour ajouter une nouvelle tâche. Concevez le processus de saisie des tâches avec la hiérarchisation, la catégorisation et l’automatisation de l’IA pour créer un rappel de calendrier si nécessaire.

Les différentes classes / modules (utilisateur, interface utilisateur, todist, catégoriseur, etc.) sont «jouées» par une personne dans l’exercice. Le dialogue ci-dessous est donc une boîte de dialogue réelle parmi les personnes dans l’exercice. Par exemple, si Bob joue le catégoriseur et que Kumar est le todoliste, Bob a en fait dit: « me semble juste » à Kumar pour indiquer qu’il pensait que l’appel de fonction suggéré était approprié.

Étape 1: entrée de tâche via l’interface utilisateur

Objectif / tâche spécifique: L’utilisateur doit planifier un rendez-vous vétérinaire.

  1. Utilisateur → UI:
    L’utilisateur dit:
    «Comprendre. J’ai besoin de créer une nouvelle tâche pour appeler le vétérinaire et prendre rendez-vous. UI, je veux que vous fournissiez une méthode UI.addTask(string: taskText, date: dueDate) Pour ce faire et montrer la tâche sur l’interface utilisateur. »
  2. Ui:
    «Cela me semble approprié.»
    (Le lecteur d’interface utilisateur ajoute de la fonction / méthode UI.addTask(string, date) → None à la carte CRC pour l’interface utilisateur)
    «Je suis une interface utilisateur et je ne gère que la logique d’affichage, donc je vais pousser tout cela vers Todolist pour comprendre la logique métier. Todoliste: Donnez-moi une méthode: addTask(string, date)– Tout comme le mien, mais vous faites le travail.
  3. Todolist:
    «Hmmm. Est-ce bien pour moi? Oui! Ajouter une tâche à moi-même est mon affaire. Tout d’abord, je vais comprendre la catégorie. Hé, catégoriseur, donne-moi une méthode categorize(string: msg) → string pour déterminer la catégorie. »



Source link

Related post