Programmation pilotée par LLM : Oh, vraiment ?

Feb 26 2023
Autant que j'aimerais l'être, je ne suis pas un universitaire en informatique. Pas du tout.

Autant que j'aimerais l'être, je ne suis pas un universitaire en informatique. Pas du tout.

J'ai pris un chemin différent cependant.

Je passe une grande partie de mes journées à lire, écrire, modifier et déboguer des programmes informatiques depuis 25 ans maintenant. Pendant ce temps, j'ai obtenu un diplôme technique en traitement de données, j'ai suivi un cours de premier cycle en informatique pendant plus de 3 ans (avant d'abandonner la 4e année, un semestre environ avant l'obtention du diplôme), et plus tard, j'ai fini par poursuivre un diplôme de troisième cycle en science des données et Big Data, après avoir obtenu un baccalauréat en nutrition.

Au cours de ces 25 dernières années, vous feriez mieux de parier que j'ai lu pas mal de livres, d'articles, de blogs et ainsi de suite, dans un effort honnête pour m'instruire. Pourtant, je me sens tellement sous-éduqué pour offrir des opinions en dehors de mon domaine d'expertise ⎼ c'est-à-dire architecte de systèmes logiciels pour Internet.

C'est pourquoi je recherche toujours des personnes qui connaissent mieux que moi. Donc je ne m'embarrasse pas gratuitement sur Internet. Ce n'est peut-être pas cool mais c'est intellectuellement honnête. Je le prends.

LLM Hype

Dernièrement, il y a eu un battage médiatique sur le sujet de LLM (grands modèles de langage, par exemple GPT-3 ), en particulier ChatGPT . Vous devez vivre sous un rocher pour ne pas en avoir entendu parler. Cette chose est partout. Les gens paniquent à ce sujet. Certains aiment, certains détestent et tout le reste, je suppose.

Je suis ici.

Même si j'ai obtenu un diplôme de troisième cycle dans le domaine de la science des données, je suis loin d'être un expert en LLM. Très très loin. Pas même à la vue des yeux humains. Mes réflexions à ce sujet sont donc basées sur mes observations au fil des ans et sur une part équitable de l'expérience du monde réel en tant qu'ingénieur logiciel. Prenez-le avec un grain de sel.

Qu'est-ce que j'en pense ?

Je pense que cela pourrait être un outil pratique dans votre boîte à outils de programmeur. Ayez-le là, comme vous avez Google et Stack Overflow. C'est ça. Aussi simple que cela.

https://commoncog.com/content/images/2018/12/Paper.Commonplace.37.png

Je veux dire, permettez-moi de développer un peu plus cette affirmation.

Lorsque je suis entré dans la programmation, j'ai dû acheter des livres et des magazines ou les emprunter à des bibliothèques scolaires et publiques. aussi, j'avais un bon copain au travail qui m'a beaucoup appris sur Clipper , et c'est tout. Puis j'ai découvert les forums de discussion en ligne (par exemple GUJ ). Et puis j'ai découvert et participé à des réunions de groupes d'utilisateurs (ex : SouJava ). Et puis c'était Stack Overflow, GitHub , et la pléthore de contenu technique qu'il y a partout sur Internet ⎼ vous savez de quoi je parle, juste Google quel que soit le langage de programmation le plus ésotérique et voilà.

Ces choses ne s'excluaient pas mutuellement, elles s'additionnaient les unes aux autres, comme les briques d'un immeuble. Ou devrais-je dire un gratte-ciel ? Allez comprendre.

Quoi qu'il en soit, je suppose que ce que j'essaie de dire, c'est que, même si je suis capable de rechercher n'importe quoi sur Stack Overflow (ou plutôt sur Google, puis pointez et cliquez dessus), lisez des blogs, regardez toutes sortes de discussions intéressantes sur YouTube , et ainsi de suite, j'achète toujours des livres et je les lis. Une chose n'exclut pas l'autre.

La même chose s'applique aux outils LLM.

Soyez un programmeur axé sur l'éducation

