抽象化と「忘れる」こと:プログラミング最初の壁について
この記事ではプログラミング初心者の気持ちについて書こうと思います。その前に少し遠回りをします。
私が昔習った数学の授業で、印象に残っていることがあります。
抽象化とは、具体的なことを忘れることなんです。
わかりやすく説明してみます。しばしお付き合いいただければ幸いです。
抽象化の旅へようこそ
高校数学ではベクトルという概念を習います。まずは「矢印」の形で習います。
その後「成分表示」という形を習います。
重要なのはここです。高校数学から大学数学へジャンプするときに、矢印のことをいったん忘れるのです。
その結果、大学数学では「ただ数字を並べただけのベクトル」が主役となります。これが抽象化の一例です。
ベクトルの抽象化によって
・「矢印」以外に応用が広がる
・必要ならば「矢印」や「座標」だったこととも結びつけられる
といったメリットを享受できます。
「ただ数字を並べただけのベクトル」は、あらゆるデータをまとめて簡潔に表現できます。数字を縦横に並べれば、それは行列とよばれます。昨今のAI技術では(雑な言い方ですが)、ベクトルや行列が不可欠なものとなっています。
大学数学では、この先も抽象化の旅が続きます。直ちにベクトルや行列が x や A のようなアルファベットに置き換わり、果てには「数字を並べる」という概念すら忘れます(!)
プログラミング初心者の鬼門は抽象化?
ところで、プログラミング初心者にとっての鬼門もまさに抽象化ではないかと私は考えています。
電卓を叩いて「1 + 1」を計算するところでつまづく方はいないと思います。
たとえばPythonを知らない方でも「print は文字を表示する命令だ」とうっすら想像できるかもしれません(注:すごく雑な説明です)。具体的には
print(1 + 1)
だったら「2が表示されるのかな?」と想像できるのではないでしょうか。しかし、
a = 1 + 1
print(a)
のように書くと、初心者にとっては「ん?」と思われるでしょう。ワンステップ分だけ遠くなった感覚です。
ここでいう「a」は一般に変数とよばれます。しばしば「数字や文字を入れる箱」と例えられます。
変数を使うことで、「1 + 1」といった具体的な数字のことを忘れて計算ができます。これが抽象化の力であり、プログラミングの力でもあります。
その力を享受するために、変数という抽象的な道具を使う必要があります。このようなジャンプの積み重ねが、プログラミング初心者にとっての壁になっていくのではないでしょうか。
このマガジンについて
今日、プログラミングをはじめたい方が増えています。私のところにも初心者の方から相談が寄せられています。
幸い今の時代は、自習教材は書籍や動画の形で豊富にあり、果てはプログラミング塾のようなものまで流行っています。
では、なぜプログラミングに挫折する人がやはりいるのでしょうか? 私はこの問いを追い求めようと思い、とりあえずマガジンだけを作ってみました。飽きてこの記事だけで終わってしまうかもしれませんが。
それではまた。
藤原 惟