RSS Feed

実験的に開発した小さなプログラムやWebサービスを公開。また、気になった最新IT技術情報をブログ形式でメモ。

「Fizz-Buzz問題」をさっそくやってみた

プログラマ職に応募してくる人間のほとんどが書けない「Fizz-Buzz問題」|gihyo.jp
gihyo.jpでの記事に、プログラマとしての求人に応募してくる方の多くが「簡単なプログラムもかけない」という記事の紹介がありました。

ふむ、、、私も以前、プログラマの人事に関する業務をしていたことがあるのですが、、、結構みなさん出来る方が多かったので、さすがに簡単なプログラムが出来ないって人は少なかったと記憶しています。

ただ、やはり当時も私が作成した簡単なプログラムの問題集を面接の前に出題して回答を持ってきて貰うようにしていました。

私の作成した問題集は、本当に簡単なもので、ポイントとして

・ 基本的なプログラムが理解できているか?
・ ちゃんと動作確認しているか?(間違いがないか?)
・ スマートもしくは面白いコードか?
・ 他人に提出するソースとしてちゃんと整理できているか?(適当じゃないか?)

といった、技術的には甘く、ちょっとした性格診断みたいな感じのものでした。

んで、結果としてほとんどの人が最初のポイントの基本的なものは出来てる人が多かったと思います。

ただ、確かに全員出来るというわけではなかったですね。

間違っている(エラーが出ている)人や空白の人、明らかにコピー&ペーストしている人等もありました。

このうちコピー&ペーストは個人的に悪だと思っていません。
使えるものを正しく使うのはプロのプログラマとして正しい道だと思っています。
が、、、全角のスペースや「”」までコピペしてしまう人もいて、やれやれと思ったことはあります。

さて、私は正直すごいプログラマになろうと思ったこともなく、実際すごくないのですが、「Fizz-Buzz問題」くらいなら直ぐ出来るので、超メジャーなPHPでやってみようと思います。(マイナーな言語でなくてすみません)

Fizz-Buzz問題:

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

回答:

  1. <php for($i=1;$i&lt;=100;$i++) {
  2. $out = "";
  3. if(is_int($i/3)) $out  = "Fizz";
  4. if(is_int($i/5)) $out .= "Buzz";
  5. if(empty($out))  $out  = $i;
  6. print $out."
  7. ";
  8. }
  9. ?>
  10. </php>

実行結果:

  1. 1
  2. 2
  3. Fizz
  4. 4
  5. Buzz
  6. Fizz
  7. 7
  8. 8
  9. Fizz
  10. Buzz
  11. 11
  12. Fizz
  13. 13
  14. 14
  15. FizzBuzz
  16. 16
  17. 17
  18. Fizz
  19. 19
  20. Buzz
  21. Fizz
  22. 22
  23. 23
  24. Fizz
  25. Buzz
  26. 26
  27. Fizz
  28. 28
  29. 29
  30. FizzBuzz
  31. 31
  32. 32
  33. Fizz
  34. 34
  35. Buzz
  36. Fizz
  37. 37
  38. 38
  39. Fizz
  40. Buzz
  41. 41
  42. Fizz
  43. 43
  44. 44
  45. FizzBuzz
  46. 46
  47. 47
  48. Fizz
  49. 49
  50. Buzz
  51. Fizz
  52. 52
  53. 53
  54. Fizz
  55. Buzz
  56. 56
  57. Fizz
  58. 58
  59. 59
  60. FizzBuzz
  61. 61
  62. 62
  63. Fizz
  64. 64
  65. Buzz
  66. Fizz
  67. 67
  68. 68
  69. Fizz
  70. Buzz
  71. 71
  72. Fizz
  73. 73
  74. 74
  75. FizzBuzz
  76. 76
  77. 77
  78. Fizz
  79. 79
  80. Buzz
  81. Fizz
  82. 82
  83. 83
  84. Fizz
  85. Buzz
  86. 86
  87. Fizz
  88. 88
  89. 89
  90. FizzBuzz
  91. 91
  92. 92
  93. Fizz
  94. 94
  95. Buzz
  96. Fizz
  97. 97
  98. 98
  99. Fizz
  100. Buzz

