難しい言語

難しい言語. - カレーなる辛口Javaな転職日記 さん

いや,Javaは相当に簡単な言語ですよ.[Javaスクールの危険]

これが難しいなんて言ってる人はプログラマーをやめた方がいいかも.

難しい言語. - カレーなる辛口Javaな転職日記


* * *


最初にお断り。Java がどうこうという話じゃなくて。で、うーんどうでしょう。まずは「簡単な言語」とは何かをちょっと考えています。

プログラミングそのものを習得するときに、より習得しやすい言語とそうでもな言語というのはあると思います。(でなければ、「どんな言語を使って開発しても一緒だ」と豪語する髪の毛のとんがった上司と同じ穴の狢です)

具体的には...とちょっと考えてみれば、ざっと挙げればこんな項目でしょうか

  1. 文法ルールに一貫性があり かつ シンプル直感的 であること
  2. 別の概念を別の概念として扱えること。兼ねない。
  3. 同時に考えなければならないことを減らせること
  4. 言語が示すプログラミングのスタイルが一本立っていること(その方向に強く誘導されることが望ましい)


1 は、たとえば C言語のポインタ 周りの文法の混乱だとか。文法が混乱してるだけで本来難しくない概念の習得に躓くという、なんとももったいない話になってしまうわけです。

2 は、例えば Java が Interface を導入したのが良い例です。悪い例としては古典的ですが、C のキャストが 型変換 / 型変更 / const 外し の ごった煮であることとか。分けられる概念は整理して分けた方が覚えやすいと思う。

3 は、これまた古典的で申し訳ないのですが、C や C++ のように常に 脳の別のスレッドでメモリ管理のことを考え続けなくてはいけないのが良くないという話。オブジェクト指向プログラミングの学習にスコープを移せば、ポリモーフィズムと継承が絡まない 動的言語を使って学んだ方が、格段に楽だと思います。ポリモーフィズムのことを考えるときはポリモーフィズムのことだけ、差分プログラミングのことを考えるときには差分プログラミングのことだけを考えていられます。

4 は、まぁ C++ に対するアンチテーゼで、あの言語にポンッと放り出されたら、底には広大な草原が広がっているだけで道なんて一本もない。目的地をキチンと解っていて地図と方位磁石の使い方を知っていればそれでも困らないけれど(かえって快適かもしれない!)、普通は道なりに進んで「そこの交差点を右、100メートル」と行きたいものです。


* * *


JavaBlackさんのと、元の記事のgothedistanceさんの視点はちょっと違っていて、プログラミングの学習において プログラミング言語を篩いとして使うかガイドとして使うかです。ガイドの視点は上で書いたので、篩いの視点で書くならば、Java が篩いとしていまいち有効でない言語だというのは、そうかもね、と思います。ですから、

Javaは文法がとにかく複雑でそれを覚えられない人間はドロップアウトしていく傾向が強かった。

思ったことを形にできる喜びを - GoTheDistance

には正直 「いや、それは...ドロップアウトした方がみんなが幸せになれるんじゃ」と思ってしまいます。(と、日頃使い込んでいないのにそう 言ってしまうのは大変問題があると思いますが)

一方で、難しれけば篩いとして機能するかというと、実はそうではないように感じます。難しすぎると主婦のみなさまに大好評である C++ の場合、こんな弊害が。

  • C++を分かったような気持ちになってる困ったちゃん
馬鹿プログラマは仕事でプログラムするな - 神様なんて信じない僕らのために

あと、Cを長く使ってきた人がスイッチしたりしたとき、

どこを見て言っているのか知らないけど、

C++くらい」とか「C++なんか」とかいうプログラマは大抵C++を使えないのに使おうとしているので

放置しようね。

C++が最強に決まってるだろ! - 神様なんて信じない僕らのために

いやぁ、難しすぎてみんなが勉強半ばで諦めてしまって出来ていないのがフツーになってしまってるのですよね(^^; *1。 実際周りを見回しても、例えば Template しらない / 使えない C++ プログラマのなんと多いことか(ここら辺は自戒を込めて)。Accelarated C++ が別世界な人たちが支えている美しき日本の開発の現場よ...。鬱だ。

つまり、C++ も 「熟練できないプログラマが溢れかえるような言語」には違いなくって、「言語の難しさ = プログラマの篩い」には、私は結構懐疑的です。いや、たしかに本当にどうしようもない方とか弾くのはできますし、ある程度の相関関係があるのもそうなのですが、でも残った方たちの酷さだって大した物で。巷で人気の C言語だって こんな惨状ですし。

Cプログラミング診断室


* * *


結局の所、難しさの度合いが篩いとしての有効度としてはあんまり意味がないのなら、プログラミング自体の教育用言語は Python とか Ruby とか「簡単な」のが良いなぁと思っています。これらは ガイドの条件を良く満たしていますし、どうせ仕事に Java類 や C属 を使うんだとしても、複数の言語を知っているということは強いから。スクリプト言語が使えると業務の自動化とか楽だしそういうコンピュータの使い方を覚えて欲しいという、副作用を期待してるのもあります。

というわけで、ウチの現場は Python つかってますよ!(Python なのはあたしの趣味だ!)

*1:これは C++ の 難しさだけでなく 「使いたいところだけ使ってね」を可能にするデザインポリシーがそうさせている面もあります