Je voudrais faire une remarque ici : je suis un fervent partisan d'une éducation « de qualité ». Et par là, je veux dire suivre des cours universitaires formels et lire des livres « charnus ».

Je sais que ce n'est pas une opinion populaire de nos jours, avec tous les bootcamps, les cours vidéo rapides et les contenus nano faisant l'objet d'une large publicité, comme s'ils étaient la pénicilline du 21e siècle, mais honnêtement, je m'en fous. La consolidation des connaissances qui résistent à l'épreuve du temps nécessite une éducation solide. Alors, prenez votre temps, faites le travail acharné, dépassez le didacticiel rapide et instruisez-vous vous-même.

Gardez à l'esprit qu'avec une connaissance superficielle, vous ne serez peut-être même pas en mesure de discerner si une réponse Stack Overflow est bonne ou mauvaise; et si c'est bon, et si ça marche comme prévu, pourquoi ça marche. Et dans ce cas, que feriez-vous si cela ne fonctionnait pas ? Essais et erreurs jusqu'à la nausée , n'est-ce pas ? Ce qui nous amène à un fait incontestable.

Personne n'aime ce gars/fille au bureau qui pose des questions tout le temps et qui veut que chaque information soit mâchée pour simplement l'avaler sans avoir à transpirer. Certainement pas.

Laissez-moi vous dire : la programmation basée sur le copier-coller existe depuis assez longtemps , du moins depuis que nous avons pu trouver des solutions candidates pour la plupart des problèmes informatiques que nous recherchons sur Internet. Ce n'est pas nouveau. Les gens font ce truc depuis des lustres maintenant. Bien plus après l'avènement des logiciels open source et des puissants moteurs de recherche. Et il n'y a rien de mal à copier et coller du code depuis Internet. Rien. Eh bien, au moins jusqu'à ce qu'il le fasse.

Après tout, nous pouvons copier et coller de petits extraits de code ici et là, des exemples d'utilisations d'API que nous ne connaissons pas trop, ou que nous n'avons pas encore utilisées, ou que nous commençons rapidement. Nous l'avons tous fait et le ferons encore. (Regex ? Cron ? Ouais, je te sens.) Cependant, si nous n'avons pas une base solide sur la programmation et la conception de logiciels, si nous ne prenons pas notre temps pour comprendre ce que nous faisons, nous nous retrouverons dans une situation frustrante boucle d'essais et d'erreurs. Pire que cela, les amis, nous finirons par introduire des bogues difficiles à trouver, des problèmes de performances et des vulnérabilités de sécurité dans nos logiciels ⎼ qui, soit dit en passant, la plupart du temps ne sont même pas nos logiciels mais les logiciels de nos employeurs. Réfléchissez y un peu.

Le développement de logiciels ne se limite pas à écrire une requête SQL, à créer un point de terminaison d'API, à appeler un service distant à partir d'une application mobile ou à coder une recherche approfondie. Une solution logicielle complète est faite de bien plus que cela. Le génie logiciel, en tant que domaine, est ce qui s'en préoccupe. D'où mon point ici, si vous ne savez pas quoi demander, quel genre de réponses pensez-vous que vous allez obtenir ? Et serez-vous capable de discerner la bonne réponse pour votre cas particulier ?

Comme dit le proverbe, Garbage in, garbage out

Lorsque vous lisez les réponses sur Stack Overflow, vous feriez mieux d'être sûr de ce que vous recherchez, d'être raisonnablement sûr de vous ⎼ il y a aussi beaucoup de contenu indésirable, remarquez ; et ils ne viennent pas avec une étiquette "ordures". Ensuite, vous devez prendre en compte tout le contexte de la question d'origine et les réponses fournies, en sautant les ordures ici et là, avant de pouvoir prendre une décision de copier et coller un extrait de code tel quel ou d'écrire votre propre solution basée sur le construit connaissances ⎼ par exemple, le problème spécifique que vous essayez de résoudre possède ses cas limites particuliers. Et cette chose même, encore et encore, ajoutera des connaissances pour vous.

