BASICの8つの原則 --- 『バック・トゥ・BASIC』を読んで

BASICのもともとの設計思想、哲学について知りたくて、『バック・トゥ・BASIC―開発者が語る言語の歴史と設計思想(原著1985, 邦訳1990』を読んでみました。

2016-03-26 14.16.13

■ BASICの8つの原則

KemenyとKurtzは、BASICの設計に8つの原則を持っていました(p.24)。「BASICの哲学」とも言える指針です。
  1. 初心者が楽に覚えられること。
  2. 汎用言語であって、どんなプログラムでも書けること。
  3. 高度な機能は追加機能であること。したがって、もしコストがかかるのなら、初心者でなく熟練者が負担すること。
  4. 利用者とコンピュータの対話機能を十分に生かしたものとすること
  5. 分かりやすく、親切なエラーメッセージが出ること。
  6. 小さなプログラムなら、迅速に応答できること。
  7. ハードウェアの知識は不要であること。
  8. 利用者がオペレーティングシステムに立ち入らなくてよいこと。
これは3つにまとめることができると思います。
  • I:なるべく習い始めは簡単に   --- (原則1~3)
  • II:コンピュータを人間に仕えさせる  --- (原則4~6)
  • III:内部処理をカプセル化する  --- (原則7~8)
このような原則の背景には、Kemenyの想定するBASICの利用者の姿があります。それは、ダートマス大学で「初めてプログラミングに触れる」学生でした。
たとえば、BASICのPRINTコマンドとC言語のprintf関数を比べてみましょう。両方ともいろいろな書式が使える出力ルーチンですが、特にBASICのprintコマンドは(始めのうちは)書式や制御文字を気にしないで済むという点が重要です。必要になってからコマンドの詳細は覚えればよいのです(もっとも、その詳細はprintf関数よりややこしいのですが・・・)。

エラーメッセージについても、タイプミスのような、ごく初歩の、しかし初心者にとっては往々にして重要な「コンパイルエラー(シンタックスエラー)」が想定されているように思います。
プログラムに初めて触れる人をよく観察すると、「コロンとコンマを厳密に区別する」というようなプログラムの常識自体が「初めての体験」なので、このようなエラーメッセージは一般的なプログラマーが想像する以上に大切なのかもしれません。(例えば、C言語でメモリリークやNULLポインターのデバッグをするような(ランタイム)事態とは、良い意味で「住んでいる世界が違う」のかもしれません)。

■ BASICのヒット要因

Kurtzが「開架式の図書館のように」「コンピュータは自由に利用できるようにすべき」(p.30)と考えたように、BASICは若者に「大ヒット」したと思います。それは同時に、多くのストリートBASICという亜種を生むことになりました。多くの弊害が生じましたが、コンピュータの利用層を大きく変容させることに貢献したでしょう。

その、ヒットの要因は、簡潔さと面白さだと思います。若者にとっての典型的なBASICにとってのhello worldプログラムは、
image
この2文のGOTOループはいかにも「バカバカしくて」好きなのですが、当時の若者はコンピュータの「無限のパワー」を感じたのではないかな、と思います。

ちなみにアカデミックなBASICのhello world(的な)入門プログラム(p.25)は、
プレゼンテーション1数学の延長でとても読みやすいですね。そしていかにも「お勉強」的です。

■ BASICの使われ方

さて、プログラミング言語は汎用といっても、言語制作者が想定する用途について最も書きやすく読みやすいものです。
KemenyとKurtzのマニュアルにある例は、数値計算が主になっています。この系譜は、TrueBASICや10進BASICにつながっています。この用途のBASICはとても読みやすく、書きやすいコードです。数学や物理学などで計算してみたいアイディアを試すのには、よいツールだと思います。特に「漸化」や「無限」を味わうのにちょうど良いツールです。
REM Find pi

LET a = 2
LET h = 1/sqr(2)
FOR k = 1 to 10
    LET a = a / h
    LET h = sqr( (1+h)/2 )
    PRINT a
NEXT k

END
(p.137のプログラム例)

ゲームとしてのプログラムでは、始めは書きやすいものの規模の拡大・複雑化にともなって徐々に理解しにくいコードなりがちです。もちろん、そのようなゲームを作りたくなるころには、別の言語に巣立っていくこともできるわけで、プログラミングの初歩としての役割は立派に果たしていると思います。良くも悪くも、今でもHSP(Hot Soup Processor)に受け継がれています。
image
(引用元:http://atelier-digital-isin.info/fc%E5%91%A8%E8%BE%BA%E6%A9%9F%E5%99%A8.html

現在でBASICが最も利用される場面はエクセルなどのマクロ(VBA: Visual Basic for Application)でしょうか。これは、オブジェクト指向が前提になり、BASICのコードの明快さは薄れてしまっているように思います。ただ、自動記録で生成されたコードを「いじる」という使い方では、確かに「BASICらしい」かもしれないな、と思います。
image
(引用元:http://chandoo.org/wp/2011/08/29/introduction-to-vba-macros/

■ BASICの言語としての魅力

BASIC言語は、「素直に手続きが書ける言語」ではないでしょうか。良くも悪くも「手続き」にフォーカスしていると思います。基本操作がコマンド文になっている、関数・式で一貫している他の言語の構造に比べて美しくはない(あまり直交でない)と思います。
インタープリタでPRINTやINPUTコマンドを解釈するには、言語要素として制御構造(IF文とかLOOPとか)を1つ追加するような面倒くささがあります。しかし、コードを見ると些末なカッコやセミコロンが少ないからか、絶妙な読みやすさがあるような気がします。

また、RUNしてからの反応、「手応え感」もプログラミングの楽しさにつながっていると思います。

BASICはその出自を見るとやはり「教育用プログラミング言語」と言えるでしょう。しかし、同じ教育用言語PascalやLOGOなどとはやや方向が違います。Pascalはプログラムの構造化(制御構文とサブプログラム)を重視しているのに対して、BASICはもっと前の段階、まず順次実行と変数の利用、繰り返し処理あたりの概念の習得を狙っているように思います。

バック・トゥ・BASIC―開発者が語る言語の歴史と設計思想(原著1985, 邦訳1990)』は、「本当のBASIC」から見たBASICにまつわる「誤解」への弁明の部分が多いです。また、言語設計者の書いた書籍ですが、K&Rの『プログラミング言語C』やラリー・ウォールの『プログラミングPerl 』などようなワクワク感は少ないです。
ただ、BASIC開発当時の環境を知ることで、仕様の背景が分かる点はとても面白かったです。「バッチ処理」の時代のデバッグの過酷さと、タイムシェアリングシステムがBASICにとって本質的に重要であったことをわかったのが一番の収穫かもしれません。Kemenyなら今の時代にどんな言語・ツールを設計するのかな、と興味深かったです。
2016-03-26 14.16.13
バック・トゥ・BASIC―開発者が語る言語の歴史と設計思想(原著1985 Kemeny & Kurtz, 邦訳1990 松田健生・訳)』