Java 表題

ようこそ!! Java関連システムのコーナーへ



Java プログラマの現場レポートのロゴ

■ はじめに(4/28)
 私は、コンピュータのプログラムを書くことによって生計を立てるようになっ て今年でちょうど20年になります。20年の間に様々な業界向けのソフトウエ アを作らせていただき、たくさんのユーザに自分の作ったソフトを使っていただ き、とても感謝しています。

 さてみなさん、ソフトウエア業界というとどのようなイメージをお持ちでしょ うか。書店に並んでいる書籍や雑誌などにもときどき書かれてあるように、決し てきらびやか世界ではありません。体力と気力が勝負のとても泥臭い世界です。 それはそれで当然のことだろうと思います。本質的に表舞台をサポートするため の「裏方」の世界なのですから。

 きつくて、しんどい世界であることは、しかたが無いのです。ですがソフトウ エアの業界は、ちょっと他の業界では考えられないような、とても困った世界で もあるのです。ひと言で言ってしまえば製品の品質にものすごくバラつきがある という点です。素人が趣味や遊びで作ったソフトのことを言っている訳ではなく、 プロとしてお客様からお金をいただいて作成されたソフトの中にもひどく質の低 い劣悪なソフトがたくさん出回っているのです。商売柄、他のメーカーやソフト ハウスで作成されたプログラムをメンテナンスしたり機能を改善したりすること もよくあるのですが、いざプログラムの中を覗いてみると「なんだーこりゃー」 と言いたくなるようなプログラムにときどきぶつかるのです。

 ソフトウエアは、使い捨ての商品ではありません。一度作成されたソフトは、 通常はある程度の期間に渡って継続して使用されることが多いのです。したがっ てメンテナンスや機能の追加、変更といった要求も当然発生します。ソフトハウ スの中には小規模な企業も多く、消長の激しい業界でもありますので、必ずしも そのプログラムを作成した企業がメンテナンスや機能の追加等を全てサポートで きるわけではありません。出来の悪いプログラムが数多く社会に流通していると いう現状は、不運にもそうした不出来なプログラムをつかんでしまったユーザー 企業や、不運にもそうしたバカなプログラムのメンテナンスをまかされてしまっ たプログラマばかりではなく、日本の社会全体に多大な不利益と不安とをバラま いているのです。

 この事実と、このことの重大さをきちんと理解されている方は、業界の外部に はほとんどおられないのではないでしょうか。少しでも多くの人に事実を知って もらい、出来の悪いプログラムが社会に出回らないようにするための対策を検討 し、現場のプログラマやソフトハウスの管理者やそして多くのソフトウエアのユ ーザーのみなさんが被っている不利益を少しでも排除していきたいというのが、 当レポートの目的です。

 そうそう、この部屋はJavaの部屋であります。Javaがこれからの時代 におけるプログラミング言語の主流であることは、多くのみなさんから同意が得 られるところです。書店では今、急激にJavaに関する書籍や雑誌が増えてい ます。多くの方がJavaの優位性を語っています。しかし、Javaは決して 「特別な」言語ではありません。比較的、単純な簡単な言語であると言ってもい いでしょう。インターネット,Web,分散処理,移植性といった今の時代が要 請するニーズにいちばんフィットしていることが、これだけ支持を拡大させてい る原因だと思います。

 一般ではあまり語られることが多くはありませんが、Javaはタコなプログ ラムが作られづらい比較的「安全な」言語でもあります。(あくまで「比較的」 な話です。タコなプログラムを作成するプログラマは、どのような言語を使って も、たいていタコなプログラムを作成してしまいます。)比較的安全であるとは 言っても、やはりいちばん肝心なのはそれを利用する側、すなわちプログラマの 問題です。

 比較的安全な言語ではあるのですが、当然ながらJavaにはJavaの「文 法」があります。文法がある以上、そこには「つい陥ってしまいがちなワナ」も あるのです。そう「文法あるところにワナあり」なのです。例えば、新しいクラ スを生成する際に(Javaではクラスという単位でプログラムを作成していき ます。)既存のクラスのサブクラスとして定義することによって、親クラスの持 っているデータやメソッドを継承することが出来ます。Javaらしいプログラ ムを作りたいがために(かどうか?)本来、継承させる必要の無いようなクラス までも無理に継承させて、ずいぶんと複雑なクラス階層になってしまい、かえっ て分かりづらくしてしまっているようなプログラムもときどき見かけます。

 もっとも、この例はJavaの問題ではなく、システムの構成要素をモデル化 する際のシステム設計上の問題なのですが、言語に標準で備わっている機能はと にかく何でも使ってやろうなどという、おバカなプログラマも結構いるのです。 そういったJavaを使っていく上で陥りやすいワナだとか、逆にこんなふうに 使っていくととても便利ですよといったJavaに関するタイムリーな話題もと りまぜながら進めていこうと思っています。


