GoTheDistance

ござ先輩と言われています。(株) クオリティスタートという会社をやっています。

「センスがない」のほとんどは、単なる練習不足に過ぎない

4月からプログラミングを教える仕事を定期的に行っていて、集合研修という形が1つ、実験台としてプログラミングに興味がある学生の甥っ子に対してマンツーで教えています。自分の教えている内容がどう伝わるか、どんなイメージ絵を描けばいいのか、どの順番で説明すればよいのか。それらを検証するためです。

で、そんな中、甥っ子がポロッと漏らしました。

「おれ、やっぱりプログラミングのセンスが無いんだと思う。教えてもらっても全くわからないことが多いし...」

「ちげーだろ。お前は単なる練習不足にすぎない。2〜3回しか練習していないのに、どうやってオレと同じレベルで物事が判断できるんだって話。ちょっとしか練習してないのにセンスもクソもない。漢字の書き取りにセンスが必要か? 100回while文書いてみたか? 書いてないだろ? 」

「あ・・・(察し」

センスは練習不足の免罪符じゃない

彼が言っていたセンスがあるという状態は、「一を聞いて十を知る」というようなもの。言ってることから言わんとしていること(プログラミングの場合は解決しなくちゃいけないこと)を汲み取れるので、どんな手順で進めていけばよいかを自分で見つけられる。そんな状態をセンスがあると表現しているのは、結構よくあるんじゃないでしょうか。

でもこれ、違います。単なる練習不足です。センスという言葉は具体的な手順が見えていない時に使う言葉じゃない。手順が見えていないのは、練習のやり方を教わっていないからです。その結果、何を考えていいかわからなくなり、教わっている内容が身に入らないので益々理解度が下がるという悪循環に入ってしまう。それはセンスがないから起こるわけじゃなく、然るべき練習をしていないから。

その意味ではメンターが側にいるかいないかは大きいといつも思う。自分でゴールを定められるようになるには時間がかかるし、プログラミングのような抽象度の高い概念は、一人では難しいところがあるなぁ。

「例えば」という問いを投げる

抽象的な概念がわからないのなら、具体例を出すのが一番。具体的な手順がわからなくなった場合によく使うのが、「例えば」です。

「例えば、対象の文字列に"ABCDE"と入力されたら、何が返って来る? そうだよね、他の場合でも同じことが言えるはず。つまり、何をどうすれば同じことが出来る?」

「ローカル変数とインスタンス変数の違いを整理して、その違いを例示できるコードを書いてきて」

「このa_listに入っている要素はPersonクラスのオブジェクト。そう。じゃ、このa_listがどういうデータ構造になっているか、図に起こしてみて。こんな感じ。」

今、甥っ子にはこーゆー問いを投げて、紙に書かせて宿題にしています。パソコンじゃなくて、紙ってのがポイント。手を動かせないものはわからない。これがテキメンに効いている。コードで表現されたことを「例えばこれがappendされると・・・」と頭を整理して紙に書くことで、イメージと具体例がパチっとつながり、コードで表現された抽象的なものが腑に落ちる。

プログラミングって、つまりと例えばを交互に行ったり来たりする。その練習をしてこなかっただけだとしたら、センスで終わらせてしまうのは教える立場である以上やりたくないし、逃げたくはない。

センスは知識から始まる

この本に面白いことが書いてありました。センスってのは「数値化できない事象のよし悪しを判断して、最適なものを作る力」だそうです。善し悪しが判断できるためには、良いものも悪いものも知っていないといけないし、そもそも「これがスタンダード」っていう自分なりの型がないと始まりませんね。

「練習不足による自分の型がない=センスがない」には語弊があるので、練習を積みましょう。

センスは知識からはじまる

センスは知識からはじまる