アルゴリズムが正しい場合、それを書くのにどれくらい時間がかかったかは重要ですか?[閉まっている]


11

私は最近、Facebookがプログラミングの課題を抱えていることを発見しました。

ハノイの塔タイプの問題解決できるアルゴリズムを作成するように求めるサンプルチャレンジがあります。多数のペグとディスク、初期構成と最終構成が与えられます。アルゴリズムは、最終構成に到達してステップを出力するために、可能な限り少ないステップを決定する必要があります。

このサンプルチャレンジでは、45分の制限時間が与えられますが、制限時間を過ぎてもコードがテストされるかどうかを確認できます。

私はそれを解決できるかわいい数学の解法を知​​りませんでした。それで、私は自分でできる限り最善の課題を解決しようとしました。

うまく機能し、合格したアルゴリズムを作成することができました。ただし、作成に4時間以上かかり、45分という要件よりもはるかに長くかかりました。割り当てられた時間よりもずっと長くかかったので、実際の挑戦を試みたことはありません。

しかし、これは私を不思議に思わせました。実際には、それが私をそれほど長くかかったことは本当に重要ですか?これは、このような場所(Facebookだけでなく、Google、Fog Creekなど)で仕事に就くことができず、抱負を下げる必要がある、または実際に合格したという事実を示すサインです私の最初の試みでは、時間がかかりすぎたとしても、良いと見なされますか?


12
ここで問題になりました-あなたにとってそれで十分ですか?

2
大きな.com名のために働いていないということは、あなたが願望を下げることを意味すると考えるのはなぜですか?
ムーヴィシエル

@mouviciel大きな.com名で働くという私の願望を正確に下げるつもりはありませんでしたが、プログラミングが主な役割である会社で働くことと、あなたが何をしているのか誰も理解していない小売店のような何かをする会社で働くことのようなものです。
JDイザックス

5
Fog CreekソフトウェアのLOLはFacebookとGoogleに含まれています。
-georgiecasey

回答:


42

実際には、どれだけ時間がかかるか重要です。45分で問題を解決できるのは、他のすべてと同じ-4時間かかるものよりも生産性が5倍高いため、雇用主にとって魅力的です。

とは言ってもこの問題を解決するのに4時間かかった理由は述べません。

  • あなたは最高の状態でしたか(栄養が十分で、疲れていません、完全に集中していますか)?
  • 問題は明確に特定されていましたか、それとも自分で追加の調査を行う必要がありましたか?
  • これを行うには新しいことを学ぶ必要がありましたか?
  • ツールは使い慣れていましたか?

これらのことはどれもあなたがかかる時間に影響を与える可能性があり、実際には、プレッシャーがかかっているときに、すべてを言わずに、手元のツールで問題を解決できることがより重要です。そして、あなたが成功するかどうかは誰かにとって非常に重要なポイントです。


ご回答有難うございます。時間がかかった理由に答えるには、1つは、実際に何をする必要があるかを理解するのに少し苦労したためです。たとえば、ディスクが移動したいディスクをブロックしている場合、最初に移動する必要があります。どこに移動する必要がありますか。実際にプログラミングする部分は最短でしたが、すべて時間が追加されました。
JDイザックス

@JohnIsaacksだから問題は、あなたがハノイの塔に慣れていないということでした。私が知っているほとんどのプログラマーは、再帰について教えられたときに紹介されています(各ディスクの動きは、本質的に「上にあるディスクを空のペグに移動」し、再帰にうまく対応します)。正式な教育を受けましたか?

@ThorbjørnRavnAndersen、私は学校でプログラミングを学びませんでした。私は独学で、仕事で、本や実験などで学びました。ゲームに精通していませんでした(類人猿の惑星でプレイされている類似のゲームを覚えていることを除いて)。 「ハノイの塔」と呼ばれます。私は再帰を理解しています(少なくとも私はそう思います)。ここで使用しました。しかし、単純にパズルを解くことは私にとってはるかに簡単でしたが、難しい部分は「毎回可能なパターンの量が最小になるパターン」でした。
JDイザックス

