15分でプログラマの能力をチェックする方法

『どうしてプログラマに・・・プログラムが書けないのか?』
http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm

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

200人中199人がどんなコードも書けないというのは、いくらなんでもおかしいと思うのですが(実はプログラマ希望とは全然関係ないシェフ希望の人を間違って一緒に面接してたとか)、コードが書けるか見極める方法として簡単なプログラムを書いてもらうという方法が紹介されており、簡単な試験くらいはやってもいいかなと思います。


↓応募者に出してみたというFizzBuzzプログラム

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

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

2分はかかるんじゃないかと思い、ためしに自分でプログラム書く時間を計ってみました。白紙の状態でよーいドンして画面確認できたときに時間見たら1分50秒経過してました。たまたま一発で成功したのでよかったものの、頭にあるソース打ち込むだけでも時間かかるので、上級プログラマでも10分くらいかかってしまうことはあるんじゃないでしょうか。


僕は、プログラム能力があるかどうかは主にプロジェクトのメインプログラマーをやった経験があるかないかを重視しています。
あとは、PHP技術者募集でPHPをどこまで知ってるか確認したかったときに

$a = 'b';
$b = 'c';
$$a = 'd';
echo $b;

これを実行すると何が表示されるか質問したことがあります。
正解は、『<?と?>で囲まれてないからそのままソースが表示される』です。
というのは置いておいて、、こんなの知ってる人の方が少ないかもしれませんが、正解は『d』です。


ちなみに、以下FizzBuzzやってみたときのソースです。環境選ばずその場ですぐできるJavaScriptで書きました。

<textarea id="t" cols="10" rows="100"></textarea>
<script>
var txt="";
for(i=1;i<=100;i++){
  var num = i;
  if( i % 3 == 0 ) num = 'Fizz';
  if( i % 5 == 0 ) num = 'Buzz';
  if( i % 3 == 0 && i % 5 == 0) num = 'FizzBuzz';
  txt += num + "\n";
}
document.getElementById('t').value = txt;
</script>

補足ですが、

<textarea id="t" cols="10" rows="100"></textarea>
document.getElementById('t').value = txt;

の2行は、はじめalert(txt);だったのを後から書き直しました。
やっぱJavaScriptと言えばalertですよね。

ちなみに、まったくの初心者にプログラム勉強するのに何から始めたらいいかと聞かれたら、JavaScriptを薦めてます。
理由は、長くなりそうなので後々書きます。