Passing Wind (10179) の日記

2004 年 05 月 25 日
午後 05:46

LightWeight Languages

さて、気を取り直して……
最近、こういうのを読んだ。
なかなか纏まっていて面白いのだが、特に

全くの想像ですが、PerlやPHPで信頼性のあるシステムを構築できるエンジニアってJAVAの場合と比べて少ないんじゃないでしょうか?
小さなシステムだからって信頼性を確保するにはそれなりの人材が必要です。
ベンダがJAVAを薦めてるように見えるのは実は表面的なことなのかもしれませんね。

このコメントに激しく同意。PerlやPHPといったスクリプト言語は、何も考えずに
書けるほど手軽だというメリットが結構大きいと思う。コンパイルという「実行までの
煩雑なルーチンワーク」がなく、とりあえずエラーさえ取れれば走るのだから。
しかし、その「手軽さ」が「信頼性のあるシステムを構築できるエンジニア」を
育てる障害になっているのではないだろうか。
これには2つの視点があるだろう。つまり、

  1. 手軽な言語だから、手軽なシステムにしか使えないだろうという思い込み。
  2. 手軽に書けるから、全体の設計を考えずに手軽にコーディングに入ることができる。

1.は「Javaジャバ言ってる間にも」にもある通りで、いまさらとやかくいう必要はなかろう。
案外指摘されていない(私が知らないだけかもしれないが)のが2.ではないだろうか。
「いまおすすめの言語はPHP -Javaジャバ言ってる間にも(3)」でも指摘されているが、
PerlやPHPの場合、手ごろなレンタルサーバでいくらでも試すことができる。しかも、
解説書もそれなりに豊富に出ている。当然、軽い気持ちで始めてみて、「これは楽しいぞ」
となってハマっていくというパターンがあるだろう。逆に、Javaの場合、Webアプリに限れば
実行環境は限られてくるので、仮に作ったとしても自宅にサーバを立てない限り
公開の機会が狭まってしまう。
となると、自ずとPerlやPHPのほうを選択してしまうだろう。

ここまでは問題ないと私は思っている。PHPにしてもPerl (特にmod_perl) にしても、
がっちりと設計しておけばJavaなみのものができるだろう。オブジェクト指向の実装では
確かにJavaに一日の長があるが、だからといってPHPやPerlが多人数開発に向かないというのは
必ずしも正解ではないと思っている。

問題は、その「しっかりとした設計ができるか」なのだ。

巷にあふれる「入門! Perlで作るCGI」「犬でも分かるPHP」といったお題目の本を
みてみよう。こういったテーマの書籍は、本来、

  • 取り上げた言語の言語仕様。
  • (プログラミング初心者向けなら)アルゴリズムやデータ構造などの考え方。
  • HTMLなどの外観を構成するための要素。
  • インターネット関連の標準、特にHTTPについて。

などを取り上げないといけないはずだ。だが、それぞれが1冊になるほどのボリューム
である。それを1冊にまとめているのだから、当然「エッセンス」だけになる。しかも、
特にPerlの場合は、こういった本に取り上げられていたり配布されているソースがPerl 4
likeで、「use strict;っておいしいの?」状態である。しかも、適当に書いても動くし、
手本になるソースがあまりないので、基本になるパラダイムがシフトすることがないのだ。
適当に書いていれば当然テストパターンも少なくなるし、そもそもどういうテストをすれば
いいかという解説が少ないし、それを自分自身で考えることもない。結果として、
あまり品質の高くないコードになるのではないだろうか。

後記
Javaについて、

確かにきちんと設計するかStrutsのようなフレームワークを導入すると、拡張、変更が容易なシステムが開発できます。ただ、watanabeさんが仰る通り、システムの規模、要件に応じて言語は選定する必要もあると思います。

というコメントがあるが、実はJavaでフレームワークを使った開発にも落とし穴がある。
多くの部分がフレームワークで抽象化されているため、確かに効率はいいだろう。
しかし、何も考えなくてもコードを書けるため、「できるコーダ」と「できないコーダ」
の間に絶望的な差が出てしまう可能性を孕んでいるのだ。もちろん、本人のやる気と
環境次第ではあるのだが、得てしてこういう部分の実装を担当するのは、派遣プログラマだったり
して、どの現場でも同じような内容をやっていたりするものだ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

ハッカーとクラッカーの違い。大してないと思います -- あるアレゲ

処理中...