「難しい言語」の補足

http://d.hatena.ne.jp/JavaBlack/20071112/p1 の続き.

私の意見は,*1次のものとほぼと同意見.

  1. プログラムを知らない人に最初に教える言語は、仕事に使う言語(そりゃそうだ)。
  2. それが複数あるか、仕事で使うわけでないなら、 PythonJava がいいんじゃないかと思うとです。
  3. Ruby 大好きでも、プログラムを1からやる人に薦める or 教えるなら Python の方がいいような気がしています。
  4. 動的言語を意図どおりに扱おうとするのは(初心者にとって)意外と難しいんじゃないかなー、と思っていたり。
  5. Javaが習得できない人に、どの言語を使わせても、結局は危険なコードを書かれる気がする
http://d.hatena.ne.jp/tanku/20071113/1194966240


ほんでまあ,Javaというのは,一般的に言っても「簡単な言語」なので,初心者に教えるのが問題になるとは思えないのだ.

http://d.hatena.ne.jp/minekoa/20071113/1194924935

「文法の簡単さ」と「言語の簡単さ」は必ずしもイコールではないけれど,今回はその辺りの話は本質ではないので無視する.

JavaBlackさんのと、元の記事のgothedistanceさんの視点はちょっと違っていて、プログラミングの学習において プログラミング言語を篩いとして使うかガイドとして使うかです。

少し勘違いされてるようだけど,Javaは篩いとして使うには「簡単すぎる言語」だが,初心者が始めて覚えるガイドとしても十分に「簡単な言語」でもあります.

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

には正直 「いや、それは...ドロップアウトした方がみんなが幸せになれるんじゃ」と思ってしまいます。

これには完全に同意見.

Javaの『簡単な』文法さえも理解できない人には,どんな言語を与えてもまともなプログラムは書けないでしょう。


少し前後するけど,

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

1については「直感的」という単語の使用には反対.この単語が使われるのは主にUIの世界だろうが,そもそも「直感的」などというものは存在しないし,専門家が使う道具に求めるべき性質でもない.Cのポインタが理解できない人は,(ポインタの文法が理解できないのではなく)ポインタの概念そのものが理解できない/操れないという指摘もある.

2については,例えばInterfaceなどというものはJava以前には,まず存在しなかった.兼ねるも何もない.*2

3については,はてさて例えが悪いせいかしっくりこない.JavaでもCでも,メモリ管理を意識してプログラムを書くのは変わりません.変わったのはメモリ管理の手法だけです.ポリモフィズムと継承は表裏一体なので,片方だけを考えるのはむしろおかしい.

4については,それはRubyPerlなどのスクリプト言語でも顕著に見られる特徴ですね.C++に比べるとまだ落とし穴が少ないだけ比較的マシなだけで.初心者がスクリプト言語の広大な世界に放り出されたら,何をして良いか分からず途方に暮れる光景が目に浮かびます.

*1:Pythonのことは良く分からないということも含めて

*2:例えが悪いだけかもしれないけど.