私の場合はこんな感じかな。
時間的にはコード書くのに1,2分で動作確認や整形、子供の相手などであわせて5分くらいかな?
ちなみにいい訳ですが、私は短いソースだったり、書くのに要した時間などはあまり興味がない。
それよりもぱっと見てわかりやすいのが好みです。

さて、こんなコードで採用してもらえるのだろうか?笑

ところで、私は小難しくて、複雑で、整理整頓してあるソースもそんなに興味なかったりします。
それよりも、今まで出来なかったとことが出来るようになったり、解決できなかったことへのソリューションなどのアルゴリズムを考える力やシスアド的なところ、純粋に面白いアイディアなどを気にします。
そして、乱暴ですが、それを実現さえできれば、プログラムの書き方等はなんでもいいと思います。
何故ならば、上記が実現できるのなら、問題が起こったときにも同じように解決する力があると思っているからです。

採用にあたっても、教育機関で勉強して来たものより、学生の時にどんな事をしたのか?
プログラムについては、何がしたくてどんなものを作ったのか?(個人的にはくだらなくて面白いものが好きです)
が重要だと思ってます。
これは経験もそうですが、それより、したいことがあって、それに挑戦したか?
どういう結果になったか?
それから得られたものはなにか?
というところが重要だと勝手に思ってます。

正直、PHPとかのとっても親切なプログラム言語なんて本気になれば誰でも勉強すればできるだろう、と思います。
難しくてできないよ~という方は、多分、興味がない、必要がない、時間がない等の理由だとおもいます。というか間違いなく「実はあまり興味がない」が90%くらいなのでは(笑
プログラムができたらいいな~的な漠然とした希望ではないかと、、、
個人的には純粋にプログラムだけ書くプログラマはホワイトワーカーより、ブルーワーカーに近いとも思ってます。
(まあ、たまに信じられないくらいすごいプログラマもいますけどね。そーいう人は職人みたいでカッコいい!好きです。)

なので採用するときにも、プログラムが今は書けなくても、面白いアイディアとやる気があれば、就職してから幾らでも覚えて行くんじゃないかと。
簡単なプログラムが書けないから門前払いってのは私から見ると、原石を逃してるとも言えるのではないかと思います。
採用側も嘆いてばかりいないで、どうすればいいのか考えて行きたいですね。

関連記事

2 Responses to “「Fizz-Buzz問題」をさっそくやってみた”

  1. nori |

    コメントありがと~

    >開発するスケールとかも問題
    うん、そうですね。
    スケールと人数、そして容量や実行速度の問題があるからプロジェクトによって違うかも。
    大規模なプロジェクトでしかもパッケージ商品とかになったら、全然違うと思います。

    >文字列連結とそうじゃないので分岐するのは分かりにくい・・・
    確かにそうかもしれない。
    わかり易いの好きって言いつつ自分のがわかりづらいことはありますね。

    というか、「わかり易い」ってのは人によって違うから一概に良い悪いってのはないですね。しかもその時々で趣味が変わったりするからやっかいですね(笑
    気をつけます。ありがとう。

    ちなみに、ここで正しくわかり易くするにはきちんと出題の趣旨に合わせた4種類の出力にあわせることだと思います。
    ・数字
    ・Fizz
    ・Buzz
    ・FizzBuzz
    上記の4種類ですね。
    このうち最後の「FizzBuzz」を私が面倒くさがって省略してしまったからだと思います。

    なので下記のようなソースが見やすいかも

    1. < ?php
    2. for($i=1;$i<=100;$i++) {
    3.     switch($i) {
    4.         case is_int($i/3)
    5.           && is_int($i/5):
    6.             $out = "FizzBuzz";
    7.             break;
    8.         case is_int($i/3):
    9.             $out = "Fizz";
    10.             break;
    11.         case is_int($i/5):
    12.             $out = "Buzz";
    13.             break;
    14.         default:
    15.             $out = $i;
    16.     }
    17.     print $out."\n";
    18. }
    19. ?>
  2. ジゲン |

    確かに、開発に関しては、実装が出来ればOKってのはありますね。特に最近のWebアプリとかは。

    やっぱり歴史的な問題や、開発するスケールとかも問題もあるんでしょうね。だからスタイル(手法)と分かりやすさのバランスが重要になるのかも知れませんな。

    個人的な戯言として聞いてほしいんですが、文字列連結とそうじゃないので分岐するのは分かりにくい・・・と思います。クドイですがツッコミじゃないっす。

コメント