Vous voyez où nous allons ? Voir mon point ici? Voyez comment ChatGPT peut être un piège ? Vous le demandez, vous obtenez une réponse. Une réponse si confiante que si vous n'avez pas une connaissance large et solide de la programmation, vous achetez de la merde absolue sans même le savoir. J'en ai vu beaucoup avec des amis sur Twitter et ainsi de suite. Même avec des algorithmes largement connus.

En tant que tel, ce "beaucoup plus" est la chose dont nous devrions nous soucier (à côté des bases) et c'est ce sur quoi nous devons nous concentrer (à condition que nous ayons les bases en place). Ce qui nous amène à un autre fait impitoyable.

Nous ne savons pas ce que nous ne savons pas. Et la seule chose que nous puissions faire à ce sujet est d'acquérir de nouvelles connaissances, encore et encore - large d'abord, approfondie ensuite.

Principes fondamentaux de l'architecture logicielle, Mark Richards et Neal Ford

De cette façon, espérons-le, nous saurons ce que nous recherchons et nous aurons au moins une idée de la réponse lorsque nous la trouverons.

- Une connaissance étendue nous donne une direction pour aller chercher des réponses ;
- Une connaissance approfondie nous aide à discerner parmi les réponses trouvées.

D'accord. Cool. Mais comment fait-on cela ?

Pour élargir vos connaissances sur ce qu'il y a à savoir, je pense que les blogs et les vidéos YouTube sont formidables. Ce sont des contenus courts que vous pouvez consommer au quotidien sans transpirer. Mais pour des connaissances solides et profondes , à mon avis (N=1), il n'y a rien de mieux que de lire des livres et des documents officiels. Et si vous le pouvez, si vous ne l'avez pas encore fait, procurez-vous une place (physique ou en ligne) dans un cursus universitaire (diplôme ou troisième cycle selon le cas).

Encore une fois, pas une opinion populaire. Mais je ne suis pas populaire moi-même, alors qui s'en soucie ?

Entre dans les outils LLM

Néanmoins, j'ai plusieurs opinions impopulaires, je pense que celle-ci fera mouche : LLM pourrait être un outil formidable pour vous aider à acquérir de solides connaissances. Comment c'est? Je vais vous dire comment.

Commencez par demander à ChatGPT ce qu'il faut savoir sur, disons, le développement d'applications mobiles. Ensuite, demandez de courts tutoriels et des vidéos YouTube pour avoir une vue d'ensemble. Ensuite, demandez des livres et des conférences hautement recommandés à ce sujet. Parce qu'en fin de compte, vous voulez lire plusieurs articles approfondis, de différents auteurs, avec différents points de vue, pour acquérir une solide compréhension du sujet que vous étudiez.

C'est pour une chose. Une autre chose qui pourrait être utile, c'est lorsque vous lisez un livre et que vous êtes bloqué par un manque de connaissances sur un sujet requis donné. Demandez à ChatGPT de résumer ledit sujet pour vous, afin d'obtenir une base avant de continuer. Même chose que vous feriez avec Google, en lisant une ou deux sources, mais rapidement et droit au but. Pourtant, après, allez-y et approfondissez ledit sujet si c'est quelque chose d'important pour la matière générale que vous étudiez. C'est bien de faire ça.

Et encore une autre circonstance qui pourrait être très utile est que pendant que vous êtes prêt à développer une application logicielle pour un domaine donné, vous n'êtes pas trop familier avec tous les tenants et les aboutissants. J'ai vu ça l'autre jour et je l'ai trouvé assez intelligent.

