この投稿は、「俺」ことブログ主の最高のプログラミング遍歴(かもしれないもの)をつらつら書いたものです。これらは、事実に基づくようにも見えますし、妄想の産物かも知れませんが、そのへんは読まれる方にご判断をおまかせします。
あ、でもできるだけ役に立つことを書こうと思ったので、そう思って読んでいただければ幸いです。
という目的で書いていたら、ものすごい長編になってしまったので、急遽連載に切り替えることにしました。
機械語の時代
はじまりは、高校生時代です。ほぼ40年前でしょうか。ここが、俺のプログラミング人生の一歩となったのです。
東芝のワンボードマイコンEX-80のCPUインテル8080Aで、機械語(マシン語)プログラミングやりました(というか、それしかできなかった)! NECのTK-80BSのBASICシステムなんてクソ食らえだ!機械語最高!BASIC軟弱!でもちょっとうらやましい…なんてことを思いつつやっていました。改造したり、オリジナル作品を作ったりで、ここで機械語(8080A)をほぼマスターしました。
なんとも実りの多い3年間で、俺のプログラマ人生の礎(いしずえ)になったと言っても過言ではありません。
BASICと機械語の時代
大学は当然(?)のように情報系に進みまして、よ~し高級な言語やっちゃるぞ!と張り切っていました(大学は途中でやめちゃいましたが。トホホ)。
NECのパソコンPC-8801をバイトして購入し、BASICアンド機械語プログラミングやりました! PC-8801ではBASIC(N88-BASIC)が使えるので、それを使うという選択肢が自然なわけですね。最初は「I/O」とか「ASCII」(今は括弧でも付けないと、一般名詞として扱われかねないですね、ホント)に掲載されるプログラムをひたすら打ち込んでいました。皆で手分けしたりしてね。しかしやっぱり改造、オリジナル作成という道を歩んおりました。
この頃、PC-8801のROMを解析して本を書くということをやり始めまして、機械語をマスターしていることが、このときにすっごく役に立ちました(8080AとZ80という違いはあっても)。機械語がわからなければ、こんな仕事を引き受けることは間違ってもなかったでしょう。
PascalとFORTRANの時代
大学は情報系でしたが、何分昔のことでしたので、実習等では割とオーソドックスな言語をやらされました。
実習は、三菱電機の大型機によるTSSでした。そこで、PascalやFORTRANなどで簡単な課題をやらされる過程で、Algol系言語の基礎などを学ぶことができたというわけです。TSSなのでチャージがあり、割り当てられた分を使い切ってしまえば、そこで終わりです(中にはハックしてチャージを増やしていた学生もいたようですが、どうやっていたかは今となっては謎です)。
チャージがもったいないので、パソコンを活用できないかと当然の如く考えて、PC-8801のCP/M-80でUCSD Pascalなるものを動かし、そこで課題をクリアできないかと目論んでいました。しかし、「クイックソート」がどうやっても動かないんですね。それもそのはず、8ビットのUCSD Pascalは「再帰呼び出しをサポートしない」という、ある意味致命的な欠陥があったので。
ついでに言うと、機械語の実習もありましたが、教授陣の好みなのかモトローラの6800でした。ここでインテル系に加えて、モトローラ系もマスターしてしまいました(その後の6809に続く)。
再びBASICと機械語の時代
大学時代の後半で、NECがPC-9801シリーズなる16ビットパソコンを発売しました。実はバイト先は秋葉原の某Tショップで、そこで98のシステムの開発などやらされました。PC-8801のBASICも98のBASIC(N88-BASIC(86))もあまり違いませんので、楽勝!と思っていましたが甘かったです。
仕事の内容は、88で動いていた在庫管理システムなどを98で動くようにすることでしたが、メッセージを日本語化(仮名漢字化)したりグラフィックの座標系をいじくるくらいで済むかと思いきや、意外なところでエラーが出ます。それもそのはずで、DISK-BASICの問題だったんですね。微妙な言語仕様の違いというか88で手抜き気味のプログラムだったせいか、エラーになったんです。
この頃、98のCPUであるインテル8086の機械語もマスターし、もはや向かうところ敵なしの様相を呈して参りました。
Cの時代
出版社に就職し、プログラミングの本など多数企画するようになってきました。
意外にもC言語を触りはじめたのはこのころからなんですね。それも、C言語の本を作ってやろうと思ってのことなのですから、泥縄といえば泥縄です。「K&R」すなわち「プログラミング言語C」(共立出版)に載っているプログラムを動かしてみます。コンパイラはライフボートから入手したLattice CとかOptimizing Cとかでしたね。主にフィルタ系のプログラムを作ったり、コンソール上で簡単なUIを実現するツールなんかを作っておりました。
なんだかんだでC言語もマスター。Cは言語仕様もライブラリもコンパクトなので、覚えることは意外と多くはありません。その替わり、何をするにもプログラムを書く必要があり、アルゴリズム検討能力を鍛えるという意味では最適なものでした。
C++の時代
出版社でしたが、業務用のシステム開発をやるというのでそっちに移されました。
業務で、大きなプログラムの開発をする必要が出てきました。ターゲットは98のMS-DOSでしたので、基本はCでいいんですが、そこは背伸びをしたいお年頃というわけです。当時流行りだしたC++で作り込んでやるじぇ!と息巻き、余計な負荷を背負い込みました。当時はMicrosoft Visual C++ 1.5とか2.0の時代で、コンパイラ自体にもバグが多くて困ったものでした。
生意気にも、ライブラリを充実させるぜということで、画面制御や通信系、仮想メモリ管理などを、C, C++, 機械語でたくさん作ったのもこの頃です。個人的に、もっともコーディング量が多かったのはこの時代ではなかったかと思っています。
Delphiの時代
システム開発を閉じて一般向けのオリジナルソフトに転向する!ということで、何をするのかという話になりました。
同僚はC言語とWindows SDKというオーソドックスな組み合わせでWindowsアプリなどやっていましたが、俺はDelphiを触ることになりました。Turbo Pascalで書かれているヤツをWindows化したり、機能拡張をする必要があったのです。かつて、Turbo Pascalを使ったことがありましたし、大学ではPascalが標準言語みたいな感じだったので、意外と抵抗感は少なかったですね。
Delphiは、今でも使い続けています。Borland社からEmbarcadero社に移り簡単に買えなくなりましたが、使いやすさはそのままだと思いますね。
Perl、PHPとC#の時代
時代はWebアプリケーション全盛へ。スタンドアロンアプリより、Webアプリの方がメジャーになってきました。しかし、仕事は出版に戻り、もはや開発ではなくなったので、完全に趣味の領域となりました。
最初はしょぼいホームページもどきを作り、動的な部分はPerlを使いました(CGIですね)。今となってはクセのある言語だなと思いますけど、正規表現などそれなりに複雑な処理を少ないコードで書けるので、当時はけっこう便利だなと思ったものです。CGIを書かなくなっても、Perlはちょっとしたテキスト処理なんかに便利に使えるので、Windowsにもインストールしていたりします(Macではもちろん最初から使えます)。
そのうち、PerlよりもPHPの方がいいよみたいな話になってきて、それはPerlがCGIとして使う以外の方法がなかったのに対して、PHPだと埋め込み型というか、HTMLの一部を動的に置き換えるとかが簡単なので、そっちが主流になっていったのですね。クセのあるPerlに比べてC言語によく似ているということもあったと思います。
さらに、なぜかWindowsでWebサイトを作ろうみたいな訳のわからない動機に襲われ、ASP.NETとC#に手を出す羽目になりました。ASP.NETは今ではASP.NET MVCとして洗練されたモデルに進化していますが、レンタルサーバで自由に使わせてくれるところは意外と少なく、今でもASP.NET WebFormを使っています。言語はもちろんC#で、C言語からの歴史が長い人間にとっては、Visual Basicなど手を出すべきものではありません。え?BASICを長い間やってきたんじゃないの?という突っ込みがあるかと思いますが、C言語をやり始めてからはほとんど手を出していません。せいぜい、N88-BASIC(86)のMS-DOS版を触ったくらいでしょうか。
なんだかんだでC#は使い勝手も良く、この言語とDelphiには因縁があるそうで、それらを並行して使い続けているのには理由があるのだなぁ、と思った次第です。
まとめ
ということで、俺の華麗なるプログラミング遍歴を綴って参りました。いざ書くとなるとどんどん細かくなるので、冒頭にも書いたとおり連載にしたいと思います。まずは機械語についてみっちり書こうかと思っております。
コメント