典型的なインタビューの質問に使用されるスキルは、実際の仕事にどのように適用されますか?[閉まっている]


13

SQLおよびC#アプリ開発ジョブの場合、インタビュアーは通常、純粋なCおよびポインターを使用して、ツリー、グラフ、およびリンクリストのトラバーサルについて質問します。私が仕事に費やした3年間で、実際にやる必要はなかった

指定されたノードの倍数である指定されたノードの右側にある最初のノードへのパスを見つける

例えば

これらのスキルは、コンパイラ、ドライバーを作成し、OSカーネルで作業する必要があるジョブで使用される可能性があることがわかります。これら以外に、これらのスキルはどこで使用されますか?


5
最も基本的なデータ構造に苦労すると、ほとんどの時間プログラミングに苦労します。
メルトアカカヤ

回答:


15

以下のジョエルの回答のいくつかを読んでください。

特に画家シュミエルのようなものに注意してください。仕事では、リンクリストを書き換える必要はないかもしれませんが、シュミエルを避けることができるように、それがどのように機能するかを実際に知っておく必要があります。

基本的に、あなたが医者に行くなら、あなたはその医者に解剖学を勉強してもらいたいでしょう。彼女はあなたに抗ヒスタミン剤を処方しているだけですが、医師は医学学校で「下大腿骨への慢性フラクティオスディアマダバダ」などを患う人には特定の薬が悪いことを知っています。その専門分野におけるあらゆる種類のこのような詳細な知識は、製品または仕事の生と死の間の情報技術と、生と死の間の情報技術の違いを生むことがあります。

http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html

http://www.joelonsoftware.com/articles/fog0000000319.html

「...少なくとも1学期はマシンに近づきます。そうしないと、高レベルの言語で効率的なコードを作成できなくなります。...」

「...あなたは迷信に基づいてプログラミングを行っています。私に関する限り、基本的な解剖学を知らない医師で、薬局の販売員がうまくいくと言ったことに基づいて処方箋を出します。」

http://www.joelonsoftware.com/articles/CollegeAdvice.html


22

そうではありません。多くのインタビューは、熟練した開発者を探す方法がわからず、どの質問をすべきか、またはすべきではないかを知らない人々によって行われます。

ほとんどのインタビュアーは技術的な質問を一切しません。参加したプロジェクトの数(インタビュアーにとっては多いほど良い)や大学の学位(高いほど良い)など、意味のない測定可能なことに集中します。 )。彼らは大学で何も学ばずに5年間浪費し、その後数十の電子商取引ウェブサイトを10年間費やした人を喜んで雇いますが、数年後に大学を放棄していくつかの作業をしていた人を雇うことはありません技術的に困難な大規模プロジェクト。

少なくとも理論的な質問をすることは、何もしないことよりも優れています。これは、その人が十分な理論的知識を持ち、プログラミングの数年の経験があるかもしれないコーダーではないが、実際に何が起こっているのか実際には理解していないことを確認するという利点があります。この理論的な知識を持たない開発者は通常、リスト、リンクリスト、ルックアップ、またはハッシュセットの違いを知らず、それらを同じ意味で使用します。

良い(技術的な)質問、悪い質問

