プログラミング
IDEへの郷愁 (2022)
IDE Nostalgia (2022) (davidsmaynard.com)
要約
50年以上のプログラミング経験を持つ著者が、1972年に開発されたNLS(oNline System)という50年前のIDEがいかに現代のシステムと比較しても高速で効率的であったかを振り返ります。このシステムは、マウスと5キーのキーセットを組み合わせた革新的なインターフェースにより、ユーザーが画面から目を離さずにコマンド入力や情報空間の操作を可能にし、開発者の「フロー」状態を維持することに貢献しました。
全文翻訳
150年前のデバイスが、50年前の統合開発環境(IDE)を素晴らしいものにした。
エンゲルバートのキーセット:片手で操作するコードキーボード
写真提供:Computer History Museum、Mark Richards氏
私は50年以上コーディングをしてきました。今は引退しましたが、コーディングと学習は今でも楽しんでいます。メインフレーム、8ビットCPU、ホームコンピューター、サーバー、モバイルデバイス、そして最新の開発用ラップトップでプログラミングをしてきました。プロフェッショナルとして30以上の異なるプログラミング言語を使用してきました。
50年前、私はこれまで使用した中で最も優れていて、最も流動的なコードエディタの一つを使っていました。それは、カリフォルニア州メンロパークにあるスタンフォード研究所のダグ・エンゲルバートのAugmentation Research CenterにあったNLS(oNline System)でした。1972年のことです。NLSは、1MHzのPDP-10と1MBのメモリ(実メモリ+仮想メモリの合計)で動作していました。なぜ50年前のソフトウェアシステムが、多くの点で、今日見つけられるものよりも高速で効率的なコードエディタだったのでしょうか?それは、ダグ・エンゲルバートの先見の明のある天才と、彼と彼のチームが構築した高性能なユーザーインターフェースによって可能になりました。
このパフォーマンスを可能にした主要なイノベーションの一つは、マウスとキーセットを組み合わせてユーザーインターフェースを制御することでした。ダグとウィリアム・K・イングリッシュはマウスを発明し、キーセットを再発明しました。SRIはマウスとキーセットの両方で特許を申請しました。彼らはマウスの特許を取得し、キーセットは1860年代に電信入力デバイスとして特許が取得されていたことを知りました。
キーセットは5つのキーを持つキーボードで、ユーザーはキーやコードを演奏してモーダルなユーザーインターフェースにコマンドを入力します。「c」はコピー、「d」は削除、「i」は挿入などです。キーセットはキーボードを置き換えることを意図したものではありませんでした。なぜなら、両手でキーボードを操作する方が、連続した文章をタイプするのははるかに速いからです。タッチタイピストは、テキスト入力に必要な精神的な集中を最小限にするために、筋肉の記憶を利用します。
マウスを操作しながらキーセットでタッチタイピング(コーディング)を行うことで、簡単な編集、短いコマンド入力、ハイパーリンクされた情報空間の探索において、同様の筋肉の記憶が可能になりました。情報空間の動的な表示から目を離す必要は一度もありませんでした。
NLSは、それ自身のハイパーリンクされたソースコードを編集するために使用され、1960年代にソフトウェアのブートストラッピングを発明しました。NLSは、テキスト編集が片手でキーセットを、もう片方の手でマウスを操作することで驚くほど効率的であることを実証しました。
NLSがコードエディタとして効率的であった主な属性は以下の通りでした。
一貫した動詞 > 名詞のコマンド構造:
動詞:コピー、挿入、削除、ジャンプ、転置など。
名詞:単語、ステートメント、ブランチ、リンク、グループなど。
キーセット:コマンド動詞を入力する(例:「c」でコピー、「s」でステートメント、「j」でジャンプ、「l」でリンク)。
マウス:名詞とターゲット位置を指し示す。
選択の数はコマンドタイプによって決まる:
コピーは2つの選択(ソースとデスティネーション)を必要とする。
削除とジャンプは1回のクリックを必要とする。
選択は名詞タイプに最適化されている:
ブランチとリンクは1回のクリックを必要とする。
テキストとグループは2回のクリックを必要とする。
厳密に階層化されたファイルシステム。
Viewspecs:ファイル階層をその場で折りたたんだり、フィルタリングしたり、展開したりするためのキーセットコマンド。
NLSシステムのシステムプログラマーとして、私はNLSを使用してNLSのソースファイルを探索・編集しました。ダグはブートストラッピングを強く信じていたため、最初から、NLSによって拡張される最初の「知識労働者」はNLSを作成するプログラマーでした。
1968年のNLS用キーセットキーボードとマウス
画像提供:SRI International © SRI International
このセットアップを使用して、私はタイプライターキーボードに触れることなく、NLSの全ソースコードとその相互接続性を探索しました。
条件が整えば(つまり、夜遅くにPDP-10のロードアベレージが2未満になったとき)、NLSシステムの情報空間を飛び回るのはほぼ魔法のようでした。まるで、テキストとディスプレイの間の滑り摩擦係数がゼロになったかのようでした。
例えば、システムに新しいコマンドを追加したい場合、私はまず、提案するコマンドに最も似ている既存のコマンドのソースを見つけることから始めました。Viewspecsを使ってこのファイルの表示をフィルタリングできました。これは、マウスボタンを押し続け、キーセットでViewspecコードをタイプすることで行われました。Viewspecの「x」は、階層のトップレベルのみと、各ステートメントのテキストを1行だけ表示するため、ファイル内のすべてのプロシージャのアウトラインリストがすぐに表示されました。目的のプロシージャを見つけたら、キーセットで「cb」とコード(「Copy Branch」)を演奏しました。コマンドフィードバックは「Copy Branch from:」と促しました。プロシージャを選択すると、プロンプトは「To:」に変わり、ターゲット位置をクリックしました。プロンプトには「OK?」と表示され、マウスを1回クリックするとコピーが完了しました。次に、キーセットで「rw」(「Replace Word」)とコードを演奏し、新しくコピーされたブランチ内のプロシージャ名をクリックして、新しいコマンド名を入力しました。この一連の操作は2秒未満で完了し、ソースコードから視線を外す必要は一度もありませんでした。メニューバーやコンテキストメニューにマウスを移動させる必要もありませんでした。コードに集中し続けることで、エンジニアははるかに長く「フロー」状態を維持できました。
NLS Viewspec コマンド:動的な表示とアウトライン制御
Viewspecs(View Specifications)は、NLS/AUGMENTにおける単一文字の表示制御パラメータでした。これにより、ユーザーは基盤となるファイルの内容を変更することなく、画面上のテキストと階層のフィルタリング、フォーマット、レベルクリッピングの方法を即座に変更できました。
NLSでは、マウスボタンの組み合わせを押し続けながら5キーのキーセットでコードを演奏することが、シフト状態のように機能しました。
ケース0(マウスボタンなし):小文字(標準Viewspecコマンド)
ケース1(マウスボタン1つ):大文字
ケース2(マウスボタン2つ):数字と特殊文字
ケース3(マウスボタン3つ):Viewspec
以下は、5キーのコードの組み合わせ(X = キーを押した、0 = キーを押していない)、マウスボタンのシフトケース、およびそれに対応する表示アクションのマッピングを示す、完全なNLS Viewspecルックアップテーブルです。
5キーコード | ケース0 (000) | ケース1 (010) | ケース2 (100) | Viewspec アクション / 説明
------- | -------- | -------- | -------- | --------
0000X | a | A | ! | 1レベル少なく表示
000X0 | b | B | " | 1レベル深く表示
000XX | c | C | # | 全レベル表示
00X00 | d | D | $ | トップレベルのみ表示
00X0X | e | E | % | 現在のステートメントレベル
00XX0 | f | F | & | 表示を再作成
00XXX | g | G | ' | ブランチのみ表示
0X000 | h | H | ( | gオフ
0X00X | i | I | ) | 渡されたコンテンツを表示
0X0X0 | j | J | @ | iまたはkオフ
0X0XX | k | K | + | 失敗したコンテンツを表示
0XX00 | l | L | - | plexのみ表示
0XX0X | m | M | * | ステートメント番号を表示
0XXX0 | n | N | / | ステートメント番号を非表示
0XXXX | o | O | ^ | フリーズされたステートメントウィンドウ
X0000 | p | P | 0 | フリーズされたステートメントオフ
X000X | q | Q | 1 | 1行少なく表示
X00X0 | r | R | 2 | 1行多く表示
X00XX | s | S | 3 | 全行表示
X0X00 | t | T | 4 | 最初の一行のみ表示
X0X0X | u | U | 5 | 通常のリフレッシュ表示
X0XX0 | v | V | 6 | リフレッシュ表示を無効にする
X0XXX | w | W | 7 | 全行、全レベル
XX000 | x | X | 8 | 1行、1レベル
XX00X | y | Y | 9 | 空行オン
XX0X0 | z | Z | = | 空行オフ
XX0XX | , | < | [ | (なし)
X0X00 | . | > | ] | (なし)
XXX00 | ; | : | _ | (なし)
XXX0X | ? |
| ALT | 中央のドット
XXXX0 | SP | TAB | CR | (なし)
XXXXX | (なし) | (なし) | (なし) | (なし)
Viewspecはマウスでオブジェクトを選択しながらキーセットでコード演奏できたため、ViewspecはNLSエディタをインタラクティブな多次元ビューエンジンに変えました。
キーセットの学習曲線:参入障壁
NLSのエキスパートユーザーになるためには、キーセットでコマンド(文字)をコード演奏する方法を学ぶ必要がありました。これは、QWERTYキーボードでタッチタイピングを学ぶよりもはるかに簡単でした。私は約2日で、熟練したキーセットタッチタイピストになりました。実際、私は両手でタッチタイピングできるようになるずっと前に、片手でタッチタイピングできるようになりました。
この初期の学習曲線が商業的な採用の大きな障壁となったことは残念です。エンゲルバートはかつてこう言いました。「スティーブ・ジョブズはユーザー調査を行い、三輪車に乗る方が自転車に乗るよりも簡単だと発見し、したがってすべての人は三輪車に乗るべきだと宣言しました。」
右手にマウスがあるときはいつでも、左手にキーセットがあるべきです!
キーセットのコード演奏は、バイナリエンコーディングを使用して5つのキーから31の文字コードをマッピングしました。このバイナリエンコーディングは、