すがブロ

sugamasaoのhatenablogだよ

Fizz-Buzz問題の結果、聞きたい?

Fizz-Buzz問題を会社で試してみたよ!

対象は以下の二人

  • 二年目(一年目は開発には居なかった)
  • 一年目

まず最初は一年目の後輩にやらせて、その後で二年目にやってもらった。一年目の後輩が終わったときに少し解説の話とかをしていたので、二年目の後輩には解き方のヒントを与えてしまったかもしれない(直接聞こえるようには言っていなかったけど、耳には入っていると思うので)。

事前に伝えたこと

以下は紙に印刷した。その下の余白にプログラムを書いてくれ、と伝えた。
問題

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

出力例

1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, Fizz Buzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23, Fizz, Buzz, 26, Fizz, 28, 29, Fizz Buzz, 31, 32, Fizz, 34, Buzz, Fizz, ...

また、時間については以下のように伝えた。

  • 制限時間15分
  • 10分が目安

その他に伝えたこと

  • どんな言語で記述しても良い
  • スペルミスはあまり気にしなくてよい。論理的であれば。

ケーススタディ:一年目

ちょっと書いては消して書き直す、というのを何回か行い、最終的には頭を抱えている状態でタイムオーバー*1。
作成プログラム
大体記憶を辿って書くとこんな感じだったと思う。言語は Ruby 。

for i in 1..100 do
  a = ""
  b = ""
  if i/3 =~ hogehoge
   a = "Fizz"
   i = ""
  end
  if i/5 =~ hogehoge
    b = "Buzz"
    i = ""
  end
  p "#{i}#{a}#{b}"
end

ちなみに、hogehogeと記述したところは本人が悩んで記述できなかったところ。
さて、この結果をどうお思いだろうか。個人的な、本当に個人的な思いを言うと、「どこから突っ込んでいいのかわからん」という感じ。
話を聞くと、インクリメントしている値(i)を3なり5なりで割って、その結果が整数か小数点かを判断する正規表現がかけなかったとのこと。
これは果たして、単純に Ruby の知識不足に起因する結果なのだろうか。
今まで彼がコーディングしている所は何回か見ているけど、大枠での考えは悪くないものの、そこから具体化しようとするところでいつもつまずくような感じがする。
彼をここからレベルアップさせるにはどうさせれば良いだろうか。こういうのを繰り返して少しずつ成長させて行くのが良いのかな。しかしなぁ・・・この結果を顧みるに少しずつ、なんて悠長な事を言ってられない気がするんだよなぁ。。。

ケーススタディ:二年目

約5〜6分くらいで作成完了。言語はCらしい。

for(i = 1; i < 101; i++) {
  if(i % 5 and i % 3) {
    printf("FizzBuzz")
  } else if (i % 5) {
    printf("Fizz")
  } else if (i % 3) {
    printf("Buzz")
  }
}

if 文の中で == 0 があったか覚えていない。無かった気がするだんけど。
結果から言えばやりたい事は大体わかるよね、という感じだろうか。一番の欠点は数値が出力されないこと。
彼の性格からくる、急ぐとその分リニアに精度が落ちてしまう事が如実に現れているものの、最低限の部分は書けているかなと判断した。

ちなみにおれは

昔、PC上で実際にプログラムを打ったときのがここにあります。

結論から思う事

うちの会社は入社してC言語の基礎を勉強して、入社後3ヶ月くらいで現場に配属される。
その時点で FizzBuzz 問題が解けないやつは相当努力しないと行けないんじゃないかなーなんて考えていたのだけど、入社して一年が経とうとしていてできていないのを目の当たりにすると*2、プログラムを書けるという事は実に能力が必要なことなのではないかと思えるようになってきた。
世の中の一般的な IT企業の場合はどうなんだろうね。特に一年目のこの時期で解けるのかどうか気になる。
っつーか、ホントどうやって人って育てればいいんすか!

追記

キーワード的には Fizz-Buzz らしいので、そっちにあわせた。

*1:ずっと作業を見ていた訳ではないので、自分が横目で見てた感じだと

*2:それはおれが育ててねーからだろと言われるかもしれないけど