Revenons d'abord dans le passé pour découvrir ce que faisait Bill Gates au début de sa carrière. Voici un bref résumé tiré de Wikipédia :
Après avoir lu le numéro de janvier 1975 de Popular Electronics, qui présentait l'Altair 8800, Gates contacta Micro Instrumentation and Telemetry Systems (MITS), les créateurs du nouveau micro-ordinateur, pour les informer que lui et d'autres travaillaient sur un interpréteur BASIC pour cette plateforme. En réalité, Gates et Allen ne possédaient pas d'Altair et n'avaient pas écrit de code pour lui ; ils voulaient simplement jauger l'intérêt de MITS. Le président de MITS, Ed Roberts, accepta de les rencontrer pour une démonstration, et en quelques semaines, ils développèrent un émulateur d'Altair qui tournait sur un mini-ordinateur, puis l'interpréteur BASIC. La démonstration, organisée dans les bureaux de MITS à Albuquerque, fut un succès et aboutit à un accord avec MITS pour distribuer l'interpréteur sous le nom d'Altair BASIC. Paul Allen fut embauché par MITS, et Gates prit un congé de Harvard pour travailler avec Allen chez MITS à Albuquerque en novembre 1975. Ils nommèrent leur partenariat « Micro-Soft » et installèrent leur premier bureau à Albuquerque. En un an, le trait d'union fut abandonné, et le 26 novembre 1976, le nom commercial « Microsoft » fut enregistré auprès du bureau du secrétaire d'État du Nouveau-Mexique. Gates ne retourna jamais à Harvard pour terminer ses études.
Microsoft BASIC pour 6502 était basé sur Altair BASIC, que Bill Gates et Paul Allen avaient créé pour le MITS Altair 8800 (qui utilisait le CPU Intel 8080) en 1975, en l'écrivant dans un motel d'Albuquerque, au Nouveau-Mexique. La même année, MOS Technology créa le microprocesseur 6502 comme une alternative moins chère aux autres microprocesseurs de l'époque. Le 6502 allait finalement être utilisé dans de nombreux ordinateurs populaires, comme l'Apple I, l'Apple II, les systèmes Commodore VIC-20 et 64, ainsi que dans des consoles de jeu comme l'Atari 2600.
Pour les passionnés, voici l'une des machines qui utilisaient le microprocesseur 6502 et exécutaient Microsoft BASIC.

Voici quelques caractéristiques :
OS : Commodore Basic 1.0. CPU : 6502 @ 1 MHz. RAM : 4 Ko (première version) puis 8 Ko VRAM : 1 Ko ROM : 14 Ko MODES TEXTE : 40 x 25. MODES GRAPHIQUES : aucun
Que peut-on faire avec 4 Ko de RAM, alors qu'aujourd'hui il nous faut au moins 4 Go ? Était-il possible d'écrire des logiciels avec seulement 4 Ko de RAM ?
Oui, c'était possible — et voici la preuve: le plus ancien morceau de code source publiquement disponible écrit par Bill Gates, en 1978.
Explorons quelques faits à propos de ce code. D'abord, générons un nuage de mots à partir des commentaires du code source pour voir quelle était la principale préoccupation des développeurs :

String, Pointer, Variable, Value et Space sont les mots les plus fréquents, ce qui montre que la gestion de la mémoire était une préoccupation majeure pour ce type de machine. Le code est optimisé pour tirer le meilleur parti de la RAM disponible. Autre observation intéressante : le mot « garbage » apparaît de nombreuses fois — le ramasse-miettes était très important pour optimiser l'utilisation de la mémoire.
Voici comment les chaînes sont gérées, d'après les commentaires du code source :
STRINGS
IN THE VARIABLE TABLES STRINGS ARE STORED JUST LIKE
NUMERIC VARIABLES. SIMPLE STRINGS HAVE THREE VALUE
BYTES WHICH ARE INITIALIZED TO ALL ZEROS (WHICH
REPRESENTS THE NULL STRING). THE ONLY DIFFERENCE
IN HANDLING IS THAT WHEN "PTRGET" SEES A "$" AFTER THE
NAME OF A VARIABLE, "PTRGET" SETS [VALTYP]
TO NEGATIVE ONE AND TURNS
ON THE MSB (MOST-SIGNIFIGANT-BIT) OF THE VALUE OF
THE FIRST CHARACTER OF THE VARIABLE NAME.
HAVING THIS BIT ON IN THE NAME OF THE VARIABLE ENSURES
THAT THE SEARCH ROUTINE WILL NOT MATCH
'A' WITH 'A$' OR 'A$' WITH 'A'. THE MEANING OF
THE THREE VALUE BYTES ARE:
LOW
LENGTH OF THE STRING
LOW 8 BITS
HIGH 8 BITS OF THE ADDRESS
OF THE CHARACTERS IN THE
STRING IF LENGTH.NE.0.
MEANINGLESS OTHERWISE.
HIGH
THE VALUE OF A STRING VARIABLE (THESE 3 BYTES)
IS CALLED THE STRING DESCRIPTOR TO DISTINGUISH
IT FROM THE ACTUAL STRING DATA. WHENEVER A
STRING CONSTANT IS ENCOUNTERED IN A FORMULA OR AS
PART OF AN INPUT STRING, OR AS PART OF DATA, "STRLIT"
IS CALLED, CAUSING A DESCRIPTOR TO BE BUILT FOR
THE STRING. WHEN ASSIGNMENT IS MADE TO A STRING POINTING INTO
"BUF" THE VALUE IS COPIED INTO STRING SPACE SINCE [BUF]
IS ALWAYS CHANGING.
Et voici comment les erreurs sont traitées :
ERROR MESSAGES
WHEN AN ERROR CONDITION IS DETECTED,
[ACCX] MUST BE SET UP TO INDICATE WHICH ERROR
MESSAGE IS APPROPRIATE AND A BRANCH MUST BE MADE
TO "ERROR". THE STACK WILL BE RESET AND ALL
PROGRAM CONTEXT WILL BE LOST. VARIABLES
VALUES AND THE ACTUAL PROGRAM REMAIN INTACT.
ONLY THE VALUE OF [ACCX] IS IMPORTANT WHEN
THE BRANCH IS MADE TO ERROR. [ACCX] IS USED AS AN
INDEX INTO "ERRTAB" WHICH GIVES THE TWO
CHARACTER ERROR MESSAGE THAT WILL BE PRINTED ON THE
USER'S TERMINAL.
Ce qui est intéressant dans ce code source, c'est la clarté avec laquelle de nombreux aspects du programme sont expliqués — inutile de chercher ailleurs pour comprendre ce que fait le code.
Quelques faits sur la qualité du code :
- Le nommage est facile à comprendre
En explorant le code source, vous ne trouverez pas de noms de variables tels que a, b ou x, contrairement à certains projets développés récemment. Les noms sont bien choisis et clairement documentés.

- Le code est découpé en de nombreuses petites sous-routines
Le langage d'assemblage du 6502 est de très bas niveau ; pour rendre le code plus facile à comprendre et à maintenir, le principe « diviser pour régner » est appliqué : le code est découpé en de nombreuses petites sous-routines, ce qui les rend plus faciles à lire et à maintenir. Voici un exemple de petite sous-routine définie dans le code source :

Après avoir exploré le code, je pense que Bill Gates était un développeur brillant autant qu'un homme d'affaires talentueux. Il n'est pas surprenant qu'il soit devenu l'une des figures les plus influentes du monde informatique, aux côtés de Steve Jobs et de quelques autres légendes.
