ポインタを学ぶということの必要性については、当ブログでも「ポインタという考え方 」という記事に書いた。再帰については、私もそこまで重要視はしていなかったのだが、コンピュータサイエンスの世界では、同様に重要な概念だということだろう。
★
再帰といえば、以前、以下のようなコードをみつけたことがある。他社から派遣されてきたプログラマが書いたものだ(※2)。
void do() {
// 処理
・・・
if( 処理成功 ){
return;
}
// 再試行
if ( YES == message("失敗しました。再試行しますか?") ){
do();
}
}
do() という関数の中から、「再試行」のために do() を再帰的に呼び出している。数回の再試行を行うだけであれば、彼の意図の通りに動作するだろう。しかし、プログラムというのは、動けばいいというものではない。
彼は、おそらく「再帰」という概念自体を持たぬまま、いや、持たぬが故に、このような変なコードを書いてしまったのだろう。それ以前に、「関数」の概念が十分に理解できておらず、「処理に付ける名前(=ラベル)」と同じ程度にしか考えていないことが窺える。少なくともプログラマとして他社に派遣できるようなレベルではないはずなのだが・・・。
★
ポインタや再帰がプログラマにとっての試練だとすれば、それらはそのまま採用試験にも使えるということである。実際、Joel Spolsky 氏は、プログラマの面接にポインタと再帰の質問を行っているようだ(「採用面接ゲリラガイド(version 3.0) 」)。
私の会社でも、そのような面接を行っていれば、上記のようなコードを書いたような派遣プログラマを雇うことはなかったのだろうが・・・。
※1
「Joel on Software」の邦訳版 より。CodeZine のメールマガジン(CodeZine News 2006-11-15)で紹介されていた記事。ポインタと再帰の話の他にも、オブジェクト指向プログラミングが「凡庸なプログラマをふるい落とすのには簡単すぎる」という意見にも共感。数年前には、古参のプログラマの中に「オブジェクト指向が分からない」という人がごろごろいたが、それは難しいからではなく、単に新しいことを覚えようとしなかっただけなのだ。
※2
「簡単な仕事を探す難しさ 」に登場するBさんである。実際には、Java のコードだった。
■関連記事
・ポインタという考え方
・簡単フレームワーク・プログラミングの罠
・プログラミングは体で覚えろ
・プログラマは誰でも同じ?
・続・プログラマは誰でも同じ?
Joel on Software
posted with amazlet
on 06.11.20
Joel Spolsky 青木 靖
オーム社
売り上げランキング: 7357
オーム社
売り上げランキング: 7357
おすすめ度の平均:
プログラミングチームを率いるときに優秀な開発者がいつも考えていること
批判的精神を持って読むべし
再帰表現法
―スタック・ソート・ハノイの塔・検索・フラクタル図形・視覚処理・再帰方程式
―スタック・ソート・ハノイの塔・検索・フラクタル図形・視覚処理・再帰方程式
posted with amazlet
on 06.11.20
浪平 博人
CQ出版
売り上げランキング: 1136961
CQ出版
売り上げランキング: 1136961