[真理子日曜学校 - 真理子の生活と意見(フレーム表示) ]
 

プログラミング言語


 
  1. BASICと機械語
     NEC PC-9801(以下98)を触り始めたころはBASIC。最初はおじさんに命令されるままに打ち込むだけでしたけど、デバッグ(誤り訂正)のためにプリンタに打ち出したり、動かない命令を書き換えたりしているうち、自然とBASICを覚えてしまいました。おじさんの家には参考書もいろいろあったし、図書館で読んだりもしたし、けっこう勉強しました。
     それから機械語も入力しました。16進数をだだっと入力するんです。でも、他人様のプログラムを打ち込むぶんには、実は機械語のほうがはるかにラク。だって、0-9とA-Fしか使わない。ユーティリティソフトを使えばA-Fもテンキー部分のキーに割り当てられるんで、右手だけでいける。点検も、チェックサムといって、誤り検出のために16個ずつ加算した値が雑誌に印刷されてて、そこだけチェックすればだいたい誤りが発見できるから。むしろBASICのほうが、一字一字じっくり点検しなきゃいけなくて大変でした。
     そのうち、機械語の無意味な数字の列が実は意味をもった命令なんだと知ると、逆アセンブル(解析のことね)の仕方も覚えましたし、機械語のプログラムの作り方も覚えました。中学生のころだとそういうことが苦もなく身に付くんです。いまの人って全然機械語やらないと思うけど、当時のBASICって遅いし機能も限定されてたから、機械語の知識は必須でした。今はその知識は直接には役立たないけど、コンピュータを理解する基礎教養にはなったと思ってます。
     それから、ソフトの中にはコピープロテクトのかかったものがあって、それを解除するためにプログラムを解析して、フロッピーを点検してホンモノかコピー品かをチェックしている部分を見つけて、そこをスルーさせるように書き換えるっていうのも、当時の生活の知恵でした。当時はハードディスクが普及してなくて、メモリを増設してそこにまるごとフロッピーの内容をコピーしてから使うのが、高速化のために必要だったのですが、プロテクトがかかっているとこれができないので、解除しなければならなかったんです。こんなことも、中学生高校生のうちって、苦もなくできるようになりました。

  2.  
     
  3. CP/M上の言語、MS-DOS上の言語
     プログラミングの言語っていうのはBASIC以外にいろいろあります。プログラミングに慣れてくると、そういうものも使ってみたくなるんですね。BASICがとても遅かったので、他の言語ならもっと早いかという期待もありましたが、実のところは単なるお遊びです。人間にわかりやすい形の言語が、機械語の数字列に変換されて実行されるとプロセスが、とても興味ありました。
     「続・私の愛したコンピュータ」で書いたように、CP/M上で動くいろんな言語でよく遊びました。当時のソフトをアーカイブしているサイトのリンクをもう一度書きますので、いろいろ遊んでみてください。Commercial CP/M Software Archive.html。CP/M-86のソフトも混じっているのでご注意を。CP/M[-80]のソフトをダウンロードして、VectorなんかにあるWindows用やマック用ののCP/MエミュレータWindows用ならCP/M program EXEcutor for Win32がおすすめ)で動かしてみてください。子どもだましだと思うかもしれないけど、これらのソフトって当時は売り物でして、1つ数万円から十数万円したんですよ。
     同じようにMS-DOS用の言語が、同じサイトのCommercial MS-DOS Software Archive.htmlにあります。Windowsユーザーなら、こちらのソフトはコマンドプロンプト(いわゆるDOS窓)でそのまま動作します。MS-DOSとはいっても実際はIBM-PC専用ですが、今のWindowsマシンってIBM-PC互換機ですから、全然問題なく動作します。むしろ昔の98だと動かなかったですからね。Turbo-Cなんか、98版がなかなか出なかったんで、せっかちな人はIBM-PCエミュレータを98で動かして使いましたから。それでもなかなか動かずに苦労したみたいですよ。あ、今のWindowsでは動くんですけど、自動的に英語モードになっちゃって、キーボードが101の配列になるので、特殊記号の位置が違うので注意です。常用するなら101キーボードをどっかから購入して差し替えて使うか、シールを貼るとか鉛筆で書くとかするといいです。Turbo Pascal、使い方わかりますよね。エディタから抜けるやり方がどこにも書いてないかもしれません。ctrl-K→ctrl-Dです。これってWordStarの方法と同じなんですよ。WordStarってコンピュータ操作の共通語だったんです。

  4.  
     
  5. Turbo Pascal、そしてC
     このうち真理子がとても懐かしいのは、Turbo Pascal。Wikipediaを見ても年代が書いてませんけど、確か出たのは1984年。98で動くソフトがまだまだ少なかったころ、お手軽に高速に使える言語としてとても魅力的でした。
     これで雑誌に掲載されるプログラムもPascalが多くなるかと思ったら、あんまりそうでもありませんでした。有料ソフトだし、ハードウェアをきめ細かにいじるにはムリがあったせいでしょうか。そして、雑誌にプログラムが載らないと、一般のユーザーはあんまり買いませんからね。やっぱり一般ユーザーは、自分でプログラムを組むのはムリなんです。
     でも、87年に技術評論社から、奥村晴彦『コンピュータアルゴリズム事典』が出て、たとえば円周率1000桁を求めるやり方とか、いろんな計算の仕方をまとめた本が出たので、これのプログラムを打ち込んだり改造したりして楽しみました。やっぱりコンピュータといえば、そういうことをやってみたいじゃないですか。
     この本、91年にはC言語版、2003年にはJava版が出ました。この本の歴史がそのまま、プログラミング言語の流行の歴史になってて面白いですね。
     そう、1990年前後の時代は、Cが大流行しました。BASICの次はCだっていうんで、いろんな製品が出ましたね。RUN/Cなんていう、BASIC風に動作するものもありましたし、Turbo Cの98版がなかなか出なかったので、「もう98の時代じゃなくIBM-PCを買うべき」なんていう議論もありました。安い製品が出ると、それまで一般的だったLattice Cが値段を下げたり、マイクロソフトもQuick Cなんていう廉価製品を出したりしました。
     大学に入ってコンピュータの実習授業をとったら、Turbo Pascalでした。90年代になるとたいていの大学ではコンピュータ実習がありましたが、他の大学が一太郎とかLotus 1-2-3とかアプリケーションの使い方中心でした。今ならなおさら、WindowsとOfficeとIEじゃないかしら。でも、うちの大学の担当教官は「そんなものはマニュアルを見ればできるし、アプリが進化すれば役に立たなくなる。そんなことよりプログラミングの基本を覚えたほうがいい」という正論を主張してPascalを教えてました。真理子はもうTurbo Pascalを知ってたんで、先生にかわいがられて(いえ、エッチ方面はしませんでしたよ)、いろいろなことを教えてもらって楽しかったです。アプリしか使わない人でも、マクロ機能という名のプログラム言語はWordにもExcelにもあるし、ブラウザにはJavaScriptがあるし、Webサイトを開けばCGIも必要です。だから大学時代にプログラミングを勉強したことはとても役に立ちました。
     でも大学時代のプログラム経験はそのくらいで、あとはWordで論文やレポートを書くのが主でした。その理由は三つ。
     一つは、真理子が恋に生きて遊びまくっちゃったこと、なにしろ大学卒業と同時に結婚しちゃいましたから。すぐ離婚しましたけどね。
     二つは、真理子に長らくコンピュータをさわらせてくれたおじさんが、ちょうどこのころ死んじゃったこと。プログラム言語ってみんなけっこう高価なんで、スポンサーがいなくなると、買うのはつらかったです。
     三つは、ちょうどこのころWindowsになって、プログラミングのスタイルががらっと変わっちゃったこと。DOSに慣れていたせいでかなり面食らっちゃいました。
     離婚したあとはいろんな仕事をしましたが、そのうち1社ではかなりパソコンをやらされました。その経験を次に書きましょう。

  6.  
     
  7. dBASE
     97年にある零細企業に入社、パソコンのできる女性募集というから、どうせ入力の仕事かなと思って、実際最初はそうでしたが、ある日「○○さん(=真理子の旧姓)、プログラムできる?」と社長が聞いてくる。なんでも、顧客管理のシステムを作った社員がトンヅラして、誰もこれをメンテナンスできなくなっちゃったそうな。見たら、dBASEのプログラムで書かれていました。
     dBASEって何?って人もいるでしょうから、ここでおさらいをしましょうか。
     もともとはCP/M上で動いたデータベースソフトdBASE IIです(Iはありません。最初からIIでした)。Database Software @ Commercial CP/M Software Archive.htmlにもあるので使ってみてください。こんなので、と言っては失礼ですけど、268000円もしたんですよ。例によっておじさんがコピー品をもらってきたので使ってみました。MS-DOSにも移植され、これを使いたくて98を買うという人もけっこういたソフトでした。ほどなくIIIが出て、III plusが出て、そのころまではけっこう売れましたけど、IVになったころに発売元が他社に買収されたり、Windowsへの対応が遅れたりで、97年当時も使う人が少なくなっていました。それでもdBXLという格安互換商品があったりして、一部ではファンも存在しました。
     dBASEに限らず、データベースソフトは「データベースを扱うのがやさしいプログラム言語」です。実用プログラムを書くとき、何が大変かというと、データファイルの操作なんですよ。少量のデータなら読んで検索して加工して書けばいいだけですけど、大量のデータを高速に検索して、そこだけマルチユーザーで書き換えるなんていうのは、素人の手に余ります。そういうのがラクにできる言語がデータベースソフトってわけですね。
     これは苦労しました。Windowsに対応していなかったんですが、Windowsで入力したいという社長の要求。たまたまLotus 1-2-3のWindows版についてきたアプローチというデータベースソフトが、dBASEとデータ形式が完全に同じだったので、アプローチを使ってデータ入力してもらいました。その一方で、銀行への口座振替や振込みデータの作成に、dBASEの言語を使ったり、LSI-CとかPerlとか、無料の言語をいろいろ組み合わせたり、なんとか乗り切りました。
     そんなこんなのうちに、この会社は2002年に倒産して、真理子の努力も水の泡になってしまいましたが、今にして思えばいい経験をさせてもらいました。

  8.  
     
  9. 表計算
     意外に使わなかったのがExcelや1-2-3などの表計算。dBASEのプログラミングに追われていたということもあったんですが、タテヨコ自由にデータを入れられるような表計算は、何か複雑なことをしようとすると、その自由さがかえってアダになってマクロを組むのが大変。結局はデータベースソフトのほうがいいかなって感じで、上で書いたようにアプローチを使った経験で、今も家計簿はアプローチです。1-2-3は使ってないけど、おまけでついてくるアプローチだけ使ってるっていう不思議な状態です。
     むしろ表計算は、ワープロ代わりに使うことが多いです。表の多い文書を作るときは、ワープロより表計算のほうがラクですから。カーソルもタテヨコにすばやく動きますし。表計算といいながら全然計算に使ってません。

  10.  
     
  11. Perl
     今一番使ってる言語はPerlですね。WebサイトをやっているのでCGIをよく書きますから。それにしてもウチのサイトって、99パーセントCGIですね。ちょっとやりすぎかしら。
     PerlはCGIを書くだけでなく、データ変換の小道具にもよく使ってます。データ変換って結局文字列操作なんで、文字列を簡単に扱える言語がラクです。そして、この点でPerlの右に出るものはないって感じですね。なにしろ文字列の長さの制限がありません。最初、それが信じられなくて、いろいろ調べたけど制限が書いてない。やってみたら、何メガバイトの文字列なんていうのも扱えちゃう。これはすごいって思いました。
     だから他のサイトの聖書のデータを拝借するときは、そのサイトのソースをそのまま保存しちゃう。たいていはHTMLやXMLになっているので、ちらちらと眺めながらデータ構造を調べて、変換プログラムを書きます。改行が節の終わりとは限らないので、すべての改行コードを取り去って1つの文字列にしちゃう。それから正規表現を駆使して、余計なタグを消去したり、データの区切り文字に変換したりする。こんなのを瞬時にこなしてしまうのでPerlは便利です。

  12.  
     
  13. エディタ
     「ワープロ」では真理子は昔からワープロを使っていたように書きましたが、実際に日常的に使っていたのはむしろエディタでした。昔のワープロって動作が緩慢だったので、エディタで入力して印刷のときだけワープロっていう人も多かったですし、高校でも大学でもワープロで印刷したものを宿題に提出できないことが多かったので不要でした。コンピュータはプログラミングのお勉強に使ってることが多かったですから、プログラムを書くのにエディタが必須でした。CP/Mの英文ワープロWordStarだって、エディタのモードで使うことが多かったです。
     MS-DOS上ではVZ Editorを使っていましたが、今ではWindows上の秀丸です。VZのマクロは読みにくかったですが、秀丸のマクロはC言語風でわかりやすく、今でも聖書データの入力や加工によく使ってます。

  14.  
     
  15. コピーツール
     こんなものまで言語になってるっていう例。Wizard98っていうコピーツールは、フロッピーの特定箇所を読んだり書き換えたりというコピーツールのふるまいを設定するのに、FREIAっていう言語を用いました。いま全然覚えてませんけど、命令語が全部女の子の名前なんですよね。頭が痛くなりました。

  16.  
     
  17. プログラム言語の覚え方
     最後に、真理子なりのプログラム言語の覚え方をまとめておきます。
     まず、DOS用のコンパイラを使うこと。Windowsのプログラムは言語仕様以外にいろいろな約束を覚えなければならないし、「ボタンがおされたらこうする」みたいに、こまぎれのプログラムをフォームのボタンに配置するというようなひたすら受身のプログラミングスタイルになります。これではプログラム言語自体を覚えるのには役に立たないので、言語を覚えるときは、ひたすらDOSのプログラムを書いたほうがいいです。
     Windows専用のプログラム言語だと思われているものでも、DOS用のプログラムも書けるようになっています。MicrosoftのVisual C++ならCLコマンド、Visual C#ならCSCコマンドがあり、CL なんたら.c、CL なんたら.cpp、CSC なんたら.csで実行ファイルができます。
     次に、プログラムを手で打ち込むこと。できるだけプログラムリストが短く、言語仕様の説明を中心とした入門書を選んで、そのリストをすべて手で打ち込み、コンパイル、実行してみます。ソースプログラムをおさめたCD-ROMがついていてもガマンして手で打ち込んでください。言語仕様を体で覚えるために、一度はこれをやっておいたほうがいいです。
     次に、参考書は2種類用意します。一つは言語仕様をABC順にすぐにひける参考書、もう一つは機能から引けるような参考書。いわば英和辞典と和英辞典みたいなもので、この両方を手元に揃えておきます。前者は技術評論社から出ているクイックリファレンスシリーズ、後者は秀和システムから出ている逆引き大全極意シリーズが便利だと思います。それから、一般的なアルゴリズム事典として、上でも書いた、奥村晴彦(他)著『Javaによるアルゴリズム事典』(技術評論社)もあると便利です。
     それが終わってから、書籍としてのサンプルプログラム集なり、ネットに出回っているプログラムを探して、自分の仕事に一番近いプログラムを探して、それを書き換えます。すでにあるよいプログラムをできるだけ利用するってことです。結局はこれなんですよね。
     なんだ、それなら最初から他人のプログラムを書き換えればいいじゃないかっていうかもしれませんが、そのためには言語仕様を覚えていなきゃいけないので、回り道のようでも、「プログラムリストを手で打ち込む」はやったほうがいいです。文法の複雑な外国語を覚えるとき、最初から会話を覚えようとしても役立たないようなものです。もっとも、最近のプログラム言語はどれも大差がなく、Javaを覚えておけばたいてい何をやってるかは推測がつきますけど(だから『Javaによるアルゴリズム事典』は便利)、まあだまされたと思って、一度は「手で打ち込み」をやったほうがいいですよ。

  18.