プログラマというお仕事

プログラマは職人だ!プロならもっと腕を磨け。
世の中ヘボいプログラマが多すぎる。
少々過激な意見でも言っちゃうよ。

Java

JAVAってそんなにいい?

作ろうとしているシステムに一番いい言語は何かを決めるのはSEと呼ばれる人の仕事のひとつです。顧客の要件を分析し、開発工数やランニングコストなどを総合的に判断して最適なプラットフォームを決定します。が、そのSEがコードすら書けないようなダメ人間だと別の基準でプラットフォームを決めてしまい、その後の開発工程でやっかいな事になるケースが多々あります。別の基準とは『最近流行ってるみたいだから』という、その辺のコギャルと同程度の思考回路です。

最近は何にでもJAVAを使いたがるシステムを良く目にします。スタンドアロンで特定の端末でしか使用しない小さなプログラムなのにEXEにしないでJAVAアプレット。セキュリティが問われる情報を扱うでもなく、IT専門の部署がある訳でもないし、とにかく安価に拠点間を結んで情報共有したいというだけのニーズなのに、自前でサーバを立ててJAVAサーブレット。こんなソリューションを提案するSEの頭の中にあるのは『JAVAなら安心安全で生産性も高くて、なんだか知らんけど立派なシステムなんでしょ?』みたいな、どこで聞いたかわからないあやふやな知識だけです。
JAVAならみんな使ってるから、JAVAなら有名だから、JAVAならオブジェクト指向だから・・・だってJAVAなんだから・・・。

誤解の無いように言っておくと、私自身はJAVAは割と好きな言語なんですよ。特にオブジェクト指向は正しく使えばとても強力な考え方だと思います。しかし上記のようなヘボいシステムでは、まず間違いなくオブジェクト指向とは程遠いコードで書かれています。もっとはっきり言います。世の中の自称JAVAプログラマの95%はオブジェクト指向を知りません。かなり過激な意見だと思うでしょうが、私の経験上では決して大げさではなく実感です。

そのシステム、PHPとMySQLで良くない?
こう言うと訳知り顔の技術者(上記のヘボSEを含む)から一斉攻撃に合います。それを承知で、そんな攻撃を技術的に論破できるだけのスキルを持ち合わせた上であえて勇気を持って主張できる人って本物の技術者だと思います。
技術者はユーザーの満足の為にシステムを開発するべきです。ユーザーが良しとするならそれでいいんです。自身の知的欲求や自己満足の為であってはなりません。そういうのは趣味で好きなだけやって下さい。我々はプロなんですから。

やさしいJAVA?

ブログネタ
Javaの学習法 に参加中!

初心者がプログラムを独学で覚えるのは難しいと思います。失敗すると間違った方法で勉強を進めてしまい、スキルアップのベクトルを誤ってしまう危険がかなり高いと感じています。プログラミングを覚え始める最初の1年目で方向を誤るとその後の進歩に大きなマイナスになります。

独学で本を読んで勉強した経験のある初心者以上,中級者未満の人に対して、現在プログラミングスクールでJAVAを教えています。やはり勉強の方法を間違えてしまっていて、言語の文法の表面をなぞった程度の知識しかない人です。『まず本から得た知識はいったん全て忘れるように』と言うのが最初の講義でした。私の教え方は本に書いてある事とは違う方向からの説明なので変な先入観はかえって邪魔です。特にオブジェクト指向の考え方については、変な予備知識があるほど間違って理解されてしまいがちです。

実は現役のプロのプログラマの中でもオブジェクト指向を真に理解し実践できる人はほんのわずかです。その理由を考えてみると、オブジェクト指向以前の古いプログラミングスタイルの知識が邪魔をして、技術のパラダイムシフトに着いて行くのを難しくしているのではないかと思います。
このような古い考え方から抜け出せない技術者が寄ってたかって設計したシステムが旧態依然のひどいものである例を、私は今までいくつも見てきました。その話もいずれ書きたいと思います。

話を戻して、この受講生が独学に使ったという本を買ってきて参考までに読んでみました。割と有名な本らしく、ネット上などでも良い評判が多く見られました。まぁ、あまり期待はしていませんでしたが、これはひどい...
世の中のプログラミング初心者は本当にこの本を読んで『やさしい』と感じるんでしょうか。この本を読んで本当に実用的なプログラムを書ける人がいるとしたら、その人は最初からどんな本で勉強したって出来るくらい頭のいい一部の人間に違いないです。

だって、乗り物クラスを継承して車や飛行機を作ろうだの、動物クラスから犬クラスを継承して「吼える」メソッドを呼んだら画面に「ワン」と表示されますだの、いったい何の話をしてるのやら。『それがいったい何の役に立つんだ』という部分の説明が全くないんです。
上記の『オブジェクト指向を真に理解できていないプロ』の人達にも共通する点はここです。実際の業務システムのどの場面でどのように役に立つかの説明がないまま、単に文法の仕様書を『やさしいつもり』に書き直してるだけです。東大を卒業できるほど基本的に頭がいい人ならともかく、万人が理解できる説明ではないんじゃないでしょうか。

決して特定の固有名詞を出して筆者の方たちを悪く言うつもりはありませんが、私の個人的な見解では『○○言語入門』とか『やさしい○○言語』のようなタイトルの本は決して『優しく』ありませんでした。私ならそれをもっと『易しく』教える自信があります。採算を考えずに私がプログラミングスクールを続けている理由はその一点です。