私にはプログラミングを教えている後輩がいる。 後輩は情報科で、学業でプログラミングを学んでいる。彼女は意欲が高く、色々な本を読んで力をつけたがっているようだ。ちなみにプログラミングの経験は無いようだ。それでたまたま私が彼女の周辺ではプログラミングが比較的デキるというので、しばらくプログラミングを教えることになった。
先日私は時間を設けて彼女の課題の手助けを行った。そのついでにmakeの書き方とか、Cの構造体や配列、ポインタとかを追加的に教えてみたが、微妙にしっくりこない感覚があった。 言っていることはよく理解できているが、基本的知識が足りていないこともあった。実務向けのむずかしい本を読んでみたりしているようで意欲の高さがうかがえるが、その他方ですこしタイヤが空回りしているような印象をうけた。 これは教えるということについて真剣に考えなければならないぞと思った。ようするに理解できていないのは教え方が悪いからである。手法または内容がおかしいというわけだ。もっとこう、自分が無意識的に内面化してしまった基礎的な部分をはっきりと教えなければならない。
私は後輩に何をどう教えたら良いのだろう? 私はプログラマとして働くことになっているが、新卒で実務経験はないから沢山のことを教えられるわけではない。 彼女のプログラマとしての発達?状況を プログラマ能力指標表 | コンピュータサイエンス | POSTDにおける分類で計測して、計測結果の不足を充実するべく指導をすれば良いのだろうか。もっとも彼女がプログラマを指向しているのかという問題もあって、研究材料としてプログラムを覚えたいのかもしれない可能性がある。
プログラミングはとても広範なスキルであって一つの技術で成り立っているわけではなく、様々な技術とノウハウの複合体だと思っている。プログラミングを、コンピュータで解決できる問題をコードを書くことで解決する行為だと定義すると、まずコンピュータの知識、そしてコードを書く知識、そしてロジックを組み立てる思考があると思う。それらを幅広く教えなければならない。
しかし実際問題として、何を教えたら良いかがわからない。○○スキルが低かったとて、ではどう教授するのかが関心ごとだ。本を与えて読ませるのか、説明してやるのか、そして教える内容は具体的に何なのか。そこがわからない。 幸いに後輩の意欲はとても高いので、一つの事を教えたら後は自律的に吸い取ってくれそうだ。なんでも試して覚えてくれる事を期待する。しかし放っておくだけでは迷ってしまうかもしれない。困っているときにアドバイスをするに留めて、積極的な教授を行わないという指針があっても良いかもしれない。
それで、思ったことをここにだらっと書いた。教育はむつかしい。
おまけ
http://qiita.com/masatsugumatsus/items/ac7d94345bc21b4f8100 で「プログラミングの行為の脳内構成要素として、「処理フローの設計」と「言語の文法を利用して、処理を実現する」の2つがある」という事が明確に表現されていて、自分が言いたかったのはこれだと思った。この事をまず最初に指導したい。