この辺を見てて、自分なりに思ったことを殴り書き。
先に結論だけ書いとくと、プログラムを知らない人に最初に教える言語は、仕事に使う言語(そりゃそうだ)。それが複数あるか、仕事で使うわけでないなら、 Python か Java がいいんじゃないかと思うとです。
“プログラムを知らない人からみる”難しい言語と、“プログラマにとっての”難しい言語がちょっと違うような気がするので、できるだけ「プログラムを知らない人」の事を意識してお送りします。
私自身は Ruby 大好きだけど仕事は C++。分野としては組み込み系‥‥になるのか? 選択肢は C++ か C かぐらいしかないので仕方なく C++。何かの変換ツールとかを作るときは、基本 Ruby、時々 Java、稀に C++ な感じ。
Ruby 大好きでも、プログラムを1からやる人に薦める or 教えるなら Python の方がいいような気がしています*1。
上記のエントリにコメントを残しに行った時に思ったんですが*2、Rubyって書き方が多すぎて、何がたったひとつの冴えたやり方なのか未だにわからない。自分の感覚をそのままコードにしやすいのが Ruby のいいところだけど、感覚も何も無い人にそれをさせるのはそれなりに危険が伴うのではないかと。
そういう意味では Python は
- 誰が組んでも似たようなコードになりやすい(らしい)
- インデント地獄はインデントを綺麗にする意識を植え付けられる
- self地獄は「self(or this)が省略されている」というお約束を知らないから関係ないし、インスタンスメソッドと、クラスメソッドの違いを意識させやすい
- 公式サイトを見るだけで入門が簡単(らしい)
という感じで、Python の欠点だと言われている部分すら、利点になってしまって言うこと無しなんじゃないかと。私はそれほど Python の事を知らないので、間違っていたらごめんなさい*3。
Javaを選択肢として残しているのは、静的型解決言語ならJavaかなという消去法。動的言語を意図どおりに扱おうとするのは(初心者にとって)意外と難しいんじゃないかなー、と思っていたり。自分が COBOL*4 → C → Java → C++ → Perl,Ruby と覚えていったので、いきなり動的言語をやった時のイメージがピンとこなくて、難しいんじゃないかと思ってるのかもしれんけど。コンパイラが頻繁に文句いう言語の中では Java は良い言語だと思いますよ? 消去法だけど(ぇ)。
Javaが習得できない人に、どの言語を使わせても、結局は危険なコードを書かれる気がするので、ふるいにかけるという意味では網目の幅がちょうどいいふるいなんじゃないかと。C++ は網目デカ過ぎる(笑)。