題名:Java Diary

五郎の入り口に戻る

日付:1998/1/29

目次に戻る  


きっかけ

私がJAVAを使ってプログラムを書いてみよう、と思ったきっかけは妙なところにあった。

当時私はデトロイトで会社にとってはとても重大、自分にとっては鼻血がでるほどつまらない仕事に従事させられていた。おまけにもしこの仕事がうまくいって、注文がとれてしまうと、私は有無を言わせずアメリカに数年幽閉の身になることがほぼ確実だったのである。

さてこういうストレスの多い環境の下で精神の平行をとるにはどうしたらいいだろう?私にとってちょっとしたプログラムを書くことはほとんど趣味のようなものだった。ちょっくらそういうことでもやってみるか?

問題は何を使ってプログラムを書くかであった。その昔Symantec社のC++を購入したことがあったが、しばらくして使わなくなり、、、ハードディスクの容量節約のためもあり、削除していたのである。おまけに新しい開発ツールを購入してインストールしようにもCD-ROMドライブももっていなかったし、、、

と、もんもんとしていたある日、私はあることに気がついた。

デトロイト生活はストレスの固まりのようなものだったが、いろいろといい面もあった。一つにはインターネットは、定額制のプロバイダ+ローカルコール無制限の電話会社のおかげで、月$20で無制限に使用できたことである。

デトロイトの冬は寒くて長い。表で遊べるようになるのはようやく5月になってからである。それまでの間は部屋の中でインターネットに情熱を傾けるくらいしかやることがない。そして暇を利用して、普段耳にするが、今ひとつ実体がわかっていない言葉をインターネット上で調べる、なんていうことをやっていたのである。

 

 「実体のわからない言葉」というキーワードでいくつか思い当たる言葉の中にJavaがあった。

 

少し時期は前になるが、Apple社がリストラ案を発表した際、「Open Docのこれ以上の開発は中止。より多くの投資がなされているJavaに移行する」といった意味の内容があった。私はこれを読んで「?」と思った。私が知っている限りではJavaはプログラミング言語のはずだ。それがどうしてOpenDocに置き換わるのか?

もう一つ不思議だったのは一時はやった「Javaが普及するとMicrosoftの独占を崩す脅威となる」という論調だった。これは何を意味しているか?これもJavaが単なるCやC++のような「プログラミング言語」とすると意味をなさないことになる。なるほど確かにJavaはバイトコードインタプリタで動作するからプラットフォームを選ばないかもしれない。しかしそれがMicorsoft-Windowsの天下を崩すとはどういうことか?(たいての場合ニュースの見出しなどはこういうことを細かく説明してくれはしない)

自分が理解できないことを他人に向かって述べるのは気持ちが悪い。どうせ時間があるならば少ししらべてみよう、と思ったのである。

 


Macintosh Duo+jDK1.0.2 in USA

さてまずJavaをコンパイルして実行できる環境を手に入れなくてはならない。。。これが意外に難物だった。

インターネットをあさるとJavaに関するページはいくらでもでてくる。ところが私が使用していたMacintoshのJDK(Java Development Kit)は比較的遅れてリリースされたらしい。ちょっと前に作成されて更新がされていないサイトだと「Macintosh用のJDKはでてません」などと書いてある。

がびーんと思いながらも、あるFAQをみていたら「こういうfaqをつくることで、たとえば”MacintsohでJDKは動かないんですか?”とかいう類の何度も繰り返される質問に答えることを防ぐことができます」とかなんとかいう文章が目に付いた。微妙な文章だがひょっとするとこれは「昔は動かなかったけど今は動く」ということを示唆しているのかもしれない。

