"C'est le pire langage de programmation que j'ai utilisé". Comment GW-Basic a traumatisé une génération entière

Lorsque nous parlons de langages de programmation « difficiles » et / ou « détestés », il est relativement courant pour des noms tels que C ++, Java, PHP ou même JavaScript. Cependant, pour de nombreux programmeurs vétérans, il y a un langage qui prend la paume comme le pire de tous: GW-Basic.

Bien qu'il ait été le point de départ de la programmation pour des milliers de personnes dans les années 80, ce langage a représenté un cauchemar authentique en termes de convivialité, de structure et de maintenance du code.

L'écrivain et développeur Huw Collingbourne a expliqué sur sa chaîne YouTube toutes les raisons légitimes d'avoir un certain « en ligne » dans cette langue.

Les origines de GW-Basic

Au début des années 1980, l'informatique personnelle a commencé à décoller. Les premiers PC avec MS-DOS ont utilisé pour inclure gratuitement un langage de programmation de base: GW-Basic. Le nom n'a jamais eu d'origine officielle claire; Certains l'ont attribué à 'Gee Whiz'(« Caramba! », En anglais), comme une expression de surprise à la programmation logicielle.

La gduité et la disponibilité de GW-Basic en ont fait la première langue de nombreux programmeurs autodidactes, mais aussi sous la source de frustrations qui ont marqué ses débuts.

Obstacles impensables aujourd'hui

Et, par rapport à n'importe quelle langue moderne, GW-Basic ressemblait plus à un champ extrait qu'à un environnement de programmation. Ce qui pour nous aujourd'hui est le minimum attendu dans une langue ou dans un éditeur, il n'existait tout simplement pas au cours de ces années.

I) La tyrannie des numéros de ligne

La fonction la plus caractéristique (et redoutée) de GW-Basic était la nécessité de numéroter chaque ligne de code. Ainsi, un programme typique pourrait commencer par quelque chose comme:

10 Soit x = 1
20 x = x + 1
30 si x> 10 que goto 100
40 Impression x
50 Goto 20
100 fin

Pourquoi ont-ils été laissés dix en dix? Facile: pour pouvoir insérer de nouvelles instructions plus tard. Le problème s'est posé lorsque l'espace intermédiaire n'était pas suffisant: si vous vouliez ajouter vingt lignes entre 10 et 20, vous avez rencontré une impasse.

La seule solution était d'envoyer le flux d'exécution dans une autre partie du code, parfois sur la ligne 5000 ou 10000, générant ce qui a été connu plus tard sous le nom de «code spaghetti»: un enchevêtrement de sauts inintelligibles et difficile à maintenir.

Ii) Goto: la recette du chaos

Au lieu de structures modernes telles que des fonctions ou des procédures avec des noms clairs, GW-Basic dépendait des commandes GOTO et GOSUB. Ceux-ci ont transféré l'exécution à un autre programme du programme, sans offrir de contexte ou de modularité. Le résultat a été un dédale de sauts où suivre la logique du programme était presque impossible.

Les programmeurs qui provenaient de langages plus structurés, ou qui sont ensuite passés à Pascal ou C, se souviennent de la difficulté de purifier les erreurs au milieu de cet enchevêtrement d'instructions.

Iii) L'absence totale d'outils de purification

De nos jours, nous tenons pour acquis que nous pouvons arrêter l'exécution d'un programme, inspecter les variables, établir des points de rupture et même visualiser la pile d'appels. Dans GW-Basic, rien de tout cela n'était possible. La seule façon de comprendre ce qui échouait était de remplir le code avec des instructions d'impression stratégiquement placées:

100 Imprimez « X Vale »; X
110 Imprimer « Entrer dans la boucle »

Ceci non seulement salir le programme, mais a également généré plus de chaos en forçant le programmeur à effacer, à déplacer ou à ajouter ces lignes de purification improvisées.

Iv) L'impossibilité de structurer le code

GW-Basic manquait de fonctions et de procédures avec des noms importants. Toute logique doit s'organiser dans une séquence linéaire, avec des sauts à travers Goto ou Gosub. Cela signifiait qu'il n'y avait pas de réutilisation réelle du code: tout comportement qui a été répété doit être écrit plusieurs fois ou résolu avec un saut à une autre ligne numérotée.

Le résultat a été un monstre difficile à lire, à maintenir ou à se développer. En revanche, même les langues contemporaines telles que Pascal offraient déjà des modules bien définis, ce qui a fait la différence entre un chaotique et compréhensible.

V) implicite et fragile

GW-Basic avait une approche «libérale» en termes de variables concernant: il n'était pas nécessaire de les déclarer. Il était suffisant pour les utiliser et l'interprète a attribué un gars selon le contexte. Ceci, qui nous associons aujourd'hui à des langues dynamiques modernes telles que Python ou Ruby, dans GW-Basic était un piège sans réseau de sécurité.

Une erreur de frappe au nom de la variable (total contre TOTLA) pourrait créer une nouvelle variable sans avertissement. Des opérations aussi simples que l'ajout d'un nombre à une chaîne pourraient provoquer des échecs catastrophiques.

Vi) un éditeur rudimentaire

L'environnement de GW-Basic était une autre limitation: il n'avait pas mis en évidence la syntaxe, ou l'aide auto-réalisée ou contextuelle. Le programmeur a écrit aveuglément, sans support visuel qui l'aiderait à détecter les erreurs.

Pour modifier un long programme, le nombre exact de la ligne à modifier a dû être rappelé. L'insertion ou l'élimination des fragments entiers est devenu une tâche titanesque, et plus d'un projet a fini par abandonner parce que la réorganisation était plus complexe que de l'écrire à partir de zéro.

Vii) sans fichiers source lisibles

Bien que GW-Basic ait permis de stocker les programmes, ils ont été stockés dans leur propre format et pas toujours faciles à partager ou à version. L'idée du contrôle de version – quelque chose de base aujourd'hui avec Git – était complètement impensable dans ce contexte. Chaque copie du programme était, littéralement, la dernière et unique version valide, ce qui a fait du travail fréquente.

Le contraste: Turbo Pascal et la programmation structurée

Le salut pour beaucoup est venu avec Turbo Pascal, lancé au milieu des années 80. Cette langue a introduit des concepts révolutionnaires par rapport à GW-Basic:

  • Déclaration explicite des variables.
  • Procédures et fonctions avec des noms importants.
  • Contrôle typique strict et d'erreur en temps de compilation.
  • Outils de purification de base mais beaucoup plus élevés.

Passer de GW-Basic à Turbo Pascal a été, pour une génération entière, comme passer d'un labyrinthe sombre à une autoroute bien éclairée. Non seulement a facilité la rédaction de programmes plus fiables, mais a également enseigné des pratiques de programmation solides qui sont encore en vigueur aujourd'hui.

En fin de compte, GW-Basic peut être considéré comme un langage de transition: inconfortable, limité et mal conçu, mais cela a poussé beaucoup à de meilleures options. Son héritage le plus important n'est peut-être pas technique, mais pédagogique: il a enseigné, sur la base des erreurs et de la frustration, comment ne doit-elle pas être programmée.

Newsletter

Rejoignez notre newsletter pour des astuces chaque semaine