インタビュー中に、非常に良いものから非常に悪いものまでの質問に遭遇する場合があります。

  1. (有害)「あなたがその言語で書いた最長の作業プログラムの行の長さは?」

    この質問は明らかに間違っています。別の答えでその理由をすでに説明しました。インタビュアーがそのような質問をする会社は、LOC /月で開発者の生産性を評価する可能性が高くなります。私がアドバイスをしなければならない場合:あなたはそのような仕事を必要としません。

    この例は、回答の冒頭で引用した意味のない測定可能なものとは異なります。ここで、インタビュアーは、有害であることがよく知られているものを選択することにより、メトリックの最も基本的な理解すら持っていないことも示しています。

  2. (悪い)「デニス・リッチーは誰ですか?」

    少なくともいくつかの文化を持つことは確かに非常に便利ですが、それらの質問をすることはポイントを逃します。会社がソフトウェア開発プロジェクトを処理してコードを書くことができる才能のある開発者を検索する場合、CとUnixを作成した人の名前を知らないという事実はあまり重要ではありません。

  3. (良い)「.NET 4.5の新機能は何ですか?」

    この質問は、デニスリッチーに関する質問よりもはるかに興味深いものです。候補者が.NET 4.5の新機能について話すことができない場合、なぜ彼は自分をC#開発者と呼ぶのですか?そのような知識の欠如:

    • その人がプログラミング言語や.NETコミュニティのどちらにも本当に興味がないかもしれないことを示しています。

    • 少なくとも頻繁に毎日ではないにしても、他の開発者が使用するC#/。NETの機能に関する重要な知識が不足している可能性があることを示します。

    この種の質問のより詳細な分析を含むJerry Coffinの回答も参照してください。

  4. (平均)「SSDとRAMのどちらが速いですか?」

    これは役に立つかもしれませんし、その人が十分なハードウェア知識を持っているかどうかを示しますが、それでも、この質問に答えられない候補者は拒否されるべきではありません。

  5. (平均)「スタックとキューの実装方法」

    これは、あなたが話す一種の質問です。それらは理論的であり、理論的すぎるかもしれませんが、内部で何が起こっているかを知ることは、より良いコードを書くのに役立つかもしれません。

    この質問に答えられない候補者を拒否するつもりはありませんが、たとえば関連するがあまり理論的ではない質問をすることで、彼が本当にそのことを知っているかどうかをもっと注意深くチェックします。

  6. (良い)「再帰を使わずにどうやって木を歩くことができますか?」

    候補者がこの質問に答え、FILO / FIFOについて、およびスタックを使用した場合とツリー探索の再帰を使用した場合の利点と欠点について話した場合、前の質問に答えられなかったということはどうでもいいことです。

    この質問をすることは、CSの学位を何年も費やしたが、フィールドの経験がない候補者を見つける良い方法でもあります。

良い技術的な質問をする方法は?

kojiroのコメントは興味深く、より長い回答に値します。

誰かがあなたよりも主題について詳しく知っている必要があるため、誰かを雇う必要がある場合があります。そのため、定義上、面接を行うには資格がありません。同じ理由で面接を行っても、確実に助けを得ることはできません。あなたができる最善のことは、あなたの理解が問題の領域と交差するところに基づいて質問をしてみて、あなたが幸運になることを願っています。

特に最初の開発者を雇うとき、または実際に会社で働いているすべての開発者よりもスキルが高いと期待される開発者を雇うとき、良い質問を見つけることは難しいかもしれません。

以下に役立つ3つのヒントを示します。

  1. スキルがあると思われる友人/同僚を見つけて、レビューを依頼てください。これには多くの信頼が必要ですが、会社に多大な利益をもたらす可能性があります。

  2. あなたが熟練していると思われるコンサルタントを見つけて、あなたを支援するか、インタビューの技術的な部分をするよう頼んでください。

  3. Googleで「インタビューの質問」と入力します。それはかなりうまく機能し、通常、可能な答えを説明します。例:

    • Python:これらの10の質問は非常に良いようです。これらは少し基本的なものかもしれませんが、採用したくない95%の候補者のフィルタリングに役立ちます。

    • Dave PinalによるSQL、いつものように素晴らしい。

    • C#:少し基本的すぎますが、再び、95%の候補をフィルターします。

    • JavaScript:質問はより自由形式です。インタビューを短くし、自由形式の非技術的な質問にもっと時間をかけたい場合、技術的な質問には適していません。リストは、JavaScriptの基本概念を理解していない候補者を簡単にフィルタリングするのに役立ちます。

    このアプローチの欠点は、面接のために訓練するために候補者が同じテクニックを使用できることです。Googleで最初に見つけたWebサイトのすべての質問を確認した場合、実際に必要なスキルがなくても、得点する可能性があります。


