トリッキーなロジックパズル-プログラミングスキルの評価に本当に役立つのか?[閉まっている]


88

私が参加した最後のインタビューで、容量のある2つのバケツ(それぞれ何と何と1リットル)を与えられたとき、何と何リットルの水を正確に測定することが期待されるパズルを解くように頼まれました。与えられた時間(〜5分)でパズルを解くことができませんでした。

インタビュアーは少しがっかりし、プログラマには「これらの」スキルが必要だと言いました。私は彼が話しているスキルを理解できませんでした。

私はいつもプログラミングの就職の面接で尋ねられるこの種のパズルについて奇妙に感じていました。私は、そのようなパズルとプログラミングの間の関係が、たとえあるとしても、何であるかを理解していません。インタビュアーはそのようなパズルで正確にどのようなスキルを評価するつもりですか?


20
ダイハード3水差しパズルのように見えるyoutube.com/watch?v=lZ64IR2bz5o
JFディオン

64
このような質問の大きな問題の1つは、応募者がその問題を以前に見たことがあるかどうかを測定することが多いことです。
デビッドソーンリー

37
これらはただのブードゥー教徒の雇用慣行です。他の人がこれらの質問をするので、彼らは彼らがそうであるように感じます。彼らは、質問に答えないことは「悪い」ことであり、答えることは「良い」ことを知っていますが、「開発者がこれらのスキルを必要とする」などの答え以外の理由を説明することはできません。それらは時間の無駄であり、面接者が有能な面接者ではないことを示す指標です。
ラインヘンリヒズ

5
はい、これらのテストはそれほど良くありません。しかし、プログラマーがこれらのパズルに少なくともわずかな関心を持っていると便利です。私のアドバイス:パズルを勉強し、インタビューに合格してから、参加したいかどうかを決めてください。
ジョブ

10
「WTFはプログラミングに関係しているのですか?」と尋ねる候補者を見つけることを期待して、インタビュー中にこれを尋ねます。駐車場から出る前に申し出ます。
ジェフ

回答:


97

一部の人々は、あなたの能力と問題解決へのアプローチを評価するために彼らに尋ねます。個人的に、私はそのようなパズルが正確な指標を提供するとは思わない。「現実の世界」では、たとえば、ビンの梱包バックパックの問題を処理するかどうかを判断するのに5分以上かかります。最初は、間違った解決策を適用する途中になるまで、目前の問題を誤解しやすいことがあります。それは、1、5、10、さらには20年の経験を持つ人々に起こります。

最高のインタビュー「パズル」は、専門知識を主張するドメインの問題を解決するためにコンピューターに座っているものです。私は、「まあ、プログラマーができるべきだ」という考えも嫌いです。なぜなら、すでにストレスの多い設定で予期しない何かにぶつかったときに人々が不安になることを考慮していないからです。確かに、あなたは可能性が ..あなたはそれについて考える時間を持っていた場合、その解決し、あなたがしなかった場合、あなたの人生が終わってしまうことに気づいた場合、おそらくあなたはより速く、それを解決することができます。5分以内に問題を解決できない場合、人生が終わる場所で働きたいですか?できないなら解雇されますか?

すべての優秀なプログラマーもチャンピオン数独ソルバーである必要がありますか?確かにたくさんありますが、コンピテンシーのある種の前提条件とは違います。

問題への取り組み方をテストするべきではないと言っているわけではありませんが、テストは楽しいものであり、専門分野を考えると、申請者が与えなければならない「ベスト」を招くべきです。あなたがブルース・ウィリスが描くキャラクターと同じくらい頭が良いことを証明することは、プロデューサーがそのシーンをちょうど良いものにするためにかなりの金額を費やしたことを考えると、無意味に思えます。

言い換えれば、あなたが実際に何をしているのかについてほとんど理解していない人にインタビューされていることを検出した場合、トイレに行き、二度と戻ってこないことを言い訳してください。


8
これは、すべてのインタビュアーが必要とする視点です。ドメイン内の問題を解決し、ストレスや予期しない質問についての発言は同等です!
クリス

20
「現実の世界」では、 + 1 を理解するのに5分以上かかります、いい答えです!
アリの

7
また、インタビュアーが質問を発し、それ自体を:)解決かのように、彼らは通常、提示されているという事実を愛する
RyBolt