@JohnIsaacksのプログラミングは、ピアノを弾くようなものです-自分で上手くいくことができますが、本当に上手くいくには、経験豊富な先生に正しいやり方を教える必要があります。パズルを解く方法を詳しく説明しても、「それが最適か」という部分は難しいと思いませんか?

ピースを所定の位置に移動し、ブロックしているピースを邪魔にならないように移動してから、次のピースからやり直す再帰関数を作成できます。最大のピースから始めて、最後の最小のピースまで作業します。「最適ですか」という部分は、ブロッキングピースを移動したときに発生します。移動先によっては、追加の不要な手順が作成される場合があります。たとえば、1を3に移動すると3がブロックされ、3を移動するときに再び邪魔にならないようにする必要がありますが、現在の構成によっては回避できない場合があります。
JDアイザックス

13

それは、問題ありません良いキャッシュフローを持つ一般的な開発者を探している会社に速いが、より多くの仕事を成し遂げることができることを意味するので、。しかし、他の多くの例では、それは問題ではありません(私は実際には、ほとんどの場合、主張したい)限り、あなたのような問題を解決する能力、そしてあなただけでなく、それらを解決する能力

私は5つの異なるタイプの問題解決者を考えることができます:

誰が...

  1. ... クリーンで効率的なソリューションにより、問題を迅速に解決できます。
  2. ...問題を迅速に解決できますが、汚れた非効率的なソリューションです。
  3. ...問題をゆっくりと解決できますが、最終的にはクリーンで効率的なソリューションになります。
  4. ...問題をゆっくりと解決できますが、汚くて非効率的な解決策になります。
  5. ... 問題を迅速にまたはゆっくりと解決することはできません

Facebookスタイルのテストは、時間の制約があるため、#3、#4、および#5の候補者を明示的に除外します。したがって、このテストは、#1または場合によっては#2の候補者のみを雇うべきであると判断した雇用主向けです(さらなるスクリーニングに応じて)。

いくつかの例:

  • Facebookのような雇用主は、スーパースタープログラマーに莫大な給与を支払う余裕があるため、#1プログラマーのみを探しているかもしれません。
  • 1回限りの売上が多い雇用主(一部のWebデザインショップなど)は、同様に効果的な#1開発者よりも安価な#2開発者のみが必要な場合があります。
  • 専門的な問題領域(ローン組成ソフトウェアの作成など)を持っている雇用主は、2度の天才開発者が非常に高価であるか、見つけるのが難しいため、#1開発者よりも3開発者を受け入れる場合があります。
  • 気にしない、またはさまざまな理由で予算が限られている雇用主#4開発者で大丈夫かもしれません。
  • #5開発者は、自分が探しているものがわからない企業に雇われ、応募者を排除できません。

5

ハノイの塔?それは大学の新入生のコースで最初に行ったプログラミングの課題の1つでした(フィボナッチの直後-はい、私はそれらの関数型プログラミングのフリークの1人とクラスを持っていました:)。そして、私はコンピューターサイエンスさえも学んでおらず、コンピューター工学を専攻しています。

それでも、ほとんどのプログラマーはひどいので、いわゆる「プログラマー」はこの種のアルゴリズムを正しく書くことができません。(追加の楽しみのためにfizzbuzzを検索)

とにかく、一度特定のしきい値を超えると、あなたのプログラミングスキルは、プロジェクトを完了する能力、困難に対する回復力などほど重要ではないと思います。そして、あなたは確かにそれを過ぎているようです。

Facebookはトップデベロッパーを雇いたいと思っているのは確かだが、その種のゲームで彼らがどれだけのことを望んでいるかわからない。彼らはひどく悪いプログラマーと時間を無駄にしたくないだけだと思います。

私がいつも耳にするコツは、もしあなたがクールなテック企業に雇われたいなら、オープンソースプロジェクトに参加しようとすることです。また、インターンシップを取得してみてください。