¹Bツリーが何であるか(「データ構造」であるということは別として)を説明できない開発者もいますが、それでも正しく開発できます。


私はそれが好きではありませんが、それは本当です。誰かがあなたよりも主題について詳しく知っている必要があるため、誰かを雇う必要がある場合があります。そのため、定義上、面接を行うには資格がありません。同じ理由で面接を行っても、確実に助けを得ることはできません。あなたができる最善のことは、あなたの理解が問題の領域と交差するところに基づいて質問をしてみて、あなたが幸運になることを願っています。
小次郎

または、コンサルタントまたは他の開発者を雇うためにあなたが熟練していると信じている誰かに援助を求めることができます。もちろん、これは疑問を提起します。コンサルタント/友人がこのタスクに十分な資格があることをどのように知っていますか。
Arseni Mourzenko

「大学で過ごした年数(多いほど良い)」...これはどうですか?!?それで、学士号を取得するのに15年かかる場合、3年でそれを取得した人よりも優れていますか?「失敗した学生」は、通常の時間に大学を卒業できる人よりも優先されるべきではありません(ここから「失敗した学生」という用語を取りました。うまくいけば翻訳が正しいでしょう)。そこに何を言いたかったのかわからないからです。
バクリウ14年

@Bakuriu:実際、これは私が意図したことの反対です。答えを編集してわかりやすくしました。
Arseni Mourzenko

2
FWIW .NET 4.5のすべての新機能に近いところを話すことができなかったので、それらのいくつかを書きました。そのようなものを知りたい場合は、検索エンジンに「.NET 4.5の新機能」と入力すると、リストが表示されます。
エリックリッパー

6

私が多くのインタビューを行った私の会社の経験から、インタビューする人がそれを適切に行う方法についての手がかりを持っていない可能性が十分にあります。そこで、彼らは一連の技術的な質問を準備し、そのスコアを計算して履歴書を作成します。ただし、これには多くの欠点があり、次の理由で実行しないでください。

  • あなたはポイントの知識を求めます。プログラマーがその領域で何かをやったことがない場合、彼/彼女はまだ優秀な同僚かもしれませんが、その特定の答えを知らないだけです。対照的に、誰かがインタビューの準備をして、その特定の質問に対する答えをネット上で見つけた場合、あなたは正しい答えを得るが、その人は実際のトピックについて全く手がかりを持たないかもしれない。

  • 人々は就職の面接で緊張しています。脳には、パニック状態にある場合、ロジックなどの上位レベルの多くの領域をシャットダウンするこの優れた機能があります。つまり、神経質になっていると、日常の状況で答えの質が得られない可能性があります。面接のようなストレスの多い状況に対処できる人もいれば、多くの人が対処できない人もいます。

  • 単一の正解を使用して、その特定の答えを見つけるスキルをテストします。これは、同僚が必要とする多くのスキルの1つですが、必要なスキルではありません。したがって、これらの質問の1つまたは2つで、その知識の領域をテストするのに十分なはずです。次に、他のスキルを照会する必要があります。問題解決の質問のみを含むインタビューでは、同じスキルを何度もテストします。

良いプログラミングタスクの質問とは何ですか?

これらの有名な「短いプログラムを書くことができますか?」という質問には、ほとんどのプログラマーがIDEの助けなしでは1行のコードを書くことができないという大きな問題があります。しかし、それは日常の作業状況ではまったく問題ではありません。なぜなら、プログラマは常にIDEを手伝ってくれるからです。そのため、「エラーを見つける」、「50行のコードを書く...」、または単純な質問でさえも考慮する必要があり、申請者は自分のツール(IDE、Google)を利用できないことを考慮します。