10
私はとても苦労しexcuse yourself to go to the restroom and never returnます!
フロリアンマーゲイン

ええ、私は常に応募者にできる限り快適に感じさせるようにしていますので、実際にその人がその仕事にどれほど良いかを知ることができます。「あなたは何が好きですか」ではなく、「あなたの長所」を求めます。哲学をコーディングするのではなく、馬鹿げたパズルは、その人がその仕事にどれほど優れているかを示すものではありません。
winkbrace

56

マイクロソフトは1980年代初頭にこれらの質問を使い始めました。マイクロソフトが著しく成功するにつれて、他の企業がそれらをコピーし始めましたが、いくつかの重要なポイントが翻訳で失われました。

当時、マイクロソフトは、テクニカルライター、テスター、電話サポートなど、多くの技術的ではあるがプログラミング以外の職種を埋めようとしていました。見つける。別の選択肢として、マイクロソフトは、非常に賢く、賢く、柔軟な人材を雇用し、仕事で訓練することができると考えました。これらの人々はプログラミングの背景を持っていなかったため、インタビューでプログラミングの質問をすることは無意味でした。なぞなぞは、賢くて非常に優れた分析スキルを持っている人をピンポイントで試すために選ばれました。プログラマーは通常、ホワイトボードのプログラミングの問題を抱えていましたが、昼食や夕食の間になぞなぞを尋ねられることもありました。

これらの質問は、決して合否を意味するものではありませんでした。これらは、あなたがどのように問題に取り組むか、そしてあなたが今まで見たことのない問題についてどのように考えているかについての会話の始まりとなることを意図していました。「失敗」する唯一の確実な方法は、問題の解決を試みることを拒否することでした。当時これは斬新な戦略であり、Googleで質問を検索することはできませんでした。

編集:

この答えを書いた後、私は1950年代と1960年代の制度コンピューティングの歴史であるThe Computer Boys Take Overを読みました。どうやら脳の体操やプログラミングの仕事の候補者のなぞを尋ねる練習は、1950年代にさかのぼります。米国は防空システムのコンピューター化を試みており、IBMはその作業を行うには数千人のプログラマーが必要になると推定しました。その反応は衝撃的で驚きでした。全世界には数十人の「プロのプログラマー」しかいませんでした。いくつかのアプローチが試みられました:抽象プログラミング適性テスト、プログラマーとして数学者を募集する、チェスプレーヤーとクロスワードパズルソルバーを募集する、謎と頭の体操で応募者を選別する。

彼らは最終的にプロジェクトを完了するのに十分なプログラマーを採用することに成功しましたが、結論として、どのスクリーニング方法もプログラマーとして特に成功した採用者を特定するチャンスよりも優れていなかったということでした。


49

彼らは便利ですか?いいえ、そうでもありません。彼らは、彼らがさえ、「マイクロソフトの質問」と呼ばれました、そしてそれらについて書かれた本がありました、マイクロソフトで一度ので、一般的であったこの1つは実際には非常に良い読み物です。..

それらには2つの問題があります。第一に、申請者が調査を行い(そして本を読んだ場合)、彼らがそれを解決できたとしても、それが良い開発/テスト/ PMであることをどのように示しているのかを知ります。

これらの理由から、彼らはマイクロソフトでこれ以上尋ねられることはほとんどありません。コーディングの質問、または「トリック」の答えを必要としない問題解決の質問をする方がはるかに優れています。言い換えれば、問題を解決しようとする応募者のスキルと行動を探求できる質問をする必要があります。問題は、おそらく彼らが持っている時間内に解決策を見つけることさえできませんが、少なくとも賢明な方法でそれについて行きます。それは実際の仕事を反映しています。2つのバケツと1つの鶏肉を使用して3パイントを測定する必要はありませんでした(または質問は何でも)。

そうは言っても、私はいくつかのトリックの質問を受けたので、今では自分を小さなボートでニワトリとキツネを輸送し、電車に乗っているハエの寿命を計算する専門家だと考えています。私はこの情報を使用する必要はありませんでしたが、たぶん、いつかは....


26

