『ソフトウエア職人気質』(ピート・マグブリーン著,村上雅章訳 ピアソン・エデュケーション刊)を読んだ。ここに書いてあるのは私のことだと勝手に勘違いした。ソフトウエア開発は伝統的な西洋の鍛冶屋のような徒弟制度の中で,伝承されていく技芸であると本書は主張している。ソフトウエア工学はスペースシャトルを飛ばすような巨大なソフトウエア開発には役立つが,そんな大規模なシステム開発はごく一部であり,それ以外には職人の世界の伝統的なシステムが有効に機能するという説明に,なるほどと感じた。

 ソフトウエア工学による人海戦術的なソフト開発では,人命に関わるようなシステムを保証するために多くの要員で設計作業,プログラミング,テストを分担する。安全性のために少しずつコードを作って,じっくりとテストを行うのでコストはかさむ。スケジュールに遅れが出そうになるともっと要員を増やす。人が増えれば,コミュニケーションは難しくなり,責任のありかが曖昧になってしまう。

 それに対し職人気質では親方,熟練職人,一般職人,弟子でチームが構成され,明確な役割分担と自律的な後継者育成システムが構築される。職人気質と言うと「頑固」,「気難しい」,「技は盗むもの」と言ったマイナスなイメージが先行するが,最も熟練者である親方が直接,初心者に教えるのは難しく,教育の効率が悪い。初心者(弟子)には初心者を卒業して日の浅い人(一般職人)が教え,一般職人には熟練職人が教える。この仕組みは効率が良い。また,食事など生活の大部分を共にすることにより,人となりを知り,本人にあった教え方を工夫できる。

 さて,私にプログラミングの新しい弟子ができそうだ。かず(小学5年)である。しかし,この新弟子は師匠の言うことを聞かず,どんどん自分で進んでいってしまうところがある。

11月4日 「僕,こんながやったら,プログラミングしてみたいがいちゃ」とFlash MXの解説本に載っているプログラムを見ながら,かずが言う。「お前がプログラム,本当か?」と耳を疑った。「ここに書いてある通り,打てばいいが?」,「うん,まず最初はまるっきり,まねをして結果を見る。でも,それだけではいつまで経っても理解できないから,少しずつ自分で考えてプログラムを変えてみるんだ。こうしたら,どうなるかと自分で工夫して結果を確かめながら学ぶんだ。」とかずのやる気に半信半疑なまま,説明した。

まずは,かずの作ったムービーをご覧下さい。

ufo.html
矢印をクリックすると,UFOがその方向に移動します。
(表示にはMacromedia Flash Player6が必要です)

 お手本としたサンプルには左右のボタンしかなく,左側のボタンには
on (release) {
  UFO._x-=10;
}

 とボタン・リリース時,ムービークリップ(この場合UFO)の水平位置(_x)を10減らし,左に移動するコードが書かれている。

 そして右側のボタンには
on (release) {
  UFO._x+=10;
}

 とボタンを放した時,UFOのX軸の値を10増やし,右側に移動するコードが記述してあった。

 上下の移動はY軸を動かせば良いということがわかったらしく,上下のボタンには_xではなく_yを変化させるコードを書いていた。

 「かず,これはないだろう」と思わず口にしたのは,斜めのボタンに記述した処理であった。
on (release) {
  UFO._x-=10;
}
on (release) {
  UFO._y-=10;
}


 X軸とY軸の両方を動かそうと,on (release) 以下を2つ書いたのである。「かず,on (release) の中に2行書けばいいんだよ。こんな風に」
on (release) {
  UFO._x-=10;
  UFO._y-=10;
}

 「動けばいいんだ」と迷うことなく,どんどん進むかずに何とか一つだけアドバイスすることができた。

 新弟子かずに「プログラミングっていうのは勉強するもんじゃなく,作って試してみるもんだ。」と職人らしい一言を残し,今日はおしまい。