たとえば、Googleが私を助けてくれれば、基本的に1分以内にどんな質問にも答えることができますが、インターネットに接続できなければ、どうしようもないようです。私はそれを外部委託されたメモリと呼びます。それは私を邪魔する代わりに、本当に重要なことに焦点を当てるのに非常に役立ちます-下層の仕組みを理解する-他のすべてを調べることができるからです。しかし、ランダムなAPIの詳細については私に尋ねないでください。私はそれらを知らないので、私はそのためにGoogleを持っています。

とはいえ、良いプログラミングタスクの質問は、これが仕事の絶対的な要件でない限り、APIや特別なコーディングスキルを知ることに焦点を合わせるべきではありません。知識を得ることができるので、その人がすでに知っていることを尋ねるよりも、その人が知識を得るのがどれほど良いかを知る方が良いです。

プログラミングタスクの良い質問は、短くてシンプルで、わずか数行のコードですべての言語でコーディングできることです。特に-できる限り多くのことを教えてください。 、人がどのように働いて答えを見つけるかについて説明するがあります。例:

「整数の配列を取り、最初の整数が最後の整数の後にあるように並べ替え、他のすべてがそれに応じてシフトするように、選択した言語で関数を作成します。」

この時点で申請者が最初に尋ねる必要があるのは、「申し訳ありません...タスクを説明していただけますか?」です。プログラマーがこれまでに何をすべきかについて明確な説明を与えられていないからです。この後に説明が続きます。問題のコードは、オーバーフローを右側に追加して、配列の内容を左にシフトする必要があります。

このタスクは非常に単純なので、あらゆるレベルのプログラミングレベルを卒業した人は誰でも適切に答えられるはずです。これは、プログラマーがツールなしで作業しなければならず、神経質になると論理的に考える能力が低下することを考慮に入れています。ただし、単に左シフトが一般的な「左から右」の本能に反しており、人々が考えることを余儀なくされているため、質問の言葉の方法と人々のアプローチの方法から、人々がどのように問題を解決するかをまだ示しています二番目の。

この質問には多くの可能な答えがあります。そのため、ソリューションが実際に機能するかどうかではなく、コードの開発方法に注目することが重要な部分です。申請者はヌルをテストしますか?オーバーフローはどのように保存されますか?ループまたはmem-setが使用されていますか?申請者はどのようにコードの正確性を検証しますか?この簡単な質問は、その人がどのように働いているかについての伝記全体を教えてくれます。

一般的な知識の良い質問とは何ですか?

良い質問は簡単に答えられ、幅広い回答(いわゆる「未解決の質問」)が可能になり、短時間でできる限り応募者についてできる限り学ぶことができます。

例:

(C ++プログラマーに尋ねる):「C ++以外の言語は何ですか?」

これはエントリーレベルの質問であり、申請者は、質問されたトピックについて何も知らなければ、現時点で救済するチャンスがかなりあります。この時点で「いいえ」は、彼/彼女がすべて答えなければならないいくつかの質問で彼/彼女を苦しめることよりも優れています:「ごめん、私はそれについて何も知りません。」

さらに、まずその人が知っている他の言語を教えてくれます。さらに、その人がプログラミングの世界をより広く見たいと思うか、または単一の言語(したがって機能/技術)だけを持っている人がいるかどうかを学びます) 見る。

(その後、Javaを知っていると言ってみましょう):あなたの意見でC ++とJavaのトップ3の違いは何ですか?」

これは未解決の質問であり、多くの回答が得られるため、申請者は少なくとも3つを見つけるチャンスがあります。(個人的な意見)トップ3を要求すると、考えられる答えが制限されるだけでなく、優先度に基づいて並べ替えが行われます。それでも答えは簡単です(またはそうあるべきです)。

これは、さまざまなプログラミング言語に関する多くの詳細な知識をテストする簡単な質問です。それらのトピックの知識は本当にどれくらい深いのですか?これらの回答から、プログラミング言語の基礎となるメカニズムの知識と実際の理解について多くを知ることができます。その人がどれほど汚い詳細に費やしたか、または彼/彼女がさまざまなAPI関数をリンクし、それらの下で何が実際に発生するのか全くわからない場合。

