まず時代を遡って、Bill Gatesがキャリアの初期に何をしていたかを見てみましょう。Wikipediaからの簡単な記述を紹介します。
Gatesは、Altair 8800を紹介した1975年1月号の『Popular Electronics』を読んだ後、この新しいマイクロコンピュータの制作者であるMicro Instrumentation and Telemetry Systems(MITS)に連絡を取り、自分と仲間がそのプラットフォーム向けのBASICインタプリタを開発していると伝えました。実際には、GatesとAllenはAltairを持っておらず、そのためのコードも書いていませんでした。彼らは単にMITSの関心を探りたかったのです。MITSの社長Ed Robertsはデモのために彼らと会うことに同意し、数 週間で、 ミニコンピュータ上で動作するAltairエミュレータを開発し、続いてBASICインタプリタを開発しました。アルバカーキのMITSのオフィスで行われたデモは成功を収め、インタプリタをAltair BASICとして配布する契約につながりました。Paul AllenはMITSに雇われ、Gatesは1975年11月にハーバード大学を休学してアルバカーキのMITSでAllenと一緒に働きました。彼らはパートナーシップを「Micro-Soft」と名付け、最初のオフィスをアルバカーキに構えました。1年以内にハイフンは取り除かれ、1976年11月26日にニューメキシコ州務長官室に「Microsoft」という商号が登録されました。Gatesが学業を修了するためにハーバードに戻ることはありませんでした。
6502向けMicrosoft BASICはAltair BASICをベースにしていました。Altair BASICは、1975年にBill GatesとPaul AllenがMITS Altair 8800(Intelの8080 CPUを使用)向けに作成したことで有名で、ニューメキシコ州アルバカーキのモーテルで書かれました。同年、MOS Technologyは当時の他のマイクロプロセッサの安価な代替として6502マイクロプロセッサを開発しました。6502は最終的に、Apple I、Apple II、Commodore VIC-20、64システム、そしてAtari 2600などのゲーム機など、多くの人気コンピュータで使用されることになりました。
愛好家のために、6502マイクロプロセッサを使用し、Microsoft BASICを実行していたマシンの1つを紹介します。

いくつかの特徴は次のとおりです。
OS: Commodore Basic 1.0. CPU: 6502 @ 1 mHz. RAM: 4 KB (early version) then 8 KB VRAM: 1 KB ROM: 14 KB TEXT MODES: 40 x 25. GRAPHIC MODES: None
今日では少なくとも4GBが必要な時代に、4KBのRAMで何ができるでしょうか?わずか4KBのRAMでソフトウェアを書くことは可能だったのでしょうか?
可能でした。これがその 証拠です。Bill Gatesが1978年に書いた、公開されている最古のソースコードです。
このコードに関するいくつかの事実を見てみましょう。まず、ソースコードのコメントからワードクラウドを生成して、開発者の主な関心事が何だったかを見てみましょう。

String、Pointer、Variable、Value、Spaceが最も頻繁に繰り返し登場する単語であり、メモリ管理がこの種のマシンにとって大きな関心事だったことを示しています。コードは、利用可能なRAMを最大限に活用するように最適化されています。もう一つの興味深い観察結果は、「garbage」という単語が何度も登場することです。ガベージコレクションはメモリ使用量を最適化するために非常に重要でした。
文字列がどのように管理されているかを、ソースコードのコメントから紹介します。
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.
そして、エラーがどのように処理されているかを紹介します。
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.
このソースコードの興味深い点は、プログラムの多くの側面がどれほど明確に説明されているかです。コードが何をするかを理解するために、他の場所を調べる必要がありません。
コード品質に関するいくつかの事実:
- 命名がわかりやすい
ソースコードを探索しても、最近開発された一部のプロジェクトとは異なり、a、b、xのような変数名は見つかりません。名前は適切に選ばれ、明確に文書化されています。

- コードは多くの小さなサブルーチンに分割されている
6502アセンブリ言語は非常に低レベルであるため、コードを理解し保守しやすくするために「分割統治」の原則が適用されています。コードは多くの小さなサブルーチンに分割され、読みやすく保守しやすくなっています。ソースコードで定義されている小さなサブルーチンの例を次に示します。

コードを探索した後、Bill Gatesは優れたビジネスマンであるだけでなく、素晴らしい開発者でもあったと私は考えています。Steve Jobsや他の数人のレジェンドと並んで、彼がコンピュータの世界で最も影響力のある人物の一人になったのも不思議ではありません。