「富士山をどう動かしますか?」。多くの人がインタビューで謎を使用するという推論になります。私の意見では、それは貨物カルトの行動の組み合わせであるということです(「Microsoftはそれを行います。 」および友愛のヘイズ(「まあ、私はそれらの質問に答えなければならなかったので、次の人が答えなければならないだろう!」)。

インタビューの実践としてのこれらの質問の歴史は、1950年代にウィリアムショックリーから始まりました。彼らは、他のインタビュアーがそれをやっていたので、インタビュアーが尋ねたインタビューの質問のかなり一般的な種類でした(そして、おそらく彼らはこのインタビュアーが知らない何かを知っていましたか?)。Shockleyはそれらをインテリジェンステストとして意図していましたが、2つのバケットに関する問題は、1916年の元のスタンフォードビネットIQテストの 1つに関するものでした。

おそらく、インタビューを行う人々は実際にあなたが答えをどのように探しているかを見たいと思うので、彼らはあなたの街にあるガスポンプの数などの質問を計算することを不可能にするでしょう。これらの種類の問題は、フェルミ問題です。このテーマに関するジェフの 2つの興味深いブログ投稿は 、史上最も難しいインタビューパズルの質問」「あなたはどれくらい良い推定者ですか?」です。パートIII

個人的には、これらの質問は、彼らが何をしているのか、開発者を探す方法がわからないインタビュアーによって一般的に使用されるため、あまり意見がありません。パズル/なぞなぞを作る会社に勤めない限り、それらは「あなたの最大の弱点は何か」(これに真実を答えて、悪い方法でインタビューを終える)または「なぜ丸いマンホールカバーです」(すべてではありません)。


3
+1、最後の段落にこれ以上同意できませんでした!
missingfaktor

Fermi問題リンクの+1:誰かが妥当な誤差範囲で推定を行うことができるかどうかを確認するのは、ちょっと面白いです。同様に、「いくつの国がありますか」という信頼範囲を求めることもできます。しかし、このように考えることを知ることは、賞賛に値するものであり有用ではありますが、開発には本当に不可欠ではないと思います。微積分や統計を知っている開発者に少し似ています。それは良いことですが、仕事が得意かどうかよりも、彼らのバックグラウンドについて多くを語っています。
11

17

他のは、私が問題としてupvotedてきた答えている必見の。私が別の答えを書く理由は、私が言いたいことはおそらくコメントに収まらないため、そして良いプログラミングの仕事の面接がどのようになる可能性があるかについて何かを言わなければならないからです。

私が覚えている最初の良いインタビューでは、私たちは急いでせずにたくさん話しました。最初に1時間、電話で、オブジェクト指向設計と、それをC ++で実装することの長所と短所について説明しました。次に、現場で、ソフトウェア開発の実践、統合、テスト、バージョン管理、構成管理、チームと責任、テクノロジー、設計について数人と話しました。私にインタビューした人たちとの昼食を含む終日のインタビューでした。後から考えると、彼らが既にやっていることに生産的に適合するかどうかがすべてでした。

それ以来、良いインタビューはすべて長く、ソフトウェア開発に関する1〜2時間の会話でした。問題解決の質問、パズル、コーディングの課題はありませんでした。

今日、プログラミングの仕事のために誰かにインタビューした場合、私は好きなことに進みます。幅広いトピックについて意見を求めたいと思います。

  1. プログラミング言語の好みはどれですか?どうして?
  2. 例外処理へのアプローチ方法
  3. レイヤード設計の利点は神話ではありませんか?
  4. 継続的インテグレーションは効率への負担ではありませんか?
  5. コードを書いた人は誰でもそれを所有すべきですよね?
  6. 「フロー」に入るために何をしますか。
  7. 報告された欠陥をプロジェクト計画にどのように含めるべきですか?
  8. ...

これらは複数の答えがある質問であり、すべてソフトウェア開発者が情報に基づいた意見を持つべきトピックに関するものです。私は(質問としてではなく)会話のトピックとして経験した以前の実際の問題に言及する答えに心から同意します。

Peoplewareは、最高のIQを持っていなくても、ソフトウェア開発のダイナミクスを理解しているのは最高のプログラマーであると言っているため、効果的なソフトウェア開発に関するより科学的な研究です。私は、n長年の経験を1繰り返して何年も経験する人よりも、学びたいと願う新人を選びたいnです。私の個人的な偏見は、枠の外で考える傾向があり、同時に現在の(私の)枠に収まる方法を知っている候補者に向かっています。


素晴らしい答え。オフトピック:例の質問#3に興味があります。レイヤードデザインについてのあなたの意見をもっと知りたいです。
missingfaktor

2
@missingfaktor#3は、述べたように、迅速に行われたものと正しく行われたものについての会話を刺激するトリックの質問です。#4と#5は同じです。#7はおそらく最も困難であり、リーダーシップの役割にのみ適しています。
アパララ

1
@missingfaktor再び、私は別の質問に答えました。このウィキペディアの記事、関連記事、および外部リンクは、懸念の分離が複雑なシステムの設計と構築に最も重要である理由に関する豊富な情報を提供します。en.wikipedia.org
wiki

理にかなっています。どうもありがとう!:-)繰り返しますが、素晴らしい答えです。ここの他の回答で言及されていない多くの良い点を作ります。
missingfaktor

