こんにちは。

最近サバイバルゲームにはまりすぎて、
AはAlfa(アルファ)、BはBravo(ブラボー)、CはCharlie(チャーリー)と見えてしまう佐藤です。

☆DSC03267

全研本社では、社内のエンジニアのスキルアップのため、定期的に勉強会を行っている
以前、こちらのブログでお伝えしましたが(※その時の様子はこちらから)、
この社内エンジニアスキルアップ勉強会、もちろん現在も行っています。

ですが、最近はだんだんと形式が変わってきており、新たに「FizzBuzz問題」というものが加わりました。
今回はこの「FizzBuzz問題」というものが
エンジニアのスキルアップにどう繋がるのか
をお話できればと思います。

まず、「FizzBuzz問題」が一体どういうものか、ご存知ない方のために説明しますと、
「エンジニアの基本的な素養をみるための、ごく簡単な問題。」というのが概要であり、
具体的な問題の例ですと以下のような問題が有名です。

本来のFizzBuzz問題

というものです。

お気づきの方もいらっしゃるとは思いますが、上記の問題は
「3の倍数と3が付く数字だけアホになり、5の倍数だけ…」というあの有名なギャグとロジックが似ています。

このような一定のロジックを制限時間内にプログラム化し実際に動作させることができれば合格というものが「FizzBuzz問題」です。
では、なぜこの「FizzBuzz問題」が勉強会に取り入れられることになったのか、
起案者の松本氏に聞いてみました。

どうしてエンジニアの勉強会に「FizzBuzz問題」を取り入れようと思ったのですか?

まつもと実は私は最初FizzBuzz問題というものを知らなかったのです。twitterで「プログラムを勉強している人の毒舌な妹」というbotをフォローしているのですが、そこによくFizzBuzz問題という言葉が出てくるんですよ。それで調べてみると、結構多くのIT企業が取り入れて使っている。エンジニアの採用の面接でも使えるし、トレーニングにも使えるというので、これはおもしろそうだなと。

FizzBuzz問題とはどういうトレーニングなんですか。

まつもと普通のエンジニアであれば、10分程度でプログラミングできる簡単な問題を実際にPCに打ち込んで実行するというトレーニングです。解答までの時間をストップウォッチで計測します。
まあ言ってみれば小学生が行っている算数の計算ドリルのプログラミング版みたいなもんだと考えてもらえればいいと思います。本来の意味でのFizzBuzz問題は一種類だけなんですが、それだと1回で終わってしまうので、10分程度でプログラミングできるいろいろな問題のバリエーションを考えて毎週1回づつメンバーとやっています。
基本的にマンツーマンです。メンバーがプログラミングしている間、別のモニターで私が見て時間を計測し、必用あればアドバイスをします。

FizzBuzz問題トレーニングをやるメリットは?

まつもと第一にプログラミングを書く力が付きます。小学生が計算ドリルを繰り返すと算数ができるようになるのと同じことです。
今はインターネット環境でプログラミングをしていますので、何かあればインターネットで調べればわかってしまいます。しかしFizzBuzz問題は簡単な問題とはいえ、インターネットで調べることはせずに自分の力だけで何も見ずに10分でプログラミングをするわけです。最初は相当焦りますが、繰り返すうちに集中力とプログラミングをする力が付いてきます。

他にはなにかメリットがありますか?

まつもと問題に対しての解答は1つではないのです。同じ結果が出せればいろいろなバリエーションの解答がある。人によっていろいろなプログラミングの書き方があるのですが、それをメンバーにフィードバックしています。
私が問題を作るとき予めいくつか解答のバリエーションを考えておくのですが、メンバーがその範囲を超えるまったく新しい書き方を考え出す時があり、その時は私も勉強になります。

今後どんな問題を考えているのですか?

まつもと10分程度で書ける問題というといくらでも考えられますが、今までの7回はアルゴリズム系が多かったです。今後はオブジェクト指向や、デザインパターンの問題なども出していく予定です。
実はこのFizzBuzz問題の前は勉強会形式でオブジェクト指向や、デザインパターンをやっていたのですが、座学が中心の為いまいち定着率が弱いと感じていたのです。しかしこのFizzBuzzトレーニングは、マンツーマンですし、いやがおうでもPCに向かってキーボードを打ちますので定着率は高いと感じています。

最終的には何か目標はありますか。

まつもと48回分つまり毎週1回で1年分の問題と解答がたまったら本にしたいと思っています。Kindle本にして売り出せば多くのIT企業で使ってもらえるんじゃないかと思っています。

 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

続いて、一部の受講生にも「FizzBuzz問題」をやってみてよかったなと思うことや、
業務に生かせるなと感じたことなど聞いてみました。

「FizzBuzz問題」をやってよかったなと思うことは何ですか?

やまだこのところ業務ではJavascriptばかりを書いていたため、PHPのリハビリに役立っています。
一つの言語ばかりを触り続けているとどうしても視野が狭まるので、こういった機会は積極的に活用したいです。

「FizzBuzz問題」が業務に役立つと感じたことはありますか?

やまだ使う機会が少なかったため忘れかけていた構文などを再確認できたことです。これが業務でのプログラミングにも活き、短く読みやすいコードを書けました。

どのような姿勢で勉強会に取り組んでいますか?

やまだあまり難しくは考えず、頭の体操のようにとらえています。
ただ、言葉で考えた処理を単純にコードへ逐語訳するだけでなく「もっと短く、同じ結果を得られる処理をわかりやすく書けないか」という改善の意識は いつも念頭に置くようにしています。

「FizzBuzz問題」をやってよかったなと思うことは何ですか?

エンジニアの基礎的な考え方や技術力がついてくるのを感じています。

また、自分の苦手な部分が勉強会を通じて見えてくるので、弱点を補うためにもプログラム学習をする意欲が湧いてきます。
様々な回答パターンを用意してくれるのも学びに繋がっています。回答パターンのプログラムを読んで、理解する力もついてきました。

 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

いかがでしたでしょうか。

どんなゴールにも様々なプロセスが存在し、
そのプロセスによってかけるコストや成果などが変わってきます。

エンジニア視点ではありますが、最適なプロセスをいち早く導き出し、実行できる技術はこういった日々のトレーニングから養うこともできると感じています。
常に最善な道を見つけることができる、そんなエンジニアが一人でも多く育てばと思う次第です。

全研本社では、誰よりも早く正確に「FizzBuzz問題」を解けるというインターン生を募集しています。