したがって、これは実際のシナリオではなくインタビューの質問であることを念頭に置いて、正しいアプローチ(およびおそらくインタビュアーが探しているもの)は明確な質問をするか、「できない終了します」その理由は次のとおりです。
インタビュアーが求めること:
同じ値を2回返さないことが保証されている関数を作成します。この機能は、複数のマシンから同時にアクセスされると仮定します。
インタビュアーに必要なもの:
この候補者は要件を効果的に評価し、必要なときに追加の入力を求めていますか?
想定しないでください。
エンジニアが要件を(SOWまたは仕様またはその他の要件ドキュメントを介して)渡されると、一部は自明であり、その他は完全に不明確です。これは後者の完璧な例です。前の回答が示したように、要件を満たすことができないため、(a)質問の性質に関して、または(b)システムの性質に関していくつかの主要な仮定を行わずに、この要件に対応する方法はありません。書かれたまま(不可能)。
答えのほとんどは、一連の仮定を介して問題を解決しようとする試みです。ただそれをすぐに終わらせ、それが間違っている場合、顧客にそれを心配させることを特に推奨します。
これは本当に悪いアプローチです。顧客として、私が不明確な要件を与え、エンジニアが出て行って、機能しないソリューションを構築した場合、私は彼らが最初に私に尋ねることを気にせずに仕事に行ってお金を費やしたことに腹を立てます。そのような無頓着な意思決定は、チームワークの欠如、批判的に考えることができず、判断力が乏しいことを示しています。安全性が重要なシステムでの生命の損失を含む、あらゆる形の負の結果につながる可能性があります。
質問する理由
この演習のポイントは、あいまいな要件に合わせて構築するのに費用と時間がかかることです。OPの場合、不可能なタスクが与えられています。最初のアクションは、明確化を求めることです。何が必要ですか?どの程度の一意性が必要ですか?値が一意でない場合はどうなりますか?これらの質問に対する答えは、数週間の時間と数分間の違いかもしれません。現実の世界では、複雑なシステム(多くのソフトウェアシステムを含む)のコストの最大の要因の1つは、要件が不明確で理解が不十分です。これは、高価で時間を浪費するバグ、再設計、顧客とチームのフラストレーション、そしてプロジェクトが十分に大きい場合のメディア報道の恥ずかしさにつながります。
想定するとどうなりますか?
航空宇宙産業での私の経歴と、航空宇宙の故障の非常に目に見える性質のために、この領域から例を挙げて重要なポイントを説明したいと思います。失敗した2つの火星ミッション-火星気候オービターと火星ポーラーランダーを調べてみましょう。どちらのミッションも、ソフトウェアの問題が原因で失敗しました。これは、エンジニアが不明確でコミュニケーションが不十分な要件に一部起因して、エンジニアが無効な仮定を行ったためです。
火星気候オービター -このケースは、通常、NASAが英語をメートル単位に変換しようとしたときに起こることとして引用されています。しかし、それは実際に何が起こったのかを過度に単純化し、貧弱な表現です。確かに、変換の問題がありましたが、それは設計段階での不十分な通信要件と不適切な検証/検証スキームが原因でした。さらに、2人の異なるエンジニアが飛行軌跡データから明らかであるため問題に気付いたとき、彼らはそれが伝送エラーであると仮定したため、適切なレベルに問題を上げませんでした。ミッションオペレーションチームが問題を認識した場合、それを修正してミッションを保存するのに十分な時間がありました。この場合、それが何であるかが認識されない不可能な論理条件があり、費用のかかるミッションの失敗につながりました。
火星ポーラーランダー-この事例はあまり知られていませんが、火星気候オービターの故障に一時的に近いため、より恥ずかしいかもしれません。このミッションでは、ソフトウェアがロケットの火星表面への降下を制御しました。地上40メートルの地点で、着陸の準備として着陸機の脚が展開しました。また、脚にセンサーがあり、動きを検出して(衝撃を受けたときに信号を送る)、ソフトウェアにエンジンを停止するよう指示します。何が起こったのかに関するNASAの最良の推測(複数の可能性のある障害と不完全なデータがあるため)は、それらの展開による脚の不規則な振動が同時に、不適切に表面上の40mのシャットダウン機構を引き起こし、110ドルのクラッシュと破壊をもたらすことですM宇宙船。この可能性は開発中に提起され、しかし、決して対処されませんでした。最終的に、ソフトウェアチームは、このコードの実行方法について無効な仮定を立てました(そのような仮定の1つは、テストが反対を示しているにもかかわらず、スプリアス信号が短すぎて拾い上げられないということです)。事実。
追加の考慮事項
人へのインタビューと評価は難しい仕事です。インタビュアーが探求したいと思うかもしれない候補者のいくつかの側面がありますが、最も重要なものの1つは批判的に考える個人の能力です。批判的思考の定義が不十分であることなど、さまざまな理由で、批判的思考スキルを評価するのは非常に困難です。
工学のインストラクターとして、批判的に考える学生の能力を評価する私のお気に入りの方法の1つは、やや曖昧な質問をすることでした。より鋭い生徒は、質問の誤った前提を取り上げ、それを書き留め、前提が与えられれば答えるか、完全に答えることを拒否します。通常、次のような質問をします。
作業のスタックから図面を選択します。図面にはさまざまな異なる吹き出しが含まれていますが、水平面の最も重要なポイントであり、「完全にフラット」と表示されています。表面は幅5 "、長さ16"で、部品はアルミニウム製です。部品をどのように加工してこの機能を作成しますか?
(ちなみに、このような仕様が職場で頻繁に現れることにショックを受けるでしょう。)
生徒は、完璧な機能を作成することは不可能であると認識し、これを回答に記載することを期待しています。彼らがデザイナーに戻って部品を作る前に明確化を求めると彼らが言うならば、私は通常ボーナスポイントを授与します。学生が.001平面性またはその他の構成値を達成する方法を教えてくれると、ゼロポイントが与えられます。これは、生徒がより大きな全体像について考える必要があることを指摘するのに役立ちます。
ボトムライン
エンジニア(または同様の職業)にインタビューする場合、批判的に考え、彼の前に何が置かれているのかを質問できる人を探しています。「これは理にかなっていますか?」という質問をする人が欲しいです。。
完璧なものはないので、完全に平らな部品を要求するのは意味がありません。そのような保証をすることは不可能であるため、重複した値を決して返さない関数を要求することは意味がありません。プログラミングでは、「ガベージイン、ガベージアウト」というフレーズをよく耳にします。要件を満たすためにごみを渡された場合、停止し、質問をするのはあなたの倫理的責任であり、真の意図を引き出すのに役立ちます。候補者にインタビューしていて、彼らに不明確な要件を与えた場合、明確化の質問を期待します。