間違いだらけのプログラミング言語(開発環境)選び

デカルト〔René Descartes, 1596-1650〕を知る人も知らない人も、座標 (x,y) で位置を指定する方法(デカルト座標系)を習った記憶はあるでしょう。彼はその著書「方法序説 Discours de la méthode pour bien conduire sa raison, et chercher la vérité dans les sciences, 1637」で「すべてを疑ったうえで知識を合理的に再構成する」ことの重要性を説いています。
量子力学へ移行するときに、古典力学の常識が通用しない世界の手前で、挫折する人も少なくありません。同様に、Ruby/Python へ移行するときに、Java/C# の常識に囚われて、本格的な OOP への扉を閉ざす人も少なくありません。より厳密かつ広範な問題領域を統一的に扱いたいなら、狭い常識を再構成する必要があります。
Java/C# で得た常識の「すべてを疑ったうえで知識を合理的に再構成する」のに長けた人は、Ruby/Python にも容易に移行できて(Java/C# で構築したレガシーシステムでは)困難な問題解決も容易になります。その一方で、狭い常識に囚われたまま「先祖返り」する人もいます。「if と別れる50の方法《6》switch は百害あって一理なし - 続・ひよ子のきもち」でも指摘したように、switch 文に伴う百害の中でも醜悪なのがこの「先祖返り」現象です。本格的な OOP への扉を自ら閉ざすとしたら、それは悲劇でしょうか、喜劇でしょうか。
... zap ...
プログラミング言語を比較するときに「プログラマー人口」を引き合いに出しますが、これにも「Oh 脳《024》なぜ物を投げても放物線を描かないのか - 続・ひよ子のきもち」と同様の虚しさがあります。それを理解するには、特定の「スポーツ競技人口」に置き換えると分かりやすいでしょう。たとえば、多数の人が草野球に興じます。その中から、技術に長けた少数の人がプロ野球の世界に身を投じます。それには飽き足らず、本場のベースボールを目指してメジャーリーガーになれるのは、さらに少数の人だけです。
イチローのヒットは一本あたり…」という試算を引き合いに出しますが、同じことを「ワンステップあたりの単価/利益」に置き換えると分かりやすいでしょう。同じ機能を実現するのに必要なコーディング量/開発期間などを視野に試算すると、Java/C# の数倍から数十倍の単価/利益を、Ruby/Python では容易に達成できるのが分かります。
受講者のみなさんの知人を思い浮かべてください。その中に、草野球に興じる人は何人いますか/メジャーリーガーは何人いますか。ヒット一本でいくら稼げますか/ワンステップでいくら稼げますか。とくに、利用者の付加価値(予算/納期)に身を投じたい開発者にとって、要求仕様の変更にも「柔軟に対処できるか」が重要な鍵となります。
... zap ...
閑話休題。宇宙規模の厳密な論議Oh 脳《024》なぜ物を投げても放物線を描かないのか - 続・ひよ子のきもち」とは別に、現実的な問題解決として「放物線を描くことを前提にした」システムは有効で、むしろ無視できない「空気抵抗やコリオリ力の影響を考慮した」調整に長けたシステムを開発したい場面もあります。ですから、プログラミング言語を選ぶときの基準が、それを取り巻く環境や背景にある文化によって異なるのは「当然の帰結」なのです。
私が受講者のみなさんにお勧めしている「プログラミング言語を選ぶときの基準」とは、次のようなものです。

アマグラマーが趣味で興じるのと違って、将来(生涯)プログラマーを目指すなら、プログラミング言語を選ぶ事情も違ってきます。
要求仕様に変更があると聞いて「頭を抱え」たくなるようなら、そのプログラミング言語を再考してみる価値があるかもしれません。
これからは、要求仕様に変更があると聞いて「ワクワク」するような、プログラミング言語を選択してみませんか。

「流行に囚われず」要求仕様の変更にも笑顔で応えられるなら、Java/Ruby を選択した自分に胸を張ってください。でも、要求仕様の変更に表情を曇らせる自分に気付いたら、そのプログラミング言語(開発環境)を疑ってみませんか。Java/Ruby に満足できないみなさんは、オブジェクト指向の本場では「その可能性がどこまで広がるか」に身を投じてみるのも一興ですよ。□