3

多くの供給(プログラマーになると思います)と少しの需要(プログラミングの仕事が少ない)があるとき、雇用主は望みどおりに要求することができます。実際問題として、彼らは要求しなければなりません。さもなければ、仕事を終わらせるのではなく、人々にインタビューするのに途方もない時間を費やしているでしょう。だから、彼らはとても早く、できるだけ短いリストを取得するよう候補者に非常にハードのテストを与えている、とように、彼らも非常に良い、ちょうど良いではないが、実際にはない人々にインタビューされることを保証するためにカリスマを

したがって、割り当てられた時間内にテストを完了しなかったという事実は、あなたが悪いプログラマーであることを意味するものではありません。Facebookがカリスマ的と見なすものの定義に当てはまらないだけです。私の意見では、それは大丈夫です。


0

時間は重要ですが、時間がかかる場合は、あなたが愚かであるという考えを理解しないでください。多くの人が物事を「記憶」しています。彼らは、再帰のようなテクニックを2cdの性質になるように適用する練習をしています。彼らがより賢くはない、彼らは2cdの性質の点まで練習したばかりで、あなたもできる!

次の数学の問題を考えてみましょう:2 + 2 =?

すぐに答えが4だとわかったのは、あなたが賢いからではなく、2cdの性質だからです。追加することを学んでいる子供は、答えを得るためにカウントの最も基本的な操作を行わざるを得ない場合があります。しかし、その子供は大人を上回る可能性があります。


-1

人々は、あなたが何かをするのにどれだけの時間を費やしても気にしません。締め切りに間に合うようにしてください。


7
締め切りが「今から45分」であり、4時間後に終了すると、人々は気にします。

1
Mehrdadの意味するところは、締め切りに間に合わせるために残業できることです:D
quant_dev

1
あなたがいないんだ糞が本当にファンを...当たったとき引き出すために左に停止する-あなたは、他の開発者がのために残業必要はありません、物事を行うに残業をしている場合
occulus

-1

かなり緊張しています。ハノイの塔について15分を読んでIDEを起動し、空のソリューションを5分作成する必要があるので、問題を解決するにはわずか25分です。優れたインターフェース設計を備えた安全なクラスのようなすべての配管を使用してコードを記述するだけでも、-10分かかるため、実際のアイデアには15分かかります。ハノイの塔の種類によっては、それで十分かもしれませんが、そうではないかもしれません。また、その場で解決策が見当たらないため、他の問題に取り組んでいる間に問題を解決する必要がある場合もあります。したがって、並列スレッドでは無料で解決されますが、すぐには発生しません。

とにかく、それは最大の会社の1つなので、彼らは何でもやりたいことができます。しかし、時間制限はインタビューの最悪の要因の1つです。私はいつも、急がれ、急いで、すべてをきれいにすることはできず、実際に働くときに非常に重要なすべての詳細に集中することはできません。:)確実に解決策を迅速に解決できます。たとえば、すべてが機能するように管理者へのアクセスを設定します+ 'SELECT * FROM pass WHERE usr == ' + user_input


1
私は彼らがハノイの塔の問題が何であるかを単に覚えている人々がほしいと思う(それは古典である)。
quant_dev

IDEを起動して空のプロジェクトを作成するには5分かかりますか?ハノイの塔をまだ知らない場合は、少なくとも逆の順序で行い、調査中にIDEが(インターネット上のVMから明らかに)ロードされるようにします!
ブライアンベッチャー

このようなテストでは、彼らは必ずしも「良いインターフェース設計」と「配管」を探しているわけではありません。問題に対する理解と、それを解決するアルゴリズムを形成する能力を見たいと思っています。言語が制約ではない場合、JavaやEclipseのようなものを使用することは、私が最後にやることです。Pythonと最小限のテキストエディター/コンパクトIDEを使用します。(自分でJavaを使用すると言っているのではなく、単に言っているだけです...)
occulus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.