プログラマの試金石 | 悪態のプログラマ

悪態のプログラマ

とある職業プログラマの悪態を綴る。
入門書が書かないプログラミングのための知識、会社の研修が教えないシステム開発業界の裏話は、新人プログラマや、これからプログラマを目指す人たちへのメッセージでもある。

Joel Spolsky 氏の「Javaスクールの危険 」という記事を読んだ。趣旨としては、従来の「ポインタ」と「再帰」に関する学習は、プログラマを鍛え、不向きな人をふるい落とす効果があったが、最近の Java を主体とする教育では、それができていないといったようなことである(※1)。

ポインタを学ぶということの必要性については、当ブログでも「ポインタという考え方 」という記事に書いた。再帰については、私もそこまで重要視はしていなかったのだが、コンピュータサイエンスの世界では、同様に重要な概念だということだろう。


再帰といえば、以前、以下のようなコードをみつけたことがある。他社から派遣されてきたプログラマが書いたものだ(※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
Joel on Software
posted with amazlet on 06.11.20
Joel Spolsky 青木 靖
オーム社
売り上げランキング: 7357
おすすめ度の平均: 4.5
3 プログラミングチームを率いるときに
4 優秀な開発者がいつも考えていること
4 批判的精神を持って読むべし