個人的には、ツーリングに関する質問も追加します。使用するツールを気にする人は、より良いプログラマーになる傾向があります。Emacsユーザーとして、私は肩をすくめて気にしない人よりもvimユーザーの方が好きです。
シングルトン14年

13

これらは、問題解決スキルの評価に役立ちます。これは、もちろんプログラミングの重要な側面の1つです。

長年にわたって多くの人々のインタビュアーとして、私は通常は要求しない落とし穴はかなりあなたが記述するように見えるようなタイプの質問に、私はよく何かを尋ねると求めることができる「あなたは解決するだろうか...」。

その場合の私の期待は、あなたが問題へのアプローチを明確にすることを聞くことです。他にどのようなデータを収集しようとしますか?仮説などをどのようにテストしますか


1
私は無数の人々にインタビューしながら同じことをしました。質問のポイントは、彼らがソリューションに向かってどのように機能するかを見ることです。必ずしも正しい答えが得られるとは限りません。このプロセスを見るだけで、優秀なプログラマをすばやく見つけることができます。
デイブ・ワイズ

2
@デイブ、試してみてください。そのようなパズルを解くとき、私は通常、紙を取り、グラフや表を描いたり、俳優を表す十字線の数字を描いたり、心の中で問題を解決するプロセスに何らかの関係がある数字を書いたりします。私はこれをすべて完全な沈黙の中で行い、時には区別できないつぶやきによって壊れます。だから、私は良いプログラマーですか?
P Shved

4
ハイゼンベルグは承認しません。人は問題の良い解決策を思い付くことができるかもしれませんが、彼らが使用した内部プロセスを伝えるのが得意ではありません。彼らにそうするように頼むことは、彼らが通常は働かない状況の下で彼らの能力をテストするだけでなく、彼らの思考プロセスがどのように働くかを他の人に説明する能力または無能によって偏ってしまいます。彼らはそれが自分自身にどのように作用するのかさえ知らないかもしれません。
ジェイソン

4
一部の人々は、彼らが外向的だからといって、誰もが外向的であるべきだと信じています。私の現在のチームは内向的な集団であり、私がこれまで働いた中で最高のチームです。
ダンク

2
@Charles私が言っていたのは、内向的な人は一般に、彼らを満足させる解決策を考え出す前に問題を考え、他の人に説明する必要があるということです。これは「通信不能」とはまったく異なります。外向性の人は一般的に問題を解決するために自分の道を話す必要があります。元のポスターは明らかに、問題を解決するための外向的なスタイルを期待しています。
ダンク

8

これらは単なるブードゥー教徒の雇用慣行です。他の人々がこれらの質問をするので、彼らは彼らがそうであるように感じます。彼らは、質問に答えないことは「悪い」ことであり、答えることは「良い」ことを知っていますが、「開発者がこれらのスキルを必要とする」などの答え以外の理由を説明することはできません。それらは時間の無駄であり、面接官が有能な面接官ではないことを示す指標です。


5

これは、基本的な論理スキルを持たなければならない昔ながらの理論的根拠です。他のことは何でも教えられます。しかし、それは完全に真実ではありません。ブール論理、条件、ループを読むことは、論理パズルを解くことができることと同じではありません。

