プログラミングができるとは何か

3学期に入ってとってる授業はだいぶ減った。研究室のゼミを除けば、常設は2科目4コマ、あとは集中講義的なのを1つ。ようやく大学院生っぽい忙しさになってきた気がする。

さて、今日はその常設1コマと集中講義的なのとが両方ともリポジトリマイニングの話で、面白かった。「リポジトリマイニング」というのは要するに、データマイニングinリポジトリということで、ソフトウェアの開発プロジェクトに眠る膨大なデータ(たとえばソースの履歴とかメールのやりとりとかバグの記録とか)から、有用なデータを抽出する研究である。まだ始まって10年もたっていないそうだが、いま熱い分野のひとつのようだ。
今日はそんな中、CSVに整形されたデータをRに取り込んでグラフを出してみたり、もうちょっと上流でgitをいろいろ触ってみたりした。Rもgitも働いていたころから知っていたが、ついぞ触る機会がなかったので、こういう機会で強制的に触れられるのはありがたい。競輪もデータマイニングしてみたら面白そうやなとか、とりあえずこのPCのソースはgitで管理しておこうとか、そんなことを思っていた。

はじめてのプログラミングについて先日も考えていたが、最初何かしらを触るときは、やっぱり独力というのは難しいと今日も思った。教える側がそこそこ準備していたとしても、結構イレギュラーな事態は起きる。そして、それを解決するにはやっぱり聞くのが一番はやい。独学で何かを成就するためのポイントは、

  1. 独学でもできる程度に、その物事がどん詰まりしにくいようにできていること
  2. 独学でもモチベーションが続く程度に面白いことが短い間隔で起きること

ではないかと思う。ぼくはスマホアプリ初心者向け開発講座などを実際に見たことはないが、こいつが上の二条件を満たすにはかなりうまいことやらないとダメだという直感はある。

いっときプログラミングの塾をやったらそこそこ儲かるのではないかという妄想をしていた。一般人向け、子ども向け、あるいは開発者向け。最近ならマシンを人数分用意しなくても仮想マシンからごにょごにょする技もありそうだし、そういうものはすでに世の中にはないのだろうかと思って「プログラミング 塾」で検索したら結構な数がヒットした。まあ、ニーズはあるということだし、そんな爆発的に儲かっているところがあるわけでもない、ということなのかもしれない。

しかし、この問題を解くにはそもそも「プログラミングができるとは何か、どんな状態なのか」ということを考える必要がある。世に言う学習塾というのは必ずしも「学習ができるようになる、得意になる」ための塾ではない。知識は学べても、学習の方法論自体が身に付くとは限らない*1。同じことがプログラミングにも言えるはずで、特定の言語という知識は学べても、まっさらな状態からプログラムを構想して作る力を学べるとは限らない。まあ、料理教室でも陶芸教室でも何にでも言えることですが。

*1:いい先生は知識を教えつつその方法論も伝えるのだろう