見出し画像

プログラミング昔ばなし

僕の最初のプログラミング経験はたぶんHP-85 BASICからだった。たぶん横河HPのマシンで動いていたのだと思う。思うというのは、そのBASICではディスプレイへの文字列の表示コマンドがDISPだったということだけを覚えていて、そういう文法のBASICは何だったんだろうとググってみたら出てきたのがこれらの名前だからである。

当時はまだ日本のパソコンの覇権をNECが握っていた(といっても今や知らない人も多いだろうが)わけではなくて、様々な会社がパソコンを出しており、パソコンと言えば電源を入れたらBASICインタプリタが立ち上がるものだった。アーカイブデバイスがないというのはザラで、どちらかというとプログラマブルな電卓に近い存在だった。アーカイブデバイスがないので、毎回プログラムを打ち込むのである。ほどなくカセットテープにソースコードをアーカイブできるようになり、長めのプログラムを作ることができるようになった。

まあ、電器店にあった謎のパソコン(まだマイコンと呼ばれることも多かった)でBASICのコードをポチポチ打ち始めたのが始まりで、次は高専に入ってからミニコンのOKITAC4500CでFORTRANのプログラムを実行することを学んだのだった。カード(一枚一行である)にプログラムをパンチして、そのデッキをオペレータに渡してコンパイルと実行をしてもらい、結果として印刷されたリストとカードデッキを返してもらうというやり方だった。結果を見てコードの文法エラーを見つけてその行のコードをカードにパンチし直してデッキを組み直し、またオペレータに渡す。めでたくコンパイルエラーがなくなったら実行されるので、その実行結果を見て、実行エラーが起きたメモリ位置からソースコードの行位置を推定してデバッグする。またカードをパンチし直してデッキを組み直してオペレータに渡す。こういうことを繰り返すのであった。

パソコンを最初に触った僕にとってこのやり方はあまりにも迂遠ですぐに嫌になった。

高専に入学した翌年にOKITAC4500CはIBM4331というメインフレームに置き換わった。TSS(Time Sharing System)が使えるようになり、40人ほどがそれぞれKB/CRT端末を専有して画面モードのエディタを使ってプログラミングできるようになった。

まだコンピュータの仕組みがよくわかっていなかった僕は、パソコンとメインフレーム端末の違いがよくわかっておらず、パソコンBASICのようなラインモードでの操作ができないことに戸惑ったものだった。今考えると、オペレータを介する必要がないのと、紙のリストをもらっていたのが画面に出るようになっただけで、デバッグはさほど変わっていなかった。

そのうえ必修のFORTRANは基本的に数値計算をしてその結果を返すだけという非常にシンプルな仕様の言語であり、そのある種の「漢らしさ」に敬意は抱くものの、プログラミングを楽しむというものではなかった。

まあそれでもメインフレームを使うというのはその当時は一種のあこがれであった。コンピュータといえば磁気テープ装置がぐるぐる回っているやつがすごいと思っていたのだ。

並行して授業でTK-80というワンボードマイコンをつかってアセンブラを勉強した。くっついているプリンタに一文字出すためにはプリンタのポートにプリンタの制御コードを何バイトも送らなければならない。それで初めて文字が出る。

たぶんこのデバイスを制御するシーケンスをやったことがないと、”Hello World!"の本当の嬉しさはわからないかもしれない。

しかし僕はその頃から「人工知能」という言葉に魅せられて、そこからUNIXの世界に入ることになった。

当初はUNIXが走るマシンが学校にはなくて、かわりに図書館で「石田晴久著UNIX」という本を読んでUNIXの使い方を脳内シミュレーションしていた。

そのうち、PC-9801が出入りしてた教授の部屋に置かれるようになり、DOSを触るようになった。UNIXの豊穣な世界に触れていた(脳内だけだが)僕にはDOSがとてもちゃちに見えた。まだPC-98シリーズが国民機になる前で、SORDという会社のパソコンも結構ちゃんと張り合っていた。

SORDのマシンではUCSD p-SystemというOSが走っていた。DOSよりもずっと使いやすくて、Pascalが標準で使えたのでPascalを覚えた。BASICと違って構造化されたプログラムを書くことを強制されるので、書くコードがちょっとだけ洗練されたように思う。

しかし僕がやりたかったのは人工知能で、当時人工知能用の言語といえばLispと新興のProlog、そしてSmalltalkだった。これらはそれぞれ関数型、論理型、オブジェクト指向という異なるパラダイムを持つ言語であった。なかでもSmalltalkは異色で、当時高価なビットマップディスプレイをもつワークステーションで動くものであって、これまた手に入るものではなかったので、雑誌でオブジェクト指向について学び、脳内シミュレーションすることになった。