このエントリーレベルの質問の概念とそれに続く単純で詳細な知識の質問は、他のほとんどのトピックでも使用できます。常にこのスキームで:救済の質問、確認の質問、詳細な質問。別の例(Javaインタビューから):

  1. 「マルチスレッド開発の経験をどのように評価しますか?」
  2. 「マルチスレッドアプリケーションを開発する際に考慮すべき上位3つの重要事項を挙げてください。」
  3. 「これらのアプリケーションの開発に役立つJava APIの3つのクラスに名前を付け、それらの用途を簡単に説明してください。」

これらの3つの質問は、ポイント知識とストレスレベルを考慮して答えるのが公平であると同時に、申請者がそれらのトピックについて本当に知っている技術的な質問よりも多くを教えてくれます。

そのため、次回誰かが20個のコーディング質問を続けて尋ねたとき、その人は基本的に誰かに適切にインタビューする方法がわからないことがわかります。;)


これは実際にinterviewにインタビューする方法に関する本当に良いアドバイスです。もっと多くの人がそれに続いてくれたら本当にいいのに。
エヴィカトス14年

5

警告:これは@MainMaの回答に対する(一種の)コメントとして書かれていますが、1)コメントに収まるには長すぎます、2)建設的な質問に対して多少異なる視点を追加しているので、それ自体が本当の回答です。

彼の答えで、@ MainMaは「.NET 4.5の新機能は何ですか?」と分類しています。「良い」質問として。

失礼ですが同意できません。彼が言いましたように、これはせいぜい平凡な質問だと思います。良い質問は、「今日あなたが書いたコードは、N年前に書いたコードとどう違うのですか?」(履歴書に記載されている経験年数よりも少ないNの値、できれば3から5程度)。

彼が言ったように、質問は暗記についてです。この候補者は、機能リストを完全に記憶していますか?権利により、Microsoftのリストを最も正確に引用した人が勝者になるはずです。

あなたが気にするべきは彼のプログラミングです。これは彼のコードにどのような影響を与えましたか?これらの機能のうち、彼が実際に使用しているのはどれですかですか?さらに重要なことは、どの新機能をいつ使用するか、古い機能で十分であるかどうかについて、適切な判断を示しているかどうかです。

「LINQ」と言えるだけで、候補者にとって実質的に何も役に立たなくなります。「LINQは、X、Y、Zの概念を明確かつ直接的に表現できるため、コードをはるかにコンパクトで読みやすいものにしてくれました。(または同様のもの)は、候補者、彼がどのような種類のコードを書くか、彼の判断、柔軟性などについて多くを教えてくれます。また、この人がどのように問題について考え、コードを書き、コードについて考えるかなどについてのフォローアップの質問のためのより多くの機会を与えます。最後に、これが実際にN年の経験を持つ候補者なのか、1年の経験を持つ人がN回繰り返される候補者なのかをよりよく理解できます。

要約:数年前の機能リストを引用できても役に立たず、実際に使用される可能性が高い候補についてはほとんど説明しません。プログラマーとしての候補者の進歩は、非常に興味深いものになる可能性が高いため、より直接質問する方がはるかに良いでしょう。


+1。候補者は、新しい機能のリストを列挙するのではなく、どの機能を使用し、その理由を説明することを期待しています。しかし、あなたの答えは説明していますが、私の答えはそれを十分に説明しません。
Arseni Mourzenko

@MainMa:それは私を驚かせません-だからこそ、私の答えで「彼が言いましたように」繰り返しました。
ジェリーCo

3

現実には、ほとんどの開発者が仕事で行う日常的なタスクの大部分は些細なことです。つまり、就職の面接で直面するいくつかの質問は現実には決してあなたに直面しないかもしれませんが、それはそれらの質問をする意味がないという意味ではありません。

