2007年 07/26
一つの言語を習得しても,やはり他の言語を学ぶのは難しい
Java, プログラミング入門, プログラミング, C/C++, OOP
http://d.hatena.ne.jp/Isoparametric/20070706/1183708963
ついでに.
「ひとつの言語が使えるようになれば、他の言語は簡単にマスターできるから言語なんてずっと勉強するものじゃないよ」
と飲み会で言われたというお話。
僕も昔はそう思ってましたけど「簡単じゃないよ」と最近は思っています。
当然だが,これは「簡単じゃない」でいいと思う.*1
言語によって設計思想も異なるし,言語によって持つ機能がそれぞれ異なる.オブジェクト指向/非オブジェクト指向,動的型/静的型,手続き型/関数型,etc.その違いがアルゴリズム設計やコーディングイディオム,さらにはデバッグ手法にまで影響を与える.
例えばCとJavaなんて比較的似ている従兄弟みたいな言語だけど*2,それでもCからJavaに移った人間の嵌りやすい部分には,次のようなものがある.*3
- 基本的なオブジェクト指向(クラスとインスタンス,継承やポリモフィズム)
- ポインタと参照の違い.
- 同一性と同値性
- 配列もStringもオブジェクト.
- インターフェース
- Garbage Collection,(特に到達可能性の概念と,Lazyに処理されるのが理解できない.)
- GCがあることを前提とした,クラスやアルゴリズムの設計.
- 動的最適化(C言語にはない)とパフォーマンス特性.
- マルチスレッドベースの並列処理とメモリモデル.(C言語レベルでは並列処理がない)
- 例外機構.
- 豊富な標準API.
JavaからRubyだと更に嵌ったし,さらにギャップの大きいLISPに至っては今でもまともに使えない有様だ.
言語を知らない人ほど「井の中の蛙」になりやすく,「他の言語は簡単にマスターできる」なんて暴言を吐くのではないだろうか.
*1:比較的近い兄弟のように似ている言語間なら,わりと簡単かもしれない.たとえばJavaとC#とか,C言語とC++とか,PerlとRubyとか.その場合でさえも,あくまで「比較的楽だ」というだけで「使いこなす」というには程遠いものなのだが.
トラックバック - http://d.hatena.ne.jp/JavaBlack/20070726/p3
リンク元
- 300 http://reader.livedoor.com/reader/
- 98 http://www.google.co.jp/cse?cx=partner-pub-0034016813304024:vr0qtm-luae&ie=EUC-JP&q=Map
- 80 http://codezine.jp/a/article/aid/1502.aspx?p=4
- 78 http://codezine.jp/a/article/aid/1502.aspx?p=2
- 68 http://www.google.com/reader/view/
- 62 http://codezine.jp/a/article/aid/1502.aspx?p=3
- 48 http://codezine.jp/a/article/aid/1502.aspx
- 41 http://q.hatena.ne.jp/1244648098
- 26 http://b.hatena.ne.jp/entry/http://www.asahi.com/business/update/0726/TKY200707260448.html
- 25 http://www.google.co.jp/reader/view/

