インタビュー中のホワイトボード「テスト」:(ホワイトボード)コードをバックアップする正当な方法 [閉まっている]


15

わかりましたが、ホワイトボードコードにエラー(「;」のようなタイプミスや欠落)があると、多くの場合、インタビューポイントがかかります。それを避けることは、必然的に1つの校正コードを何度も繰り返します(時間と神経エネルギー/集中力を失う)、またはより単純な(したがって効果の低い)アルゴリズムを使用します-そして、これらの両方の方法は再び「高価」です!

それでは、(ユニット)テストフレームワークを自由に使えるように、エレガントで効果的なコードを高速で書いて、それを(ホワイトボード上で)普通にテストしてみませんか?

誰もがこのアプローチを試した/見ましたか?アイデア全体に価値がありますか?

[これはもちろん、ペンと紙のケースにも当てはまります]


23
インタビュー中に誰かにホワイトボードや紙にコードを書いて欲しかったなら、それが100%構文的に正しいとは思わないでしょう-それは彼らに過度のプレッシャーをかけています。はい、それはおおむね正しいはずですが、セミコロンが欠落していたり​​、メソッド名/パラメータープロファイルが少し間違っていたりすることは問題ありません(またはそうすべきです)。
ChrisF

17
私はインタビューでホワイトボードコーディングの大ファンですが、ホワイトボードのコードが構文的に完璧であると期待している人は誰でも間違っています。重要なのは、問題をどのように攻撃するかを確認することであり、完全に非現実的な環境で構文的に完璧なコードを生成できることを確認することではありません。
ティムグッドマン

3
たとえば、何をしているのかについて実行中のコメントを提供するように依頼したり、終了後にソリューションについて話し合ったりすることで、どちらがどれであるかを知ることができるはずです。
ChrisF

6
正確な構文とスペルについて過度に心配すると、私の本のインタビュアーのポイントが犠牲になります。
ジェフ

2
これは、擬似コードが何のためにあるのかである
JK。

回答:


49

ホワイトボードのコードをテストしてほしいので、ぜひ書いてください。書きながら大声で話して、よく読んで、あなたが犯した構文の間違いのほとんどを見つけて、それがより効率的である方法を指摘してほしい。実際、それはホワイトボードでそれを行うポイントのようなものです。それはだない、ワンショット、ライト・イットオールアウト、事の/ 100種類フンフン-あなたは-70を取得します。これは会話であり、コードによって仲介され、デスク全体ではなくホワイトボードで開催されます。

「ホワイトボードコーディング」テストに失敗する優れた方法は次のとおりです。

  • それを拒否する
  • 単一の明確な質問(言語、プラットフォーム、要件についての何か)を聞かないでください。また、それについてあなたの仮定を教えてはいけません。

(例:Fortranで記述し、「表示」または「印刷」を「イベントログへの書き込み」と解釈します。そのようなことを事前に伝えていただければ、それを許可するかもしれません)

  • 希望する言語を聞いて、職務内容に記載されている回答を受け取ってから、別の言語で書いてください。あなたが求めている言語に慣れていないからです。

(私たちはここのコンサルタントです。コーディングと同じくらいコンサルタントの行動をテストしています。クライアントに実際に選択肢がある場合にのみクライアントに尋ねることは正しいです。どんなトピックでもあなたに対してマークを付けますが、特定の「Xプログラマーを雇っていますが、Xで書きたくありません」には、2つの大きな黒いマークがあります。)

  • 「1から5までの数字を印刷」したいときに、2つのホワイトボードにインターフェイス、ファクトリーパターン、抽象化、注入、およびテストを入力して、あなたが建築宇宙飛行士であることを教えてください。

