一つの言語を習得しても,やはり他の言語を学ぶのは難しい
http://d.hatena.ne.jp/Isoparametric/20070706/1183708963
ついでに.
「ひとつの言語が使えるようになれば、他の言語は簡単にマスターできるから言語なんてずっと勉強するものじゃないよ」
http://d.hatena.ne.jp/bleis-tift/20070705/1183636561と飲み会で言われたというお話。
僕も昔はそう思ってましたけど「簡単じゃないよ」と最近は思っています。
当然だが,これは「簡単じゃない」でいいと思う.*1
言語によって設計思想も異なるし,言語によって持つ機能がそれぞれ異なる.オブジェクト指向/非オブジェクト指向,動的型/静的型,手続き型/関数型,etc.その違いがアルゴリズム設計やコーディングイディオム,さらにはデバッグ手法にまで影響を与える.
例えばCとJavaなんて比較的似ている従兄弟みたいな言語だけど*2,それでもCからJavaに移った人間の嵌りやすい部分には,次のようなものがある.*3
- 基本的なオブジェクト指向(クラスとインスタンス,継承やポリモフィズム)
- ポインタと参照の違い.
- 同一性と同値性
- 配列もStringもオブジェクト.
- インターフェース
- Garbage Collection,(特に到達可能性の概念と,Lazyに処理されるのが理解できない.)
- GCがあることを前提とした,クラスやアルゴリズムの設計.
- 動的最適化(C言語にはない)とパフォーマンス特性.
- マルチスレッドベースの並列処理とメモリモデル.(C言語レベルでは並列処理がない)
- 例外機構.
- 豊富な標準API.
JavaからRubyだと更に嵌ったし,さらにギャップの大きいLISPに至っては今でもまともに使えない有様だ.
言語を知らない人ほど「井の中の蛙」になりやすく,「他の言語は簡単にマスターできる」なんて暴言を吐くのではないだろうか.