■ 良いシステムが出来るかどうかは、すべて担当するプログラマにかかっている。(5/26)
 早いもので、アッという間に1ヶ月がたってしまいました。実は週に1回くら いのペースでアップロードしようと計画していたのですが、突然思いがけずに仕 事が忙しくなってしまったことと、少年による残酷な犯罪が立て続けに起こった りしたことで、あまり文章を書く気になれないでいました。 (言い訳です。トホホ・・・先が思いやられる。)

 世の中では、これからの日本の産業は「IT関連」が牽引していくなどと言わ れたりもしていまして、私たちソフトウエア産業もけっこう注目を集めたりもし ているのですが、実はどっこい、ソフトウエア産業というのはものすごく「労働 集約型」の産業なのです。

 だいいち、ソフトの作成というのは、ものすごくたくさんお金がかかります。 ふだん、ソフトウエアの開発だとかプログラムの作成だとかにかかわっていらっ しゃない方はご存じ無いでしょうが、別になんていうことも無い、ちょっとした プログラムを作ろうとして、ソフトハウスに発注したりすると「これは、1桁間 違っているんじゃないの!」と言いたくなるような、目の玉が飛び出てしまいそ うな見積もり書が送られてきたりするのです。

 これはソフトハウスが暴利をむさぼっているせいではありません。実際にソフ トの作成にはたくさんお金がかかるのです。今でこそ「新しくソフトを作るとた くさんお金がかかる」ということが世の中に知られてきたのですが、昔はずいぶ んとお客様にしかられたものです。では、なぜこんなにもお金がかかるのでしょ うか?

 新しくソフトを作る為には、そのための膨大な設備や機材が必要だからでしょ うか。それだったらまだ少しは納得がいくのですが、そんなことは全然ありませ ん。よほど特殊なソフトを作るのでない限り、ありふれたコンピュータとありふ れた開発ツールがあれば作れます。そんなものには、それほどお金はかかりませ ん。ソフトの作成にお金がかかるのは、それは「プログラマ」という職種の人が かなりの労力とものすごい時間とをかけて、人手で作るからです。ソフトウエア の金額の大部分は、プログラマの労賃です。

 かなり昔から、たとえばプログラムの標準化であるとか、たとえばプログラム の自動作成の試みだとか、たとえばソフトウエアの部品化であるとか、なるべく 人手に頼らずに、機械的に自動的にソフトを作成しようという試みは何度となく 進められてきました。ところがコンピュータの世界というのは次から次へと新し い技術が誕生し、新しいフレームワークが生まれ、新しいパラダイムが必要とさ れるのです。つまり、機械的に自動的に作ることが可能な部分というのは、言わ ば誰にでもできるような当たり前な部分であって、いちばん肝心ないちばん重要 な部分は(そこが商品の競争力となるような部分は)常に人手によって新しく生 み出されるしかないのです。

 したがってプログラマの仕事というのは厳しくなることはあっても楽になると いうことはありません。この傾向はこれからもずっと続いていくであろうと私は 思っています。まあ宿命であろうと観念しています。しかし問題はここから先に あるのです。プログラマには、ずいぶんと「当たり外れ」が大きいという問題で す。少し古いデータですが、通産省から発表された資料の中で「プログラマによ る生産性の格差は最大で27倍にのぼる」という記事を読んだことがあります。 品質の格差や、将来に渡るメンテナンスの大きさを考慮すれば、そんな程度では すまないのではないかと私は感じます。

 ソフトウエアの中でも、最も重要で最も肝心な部分が人手によって作成される ため、担当するプログラマのセンスの善し悪しや技術力の違いが完成された製品 に露骨に反映されるのです。

 Javaのページでした。・・・はっはっはっ(失礼)。お仲間のプログラマ の皆さんにヒントを少し。

ヒント1:

 最初から完璧を目指して、全てのケースを網羅できるような変数やメソッドを  準備しておくのは、あまり良い結果が出ないようです。後でけっこう迷惑する  人が出てきます。
 必要最低限のものだけを用意して、後で必要になったら継ぎ足していっても、  あまり汚くなりません。

ヒント2:

 その時にちょっと楽をしたいが為に、安易にpublicにしてしまうのは止  めましょう。あくまでもprivateを基本に!
 (特にJavaの場合)後でいったい何だったんだという結果になってしまい  がちです。

 次回は、プログラマを見分ける簡単な方法について書こうかなと思っています。 (あくまでも予定です。気が変わるかもしれません。)それでは、また。

以下、次週つづく!