web-dev-qa-db-ja.com

FizzBu​​zz-本当に?

「インタビューテスト」の質問になると、FizzBu​​zzのテーマがよく出てきます。 Coding Horror についての投稿もあります。

さて、このようなサイトを読んでいると、FizzBu​​zzをささいなもの以外に見つけるプログラマーの人口統計に入る可能性が低くなります。

しかし、99%のプログラマがそれに苦労するというのは本当でしょうか。

本当に?

これを裏付ける証拠は何ですか?

いくつかの実際の例は、この質問に答えるのに非常に役立ちます。

60
DanSingerman

99%?いいえ。かなりの割合ですか?はい。人との面接に関する私自身の直接的な経験から、私はこれについて証言することができます。ささいなことのように思えるかもしれませんが、プログラミング分野では、何年にもわたって偽装してエントリーレベル以外のポジションに応募し、これに失敗した人がたくさんいます。

あなたがそれを簡単に解決できるとしても、あなたは私にそのような面倒な仕事をするように頼まれることについての大きな静的をあなたに数えるでしょう。チームにいるということは、時には楽しめないかもしれないが必要なことをしなければならないことを意味します。すぐに問題が発生した場合、私たちが協力し始める前に、私が求めていることを上回っているという特別なステータスを主張して主張するのが最善だと思います。

私は必ずしもあなたの解決策がどれほどエレガントであるかは気にしません(それはいいでしょうが)。 。あなたが憤慨し、「私は問題解決者であり、コードモンキーではない!」という言葉に沿って何か言うとその後、ペグをノックダウンされます。

私は面接官に、それを試み始めることすら拒否することを拒否しました。単に拒否するだけです。ええと。それをしないでください。私は1つまたは2つの丁寧な質問をし、彼らの時間に感謝し、インタビューを締めくくります。

私はこれをマネージャーとしてそして開発者として言います。

46
Todd Williamson

私は、仕事に応募する(そしてそれを取得しない)プログラマーの99%が苦労するかもしれないと思います。しかし、生産的に仕事をしているプログラマの99%ではありません。

それが現代の求職プロセスの本質です。応募する多くの人々は資格がありません。

そのCoding Horrorの投稿は、最近のコンピュータサイエンスの教え方にも触れています。過去(特にMIT)では、LISPのようなことを学ぶ必要がありましたが、そのためには再帰のような概念を理解する必要がほとんどありました。

今日、人々は教えられるJavaそれは業界で広く使用されており、焦点は深いプログラミング思考ではなく構文に移っています。私はJavaを嫌いではありません;実際、それは理想的だと思います最初のプログラミング言語ですが、インストラクターがそれを使って深いプログラミング原則を教えるのを見たことはありません。

25
Robert Harvey

これは言いたくないけど

私がプログラミングの質問に答えられないのを見た主な理由は、回答者ではなく質問者の責任です。

定数時間で実行される特定のコレクション検索アルゴリズムを作成する方法を尋ねられた1つのインタビューをはっきりと覚えています(コレクション内のアイテムの数に関係なく、ルックアップの数は同じです)。私はそれをあきらめて、あきらめる前に20分間ぶつけました。その時、インタビューをしているこの天才は答えをほぼ一定で動作するものであるとして実証し始めましたが、それでも一定の時間ではありません。 「私にゼロの答えをください」と言って、0.1を受け入れるようなものです。

それ以外にも、インタビューをしている人が次の基準を満たさない質問をしているケースが多すぎるのを見てきました。

  1. 彼らは可能なすべての正しい答えを知っています。
  2. 彼らは知っていますなぜ正しい答えは正しいです。
  3. 彼らは答えを出さずに実際に十分な情報を提供する方法を知っています。
  4. 「問題解決」の質問は、非公開の事実に関する知識に依存しません(これが私が見た最大の問題です)。
  5. 答えを理解する必要がなければ、答えを書くのに1分もかかりません。コードを入力するだけで5分かかる場合は、インタビューの口頭の部分に当てはめるよりも、実際に問題を解決する必要があります。
  6. 質問は単に「私が一度遭遇した問題や私が学校で与えられた問題なので、あなたはそれを解決する方法を知っているべきです今すぐ」だけではありません。答えるのに2分以上かかったと思いますが、候補者に同じ礼儀を与えてはどうでしょう。

真剣に(1)、インタビューの口頭でコードを書くように人々に求めるのはばかげていると思います。

真剣に(2)、コードを書かないで人々にインタビューするのもばかげていると思います。