(私は誇張していると思いますが、私の問題を劇的に一般化した人がいました-上記の例に固​​執すると、1から5の代わりに彼の解決策は整数の任意のシーケンスを実行します(どこから来たのですか?そして、彼は実際に作業を行った関数を呼び出すのを忘れていました。彼がデバッガーであるかのようにそれを通り抜けることを繰り返し促し、関数が呼び出されなかったことに気づきませんでした。

私はいつも「あなたはそれが好きですか?」と言います。「それを改善できますか?」「それを歩きましょう」など。通常、その会話で欠落しているセミコロンが発見されるか、1つずれています。そうでない場合、私は通常、神経にそれをマークします。

ホワイトボードで私にとって重要でないと思われるその他のこと:

  • あなたが終わったとき、私はまだそれを読むことができますか?汚れた、走り書きした、色を切り替えた、矢印を描いた、取り消し線を付けて、現在使用できない混乱を残したことがありますか?それとも、ホワイトボードが消去可能で、空中にあるコード行を旋回/矢印で指すのではなく、写真を撮ってデザインファイルに保存できるものを残してくれたことをご存知ですか?
  • あなたがやったようにあなたはどれくらい私に尋ねましたか?コードを議論せずに放置するのが好きですか、それともコードを共同作業と見なしますか?まだ書いている間に私があなたに物事を尋ねたとき、あなたはどのように反応しましたか?
  • 「簡単な」タスクに冷笑したり、「難しい」タスクに気弱になったりしましたか?コーディングできることを示すように求められるのは無礼だったのですか?技術的な問題に簡単に脅かされていますか、または優れたアルゴリズムを思い付く能力についてAre慢ですか?
  • あなたは頭の中でそれを解決していますか、またはどこかで読んだ解決策を覚えていますか?私は通常、難しい問題について話すことができます。
  • 書き始めた場所について前もって計画しましたか?ホワイトボードを使い果たした人々は、通常、低すぎるか、または大きすぎて書き始めます-これが20行のコードになるとは知らなかったので、5行だけ残しました-この小さな詳細が反映されているかどうかを信じてくださいより大きな推定タスクも。
  • あなたが終わったと言う前にそれを見ましたか?私があなたに頼む前に、あなたはそれを指して、またはあなたの方法をタップして自分でテストするのを見ましたか?プロンプトを表示したり、それについて特定の質問をしたりしたとき、もう一度確認しましたか、それとも単に記憶から消えましたか?最初のドラフトが完全ではない可能性があることを検討しますか?

ホワイトボードでコーディングを練習することを強くお勧めします。私はいつもインタビューの相手に、彼らがそれをするように求められることを警告しています。実際のホワイトボードにアクセスできる場合は、簡単な問題を自分で設定し、そこで実践してください。それはあなたのパフォーマンスと自信に役立ちます。

申し訳ありませんが、私はTL; DRの領域にいることを知っていますが、ホワイトボードでのコーディングはコーディング以上のものです。これは、構文の把握以上のテストです。このタスクへの応答で実証されている優れたプログラマーの行動がたくさんあります。コーディングについてだけだと思う​​なら、あなたはその点を見逃しています。

ホワイトボードのテストに関する他の会話では、良い候補を拒否するかもしれないと人々は言っています。正直なところ、それは私が喜んで取るリスクです。すべての雇用ラウンドには、私が雇うことができる人が何人かいます。インタビューの質疑応答の部分で大丈夫な履歴書を持っている人の中には、ホワイトボードでバラバラになり、知っていると主張する言語で簡単なコードを書くことができません。私はこれらのいくつかを雇ったかもしれません。それを妨げるツールは、私が引き続き使用するツールです。私の候補者全員がホワイトボードを台無しにしたため、私は誰もボートを雇うことができませんでした。


2
一つの素晴らしい答えのように思えます(そして正直に言って、私が最初に受け取りたいと思っていたよりもはるかに興味深い)。大変感謝します。
mlvljr

9
@KingOfHypocritesは実際に答えを読みましたか?セミコロンを忘れてもかまいません。それが私が気にしていると言っているものを見てください。ホワイトボードの20分は、あなたについて多くのことを教えてくれます。
ケイトグレゴリー

7
ホワイトボードのインタビューを検証した研究があるかどうか興味があります。完全な開示:ホワイトボードのインタビューに失敗しただけで、一生懸命になりました。私はここ数年インタビューをしていませんが、良いパフォーマー/プレゼンターになったことは一度もありませんでした。あなたの洞察は素晴らしく、最初にこれを読んでいたなら、面接プロセスのその部分についてかなり違った考えをしていたでしょう(そしてもっと話しました)。とはいえ、多くの人がこのトピックについて強い意見を持っていますが、それがすべてのようです。サポートデータによって裏付けられた、このプラクティスには客観的な正当性があると思います。ある?
準最適

3
+1正直に言うと、私はホワイトボードにペアプログラミングの演習のプロキシとしてアプローチし、ケイトが示唆するようにタスクについての会話の流れを維持したいと思っています。候補者(またはインタビュアーとのペアプログラミングの候補者)。どんな規模の組織でも、一緒にコーディングする方法は、単独でコーディングする方法と同じくらい重要です。
ジュリアヘイワード14

4
私はこれが古いことを知っていますが、私はそれにリンクしました、そして私は指摘したいと思いました:視覚処理障害の特徴の1つは、あなたが書いているスペースを推定する能力の欠如であり、したがって部屋が不足することになります。あなたが評価している人がより多くの行のための部屋を使い果たすだけでなく、彼らが彼らがあまりに大きく始めたのを知って、行末に向かってより小さくなっているキャラクターを持っているなら、彼らは理解しないよりむしろ単に学習障害を持っているかもしれませんコードの長さ。非空間的なものを推定するように依頼すると、より良い結果が得られる場合があります。
ヤミクロヌエ

17

ここで間違った仮定をしたと思います。ホワイトボードにコードを書く候補者がすべての「;」を取得できると期待することはできません。完全に配置されています。その点であなたを罰する場所でインタビューしているなら、私は彼らがあなたが働きたい組織ではないことをお勧めします:-)。


2
彼らが言ったように、私はペンと紙のテストの最初のパスで完全に最適化されたコードを書いていなかったので、1つのインタビューに失敗しました(ユニットテストで最適化された学校からのものです) )。そして再び、彼らはテストフレームワークを設置していませんでした、彼らはちょうどそれを最初に正しくしたコーダーがいると仮定しました!
ジュリアヘイワード14