とはいえ、手続き型言語の時代には、これらの問題を解決できる人が、スイッチの観点から問題を適用できる傾向が高いことはおそらく真実でした。しかし、私の考えでは、オブジェクト指向/関数型プログラミングにはエンジニアリングの考え方が必要です。これはまったく異なります(矛盾はしませんが)。

個人的には、実際のプログラミングスキルよりもロジックの方が重要だと考えていた会社に就職したいとは思いません。

免責事項:私はロジックパズルが得意であり、おそらく、この理論的根拠がなければ、この仕事を始めることはなかっただろう。


2

インタビュアーは、プログラマーの日常業務の一部である問題解決能力と論理能力について言及しているに違いありません。問題が発生した場合、最適なアプローチを使用して、問題を分析、細分化し、解決策を作成できる必要があります。

そのようなパズルがあなたの能力をどれほどうまく表現しているかを議論することができます。現実のプログラミングの問題を尋ねるのではなく、パズルの質問をすることのメリットがわかりません。


1

プログラミングはコード行を書くことではなく、他の人(顧客、ユーザーなど)の問題を解決することです。

プログラマーにとって、ソリューションはプログラムの形をとることがあります。

したがって、問題解決能力を持つことが重要であり、テストされる理由です。

そうは言っても、トリッキーなパズルを解くことが誰かを評価する最良の方法であるかどうかはわかりません。


1

インタビューのパズルは2つのカテゴリに分類されます。「論理パズル」(質問されたもののような)と「異なる考え方」カテゴリです。別の考え方のカテゴリ(横パズルとも呼ばれますか?)は通常、このタイプです。そのツリーにはいくつの葉がありますか?またはあなたの街には何人のテーラーがいますか?

「論理パズル」は、せいぜい1つまたは2つのソリューションがあり、簡単なロジックで到達できるため、問題ありません。そして、論理的なパズルは、それを解決するために必要なプロセスがコーダーが実際の生活で考える必要がある方法と非常に似ているため、ある程度までは良いと信じています。

「違うと思う」という種類のバグは私に終わりを告げません。なぜならそれらはあなたに仮定をさせ、それから仮定に基づいていくつかの計算をするからです。簡単に言えば、あなたの面接官があなたの論理に同意するが、あなたの仮定に同意しない場合、またはその逆の場合、あなたは負けました。インタビュアーがソリューションに同意できない余地があります。

インタビューを受けるとき、私は論理的なパズルを求めません。理由:ほとんどの候補者は、フィボナッチ数列や回文などの単純な教科書の問題をコーディングするように頼むと、3〜4年の経験がある人でも失敗するか、あきらめます。

いずれにしても、パズルの問題は、それほど良くないプログラマーが、ネット上でそのような一般的なパズルの解決策を調べるだけで、インタビュアーに印象づけることができることを知っていることです。すでに解決策を知っていると言うほど正直な人はほとんどいません。


パリンドロームとは、入力文字列で線形時間で最長のパリンドローム部分文字列を見つけるという非常に難しい問題を意味しますか?:-)
b_jonas

1

2つのポイント:

  1. プログラミングは主にパズルの解決とは異なります。Steve McConnellが「Code Complete」で説明しています。

    何?超知能である必要はありませんか?いいえ、そうではありません。コンピュータをプログラムするほど賢い人はいません。平均的なプログラムを完全に理解するには、詳細を吸収するほぼ無限の能力と、同時にすべてを理解する同等の能力が必要です。インテリジェンスに集中する方法は、インテリジェンスの量よりも重要です。第5章で述べたように、1972年のチューリング賞講演で、エドガーダイクストラは「The Humble Programmer」というタイトルの論文を発表しました。プログラミングが得意な人は、脳がどれほど小さいかを理解している人です。彼らは謙虚です。プログラミングが一番下手な人は、自分の脳がタスクに等しくないという事実を受け入れることを拒否する人です。彼らのエゴは、彼らが偉大なプログラマーになるのを防ぎます。もっとあなたあなたの小さな脳を補うことを学ぶ、あなたが良いプログラマーになるでしょう。あなたが謙虚であればあるほど、あなたはより速く改善します。

  2. このようなパズルはインタビュー中に役立ちますが、インタビュアーが結果自体ではなくプロセスを見る場合のみです。

