この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。
プログラマに向いている人と、そうでない人にはものの考え方に大きな差があると感じています。
「では、具体的にどこが違うのか」ということについて、日頃から色々と考えているのですが、最近、面白い記事を読みました。
表にアルファベットや数字が並んでいる4枚のカード。
【母音のカードの裏はいつも偶数】がホントだと確認するには最低どのカードをめくればいい?
この問題ではだいたい3/4の人が間違ってしまう。
ところが…
こういう4枚のカードで
【「18歳未満は飲酒禁止」に違反していない】ことを確かめるにはどのカードをめくればいい?
この問題だと、正答率がほぼ全員になってしまう。
論理的には等価な問題であるにも関わらず、「身近な物事」による比喩が行われると正解率が上がるというのは、なかなかに興味深い現象です。
そしてまた、この記事はプログラミングが不得意な人が抱える「ものの考え方」の問題点を端的に表しています。
この記事が示唆する第一の問題点は、(プログラミングが不得手な人は) 身近なものに置き換えないと、ものを正しく考えることができないということ。
言い換えれば、抽象的な思考ができない、ということです。
比喩がものを考える際の手助けになることは間違いありません。
しかし同時に、考えるべき問題の要素を具体的な事象で置き換えてしまうことは、その知識の適用の幅を狭めてしまうという問題があります。
その具象を敢えて捨て去り、抽象性を高めることで、あらゆる分野への適用の道を広げてきたのが数学です。
コンピュータ・プログラミングはその数学を基礎として発展してきた技術であり、必然的に、それを行う者に抽象的な思考能力を要求します。
第二の問題点は、(プログラミングが不得手な人は) 自分で適切な比喩を考え出すことができないということです。
抽象的な思考は、それを行うにあたってある程度の訓練が必要であり、誰もが最初から
できるというものではありません。
最初のうちは、問題に自分なりの比喩をあてはめて問題を解きます。
そして、後からその比喩の妥当性を検証し、より本質に近く、正しい比喩を重ねていく過程で抽象的な思考法を身に付けていくわけです。
しかし、その比喩を自分自身で考え出すことをせずに、問題とセットで与えられることを期待する姿勢を身につけてしまうと、抽象的な思考能力を獲得する糸口すらつかめないままになってしまいます。
抽象的な思考能力は、それがそのままプログラマの実力になると言っても過言ではありません。
プログラマを目指している学生さんには、自由な時間が取れる今のうちに、この能力を磨いておいて欲しいと思います。
成田 (TIY: Think It Yourself)