3
@JuliaHayward-音であなたのためのラッキーエスケープ!人々がまだそうしているとは信じられない。
マルタインVerburg

7

紙またはホワイトボードのテストは非常に効果的ではありません。紙のコードのエラーを探す必要があるインタビューを受けたときのことを覚えています。それらの1つは、クラスがインターフェイスから継承したが、メンバーの実装が欠落していたことです。私はこれがエラーの1つである可能性が高いことを知っていました、私はそれを探していましたが、その場で何らかの理由でそれを見ることができませんでした(私はそれを問題の1つとして探していたと述べましたが)。

それが起こったとき、私はまだその仕事を得たが、それは私に何が起こったのかを考えさせた。その種の現実的なシナリオでは、何かが間違っている(これはVisual StudioのC#です)瞬間に波線をたてて、コンパイルしません。私は実際にこれを確認することはありません。なぜなら、それは決して起こらないからです(不可能なことです)。セミコロンがないことは、この極端な例です。メモ帳で書いて、他の人にコードを電子メールで送信してコンパイルしない限り、現実の世界ではまったく非現実的です!

誰かがインタビュー中にホワイトボードを使って彼らが言いたいことをサポートするように頼んだら、それは素晴らしいことですが、私はそれを逆にしないでしょう。


2
あなたの話は、テストが効果的だったことを証明しているようです。一般的に「コードをどのようにレビューしますか?」彼らはあなたにいくつかのレビューを与えました。大声で話し、「すべてを実装することを確認する必要があります」などのようなことを言い、行方不明のコードを見つけたとしても、コードについての質問に答えるだけでなく、実際にコードをレビューする方法を知っていることを示しました。また、一部の人々が持つ可能性のある非エラーの束を指摘しなかったかもしれませんし、おそらく他のエラーも見ました。そして、あなたは仕事を得た。誰にとっても、それは私にとって効果的です!
ケイトグレゴリー

2
また、欠落しているセミコロンは、実際のネガではないとして却下され続けます。優先言語の構文を一貫して誤って入力すると、その構文をすべて内部化した人よりも開発者が遅いことを意味します。あなたは常に戻って忘れていたものを修正しています。IDEからの絶え間ないしつこさで、あなたのリズムが失われる可能性があります。さらに、ホワイトボードでセミコロンをすべて省略し、プロンプトを表示しても気付かない人は、週に一度IDEにセミコロンを入力して修正するのを忘れている良い開発者と同じレベルではありませんそれ。
ケイトグレゴリー

2
+1それは効果がありません。それは絶対に何も証明しません。テストに失敗した人の多くは、テストに合格した平均的な人よりも優れていると確信しています。

3
@ケイト-あなたがどこから来たのかはわかりますが、私は同意しません-特に今私はテーブルの反対側に座っています。誰かが定期的にセミコロンを失っている場合、人為的な設定ではなくIDEでそれを確認したいです。それは私のオフィスのキーコードのようなものです-私は考えずに数字を入力することができ、100%自信を持ってそれを書き留めるように頼むと、苦労するでしょう。インタビューが100%現実的になることは決してないので、私はそれをさらに減らすために邪魔になりたくない。
-FinnNk

1
タイピングは筋肉の記憶によって強化されるため、ホワイトボードよりもキーボードの重要な構文を省略することはほとんどありません。ただし、特にペアプログラミングの状況では、ミスタイピング(および編集者またはペアパートナーからのナグ)により、エラーがエラーの原因となる神経を強化するフィードバックループに陥る可能性があります。多言語は単言語の候補よりも不利になる可能性が高いと思います。
15年

5

私はそれをやった。インタビューで、ホワイトボードにランレングスエンコーディングを実装するように依頼されました。ホワイトボードに合うようにコードの一部(ショートカットの説明)をショートカットしながら、このユニットのテストのコレクションを思いつきました。そしてそのうちの1つを実行して、ソリューションを検証し、テストがどのように役立つかを示しました。私はそのポジションを提供されたので、テストは有用であるか、最悪の場合迷惑ではないと思います。


4

私は学校でテストを受けるときにこのアプローチを使用します。まず関数を作成し、次に入力、出力、および変数の小さなテーブルを作成します。この方法でいくつかの愚かなエラーを見つけました。テストは、紙上/ホワイトボードのテストであっても、テストしないよりも常に優れています。

しかし、私はプロの設定でセミコロンに驚かされることに反対します。


4

候補者にホワイトボードでコーディングするように頼むのはばかげています。スニペット、jsfiddle、インテリセンスなどの最新ツールがあります。さらに、構文を覚えるのにエンジニアは必要ありません。構文が検索され、参照されます。コードを記憶している場合は、マルチテナント環境でのコーディング方法、構文の最適化、またはホストされた環境でさえ、キャリアで時間を費やしたことはないでしょう。


3
特定の言語に中途半端な人は、単にそれを頻繁に使用することから構文を記憶する必要があります。ある人が終日C#コードを書き、頭の上の構文のほとんどを知らない場合、彼は遅くて恐ろしくなります。また、2 ^ 8とは何かを調べることもできますが、塩に値する開発者であれば、頻繁に遭遇したことで頭に浮かぶものを知る必要があります。構文についても同じことが言えます。
-whatsisname

1
それは単に真実ではありません。この時代と時代の構文を覚える必要はありません。sql、vb、c#、javascriptのような多数の言語でコーディングし、json、angularjs、telerikなどを使用する方法を知っている開発者は、構文を記憶できないため、彼らの塩の価値はありません。優れたソフトウェアエンジニアであるということは、リストに挙げたような数学的演算子以上のものです。要件、設計構造、パターン、業界の経験を理解するのはどうですか?言語やライブラリには、トラックの後ろを埋めるのに文字通り十分な構文があります。
ジェームズベイリー

「必要」ということではありません。何かを十分に頻繁に使用すると、それを覚えてしまうということです。SQL開発者であると主張する人が、自分の頭上から結合ステートメントを書くことができない場合、それは彼がa)無能であるb)自分の資格について嘘をついているか、c)非常に奇妙な脳を持っているからです対処する必要がない3つの状況。
-whatsisname