あなたの会社にはオープンなポジションがあり、あなたは現在人々にインタビューしているとしましょう。既に20〜30人の開発者がキューにいます。それでは、そのポジションに最適な候補者をどのように選択しますか?そのジョブで実行しなければならない最も難しいタスクは、ファイルシステムからファイルを開き、データを1行ずつ読み取り、わずかに変更して元のファイルに戻すことです。

あなたはそれらを求めるとしているファイルを開くだろうか?答えの間に大きな違いは見られないに違いない。そのため、ファイルを開く方法のみを知っている開発者と、いかがわしいリアルタイムアプリケーションを開発できる方法を区別するソリューションを考え出す必要があります。そのようなアプリケーションを構築したくない場合でも、最高の候補者を雇いたいのです。

私たちの生活の他のことと同じように、もっと学びに行く必要があると気付く点がいくつかあります。プログラマーとして私にとって、リンクリストとは何かを知らない場合、文字通り、あなたはその特定のことを行って学ぶ必要があると感じるためにあなたの職業生活のそのポイントに実際に到達していないことを意味します。どうして?単に、そのレベルまでスキルを向上させる必要があるほど大きなプロジェクトに関与したことがないからです。あなたがエントリーレベルにいるなら、この特定の仕事に実際に仕事をしたことがないと言うことができますが、それでもあなたがそれを知っていれば、平均以上のカットに自分自身を置くのに十分な自発性があることを意味します少なくとも。


2

これらのタスクを実行するために必要なスキルはほとんど重要ではありません。質問に答えるアプローチとその後の対話で実証されたスキルが全体のポイントです。

開発者にインタビューするとき、私は(a)賢い(b)物事を成し遂げる(c)適合することを探します。スキル。インタビューでは、これらのボックスをチェックします。

私の好みは、申請者が書いたコードを読むことです。私は定型インタビューの質問は好きではありませんが、コードがなくても語ることができます。リストやコレクションよりもRAIIやIOC、またはIDisposableの実装について尋ねることを好みますが、技術的に十分なものであれば何でもかまいません。

インタビュアーの最悪の恐怖は、実際にコーディングについてあまり知らない人を雇うことです。偽造品を取り除くには、実務経験以外のことを話さなければなりません。


1

これらの質問は、プログラムできない人を選別するためのものです。プログラミングはできないが多くの雑学を知っている人が開発の仕事に応募することもあります。また、面白くて役に立つものを書くのは時間がかかりすぎます。


1

これらのスキルは、コンパイラー、ドライバーを作成し、OSカーネルで作業する必要があるジョブで使用される可能性があることがわかります。これら以外に、これらのスキルはどこで使用されますか?

検索エンジン、Webサーバー、Webブラウザー、ワードプロセッサ、スプレッドシート、画像エディター、描画プログラム、データベースサーバー、バイオインフォマティクス、取引プログラム、ゲーム、物理シミュレーターなどの記述はどうですか。

ソフトウェアジョブの大部分は、データベースからデータを取得し、画面に表示し、編集し、画面から削除して、データベースに戻すことを伴うことを認めます。ただし、それでも、最終的には、プラットフォームの組み込み機能では制約を満たせないアプリケーションに遭遇する可能性があります。その時点で、あきらめるか、ツールボックスのアルゴリズムとデータ構造に手を伸ばして、問題の解決に挑戦することができます。


0

理論的なオブジェクトは、平均的なツリー/グラフ/リストの実装が何であるかを知り、ランダムなトラバーサル問題の解決方法を知っているはずなので、便宜上使用されますが、これらの質問は理論的なオブジェクトに関するものではありません。

彼らは、抽象化されたモデルを使用して、抽象的な問題を理解し、あらゆる種類のアルゴリズムを使用してそれを解決できるようにすることです。これは純粋な開発スキルなので、確かに重要です。これが、これらの質問が理にかなっている理由であり、正確な実生活の状況であると想定されているからではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.