どんな優れたプログラマーでも、生まれたときからプログラミングを知っていたわけではない。必ず「初めてプログラムを書いたとき」がある。そこからいくつもの壁を乗り越えて、徐々に優れたプログラムを書けるようになるのだと思う。今回は、私が考える「プログラミングを始めたばかりの初心者がつまずきやすいポイント」を独断で挙げていきたい。
つまずきポイント1:変数と値
プログラミングを学習する際に最初に出てくる概念が「変数」だ。中学校の数学の授業で教わるため、多くの人はプログラミングを学び始める前から変数の概念を知っている。ただ、「変数」と「変数の値」を混同している人が意外に多いようだ。実例で見てみよう。次のようなプログラムがあるとする。
a = 1
b = a
a = 2
このとき、aの値とbの値はどうなっているだろうか。プログラミングを少しでも学んだことがある人なら簡単に分かるはずだ。しかし、プログラミングを全く知らない人だと意外に間違いやすい。自分がもしプログラミングを全く知らないとすると、次のように考えるのではないだろうか。「まずaが1になる。次にbがaと同じになる。最後にaが2になる。aとbは同じだからaもbも2だ」。
これは論理的にはそれほど不自然な考え方ではない。しかし、プログラミングに関する限りは誤りだ。実際には、aは2、bは1になる。先の考え方の問題点は、プログラミングにおける「=」の意味を正確に理解していないことだ。「=」を「同じになる」と考えるだけでは不十分。「左辺に変数、右辺に式を置き、右辺の式を計算(正確には評価)した結果を左辺の変数に代入する」と理解しなければならない。
この考え方を「a = 1」に当てはめると、「1という式を計算した結果である1という値をaという変数に代入する」となる。式と値はあくまで別のものだと意識しておいた方がいい。式を計算したものが値である。それが端的に影響するのが「b = a」というコードだ。これは「bがaと同じになる」という意味ではない。「aという式を計算した結果の値をbという変数に代入する」という意味だ。
「変数」と「変数の値」は同じものではない。変数を計算したものが変数の値なのだ。この区別をしっかりつけることが、プログラミングの第一歩として重要だと思っている。
つまずきポイント2:繰り返し
初心者が変数の次に出くわす概念が、「条件分岐」と「繰り返し」という2つの制御構造だろう。このうち、条件分岐でつまずく人はあまりいないと考えられる。条件分岐は「この条件が成り立つ場合はこの処理、成り立たない場合は別の処理を実行する」というものだ。直感的に分かりやすい概念だ。これに対し、繰り返しは意外につまずく人が多いと聞いたことがある。
「繰り返し」と聞くと「同じことを繰り返す」と考えるはずだ。ただ、実際のプログラミングで素朴な繰り返しはあまりない。変数の値を少しずつ変えながら繰り返すことの方が多い。こうした概念は日常生活ではあまり出てこないので、理解できない人がいるのではないだろうか。
「繰り返し」というよりも「ループ」と呼んだ方がいいのかもしれない。タイムパラドックス系のストーリーでありがちな「時間のループ」を連想できるからだ。こうしたループでは、繰り返しごとに少しずつ違った出来事が起こることが多い。そう考えれば、プログラミングのループも少しは理解しやすいかもしれない。