1
「結合」は、ホワイトボードで通常求められるものではありません。多くの場合、なぞなぞや仕事に関係のないものです。候補者が認定され、学位を取得し、強力な履歴書を持っている場合。彼は生計のためにホワイトボードにコーディングしていないので、彼はまだ「無能」だと思いますか?マーケティング担当者は、インタビュースポットで四半期ごとのマーケティング戦略をホワイトボードに登録するよう求められません。馬鹿げています。候補者と話し、彼らがコーディングできるかどうかを簡単に推測できるはずです。
ジェームズベイリー

3

レストランがシェフを雇いたいとき、オーナーはつまようじと帽子をかぶった「ポトフ」を作るように頼みません。

インタビューで開発者にホワイトボードのコーディングを依頼しないでください。


3
そして尋ねられたら?
mlvljr

インタビュー中

3

ホワイトボードのコーディングは困難です。ディズニーにインタビューされるまで、私はそれを紹介されませんでした。何を期待するのか分からず、デバッグできないので、つまずいて問題を解決し、解決しましたが、ちょっとした擬似コードでした。彼らが尋ねたとき、それは実行することができました。

つまり、構文エラーを修正するだけでいいということです。私がホワイトボードのために採用されなかった場合、彼らは非常に良い候補者を失ったと思います。私は資格を見て、その職に適任であり、仕事をすることができるようです。私は現在の仕事に秀でており、一緒に仕事をしたいと思っています。

ご意見をお寄せいただきありがとうございます。ケイト、すべての単語を読みました。それはプログラマーとしての私だけであり、ホワイトボードはあなたのスキルを実際には示しません。私は複数の言語で働く素晴らしいプログラマーです。プログラムするように求められた言語は知っていましたが、ホワイトボードで突然忘れました。

複雑な統合とクレジットカード処理を構築しますが、ホワイトボードでは適切な構文を実行する方法さえ覚えていませんでした。

雇用主として、ホワイトボードのテストが好きです。しかし、私はプログラマーを雇っています。彼らが仕事をするなら、彼らの実際のスキルを見たいです。彼らがコミュニケーションできれば素晴らしいのですが、彼らが問題を解決できるのを見る必要があります。


1
入力のおかげで、質問をするときに私が考えていたことについて正しいようです-それが(すでに)正しいかどうかを知らず、「実際に」チェックする手段を持たないホワイトボードコードに本当に立ち往生することができます トリッキーな解決策-ホワイトボードテストを作成してください!;)
mlvljr
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.