気を取り直してまたあちこちあたってみると、今度は本家Sunのサイト(http://www.javasoft.com/java.sun.com/products/JDK/index.html )からJDKが落とせることがわかった。さっそくダウンロードして。。。当時私が使用していたモデムは14.4kbpsだったがなんといっても電話料金+プロバイダの料金は定額である。何時間かかろうとかまうもんか。

さてめでたくダウンロードをして、しばらく付属のサンプルを動かして「おお。」と感動していた。ありがたいことにこのJDKは私が愛用していたMacintoshDuo(つまり68Kマック)の上でも稼働するのである。昨今"Power Macintosh Required"のソフトウェアが増えている状況にあってこれはとてもありがたいことだ。

しかしサンプルをコンパイルしてみるとこれは亀のように遅い。まるで一行一行バイトコードに変換しているのが手にとってわかるような遅さである。(実際にそんなものが見えるわけもないのだが)しかしまあ当分大きなプログラムを作成するわけでもないし、問題はなかろう。それにデトロイトでは客先(General Motors)の内部で働いているので、休日出勤はできないし、夕方は5時には帰れるし。時間はあるのである。

さて問題はこれからだ。。。どうやったら自分でプログラムを書くことができるか?

プログラムを書くためにはまずその言語をちょっとは勉強しなくてはならない。。とこらがあくまでも無精な私はここでも無料で手に入る情報ーインターネット上の情報にたよろうとした。これがそもそもの間違いだった。

私が愛用しているYahooでもってJavaのサイトを検索しみると(かつ初心者用の講座を開いているとところ)結構な数のサイトが表示される。それをかたっぱしから訪問してみたが、どうにも今ひとつわかりずらい。

ここでちょっと私のプログラミングのバックグランドについて説明しておこう。私が当時あまり有名でなかった(少なくとも機械工学科では)Cでプログラムを書いたのは1984年である。とはいうものの当時から私は言語の面倒なところは避けて通る類の人間だった。なんといってもやっかいだったのは構造体とポインタである。そこらへんはさっぱり理解せずに、前任者のコピーをしてお茶をにごしたわけだ。

それからしばらく会社にはいってプログラミングとは無縁の生活をしていたがひょんなことからSmalltalkをつかってプログラムを書くことになった。このころはオブジェクト指向にとりつかれていて、一冊3000円クラスの本を山のように買い込んでいた。(入社して間もない頃だから当然のごとく収支はとんとんでほとんど貯金はできなかった)

それから時は流れて1993年。いきなり私はソフトウェア設計課に配属されることになった。最初の一年はCでプログラムを書いていたが、次の年には自分の趣味でC++でシミュレーションプログラムを書いた。なんと行っても構造体よりはC++のクラスの方が私の性にはあうのである。

以上の経歴が示すとおり、私はCとC++、及びオブジェクト指向言語についてはある程度の知識と経験がある。従ってたとえば「C++プログラマのためのJava入門」といった類のページがあればよかったわけだ。

ところがぎっちょん。私がいったサイトというのは、Cでのプログラミングを授業でならったことはあるけれど。。。といった類の読者を想定したものだったようだ。しかしながら説明の仕方ははたしてその想定された(本当に想定しているかどうか怪しい物だが)読者がわかるとはとうてい思えないものだった。

だいたいの説明の順序はこうである。まずサンプルプログラムをブラウザ上で動かさせる。次にプログラムの説明にはいるがもうここで躓いてしまう。StandoaloneのApplicationの説明をするならいざしらず、ブラウザ上で稼働するAppletの説明をしようと思うと、どうしたってオブジェクト指向とはなんぞや?をさけて通ることはできないのである。いくら幼児言葉や猫の鳴き声などをまぜたところで、それらが平易に説明できるわけではない。

まずclassの一行目の「extends Applet」でつまづく。次にいきなりpaintだのinitだのいうメソッドが登場する。これがどこで定義されてなになのかの説明はあまりなされない。とにかくこここにコードを書けば動きます、といわれてもなんとなくだまされたような気がする。

C++プログラマであった私にとって、extends Appletはとりあえず問題なかった。問題はinit()だのpaint()だのである。これは勝手にオーバーライドしていいものだろうか?Appletの定義の中身はどこに書いてある?おまけにほかの文法もどことなくC++に似ているような似ていないような。。。printfはどこへ行った?(Cプログラマの叫び) cout<<はどこへいったんだ?(C++プログラマの叫び)

Cの系統のプログラミング言語で書く最初のプログラムと言えば"Hello World"|に決まっている。確かにいろいろな「java入門」にこのプログラムは載っているのだが、これがまた微妙に異なり、、やっかいなことに初心者にはその違いが何を意味しているのかわからない。私のハードディスクに残っている最初に書いたプログラムはこうである。

import java.applet.Applet;

import java.awt.Graphics;

 

public class HelloJava extends Applet{

   public void paint(Graphics g){

     g.drawString("Hello Java!",0,20);

   }

}

Graphicsとはなんだ?クラス、メソッドの定義はどこだ?勝手にdrawStringなんてものをコールしていいのだろうか。ってことはクラス定義のDocumentをすみからすみまでよめってことか?などと不安は募るのである。

と思って「Java入門」の先にいってみると、今度は堰を切ったようにGraphicsだStringだpaint()だrun() だの説明がでてくる。確かにこのプロセスはさけて通れないのかもしれないが、一ページに5個以上新しい言葉がでてくると自動的に私の頭はシャットダウンしてしまうのである。

なんだか自分の頭の根気のなさを、ホームページの説明の悪さに転嫁している気がしないでもないが、そこはあっさり「説明が悪い」と決めつけてしまい、私は自分が深刻な自己嫌悪に陥ることをさけたのである。それでなくてもデトロイト暮らしは人を滅入らせる要素が多い。顔を見たこともない人にとりあえず責任転嫁できるならばそうしようじゃないか。彼らが私を殴りにくるわけでもあるまいし。

さてこれはやっぱり只で入門をしようとしたのが間違っていた。ものごとすべからく正当な知識を得るためには代価を支払うべきだ。There is no free lunchと言うじゃないか。(はたしてこの用法があっているのかどうか自信がないが)


それからほどなくして私はStanfordに行った。デトロイトに比べるとCalifornia州Stanfordは天国のような場所だ。明るい天気、温暖な気候。それになんと通りを人が歩いているのである。おまけにここにはMacintosh関係の店がたくさんあるのである。

昔なじみのショップにはいって本棚をみれば"Teach yourself Java for macintosh in 21 days"という本がある。ただでさえごきげんになっている私はさっそくその本を買い込んだ。そして帰りの飛行機の中では大変ごきげんにこの本を読んでいた物である。なるほどちゃんとお金をだしただけのことはあった。21日だから3週間分の内容があるのだが、1週間分は基礎的な説明に費やされている。CやC++との違いを説明したり、あるいは「オブジェクト指向とはなんぞや」の説明が載っている。Appletが登場するのは第2週だから消化不良になることもない。

全くご機嫌な本だが一カ所だけ問題があった。CD-ROMが付属していて、それにJavaの開発環境のlimitedVersionが載っているのだが、不幸にしてそれは”Power-PC Required"なのである。ああ。またここでもこの文字をみることになろうとは。。頭に来た私はそのCD−ROMをどこかに捨ててしまった。。。そしてこの行為をその後へそをかむような思いで後悔する日が来る、とは神ならぬ私の知るところではなかったのである。

さてそれからしばらくして本業のストレスがたまりすぎて、私は何一つ難しいことができなくなった。従ってJavaの勉強も一時中断となったのである。

私がデトロイトで作った最後のAppletは画面に簡単なボタンを配置する物であった。ここまできてようやくなぜJavaの普及がMicofsoftの脅威になる、という論調が現れるかわかった。Javaは単なるプログラム言語(C++のような意味で)ではなくて、Windowなどのユーザーインタフェースまでをクラスとして含んだ状態で提供されるものだったのである。(C++にMotifがセットになって提供されるようなものと言えばいいだろうか、表向きの機能の点からの話だが)

なるほど。確かにもしこれが全面的に普及して、アプリケーションがすべてJavaの上で動くようになれば、Windowsを使わなくても生きていけるわけだ。(簡単にそんな日が来るとは思えないが)

次の章へ


注釈

JAVA:Sunが元となって開発したプログラム言語(というかなんというか)。機種に依存せず、かつインターネットとの親和性がよいということで、近年とみに有名になっている。もっとも機種に依存しないバイトコードのインタープリタというのならば過去にいくつも例がある。Smalltalkだってそうだし確かUCSD Pascalもそうだったはずだ。いずれも結局は実効速度がネックとなったように記憶している。オブジェクト指向言語+バイトコードということであればSmalltalkのほうがはるかに先輩だが。本文に戻る

 

自分が理解できないことを他人に向かって述べるのは気持ちが悪い:私の観察によればこれが全く苦にならない人は世の中にたくさんいるようだ。はたから聞いていてわけのわからない論議が声高に行われている場合には、両者とも自分が何を言っているか理解していない可能性が高い。

別にこれは今に始まったことではない。論語(参考文献一覧)にも次のような一節がある

「たくさん聞いて疑わしいところはやめ、それ以外の{自信のもてる}ことを慎重に口にしていけばあやまちは少なくなる」

孔子がことらさにこう言ったと言うことは、これは当たり前のことかもしれないが、世間一般広く行われていることではない、ということだろうと思う。本文に戻る

 

Cでプログラムを書いた;実際に何をやっていたかは、トピック一覧または、「私のMacintosh:pre-Historic」を参照のこと。本文に戻る

 

やっかいだったのは構造体とポインタ:これには使用した参考書の「和訳」にも問題があったかもしれない。(参考書自体ではないことに注意)K&Rの「プログラミング言語C」(参考文献一覧)を使用したのだが(というか当時はそれくらいしか参考書がなかった)これの和訳がとんでもないものであることを発見したのはそれからおよそ10年たってからである。大学の先生が和訳の権利を押さえて大学生にアルバイトでもさせたようなひどい訳で、あれならば私が訳した方がなんぼかましだ。後年、訳のみを改訂した版が出版されたこともここらへんの事情を物語っていると思う。本文に戻る

 

Appletの定義の中身はどこに書いてある:こんなことを言うのは一番最初にオブジェクト指向言語にふれたのがSmalltalkだったからかもしれない。システム側が用意している物だろうかなんだろうがソースコードまで見れたのはとてもありがたかった。もっともシステム側のクラスをいじくってシステムを破壊したことが何回かあったが。本文に戻る

 

Hello World

#include <stdio.h>

main(){

printf("hello world\n");

}

というやつだが、main()の引数など若干のバリエーションはあるかもしれない。本文に戻る

 

There is no free lunchトピック一覧):日本語に訳すと(というか類似のことわざを探すと)只ほど高い物はない、となるのだろうか?本文に戻る

 

通りを人が歩いている:デトロイトは車社会の中のアメリカの都市でも、特に車社会で(あたりまえだが)表を人が歩いていると「おお」っと思うような場所だ。私が知っている限り人がふらふらあるいているのはRochesterHillsだけである。本文に戻る

 

"Teach yourself Java for macintosh in 21 days":参考文献参照 本文に戻る

 

C++にMotifがセットになって:そうえいばMotifをC++からオブジェクト指向的に使えるようにするライブラリって標準化されたのだろうか?どこかで聞いた話のうけうりだが、確かにC++とMotifって相性が良くないような気がする。インスタンスに閉じこめることも素直にはできなかった覚えがあるし。。。本文に戻る

 

論調が現れるかわかった:もっとももう一方の「なぜJavaがOpenDocに置き換わることができるか?」はまだ謎のままである。本文に戻る