しかし、理想的には、パズルはもっと複雑でプログラミングに関連している必要があります(2時間の小さなプロジェクトのように)。面接官は人であり、完璧な「面接スキル」を持っていないということです。


-1票を投じた場合、私の答えの何が悪いのか教えてください。
klm123

1
+1、それは良い答えだからです。それ以外の場合でも、説明されていないダウン投票をキャンセルするために、私はそれを支持したでしょう。
missingfaktor

0

このような問題を調べるには、いくつかの異なる方法があります。

  1. 以前のソリューションを知っている。 映画の中で...復withとともに死ぬ...これを私に説明してください...?何とかがそれぞれ4、3、5である場合の解を知る例です。一部の人々は、過去のソリューションに関する内部の知識を迅速に活用し、必要に応じて適応させることができます。これは通常、インタビュアーが期待するもので、良いアイデアかもしれないし、そうでないかもしれません。

  2. クリエイティブな即興スキル。これは、以前の解決策がわからない場合や、問題をディオファンチン方程式としてモデル化できるものであると認識している場合に当てはまります。したがって、問題は、与えられたものをどれだけ迅速に使用して創造的な方法で問題の解決策を見つけることができるか、そしてあなたが持っているものが問題の有効な解決策である理由を説明することです。

どちらも満足のいく方法で質問を通り抜けることができるかもしれませんが、それぞれの場合、返信を試みることもできるので、それぞれのコミュニケーションスキルのテストも少しあります。これらのスキルは最後に使用されたのはいつですか?」インタビュアーが、ここで別のアプローチがより効果的であると見られる可能性があることを正確に見たいと思うものについて開かれる場合、興味深い対話につながる可能性があります。


0

それは特に難しい問題ではありません。必要な手順は3つだけで、各手順には2つの選択肢しかありません。私の同僚のいずれかが非常に短い順序でそれを解決することができなかった場合、私は驚かれることでしょう。インタビューではそのような問題を提示しませんが、そのような質問をすることは合理的だと思います。構文やライブラリに関する詳細な質問よりも確かに便利です。

大藤、プログラミングの問題はもっと便利だと思います。


0

誰かが仕事に長けていることを絶対に確実に知る方法はないことを覚えておく必要があります。特にCSジョブは、ジョブが実店舗で抱える多くの課題を予測できないためです。

したがって、潜在的な雇用者はあなたの将来のパフォーマンスを推測する必要があります。

時間/労力とソーシャルエンジニアリングで学位、推奨事項、GPAを取得できます。実務経験は装飾および/または虚偽である可能性があります。したがって、履歴書はあなたの歴史の中での努力/コミットメントのレベルを示すかもしれませんが、それはどれもコンピュータサイエンスの世界で出てくるハードな問題を解決するあなたの実際の能力を語りません。いくつかの優れた論理/数学/ CSyパズルよりも、この種の能力を予測するためのより良い方法は考えられません。

推測ゲームであることを忘れないでください。現実は、私たち全員に平等なすべてのものが、できないパズルよりもパズルを解くことができる人を雇うことです。

はい、面接パズルを勉強することはできますが、与えられたパズルがあなたが勉強しているものと一致しない場合、火傷を感じるでしょう...そしてパズルとその解決策を覚えていない限り、おそらくパズルを勉強しています実際の教育がそうであるように、それ自体があなたを本当の意味でより賢い人にするでしょう。


3
私はあなたのことは知りませんが、インタビューの際に、最近当社の世界で起きた実際の難しい問題を説明し、インタビューを受けた人がどのようにアプローチするかを確認したいと思います。おもしろいことに、2つのバケツを使用して水の量を測定するために、クライアントが私たちと関わっていません。私たちが行うことのほとんどは、コンピュータープログラミングです。
Carson63000

@ Carson63000は、あなたの会社が遭遇した本当の問題が悪い考えではないということではありませんが、現実世界の問題の詳細とソリューションの実装のために、しばしば時間を浪費します。入場のコストが非常に小さく、興味深い部分に直行するため、バケツを含むパズルが素晴らしい理由です。
8steve8

バケットの問題と、たとえば、最小数のディスクシークまたはhttpリクエストを使用してタスクを実行するソフトウェアを作成することとの類似性がわかると思います。
8steve8
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.