プログラミングの学び方(2)

8月31日金曜日、晴れ

二週間にわたって高専生インターンを受け入れていた。
最終日の今日、せっかくの機会なので現役の学生に学校でプログラミングを習ったか聞いてみた。

8人ほど尋ねてまわったのだけれど、先輩や研究室で受け継がれてきたソースコードを力任せに読むというのが基本で、一人だけ渡された教科書の演習問題を解いたということだった。

5人のチームを組んでアプリ開発をしてもらっていたので、隣にいる人の各コードがどう見えたかについても聞いてみた。質問を誘導してしまったきらいはあるとおもうけれど、おしなべて「自分とは違う」書き方をしているという感想。「気持ち悪い」と表現した子もいた。

どうやったら感覚を揃えられるだろうね? と振ったら、答えは「命名規則を定める」、「インデントを揃える」という感じ。「キレイに書く」という答えもあった。でもその「キレイ」は主観。自分と他人のキレイは同じにならないから、伝わらないだろう。

答えのない質問をしてしまったのは、いくぶん申し訳なかった。

* * *

けれど、予想していたとおりで、プログラミングは教えられるものでなく、現物に体当たりして覚えるもののようだ。
外国語の学習に近い。基本の文型、文法を覚え、あとは見よう見まね。読んだり、動かしたりで独自のスタイルを身につけていくもの。

自然言語は「古典を読め」と言われたり、多読だ、多聴だと言われたりする。話されているもの、使われている実例を多く取り込んで、その中から自分なりの表現を獲得していくほかない。

自然言語とプログラミング言語の大きな違いは、片やその受け取り手が同じ人間であって、他方は第一に計算機が解釈するものであること、だろう。
そしてプログラミング言語 ── コードは、計算機が解釈するものだけれど、同時に人が読むものにもなる。つまり受け取り手が二種類、いる。

動いてほしいとおもうとおりに動くプログラムが、そのコードはおよそ人の読めるものではない。そんな実例はたくさんある。
コードは人が読むことを前提にしていないからだ。自分が読み書きできて、計算機が文句をいわなければオーケー。でも、ひとたびそれが人に渡ると、解読を阻む切り立った絶壁 ……そんな印象を受けるコードがあるのだ。

なんと言えばいいのか。

たぶんコードは、人に読ませることを前提にしなくて済むぶん、書き手当人の思考様式をダイレクトに映したものになりがちなのだろう。

人から聞く説明がどうも要領を得ない。そんな経験は誰しもあるとおもう。前提の置き方が違ったり、筋道が違ったり、論理が破綻していたり。人それぞれ考え方が違うのだからしょうがない。
そしてコードにはまとまった規模の、皆が読んだことのある共通の古典(表現)が、ない。

そう。

たぶんプログラミングを教えるには、古典が、名作が必要なんだろう。

この記事が気に入ったらサポートをしてみませんか?