コンピュータ言語遍歴
このブログはヨロズITであることで、3つの話題枠(B級イベント、人物、技術)からその時期に応じて筆者が「禅問答」ならず「善問答」で好き放題で書いている。原則として週一回、日本時間の水曜日を目指して発表する予定だ。
今回は最初のブログからがらりと変わって、今回は技術枠から、コンピュータ言語に関して述べる。最近のSDTimesの記事で、オープンソースで使用されている言語のランキングが報じられていた。 (実際の紙の記事はもっと長い)
そのランキングをここに再現すると
言語 |
シェアー(%) |
C |
40.91 |
C++ |
14.02 |
Java |
10.95 |
Shell |
8.96 |
JavaScript |
5.55 |
PHP |
4.86 |
Perl |
3.2 |
Python |
2.73 |
SQL |
1.6 |
C# |
1.24 |
Assembler |
1.23 |
Pascal |
0.91 |
Ruby |
0.78 |
TCL |
0.4 |
Ada |
0.39 |
このデータに言及する前に筆者のコンピュータ言語遍歴について簡単に述べよう。大体筆者はもともと電気・電子工学が専攻だったが、卒論でモータの動きを解析するための微分方程式を解くためミニ・コンピュータを扱ったときに初めてコンピュータに遭遇した。電気・電子工学学科は、実際のコンピュータを使用する授業はなしで、紙の上でFortranのプログラム(らしきもの)を書くだけ。そんな中、実際のミニコンを使えるのは魅力的だった。と言っても、院生の凄い人の書いたアセンブラーのプログラムを解説して貰っただけだが。この人凄いの一言に尽きる。なんと、アセンブラー言語のプログラムを紙テープに打ち出したものを読んで分かるのだ。それも早く。とても人間技とは思えなかった。
最初に本格的にプログラミングをしたのは、米国で院生になってからだ。この時は最初に教える言語はPascalだった。上の表を見て、いまだにPascalを使う人がいるのかと驚いた。(もっともAdaもあるので、さらにびっくりしたが。)1970年代の中ごろはデータ・ストラクチャーとアルゴリズムを徹底的に教えるというのが常道で、UnixやCなどは邪道だという感じがまだあった。というかまだUnixもCも開発されてあまり日が経っていなかった。この大学にはDec
Writer(timesharingの端末で、ビデオスクリーンではなくタイプライター型)がどこにでもあり、timesharingで殆ど24時間使用できた。なかなか、プログラミングの宿題が出来ずに夜遅くまでシコシコやっていたのを思い出す。最初の課題はテキストに載っているプログラムを実際に打ち込んで走らせるだけだったが、それでも最初は大変だった。
PascalはAlgol 60なんかと同様、学術言語というポジションだったが、その後HP(ヒューレット・パッカード)に就職して(20数年前)そのコンパイラー・言語事業部でPascalを開発言語として使っていたのを見てびっくりした。Pascalは分割コンパイルができないので、大規模開発に向かなかった。さすがに、HPはPascalに手を入れて分割コンパイルの機能を追加していた。Fortranやその他の言語のコンパイラーがPascalで書かれていたのはなんとも変な感じだった。ちなみに、筆者の仕事はこの事業部のコンパイラーの開発工程を分析してもっと効率の良い方法やツールを提案し開発することだった。Cobolやその他も含め10種類程度ある言語をHPUX(HPのUnix)とHP3000の2種類のハードでサポートするため、開発工程は複雑を極めていた。最終的にはコンフィギュレーション管理が大切という結論で、そのためのツールをShellで開発することになったが、これは他のエンジニアが行った。この人も実に面白い人で、また機会があれば述べる。
最初のCとの遭遇は博士課程で、これはシカゴ近郊にある大学院だった。VAX-11でOSはVMSだったが、週に1-2日だけ2-3時間Unixを走らせることがあった。この時、日本からの企業人だが、この大学に留学(遊学ではないかと今だにからかっているが)に来ていた人が筆者の持っていたCのマニュアルを勝手に持ち出してそわそわと走って行ったのを覚えている。(彼がその後生涯の友となったのであるから、人生は分からない。)その後はUnixと共にC一筋となった。
Cは本当に実用のみに作った職人の言語で、これをタイプチェックがどうの、ポインターが問題などという指摘は当たらない。これは、凄い職人の大工が普通の大工からみたらとても使えないようなカンナを使っているようなものだ。つまり、誤解を恐れずに言うならば、職人以外は使うなと言う事だ。とはいえ、職人ではない筆者もポインターやメモリー・リークに悩まされたものだ。どう見たって、ロジックに問題はないのに、実行するたびに動作が違いプログラムが落ちる。お陰で、デバッガーの使い方が上手になった。
その後、管理職になって机上にUnixのワークステーションに代わって、Windowsのマシンが乗るようになって、プログラミングからは少し遠ざかることになるが、その後のオブジェクト指向の影響でまたC++をかじることになった。その語Javaに移行する際にとうとうエンジニアとしての生命を落とし、引退してしまった。
ここで、ようやく導入部分に戻る。オープンソースのプロジェクトはやはり大部分はまだCであり、C++やJavaも多少あるが、まだCが出来ればプログラマーとしても通用すると言うことのようだ。これは特に組み込み式システムについては言える。更に、最近流行りの言語を覗いて見ると、なんとオブジェクト指向の影響はあるものの、CやShellのシンタクスが結構生きている。これなら、なんとかなりそうだ。長いことやっていると、革命的な技術変革というのに遭遇することは少ない。大体は以前の技術の焼き直しであることが多い。これは、Cloud
computingについても言えるが、それについてはまた書いて見たい。
それで、最近比較的簡単なプログラムを書く必要があった。Shellにするか、Cで書くか少し迷ったが、ここで少しCのおさらいも良いかと書こうかと思ったが、シンタクスさえどうにもならない。あまりの酷さに、言葉もなく、20数年前のマニュアルを引っ張りだしてなんとかプログラムできた。皆さん、プログラムを書いているなら、止めずに続けることをお勧めする。これに懲りて、最近はUbuntuを搭載したマシンで時々プログラムを書いている。