真剣に(3)、彼らに「宿題」を与えるか、コードサンプルを持ち込むように依頼するか、またはラップトップといくつかの質問とそれらに取り組むための静かなオフィスを与える必要があります。次に、作業中は放っておいてください。私は通常、後者のアプローチを採用します。それは、彼らが外部からの助け(チート)を取得する能力を制限し、タイムボックス化できるからです。

20
MIA

あなたが言及したCoding Horrorの記事を読みました。私の意見では、Jeffは正しいと思います...しかし、彼が最後にインタビューを受けたのはいつですか?

インタビューを受けたとき、あなたは通常ストレスが高く、理論的な質問に答えなければならないことがよくあります(知性、グーグル、再シャープなし、ストレスに悩まされている記憶だけ)。テストでも同じです。ストレスはあなたを助けません。

私は誰かがポジションに適しているかどうかを知る唯一の方法がしばらく彼と一緒に働くことであることに気づきました...あなたが雇った最後の10人を100人から(おそらくそれ以上)取るだけで、どれだけ本当に本当に良かったですか雇う???

雇用主は、モジュロを知っているコードモンキーではなく、問題解決者を雇う必要があります。

「しばらくの間は応募者全員」をテストすることはできないため、面接が必要です。それが私が私の問題に焦点を当て(問題解決)、過去の参照チェックを行う理由です。

私の意見では、FizzBu​​zzは、成長を維持するための開発者を探している会社にとって危険です。

10
user2567