Disons que vous allez développer une application mobile de fitness, parce que vous aimez le fitness et que vous êtes ravi à l'idée d'aider les gens à retrouver la santé et tout. D'accord. Mais vous ne connaissez pas toutes les applications qui existent, ni leurs fonctionnalités préférées, ni comment elles sont monétisées, etc. Ce sont des questions très objectives. Vous pouvez donc poser ces questions à ChatGPT pour démarrer rapidement. Vous posez des questions sur les exigences de l'application. Vous lui demandez, par exemple, d'écrire l'e-mail de bienvenue que vous allez envoyer aux nouveaux abonnés de votre superbe application de fitness, car vous n'êtes pas particulièrement doué pour cela. Droite. Maintenant quoi? Si vous avez compris ce dont j'ai parlé jusqu'à présent, vous avez déjà une bonne idée de ce que vous devriez faire ensuite. Vous l'améliorez, vous le rendez meilleur, vous mettez votre sauce spéciale. Autrement dit, briser l'inertie, ce qui est sans doute la chose la plus importante dans ce cas, alors rendez-le particulièrement spécial ⎼ sinon, tout ce que vous aurez, ce sont des trucs génériques à vendre. Pas cool, je suppose.

Si vous avez accès à GitHub Copilot et qu'il n'y a pas de mal à l'utiliser sur votre travail, vous pouvez lui demander de vous échafauder des morceaux de code, comme une méthode pour analyser un fichier, un cas de test répétitif, etc. Vous savez, ces choses ennuyeuses que vous devez faire de temps en temps et qui ne peuvent pas être totalement évitées avec une conception de code appropriée et des bibliothèques intelligentes. Aucun problème avec cela. Vous n'obtenez pas de points supplémentaires si vous ne le faites pas ⎼ tant qu'il n'y a pas de politique en place là où vous travaillez.

Il pourrait y avoir beaucoup d'autres applications similaires, remarquez. Pensez-y.

Oh, attendez. J'ai pensé au plus grand avantage que cela pourrait nous apporter : Connaissez-vous ces gars qui aiment poster sur des forums demandant des solutions à leurs travaux scolaires ? Comme, vous savez, vous avez lu la question et c'est presque la déclaration d'affectation littérale. Vous avez probablement déjà vu cela auparavant. Ouais, maintenant ils peuvent demander ça à ChatGPT et nous laisser tranquilles. Tout le monde en est content.

Le LLM remplacera-t-il les programmeurs humains ?

Non je ne pense pas. Je suis très sceptique quant à "X va remplacer les programmeurs humains" . Depuis que j'ai commencé la programmation en 1997, j'ai déjà beaucoup entendu parler de modes comme celle-là.

Cela changera probablement la façon dont nous sommes éduqués sur la programmation, comment nous surmontons les blocages lorsque nous sommes bloqués pendant la programmation, comment nous gérons les choses ennuyeuses, mais nous remplacer, homo sapiens, pour plus que les CRUD et les applications banales largement connues, non, je suis très sceptique à ce sujet. Je peux me tromper cependant.

Et sachez, enfin, que cet article boucle la boucle avec ce qui m'a motivé à l'écrire.

Hier, j'ai eu le plaisir de tomber sur un article étonnant d' Amy J. Ko , qui était un vrai plaisir à lire. D'abord parce que je suis d'accord avec presque tout ce qu'elle y a écrit. Deuxièmement, parce que contrairement à moi, elle est universitaire et suit ce sujet depuis plus d'une décennie. Elle a donc définitivement une chose ou deux pour collaborer à toute cette discussion sans se gêner.

Alors rendez-vous service, coupez le battage médiatique et lisez ces articles exceptionnels pour vous faire une meilleure idée du sujet sous différents points de vue :

- Les grands modèles de langage vont changer la programmation… un peu
- Les grands modèles de langage vont changer la programmation… beaucoup

Il n'y a pas de TLDR ; là. Prenez votre temps, profitez de la balade.

Maintenant, pour terminer ce long article avec une chose amusante : j'avais l'habitude de regarder les gens se moquer des universitaires tout le temps, en disant à quel point le monde universitaire est loin du développement de logiciels dans le monde réel, et puis, tout d'un coup, les gens sont étonnés et paniquent à propos de une chose qui prend vie directement à partir de la recherche universitaire. Quelle grosse ironie. Quel bon moment pour être universitaire.

Quoi qu'il en soit, à la prochaine fois, les amis.

Soyez prudent avec le battage médiatique.

⛧ Voir aussi sur leandrosilva.com.br . Il y a beaucoup plus là-bas.