外国語学習とプログラミング

はじめに。

昨年末から休日を図書館で過ごすことが多くなったが、お陰で有用な本に出会う確率が大幅に上がった。せっかくなので、備忘録も兼ねて有益な本を紹介していきたい。ちなみに、図書館を利用しても本を買わなくて良くなることはない。むしろ、手元に置いておきたいと思う本が増えるので、本に対する投資は増えた。

情報格差、おいしい?

プログラマとして自分の価値を高めるためには、やはり情報格差を利用したい。つまり、入手できる情報が他人より多いということで差別化を計りたいのだ。そのためには、英語は必須となる。英語で検索し、英語で一次情報にあたることができるだけで、それができない人よりも鮮度も精度も高い情報を得ることができるというのは当然のことだ。このような理由から、英語学習の熱意が高まる中で、この本に出会った。

(ちなみに、まつもとゆきひろさんは「情報格差」より「情熱格差」が重要だと仰っていた。日本のような出版・翻訳が盛んな国では、情報格差というのはかなり少なく、むしろ情熱の有無が格差になってくるだろうというご意見である。これは最もであるが、とりあえずは情報格差があるという前提で話を進めたい。)

外国語学習の科学。

内容はいたってシンプル。第二言語習得(SLA)の専門家である著者が、その理論を一般向けに紹介した本である。まぁ、要するに「条件Aと条件Bで外国語学習を行わせた結果、統計的に有意味な差が認められましたよー」といった類の情報が沢山紹介されていると思っていただければ良い。簡略化しすぎて、怒られそうではあるが…。ところでこの本、当たり前ではあるが、外国語についてではなく、外国語の学習法についての本であるから、学習一般に対して普遍的に役立ちそうなテーマが色々と出てくる。とくに気になったのは以下のもの。

どうだろうか。学習全般に応用できそうではないだろうか?

外国語学習とプログラミングスキルの習得。

さて私は、外国語学習者であると同時に、プログラミングの学習者でもある。外国語習得にとって有用な事柄が、プログラミングの習得に応用できないか考えてみたくなるのが、当然と言えよう。前述の事柄を1つずつ、プログラミングの学習に当てはめてみる。

曖昧性の容認。

著者が述べることを大まかに要約すると、こうだ。「「単語+文法」のモデルには限界がある。単語も文法も正しくても、表現としては不適切な例は無数にある。」要は、ルールだけ覚えても、意味論・語用論の点で過ちを犯す可能性がありますよ、ということだ。なるほど、確かに語学学習において何よりうんざりするのは、規則に対する例外の多さであろう。こうした、事柄に対処するために有効なのは、「例文の丸暗記」や「曖昧性の許容」であると著者は言う。これは、プログラミングの学習に関して言えば、幾分マシであろう。自然言語とは違い、形式言語では曖昧性を考慮する必要はほとんどないからだ。強いて対応付けるならば、「動くけど汚いコード」みたいなものが、「単語+文法」モデルにあたるだろうか。

外向性や内向性は優位に働くか。

直感に反していたのは、外国語学習において「外向性が優位に働くことはあっても、内向性は優位に働かない」ということであった。外向性が優位に働くのは当然としても、内向性だって少しは優位に働くだろうと思ったのだが、そうではないらしい。プログラマは内向的な人間が多いからして、ある程度は内向的なメンタルモデルが優位に働くと考えて良いのではないかと思うが、プログラマにとっても外向性が優位に働くことは紛れもない事実だろう。コミュニティから情報を得られるということは、かなり強みになるし、他人からフィードバックをもらえる環境での成長が早いのは当然だろう。それに、どのみち客観性に対する執着の強いプログラマという人種は、自分に対しても残酷なほど深く分析のメスを入れるだろうから、結果として自己修正的になって行くし、その過程で弱点である外向性を克服する人は意外と多いだろう。ある種のプログラマの精神論が正統派の成功哲学に似通ってくるのはこうした理由があるのではないかと密かに思っている。

動機付けの重要性。

