日本語が使えれば英語は簡単にマスターできるのか

via 予定は未定Blog版さん。

「ひとつの言語が使えるようになれば、他の言語は簡単にマスターできるから言語なんてずっと勉強するものじゃないよ」

ひとつの言語が使えるなら、言語の勉強は不要なのか - ぐるぐる〜

と飲み会で言われたというお話。
僕も昔はそう思ってましたけど「簡単じゃないよ」と最近は思っています。


表層的なものをなぞることを「使える」と呼ぶのならそれはそうかもしれないですが、
bleis-tiftさんが指しているように、
Javaを知っていても簡単にテンプレートは読めないし、
C++のテンプレートを読み書きできてもJavaジェネリクスを読み書きできないですね。


また似たような構文でも同じキーワードで異なる動きをするものもあるわけで。
「簡単じゃん」って思っていると思わぬ罠にかかる。


で、他の言語が使えるから「簡単じゃん」って言ってしまう人は
他の言語も自分の文化で書こうとしてしまうきらいがある。


JavaならJava
C++ならC++
PythonならPythonの書き方や文化があるにも関わらず
自らの文化で書こうとするのは付け焼き刃以外の何者でもない。


「深く関わらないと言語の文化は身につかない」


僕もRubyの構文はサッと勉強してみたもののその「文化」はまだ理解できない。


言語というのは「構文」だけの事を言うのではない。

このレベルでは他の言語の文化を無視して、自分の知っている言語に無理やりあてはめたコードを書くことが多い。

とbleis-tiftさんも言われるようにこれは「使える」レベルではない、
どちらかというと書き殴っているレベルに見える。


言語を読むことでその文化を知り、親しめるようになったとき、ようやく「使える」ようになった、と言えるんじゃないかな。


スポーツなどで言えば
「スポーツなんてどれも一緒で、例えばサッカーができるようになれば野球だって簡単にマスターできるようになるよ」という暴論に近い。


例えばもっと近いもの、
アーチェリーができる人は簡単に弓道を極められるだろうか?
フェンシングができれば剣道も簡単だろうか?
将棋ができればチェスも簡単だろうか?*1


なんというか、そういう種類の暴論に近いと思う。


初期のJavaC++は実際よく似ているし、C++をそぎ落としたものと言って良いと思う。
STLを書いた人はJavaを見て「(新しいものがなさすぎて)学ぶことがない言語は初めてだ」みたいな事を言ったという。
が、やっぱりJavaC++と袂を分かち、
別の道を歩き始めて、
今では奥底を見ればそれはまるで別の言語のように見える。
それは「考え方」が違うし育ってきた「文化」が違うからだ。


色々な言語の文化に触れ、思想を知り、本質を学ぼうとすることは決して無駄になることではない。
そして言語を良いところも悪いところもひっくるめて愛せるようになったとき、本当に「使いこなせる」(マスターした)と言えるようになるんじゃないかなぁ。


とか思います。
てんで別件ですが、


Ruby/Python/PHP/Perl -> Java -> C++ -> C


とか逆行すると苦痛な気はしますね……。
簡単にできたことが簡単にできなくなっていくので。

*1:羽生さんは凄いね