プログラミング教育の先にある壁

49になりました。大台まであと1年。もちろんプログラマ続けています。主力言語は変わりつつも相変わらずアプリ開発メインでやってます。

きっかけは忘れたけど、最近質問回答サイトをチェックするようになった。素晴らしい回答を読んでいくだけでも気付きは多いが、その中でTeratail(プログラミング専門)やQuora(多種カテゴリだけど俺が回答しているのはプログラミング関連のみ)については、俺自身も回答を投稿している。今のところ質問は一切せず、回答のみ。

Quoraでの回答
teratailでの回答

「時間のある時に回答したい質問があれば回答する」というゆるさでやってる。それでも継続すれば溜まっていくものだ。当分は続けるつもり。

多種多様な質問を読んで回答して、って続けていると、「プログラミングってどうやって上手くなるのだろう?」「どうしたら(優れた)プログラマになれるのだろう?」という根源的な質問を何度も目にするし、自分でも改めて考えこむことになって面白い。

プログラマの本質は職人だ。日々新しいものを作り上げるために自分の技術を磨く。師匠がいることもある。しかし一般的な職人と違って「俺は親父からプログラミングを1から10まで叩き込まれました」なんて話にはならない。技術変化が速いから、プログラミングの世界で一子相伝は意味がない。年単位で師事して技術を受け継いたら一人前なんて修行は不可能。出来るだけ早い段階で自分で腕を磨き続ける術を身につけて巣立つことが重要だ。「プログラミングを教えてもらう」という受け身から「貪欲に吸収する」という攻めにさっさと変わってしまうこと。それが出来ないと最終的に「一通り学んだけどいざコード書こうとすると頭真っ白」という質問をすることになる。

この「プログラミングを教えてもらう(受動)」と「貪欲に吸収する(能動)」との間には越えられない壁があるんじゃないだろうか。

2020年度から小学校でもプログラミング教育を取り入れようとしており、是非について色々言われているが、文科省サイトには教育の手引きが公開されている。

「国民総プログラマ化計画」とか「とにかくAPI覚えて”Hello, world.”」みたいな無茶なことは言っていない。「小学生のうちに論理的思考を知っておこう。プログラミングってのを体験してみよう」という指針になっていて俺は納得している。子供のうちにキーボードで文字打ってみるって体験をするだけでも悪くない。中学生では多少なりとも何かプログラム書いてみようってところまでいくようだ。

何も皆がプログラマになる必要なんてないし、今の子供達の何人かがプログラミングに夢中になってくれたらこの教育方針は成功だ。しかしここから学んでいった先で、「自ら貪欲に吸収する」プログラマになれるのか?結局は「プログラミングってどうやって上手くなるのだろう?」って悩んじゃう人を増やすだけではないだろうか。

最低限入出力APIと制御構文さえ習ってしまえば、それらを組み合わせるだけでもテスト問題は解けたりする。プログラミング出来た気分になる。しかしこの段階まで受け身のままで「もう俺はプログラミングできる」と思い込むと危険。現実のプログラミングでは向こうから問題なんか出てこない。解くべき問題を自分で定めるところから始まり、その問題を細かな問題に分割して、ここまで噛み砕けばあとはコンピュータでも出来るよね?ってところまで脳内で考えてからコードを書く。

どうやったらそういう思考が出来るか?教科書を読めば手法は学べるかもしれないが、結局は自分で何度も何度も経験するしかない。「プログラマの需要はあるらしい。言語覚えた。さてどうしようか?」ではなくて、「こんなアプリ欲しい。作りたい。どうしたら俺のスマホでそれが出来るのか?」というゴールから始めて足掻くしかない。ゴールから逆走の発想で、ゴールにたどり着く方法を考えながらスタート地点を自分で決めて、コードを書くことでまたゴールに帰ってくる。スタートが思いつかない、ゴールたどり着く方法が予想できないのなら、その部分はググるなりgithubのコードを利用したりしてクリアしてゆく。まがりなりにもプログラムが動けば達成感に加えてコードを省みる機会が得られる。そして次はもう少し上手く、そしてすばやく考えられるようになったり、発見した便利なツールを最初から使って効率を上げたり出来るようになる。

教育の場で押してもらう、講座で一通り学ぶ、それだけではガリガリコードを書けるプログラマにはきっとなれない。最初は99%模倣でも良いから実際に使えるプログラムを書くこと。何度もそれを繰り返して思考パターン、成功への道筋を構築すること。書けるようになれば欲も出てきて、それでやっと自分で壁を越えて貪欲なプログラマになれる。