卒業研究をする頃になって、研究室にSORDのUNIBOXというマシンが入り、ようやくUNIXが使えるようになった。最初は脳内シミュレーションしていたviがうまく使えず(キーボードでタッチタイプをきちんと学んでいなかったから無理もなかった)edでCのソースコードを書いて、a.outを実行して最初に出したのが"Hello World!"だった。学んだ本はK&Rの「プログラミング言語C」である(もちろん第一版だ)。

僕がとにかくやりたかったのは人工知能だったので、研究室でLispとPrologを買ってもらった。当時は言語処理系は買うもので、なかなか高価なものだった。

念願のLispでいろいろ書いてみたものの、すぐにスタックが溢れるのに閉口した。再帰するプログラムを実行するには手に入るコンピュータのスペックが低すぎたのである。

Prologはまあまあ面白かった。卒業研究はPrologで環境と目的を宣言的に与えるとヒューリスティックに手順を見つけ出すというプログラムを書いて提出した。当時やっとリレーショナル・データベースが見え隠れしていたが、SQLのような統一的な検索言語はなかった。今考えるとPrologはSQLに近い気がする。

卒業してソフトウエア会社に就職したら、メインフレームなどでCOBOL一辺倒の暗黒の時代に入ることになった。脳内シミュレーションしていたオブジェクト指向をJavaで使えるようになるまで10年ほどかかったが、周りのCOBOLエンジニアがJavaを書いたところでオブジェクト指向になるわけではなく、幻滅の時代は長く続いた。

COBOL時代のことだ。客先でちょっとしたデータの変換が必要になった隣のグループの先輩に、15分ほどでMS-DOS上のPerlでワンライナーとバッチファイルを書いてテストして、フロッピーで(当時はフロッピー一枚にDOSもちょっとしたプログラムも入れることができた)渡して客先で使ってもらったことがある。帰ってくるなりちゃんと動いたと驚いていた。当時はCOBOLで変換プログラムを作るのが当たり前というか、それしか考えない時代で、UNIXから受け継がれるスクリプトプログラミングの高生産性が魔法のように思われた時代であった。

C++でWindowsのドライバを書いたこともあった。Windows自体の開発は面白かったが、C++をあまり好きにはなれなかった。オブジェクト指向を強制されないこともあって、betterC以上の使い方が身につかなかった。

途中でVisualBasicを使った開発をしたりもしたが、.NETが出てきて互換性に問題が出て、結局C#にするなんてこともあった。

PHPやRuby,Pythonも試したが主要な開発に使うことはなかった。ただ、趣味でPHPを使ってMovableType、WordPressやWikiのケータイ対応プログラムを書いたりはした。そういえばPHPのライブラリを使ってFlashを使ったBBSアプリケーションを書いたこともあった。AdobeのFlashを買うのが嫌だったのだ。

コミュニケーションロボットの開発に携わって、ECMAScriptの面白さには気づくことができた。node.jsでデモシステムを作るのが面白かった。

暗黒の時代を通じて、商用システムの開発現場にさんざん苦しんだ。退職する直前は妙な社内フレームワークを使った開発でほとほと嫌気がさした。COBOLのあとの変なJavaの世界はたぶん今も変わっていないだろう。

というあたりで会社勤めを辞めることにした。大規模システムの開発現場はとにかく融通が効かない。システムは大きくなるほど刷新ができない。当たり前のことではあるのだが、僕にはひたすら我慢を強いられる環境だったのだ。

今考えれば、我慢せずにとっとと面白そうな世界に移れば良かったと思う。

僕が暗黒の回り道をしている間に、人工知能は冬の時代をひとまず終え、機械学習でひとつの時代を作り始めた。僕が人工知能という言葉に出会ってから40年近く経つ。やっと使えるようになってきたニューラルネットワークの世界。長い時間を経たが、脳内シミュレーションしていたUNIXの世界がLinuxのクラウドとなっていつでもどこでも使えるようになって、誰でも自由にプログラミングできる時代がやってきた。

奇跡的にメインストリームから外れていないことにちょっと驚く。それは常に新しい技術に興味を持ち、学ぶ姿勢を忘れなかった過去の自分のおかげだと思う。

長々と書き連ねたが、これが僕のプログラミング遍歴で、まだ道半ばというところでもあるのである。

こんな昔ばなしを読むのはよほどの物好きだろうが、たまに書きたくなるので書き残しておく。

バナーの写真は以下からダウンロードした。


この記事が気に入ったらサポートをしてみませんか?