プログラミングでは日常生活であまり耳にしない言葉がたくさん出てくる。
たとえば、変数・関数・オブジェクトなど。
説明を聞いてスッと理解できる方もいれば、なかなか意味が分からずに苦労したという方もいるだろう。
さっぱり分からないということはない。そして使ってみろと言われて使えないわけでもない。…にもかかわらず、いまひとつ分からない。なんかもやもやする。スッキリしない。
では一体なにが分からないのだと聞かれても困る。なんだかよく分からないとしか答えようがない。そんな経験はないだろうか。
というか、多くの人がこのように感じながら日々使っているうちに慣れてしまった方が多いのではないかと思う。
そして他の人に教えるときも「慣れるしかない」などとしたり顔で言ってしまうんだ。
でも、本当に慣れるしかないのだろうか。
「慣れるしかない」というのは、場合によっては自分がうまく説明できないのを誤魔化したように聞こえることがある。完璧に説明できなくてもいいから、もう少し納得度の高い答えを示せないだろうか。
それで私はここ数日、この「いまひとつ分からない」という感覚の正体をもう少し正確に言語化できないかと悩んでいた。まず敵を知らなければ対処のしようがないからだ。
それでいろいろ調べていたところ、認知心理学の分野で「概念形成」という言葉を見つけた。
何かを理解したというのは、言い換えると頭の中で概念が形成されたということで、「いまひとつ分からない」というのはつまり、概念形成がうまくできていないという状態なのではないか。
ではどうすればうまく概念を形成することができるのか。
その前に、概念という言葉をはっきり定義しておこう。概念を形成しようというのだから、肝心のそれが何なのかはっきりわかっておく必要がある。
ここで国語辞典を取り出してくる。
岩波国語辞典より
概念-同類のものに対していだく意味内容。
ア)同類のもののそれぞれについての表象から共通部分をぬき出して得た表象。
イ)対象を表す用語について、内容がはっきり決められ、適用範囲も明確な、意味。
ウ)俗に、複雑なものに対する大まかな認識内容のこと。
このうち(ウ)の意味で理解している方も多いと思うが、今回扱うのは(ア)と(イ)である。
で、またここでややこしい言葉が。
表象(ひょうしょう)とは。。。
岩波国語辞典より
現在の瞬間に知覚してはいない事物や現象について、心に描く像。イメージ。
い、、一応知覚も調べておくか。。
岩波国語辞典より
感覚器官を通じて、外界の事物を見分け、とらえる働き。視覚・聴覚・嗅覚・味覚・触覚など。
つまり、たとえば「変数」に対する概念を形成するとは、数ある「変数」に対する脳内イメージのうち、共通するイメージを抜き出したものを脳内に形成するということを指す。
よく変数は箱に例えられる。私は箱だと説明されて「なるほど箱か」と何も疑問に思わなかったので良かったけれど、一定以上の人がこの説明で躓くらしい。
そこでしばしば、「変数=箱」モデルはあまり上手い例えではないとの指摘がなされる。そしてメモに例えたり、名札に例えたり、実際にどうなっているのかメモリの動きを説明したりという試みが行われている。
しかし先ほどの概念形成の定義を考えると、どれが良いということではないような気がしてきた。
もう一度言うと、「変数」に対する概念を形成するとは、数ある「変数」に対する脳内イメージのうち、共通するイメージを抜き出したものを脳内に形成するということを指す。
変数とは箱であるという説明をいくら繰り返しても、共通するイメージは「箱」そのものである。一方、メモであるという説明を繰り返しても、共通するイメージは「メモ」そのものである。
箱という説明で躓いた人がメモという説明でなるほど!となるのは、メモに例えるのが箱に例えるよりも優れているということではなく、複数の事例を見ることで共通する特徴を捉えやすくなるからだろう。
変数がハコにもメモにも似ているのであれば、まず消去法で変数が立方体である可能性は消える。
では具体的なメモリの動きを説明するのはどうか。複数の人に説明してみて、これは変数の概念を形成するのに極めて効果的だった。しかしこれも、ハコ・メモといった既存の説明を受けた後でのことであるから、メモリの説明単体で変数を説明するのは難しいかもしれない。
それに変数におけるメモリの働きはたまたま実装がそうなっているということにすぎず、変数の本質かと言われるとやっぱり違う気がする。
プログラミングにおける変数とは本来、色も形もない純粋な概念なのだろう。だから人に説明するにはハコやメモといった比喩や、実装という現実を使って、事例の形で言語化するしかない。
よく分からなくても使っているうちに慣れるというのは、つまりコーディングを通じて脳内にたくさんの事例をため込めば自然と概念が形成されるということ。
だから、「いまひとつ分からない」から「はっきり理解できる」に移行するために「慣れる」という手段は有効であるが、「慣れるしかない」わけでもない。
いろんな切り口から説明すれば共通項が概念として形成されるし、たとえ話だけで理解されない場合は具体的な実装に踏み込んでみるとスッキリ理解していただけることが多い。
それでもうまく説明できないときは、自分の力不足であることを認めたうえで、申し訳ないけれど実際に使いながら慣れてくださいというと好印象だと思う。