FizzBu​​zzで検索するだけです。そこにブログの投稿の巨大な波がありました。一般的に言って、ブロガーは「私はそれを[ある言語]で書くように人々に言いました、そしてここに彼らがした種類の間違いがあります:」と述べ、そしていくつかの落とし穴をリストしました。楽しみは、人々が「[ha!それは[他の言語]で取るに足らないことです。あなたが書く必要があるのはこれだけです」と言うコメントから始まり、その後にコードが続きます。次のコメントは必ず最初のコメントのバグを見つけます。一部の非常に優れた開発者は、どの言語でも、最初はうまくいかないようです。エラーのいくつか:

  • 1から100を要求し、1から99または0から99を実行しました
  • 番号をフィズやバズと一緒に印刷するかどうかを台無しにする
  • 「fizzbuzz」と「fizz-buzz」の不一致
  • 最適化に失敗しました。
  • さらに多く

私が採用しているとき、私は人々にホワイトボードでコードを書くように頼みます。その複雑なものの近くには何もありません(私は知っています、あなたはそれが複雑だとは思わない)、多くの候補者は完全に失敗します。私はvbスタイルのIf、Then、End Ifを書くのと同じように中かっこも付けて(おそらく安全のために)、C#を書いて(そして最初にC#を尋ねます)、セミコロンを1つも持たないようにしています。論理エラーから始めないでください!

10
Kate Gregory

私は最近、主にPHPを使用する上級職の50人以上のプログラマーにインタビューする任務を課されました。

私はスクリーニング試験でfizzbuzzの問題を投げました。主に自分自身を楽しませるためでした。10問の良い質問が必要で、9問しかなかったためです。当時の私の意図は、インタビューの質問であっても、私たちにも楽しんでいただけることを人々に示すことでした。

応募者の80%が問題を解決しましたが、係数演算子を使用しませんでした。

応募者の15%が問題を解決できませんでした。

応募者の5%は、係数演算子を使用して問題を解決しました。

私のサンプリングは非常に限られていますが(1つの国からの50人の応募者)、私はあなたにそれを伝えることができます:

彼らの95%は、CSカリキュラムでBS以上の成績を収めていました(ここの大学は、CSのサウンドをより壮観なものにしようと競争しています)。

本当にびっくりしました。まあ、おびえた..しかし驚かされた。問題が非常に人気になったので、結果を再現することに近づくとは思わなかった。これは、私の応募者の5%がスーパープログラマではない可能性があることを示していますが、少なくともプログラミング関連のブログを読んでいます。

10
Tim Post

前回の採用ラウンドでは、3人の建設労働者に0を割り当て、ゼロを繰り返し、プログラミングの教育または経験をソフトウェア開発者のポジションに適用しました。* これが樽の底です。スキルの正規分布を想定すると、平均スキルレベルがかなり低くなり、「平均以上」(応募者の中で)でも依然として比較的悪いことがわかります。

ここで、プログラミング能力のように思われるものを持っている応募者のみをうんざりさせている場合は、次のことがわかります。

  1. 嘘つき
  2. 流行語愛好家(.NETに関する記事を一度読んだ)
  3. 悪い実際のプログラマ
  4. テクノロジーを使用してプロジェクトを完了したが、それについて学んでいない人々(これらを特定するには、使い捨てについてのfizzbuzzの質問を参照してください)

さらに、私が見たいくつかの 'fizzbuzz'質問はドメイン固有です。言語/フレームワークxで何年も段階的に開発でき(したがって、xのz年の経験)、それの特定の部分に遭遇していません(たとえば、ライブラリ開発者はUIコンポーネント開発についてあまり知らない)。

同様に、最近は多くの開発者がメンテナンス開発を行っているため、一部の領域では、アーキテクチャ/設計スキルが弱い場合があります。

現在、99%が正確かどうかはわかりませんが、IMEはまだかなり高いです。少なくとも80%の範囲です。

*いいえ、これらのアプリケーションを呼び出したり、再確認したりすることはありませんでした。

9
Steven Evers

はい、そうです。おそらく99%ではないが、それでもかなり高い。私は、コンピューターサイエンスの学生にインターンシップとフルタイムの採用の面接を行っていました。大学の学生約25人にインタビューします。生徒たちが話していたので、同じ質問をしないように言われました。最初の質問に答えることができる25人中3人または4人の学生しかいなかったので、私はそれが問題ではないことをすぐに学びました。 「strcmpを書く」

2つの文字列を比較する関数を作成するように依頼しました。関数を使用して、辞書の単語を並べ替えることができます。関数の書き方はもちろんのこと、2つの単語を比較する方法を理解していない学生の数に驚くでしょう。そして、これらの学生の一部は、CScですべてのAを取得したと主張しました。

問題は、プログラミングが非常に難しいことです。多くの人はプログラミングの方法を知っていると思いたいのですが、そうではありません。

8
ChrisMcB

いくつかの考え:

  • 彼らのプログラムにバグがあったとしても、私は誰かに対してそれを保持しませんが、彼らは明らかに正しい考えを持っていました。デバッグはプログラミングの一部です。

  • 多くの人が、自分ができないことを知らない仕事に応募しているのは残念だと思います。経済の問題のように思えます。

  • 人に悪い質問をするのは本当に簡単です。唯一の「正しい」答えは、インタビュアーが与えるものです。

8
Mike Dunlavey

このテストは、私が雇う可能性のあるプログラマーについて知りたいいくつかのことを非常にうまくカバーしています。

  1. まったくプログラミングできますか?
  2. プログラムを最初から作成できますか(誰でもできるわけではないため!!!)
  3. over-思考せずに問題を解決できますか?.

最後の点について詳しく説明すると、fizz-buzzには無数の解決策があります。読みやすさを追求していますか?速度?簡潔?あなたはプログラムを素早く書き終えようとしていますか?プログラマーがこの単純な問題をどのように攻撃するかは非常にわかります。プログラマーがソリューションを選択して最後まで見ることができない場合、それはこの人が実際のタスクでどのように実行するかについて何を教えてくれますか?

7
user2458

残念ながら、印象的な履歴書を持っている多くの人々は基本的なプログラミングスキルを欠いているようです。履歴書にCとC++を記載した人がポインターに関する基本的な質問に答えられない場合がたくさんあります。

6
Dima

なぜこれほど人気のある質問なのかという理由の1つは、それに答える方法が1つではなく、候補者がどの方法を選ぶかによっては、コードのコーディング方法に関する洞察を得ることができるためです。 Stack Overflowで10Kの担当者がいる場合、いくつかの素晴らしい例を見ることができます here

99%統計については、その数値がどこから来たかを確認します。それはおそらくバイアスされています。それが最初の仕事のために面接する初心者レベルのプログラマーに基づいている場合、そうです、特に彼らの候補者の大多数がまっすぐに大学を卒業している場合は、可能であることがわかります。私は実際には、おそらく100の条件ifステートメントをその問題の解決策として書き出すだろう誰かを考えることができます。

3
Rachel

FizzBu​​zzが私を避けてくれることを願っている人には2つのタイプがあります。

  1. プログラミングの知識またはプログラミングの関連知識のないチャンサー。通常、CVからこれらを認識できますが、常にそうであるとは限りません。単純なプログラミングタスクを与えることは、それらがプログラマーではないことを明確にする良い方法です。
  2. プログラミングコースまたは学位を取得しているが、実際のプログラミング方法がわからないJava学校の卒業生。これらの人々は理論について話すことができるので、除外するのがより難しくなるかもしれませんが、彼らは実際的なスキルを持っていません。それらの前に簡単な問題を置き、解決策と解決策の説明を求めることは、ペトラJavaとPaula Beanの違いを確認するのにかなり良い方法です。

どちらの場合も、私は完全な実装については本当に気にしません。開発者の求人に応募する人と一緒に行う必要があるテストは、まったくプログラムできることです

とはいえ、私はおそらくいくつかの理由でその特定のテストを気にしないでしょう。まず、それは非常によく知られており、上記のグループのいずれかですぐに試すことができます。第二に、私は Steve Yeggeの電話画面の質問 を使用して、プログラマー以外の人たちを招き入れる前に選別することを好みます。彼らが自分の職業を真剣に受け止め、確かにインタビューを正当化する開発者の上位1%にいたことを私に示唆してください。同様に、誰かがここまたはSO=に良い担当者がいたら、インタビューする傾向があります。

3
glenatron

開発者がFizzBu​​zzをコーディングできないのは、作業をコピーして貼り付け、意図的にコードを書かないようにする "nine-to-fivers"が見つかるまでありません。上級開発者の1人がC#開発者に3年の「経験」をもって、辞書の使い方を教えているのを聞いたとき、私はそれを信じられませんでした。インターフェース?デザインパターン? stdout? YAGNI?私のリードはYAGNIについて聞いたことがありませんでした!これらの人々が知らないことは驚くべきことです。

私は今それを信じています。また、十分な開発を行っている開発者が多すぎると思います。

3
kirk.burleson

プログラマーの99%がプログラムしたり、簡単なコーディングテストを解くことができないという声明は非常に誇張されています。 FizzBu​​zzテストの場合、この問題に遭遇したことがあり、modulo演算子で簡単に解決できるか、以前に遭遇したことがなく苦労するかのいずれかです。それはあなたのプログラミングスキルについて何もインタビュアーに伝えません。

多くのプログラマーが面接で悪い印象を残しているという問題は、技術面接方法の性質にあると思います。面接担当者は、応募者が言語構文、データ構造、ハードウェアアーキテクチャ、設計パターンなどの詳細と計算の複雑さなどを記憶し、即座に再現することを期待しています。コンピュータサイエンス/ソフトウェアエンジニアリングの領域は広大です。すべてを暗記しようとすることは不可能で無意味です。

現実の世界では、重要なのは、割り当てられたプログラミング/設計の問題を理解し、問題を解決するための情報(IDE、マニュアルページ、書籍、Googleなど)を見つける場所を知ることです。ただし、これは面接担当者がテストすることはありません。

2
mark

私はまだ比較的ジュニアのプログラマーです(私は2年間お金をかけてコーディングしていて、その前に約2の副次的責任として専門職としてコーディングしています)十分な量のソルトを使用してください。

大規模エンタープライズプロジェクトのコーダー向けの最初の画面を実行した経験があります(プロジェクトが破綻していることはわかっていましたが、とにかく彼らは支払いたいと思っていました)。採用を行う会社で唯一のプログラマーとして、私は履歴書を確認し、応募者を選別するタスクを与えられました。

これは政府のプロジェクトだったので たぶん おそらく最も才能のある応募者を惹きつけなかったでしょうが、実際にコードが示されたgithubアカウントを持つ誰からも、ポートフォリオを持っている誰からも1つのアプリケーションを受け取っていなかったため、最初のパスとしてfizzbuzz(文字通り正確な問題)を使用しました彼らがプログラムすることができるかもしれないように見えた誰にでも。

私は、それが愚かであることを知っていたが、実際に機能するコードを見たかっただけであり、同等またはそれ以上の値の別の例または実際には何でも送信できると述べた偽の謝罪を前に付けましたが、fizzbuzzで十分です。

結果:実際に正しい回答は1つも得られませんでした。これは、インターネット上の回答の量を考えると驚くほどです。誰も盗用に悩まされませんでした。以前に失敗したプロジェクトのイテレーションに取り組んできた人材を採用するだけで済みました。

エクササイズの最初のショックと、政府のソフトウェア/契約がどれほどねじ込まれているかについての失望の後、私は自分のスキルについてはるかに良く感じたので、小さな勝利ですか?

編集:正しくないということは、1つずれたエラー(つまり、99ではなく100までを要求したこと)または簡単な修正である他の無害なバグを意味するものではありません。機能していない、つまり実行/コンパイルなどされない、または問題が単に読み取られて理解されていないことを明確に示し、またかなりの部分がアプリケーションを撤回し、代わりに他のコードを送信したわけではありません。

0
BSpiros