これは外国語学習もプログラミングスキルの習得も同じだろう。動機付けは非常に重要である。さらに、「できる」と言われることが「やる気」に繋がるという直感的に正しそうな事柄も、外国語学習の現場において明らかになっているようだ。最初に「できる」と言われたから、できるようになった。なんとなく自由意志の有無と関連付けてしまいそうになる。

学習順序の有無。

ほとんど理解できない情報から何かを学ぶことは難しいということが述べられている。当然これも、プログラミングにも当てはまる。自分のレベルの「少し上」を見つけることが何より効率的だ。

インプット対アウトプット。

うーん。これが何より悩ましい。本書では、まずインプットのほうが重要であり、それにプラスしてアウトプットの必要性があると良い、という結論が出ている。これは、私にとってはありがたい結論だ。今のところ、外国語学習もプログラミングの学習もこういう戦略をとっているからだ。基本的にインプットに比重を置いていて、たまにアウトプットせざるを得ない環境を無理やり作っている。正直、こうした戦略をとっている理由と、自分の内向的な性格上、インプットの方が楽だということは関係ない、というと嘘になる。しかし、それだけが理由といえるほど単純ではないというのもまた真実だ。

かなり正しそうな「まずは手を動かせ」論。

はじめに断っておくが、私はアウトプットがとても重要だと思っていて、その効果が絶大であることも認めている。しかし、その上でアウトプットは過大評価され過ぎではないかと言いたい。本書の中で、「早すぎるアウトプット」の問題点が指摘されている。つまり、ベースとなる知識がないまま英語でコミュニケーションをしだすと、乱雑な英語でコミュニケーションをとる癖ができてしまうということだ。確かに、自称英語ができる人の中にこういう人は結構いるのではないだろうか。私は、同じことがプログラミングの学習でもあり得ると思っている。

間違ってはいないけど…。

私のような青二才にだって分かるレベルのダメなコードというのはある。特に危険な香りがするのは、間違っていないし、当然動くのだが、自己反省的ではないコードだ。あと少しでも熟慮すればこういう風にはかかないだろうし、例えそうしてしまった後でも、後で気づいて直さないのはおかしい。そういうコードがある。これが、間違っていれば、「押してダメなら引いてみよ」という実践中心の考え方で十分対処できるのだが、間違ってはいないために気がづかない。一方、理論から入る人なら、問題が与えられたら、まず対処法を幾つかピックアップし、それらを比較検討するだろう。

時間は有限だ。

悪癖がつくということ以上に問題になってくるのが時間だ。実際に試してみるのは良いことだが、当然時間がかかる。これは、言い訳のように見えて、実際深刻な問題だ。試せる数には限りがあるからだ。例えば、なんとなくコンパイラが面白そうだからという理由で、コンパイラのフロントエンドからバックエンドまでを自前で実装していたら、相当に時間がかかる。それよりも、まずはコンパイラの各パスをざっくり把握してみるほうが現実的だろう。それだけでも、不可侵と思われたIDE上のコンパイラのオプションを触ってみることが可能になるし、もしその把握の過程で、「これだ」と思う分野(例えば最適化)があればそれを深くやれば良い。これほどに各分野の専門化が進んでいる中で、興味が有ること全てを実際にやっていたのではキリがない。有限な時間の中で、自分が実行するに値することを、まずは調べる。傍から見ると何もやってないように見えるが、この期間は絶対に必要だ。ちなみに、言語習得の分野では、こういう理解は遅れていないがアウトプットしない期間をアインシュタイン症候群、または、沈黙期というそうだ。もちろん、私は自分とアインシュタインを重ねあわせているのではない。念のため。

で、どうするか。

とはいえ、ポテンシャルに価値があるとは微塵も思わないし、そんなことを言っていたら随分と貧乏になりそうだ。結局、私が批判したいのは、「まずは手を動かせ」の「まずは」の部分で、「手を動かせ」ではない。そして、私は、ここ数年、知識習得のほうにかなり傾倒し、そのお陰で随分見通しが良くなったので、そろそろアウトプットの対象をしぼるつもりだ。多少歯切れが悪いが、この意思表明のために長々と文章を書いた次第である。なんにせよ、この本は学習プロセスに興味があり、効率的に学習したいと思う全ての人にオススメである。