量産メモ帳

忘れっぽいのでメモを残しています。

どうしてプログラマに・・・プログラムが書けないのか?

スポンサーリンク

どうしてプログラマに・・・プログラムが書けないのか?

いくらなんでも200人中199人はありえないだろー、って思ったが。。。

レジナルド・ブレイスウェイトが書いていることを読んだとき、私はそんなわけないだろうと思っていた。

私と同様、この著者は、プログラミングの仕事への応募者200人中199人はコードがまったく書けないということで苦労している。繰り返すが、彼らはどんなコードも書けないのだ。

彼が引用している著者というのはイムランのことで、彼は単純なプログラムも書けないプログラマをたくさん追い払っているということだ。

かなりの試行錯誤の末に、コードを書こうともがいている人たちというのは、単に大きな問題に対して苦労しているのではないことがわかった。やや小さな問題(連結リストを実装するというような)に対して苦労するということでさえない。彼らはまったくちっぽけな問題に苦労しているのだ。

それで、そういった類の開発者を見分けるための質問を作り始め、私が「Fizz-Buzz問題」と呼んでいる問題のクラスを考え出した。これはイギリスの学校の子供たちがよくやっている遊び(というかやらされている遊び)にちなんで名付けた。Fizz-Buzz問題の例はこんな感じだ。

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

ちゃんとしたプログラマであれば、これを実行するプログラムを2分とかからずに紙に書き出せるはずだ。怖い事実を聞きたい? コンピュータサイエンス学科卒業生の過半数にはそれができないのだ。自称上級プログラマが答えを書くのに10-15分もかかっているのを見たこともある。

ダン・ケーゲルも初級プログラマを採用しようとしたときに同様のことを経験している

応募者の驚くほどの割合の人たちが、コンピュータサイエンスのマスターやPhDの学位を持っている人たちでさえ、面接で基本的なプログラミングのタスクをやらせたときにうまくできないでいる。たとえば「1から10まで数えるループを書け」とか、「16進数でFの次の数は何か?」といった質問に答えられない大卒者を私は面接したことがある。そこまでひどくないにしても、実際的な問題を解くのに再帰が使えない候補者をたくさん面接してきた。これらは基本的なスキルであり、それを欠いた人に多くのプログラミング経験があるとは思えない。

採用候補者の面接をしなければならないソフトウェアエンジニアを代表して言わせてもらうと、我々はプログラムが書けない候補者と話をするのにうんざりしている。履歴書に載っている言語のそれぞれで1から10まで数えるループを書けて、電卓なして単純な算術ができ、実際的な問題を解くのに再帰が使えるのであれば、その時点であなたはすでに集団から抜け出していることになるのだ!

レジナルド、ダン、イムランの間にあって、私は少し心配になってきた。私はキャリアを始めたばかりのソフトウェア開発者たちを喜んで相手するつもりだ。誰だってどこかで始めなければならないのだ。しかし職に応募してくるプログラマと名乗る人間が最も簡単なプログラムさえ書けないという事実には驚き、困惑している。これはソフトウェアを書いて生計を立ててきた者には頬を叩かれるような経験だ。

プログラムを書ける者とプログラムを書けない者の間にある大きな溝についてはよく知られているが、プログラマの職に応募してくる人間は、すでにこの溝を飛び越えているものだとばかり思っていた。明らかにこれは妥当な仮定ではないらしい。プログラムを書けないプログラマの面接で時間を無駄にしないために、FizzBuzzスタイルのふるい分けが必要ということだ。

FizzBuzzテストが簡単すぎるとは思わない方がいい(実際意図的にバカみたいに簡単にしてあるわけだが)。イムランのポストにコメントした人が、このテストの有効性について書いている。

面接者がFizzBuzzテストを簡単すぎると思ってやらないことを残念に思う。私の経験で言えば、最も簡単なプログラミングタスクさえできない候補者の多さには、まったく驚くしかない。

最初に候補者の書いたコードを見ることもなくプログラマを面接するというのが、そもそもばかげたことなのかもしれない。私の会社では、コードサンプルなしには電話面接にさえ進めない。そして実地の面接では小さなコーディング問題をやらせている。心配しないで、難しいものではないから。1時間かそこらで小さなアプリケーションを型どおりに構築する基本的な課題をやるだけだ。1度か2度失敗はあったが、だいたいにおいてこの戦略はうまくいっている。これによって、面接でくだらないパズル問題を使うのでなく、実際のソフトウェアエンジニアリングにフォーカスすることができる。

プログラムを実際に書けるプログラマを面接するという贅沢を享受するために、そんなに多くのふるい分けをしなければならないのは残念なことだ。おかしいくらいにがっかりする話だ。私は認定のようなものは好きでないが、スティーブ・マコネルがソフトウェアエンジニアリングの真の専門を確立するという話をしたとき、彼はこのことに気付いていたのかもしれない。


個人的な見解として、単にプログラムを書いたことがない、書き慣れていない、試行錯誤したことがないから書けないんだと思う。