よりそいプログラミングのすすめquneよりそいプログラミングのすすめ2008/12/16ちょっと前の話なんですけれど,あたしが知ってる生身の人の中で,もっとも優秀なプログラマさんのコーディングを見せてもらうことがありました。知らないライブラリの使い方をたずねたのがきっかけなんですけれど,「ちょっと作ってみるから見てて」ってな話になったのでした。「よりそいプログラミング」というのは,ここで作った言葉で,単純に片方が寄り添う形で行うプログラミング方法です。片方がひたすらプログラミングして,それを傍から見るというモノ。ここで,似たような言葉のペアプログラミングは,もちろん製造工程の話だけれど,「よりそいプログラミング」は開発工程とは異なる,教育目的のプログラミングです。生産性云々とかは,とりあえずさておいてください。そのプログラマさんのプログラミングを見ていたところ,とにかくペースがものすごい。傍から見ていると,言葉を出すのと同じ感覚で,考えたことをソースコードに反映している印象があります。あと,これはとても参考になったんですけれど,ソースコードの編集テクニックのような,「完成品」になるまでの途中経過を見ることができました。これは某氏の手癖になっているんでしょうけれど,非常に効率のいい編集テクニックを直接見せてもらって感心しきり。入門書なんかでは,できかけのソースを見せるってことがありません。初心者さんなんかは,関数を編集するときに頭の静的変数の宣言から,順番に書くもんだと思っている向きも少なくないと思います。実際の製作過程はそうじゃなかったりする。ベテランさんが作るソースがどのようにできるのかを見せるのは,教育上とてもいいんじゃないかと思ったりします。言葉であれこれ書いてもアレなので,擬似よりそいプログラミングとして,簡単な例を示します。あたしの例で恐縮なんですが,あたしの隣でモニタを見ている気分で読んでみてください。お題は,「引数で受け取った文字の中にカンマがいくつあるか数える関数を作る」ってなことにしときましょう。関数の名前,引数,戻り値を決めて,呼び元と呼び先(目的の関数)を作ります。ここで,呼び元は簡単な単体テストケースとして使うことができます。0;}ここまではぱぱっと書けますよね。ヘッダファイルはまだ書きません。必要になる度に書くのは面倒だからです。理屈としては,引数(入力文字列)を走査して,カンマが出てきたら返値をインクリメントしていけばよさそうです。返値はもう用意してあるので(ret),走査する箇所を作りましょう。for-文なりwhile-文でクルクル回せばよさそうです。こんな感じでしょうか。0;}あたしの場合,その関数で使うローカル変数の宣言は,その場で書きません。変数が出てきたけど,後で宣言すればいいんです。頭からお尻まで1文字ずつ走査していくことになります。やることは,カンマの数を数えるのでした。宣言することにしています。ことで,カンマを宣言しておく。0;}で,for-文に戻る。インクリメントするんでしたね。初期化してませんでしたね。0;}必要そうな機能はそろったつもりなので,一度見直してコンパイルしてみます。今回は小さい関数なので,足りないところがすぐに分かるんですけれど,大きい関数を作る時は,大体できたと思ったらまずコンパイルして,エラーメッセージを出してみます。英語のエラーメッセージなんですけれど,こんなこと言ってます。宣言していませんでした。いけねい,いけねい(←わざとらしい)。ことで,宣言しましょう。関数の冒頭で宣言すればいいですよね。これでいいでしょうか。0;}つことで,もう一度コンパイルしてみる。test.cpp$できた。いや,コンパイルが通っただけですね。ここからテストに移りましょう。あるカンマの数は5つあるので,なんかうまく動いているみたいです。異常系の検査もしてみます。こゆのはやりだすとキリがないんですけど,ここでは次のような検査をしてみます。括弧内は想定される結果です。値を変えて試してみます。場合にこんなエラーが出て死んでしまいました。dumped)コアを吐いて死んでます。診断はセグメンテーションフォルトとのこと。これは,参照できないアドレスを参照した時に出るエラーですよね。ここでは,NULL(通常は0番地)を参照したので怒られたのでした。番地の値を参照しています。ここで落ちたんでしょう。返すように修正します。場合にも対応できました。単体テストも全部通ったので(ほんとはもっとやるんだけど),これで出来上がりです。こんな感じで,他人がソースコード作る様子を見るのが,よりそいプログラミングです。「すげーテクニックだ!」と思った方もいるかもしれませんし,「なんか危なっかしいな」と思った方もいると思います。「自分ならこうするのに」と思う方もいるかもしれません。いずれにせよ,他人のプログラミングの「過程」を見るだけで,なんらかの刺激があったんじゃないでしょうか。あたしの場合ですけれど,こういうことを経験できる機会はあまりなかったりします。大体,プログラミングってひとりでしますしね。この効果は特に初心者さんに効果的だと思っていて,具体的な製作手順を見せてもらうと,作業の手順を具体的につかむことができるんじゃないかと思います。よりそいプログラミング,おすすめ。ちなみに,上の手順は,あらかじめ用意したものではなくて,本当にプログラミングしながら書きました。ケースを見逃したのも天然。あたしの場合は,危なっかしいですけれど,ベテランさんの側に寄り添ってコーディングを見せてもらうと,「正しい」プログラミングのリズムとかペースなんかもつかむことができたりします。異次元だと感じるはず。お近くのベテランさんを引っ張ってきて,是非とも生で体験してもらいたいところ。思わぬ反応にびっくりしつつ,追記を書きました。