コンピュータ言語遍歴 |
作成日:1998-07-14 最終更新日: |
わたしがコンピュータの言語というのを初めて学んだのがちょうど20歳のとき、 学科の計算機実習でであった。 言語はFORTRANだった。 学校の宿題でFORTRANの課題が3種類出た。 課題提出のその日までにプログラミングすべし,というお達しがあった。 ということは、春休みの間にプログラミングを机上で行い、 結果をパンチカードに穴をあけておくことだった。 私は真面目だったから事前にパンチカードを買って、 わざわざ春休みパンチ室へ行って穴開けカードを用意したのに、 回りはほとんど当日に打っていた。 バカを見た。
われわれは初心者である。 そのため、 前もって打っておこうが当日に打とうがそんなのことにはおかまいなしにエラーが出る。 いちいちパンチしなおすのが面倒だなと思っていた矢先、私の先輩である K さんが現れた。 K さんはそのとき計算機実習を担当する学科の大学院生だった。 「今はTSS というので画面からプログラムが組めるんだよ。」と教えてくれた。 さすがにプログラムまでは教えてくれなかったけれどどれほど楽になったかわからない。
この実習で思い出すのはある課題にまつわるできごとである。 こんな課題だった。
1から10までの整数 iについて、 iとiの二乗、iの三乗, iの平方根を印刷せよ。
パンチの位置を間違えたため範囲を1000から10000までとしてしまい,うんかの如きコンピュータ用紙を掃き出すことになった奴がいた。 これを見て,私はこんな間違いは絶対すまい,とは思わなかった。 むしろ,こんなになるのがいやだからプログラマにはなりたくない,と思った。この思いは数年後,自分で捨てけなければならなかった。
先に挙げた課題とは別に、こんな課題があった。
二つの多項式AとBの係数がそれぞれ配列の形で与えられている。 この多項式の積の係数を配列Cに求めよ。
これでいいかと仕上げてもっていくことにした。何人かの教官が並んでその前に生徒の列ができている。 ある列を選んで順番を待っていた。次が自分になるというときが来た。私の前の奴が私と似た解法をとっている。 ふむふむ,といって眺めていると,その指導教官がその前の奴にこう言った。
こういう解法では無駄な部分を計算することになる。領域と時間がもったいない。
私は合点した。前の奴が終わったところで,私の解法を差し出すと, 案の定「前の人と同じ間違いをしてますね。聞いていてわかりましたか?」といわれた。 私はわかっていたのだけれど,その指導教官は有名なI先生だったから話を直に聞きたく, 「すみません,わからなかったのでもう一度お願いします。」とウソをついてしまった。 後で「もったいなくない」解法をもっていったが,maxとminが複雑に入り交じったプログラムだった。 I先生は,もっとすっきりした式のはずなんだけれど、まあいいことにしましょう,といわれた。
後にKさんはI先生の弟子となり,今では押しも押されもせぬ著名なK先生になった。
一般には知られていないが,BASICやAPL,LISPの感じがする,とりつきやすい言語だった。 今でもあるのかどうかしらない。
会社に入ってから,化学のある式を解く必要があり, プログラミング言語として選んだのが Speakeasy だった。 正確にいえば、当時の勤務先には富士通の汎用機があり、 その汎用機上で動作する簡易言語が Speakeasy であった。 簡単にできるのはよかったが,やはり難しいことはできず, FORTRAN とそのライブラリを使って結果を出さざるを得なかった。 それでも,今思うと手続き型のプログラミングとは考え方が違うところがあったのだった。
化学のある式を解く仕事を終えて,次なる仕事は画像処理であった。 なんでも組み込み型の画像処理装置を開発しなければ, ということで必要になったのがC言語だった。ターゲットからして, 他に候補がなかったようだ(Basicもあったかもしれない)。とまれ, あわてて勉強を始めた。1986年のことである。参考書はK&Rの初版(邦訳)と「はじめてのC」(初版)を使った。 これぐらいしか参考書のなかった時代だった。
この言語を覚えたおかげで,今でもこうしてプログラムで飯が食えている。 ただし,自分のプログラミングの腕がどうだったかというと, 今ひとつ自信がない。本当に腕が確かかどうかは、ある仕事をした結果判断したいと考えている。 その仕事とはナイショである。
しばらくはCで画像処理のプログラムを書く時代が続いた。その後,並行してBASICで
機器の制御をしないといけないはめになった。
BASICは学生時代に馴染んではいた。物理の実験のデータの整理に使ったプログラム電卓についていた言語だったからだ。
まともにはやっていなかった。
仕方なくRS-232Cのプログラムを書いたり、簡単なGUIのプログラムを書いたりしていた。
それでも簡単な機器制御なら割り込みの書き方が容易であり、案外捨てた言語じゃないな、と親近感を覚えた。
また、円や四角をひょいひょいと書くことができたのはやはりBASICのおかげである。
しかし、昔のできたころのBASICは行列演算が一行で書けるとか、いいところがあったのに、という繰り言もある。
もちろん、TrueBasicはそのいいところをもっている。
それから、U-BASICという、数学者の木田先生が作ったすばらしい処理系に出会ったのもこのときだった。
あと、それから会社の他の連中が、BASICで最適化計算をやっていた。おまえ、計算の効率は遅いしもっとましなアルゴリズム使えよ、といいたくなるのをこらえて相談に乗っていた。
あるとき、会社の先輩が Sony のワークステーション NEWS-721を買った。その先輩はそのNEWSの上で動くGUIをX10を使って書いていた。 使いたいなとあこがれていた私に、その先輩はもう使っていいよとありがたい言葉をくださった。 早速使ってみたのがLispだった。このころのNEWSにはもれなくLispがついていたんですね。 もっとも、すでにCommon-Lispが出てきた時代だったのに、 もれなくついてきたのはFranz Lispだったから力不足ではあった。 せっかくWinstonのLISPを買ったのにその例題が実行できないのだから。 それでもいろいろと楽しませてもらった。mapcarへの驚きは今でも忘れない。
コンピュータ関連の試験をまじめに受けていた頃があった。 その中の一つの「マイコン検定試験」の1級で、 必ずPrologの問題が出されるのに気づいた。 論理型言語か、面倒だな、 とつぶやいていたがそれだけでは試験には受からない。 気を取り直してまず Prolog の本を買い、 当時所有していたコンピュータ(PC-9801 VX)で動く処理系を手に入れて、 会社の同僚にわからないところを教わるなどして勉強した。 この同僚は学生時代、 第5世代コンピュータでお手伝いをしていた有名なM先生の研究室にいたので、 Prologはお手のものだった。 何から勉強していいかわからなかったが、とにかくappendを定義できるようにした。 後藤滋樹さんの「記号処理プログラミング」のPrologの章で、 「Prologの本には必ずappendの説明が出てくる」と書いてあったからである。
かくて試験に臨んだところ、驚いた。Prologの問題を見ると、 「appendを定義し、その動きを説明せよ」というものだったからだ。 その試験には合格した。 今はもう使わないが、また使ってみたい言語の一つだ。 Makefileの書き方が一種の論理型言語だ、という意見も忘れられない。
Macintoshには驚きの連続であった。HyperCardもその一つである。
ソフトがこんなに簡単に作れていいものかという驚きだった。
住所録、蔵書データベースをHyperCardで作った。
多少は手を入れたかったのでHyperTalkのスクリプトも覚えた。
もっとも何をしたかというと、
データベースを立ち上げる度に「ドレミファソラシド」という音階を出すだけだった。
ある大量の実験結果を整理しなければならないときにあわてて覚えたのがawkだった。
多少の手間はかかったが、補って余りあるほどの結果が得られた。
本当はawkだけでは処理できずにsedの助けも借りたのだけれど
(一行が非常に長いテキストを処理する必要があった)、
とにかく結果を出すことができて安心した。
UNIXのありがたみを知ったできごととして真っ先に思い出すのがawkである。
今の職場で覚えたのがC++である。
オブジェクト指向プログラムも書ける、という位置づけの言語であるという認識である。
私はあいかわらず手続き型の考えから抜けきらない。けっきょくBetter Cというだけで使っている。
個人的にはこれからSTL(Standard Template Library)を極めてみたいと思っている。
あるとき多面体の絵をきれいに作りたい、と思い立った。絵をプログラムで記述できるとありがたい、 と思ったらPostscriptでそれができることに気づいた。少しだけ勉強してその範囲内での絵を描いた。 思っていたほど難しくはなかった。
awkより自由度の高い言語として使っていた。その分難しいプログラムになりがちだった。 今ではワンライナー以上の難しいことはあまりしていない。 ワンライナーでなければ、バイナリープログラムをいじるときである。Cより楽なことがある。
昔から名前だけ聞いていたがどんなものは皆目見当がつかなかった。 あるとき、GUIプログラムが簡単にかけるのがこれだ、ときいて飛びついた。これはいい。 あれほどMotifで苦労していたことが造作なく書ける。 こんど私が作ろうとしているあるGUIプログラムでは、 このTcl/Tkを採用する予定である。
ある作曲家の作品番号が2系統あり、相互の関連がつかないという問題に何度か出会った。 その問題を解決するために採用したのが JavaScript だった。 わたしのホームページのどこかに載せている。 他にもいろいろなことができそうである。
情報処理試験のために少しだけ CASL というのもやっていた。
Gofer の勉強をしたこともあった。
AppleScript の本も買った。今では Java にも興味がある。
昔暇だったころに Pascal や COBOL もやっておけばよかったと思うが、あとの祭りである。
Smalltalk もやってみたい。Python の処理系も入れたままでまだ手をつけていない。
そうこうしているうちに、Ruby も出てきた。
そして、必要に迫られて VBAも学んだ。
しかしもう、新しい言語を学ぼうという意欲は萎えてしまった。
これが、いちばんこわいことだ。
俺はこのように嘆いてはいるが、まだ同年代の他の奴より、 また勤務先の仕事でひいこら言っている若い奴よりは、 まだ俺のほうが新しい言語に関する好奇心があると自負している。 その自負を、なんとか形にしたいものだ。(2010-08-01)
| 言語 | 環境 | ||
|---|---|---|---|
| C++ | C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC | ||
| C# | C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC# | ||
| Erlang | C:\Program Files\cURL | ||
| F# | C:\Program Files (x86)\Microsoft Visual Studio 12.0\FSharp | ||
| Java | C:\Program Files\Java | ||
| Haskell | C:\Program Files\Haskell | ||
| Pascal | C:\FPC | ||
| Ruby | C:\Program Files\ |
| ライブラリ | 環境 | ||
|---|---|---|---|
| Curl | C:\ProgramFiles\cURL |
まりんきょ学問所 > コンピュータの部屋 > コンピュータ言語遍歴