開発者の地位について自然科学者にインタビューする方法は?[閉まっている]


30

元の質問

私はすでに私の会社のためにいくつかのインタビューを行いました。ほとんどは開発者のコ​​ンピューター科学者でしたが、テスターとプロジェクトマネージャーもいました。今、R&D部門内の研究グループの空きを埋める必要があります(補足:「研究」とは、大学、他社、研究センターと一緒に研究プロジェクトのソフトウェアを使用して、専門分野/市場ニッチの問題を解決しようとすることを意味しますそれはコンピューターサイエンスの研究ではなく、P = NPの問題を解決するつもりはありません)。

今、私たちは化学の修士号(彼の履歴書にも多くの物理学を持っている)を持っている人を招待しました。私はすでに地元の大学のキャリア日で彼と約30分話をしました、そして、彼が賢いことは間違いありません。また、彼のマークは優れており、彼は際立って卒業しました。彼の理学士号のために、彼はMathematicaでプログラミングを習得する必要があり、彼はプログラミングが大好きだったと信じて信じていました。また、彼は、理学修士論文のためにMathematicaに実装された彼自身のソフトウェアを使用して理解できないと思われる物理化学の問題を解決しました。GUIと8,000 LoCの注目すべきサイズが含まれています。彼は私たちの研究グループでやっていることに非常に惹かれているようで、正直なところ、私たちのような中小企業が良い人を得るのは非常に難しいです。また、プロジェクトの提案、レポートの作成、プレゼンテーションなどを支援してくれるので、彼を雇うことに非常に興味があります。彼もおそらく私たちのチームに合うでしょう。

残っている唯一の質問は、彼がプロジェクトでソフトウェア実装を行うために必要なプログラミングスキルを習得できるかどうかを確認するにはどうすればよいでしょうか?

もちろん、私は彼にそれが何であるかを尋ねます。それは彼がプログラミングについて魅力的だということです。また、彼が自然科学ソフトウェアをどのように作成し、どのように構造化したのかを尋ねます。彼がどのようにして彼が必要とするソフトウェア開発に関するスキルと情報を取得したかについて尋ねます。しかし、もっと質問できることはありますか?より具体的な何かでしょうか?彼にMathematicaソリューションを説明してもらえますか?

明確にするために、私は特定の言語または技術スタックの知識を探していません。私たちは製品開発の.NETショップですが、研究プロジェクトのために自由に選択したいと思います。だから、私はメタコンピテンスが実際に必要なものを何でも学習できることに興味があります。

私は能力をチェックするデフォルトの方法があれば、私は本当に好き知っているので、この質問は釈明し、オープンエンドでないことを願う得る仕事にさらにプログラミングのスキルが。不明な点がある場合は、コメントをお寄せください。質問を改善させてください。

2011-12-01までの回答を反映するように更新

受け入れた回答とその理由

答えてくれてありがとう、それらのほとんどは非常に役立つので、私はたくさん賛成しました!けれどもトム・スクワイアーズの答えが最も多くの票を得た、私は受け入れるつもり王子グーラッシュによって与えられた答えを。もちろん、トムは客観的には正しいのですが、プリンスの答えは私にとってより有益であり、私はこれが答えを受け入れる基準であるというFAQを再確認しました。

インタビュー中に彼に尋ねる内容

  • Chris Burt-Brownが言及したThe Camel Has Two Humpsの 例のようないくつかの簡単な割り当てを彼に説明させます

  • 多分グラフィカルな表記法で、より高度な制御フローを説明するように彼にお願いします。

  • 数学の例を使用して、再帰の理解を確認します。

  • 自然言語で彼が選んだアルゴリズムを彼に説明させます。

  • 彼に彼のMathematicaソリューションを説明させてください。特に、彼の手順モデル、ツールの使用法、一般的なコードとソフトウェアの構造化、および異なる抽象化レイヤーを求めます。

  • 彼の動機を確認するために、私は彼のソフトウェア開発の魅力を求めます。

  • 彼がエンタープライズソフトウェア開発について学ぶために必要なものを知っているかどうか尋ねます。特に、私は彼の修士号だけで働いた後、彼がこれについて多くを知らないことを期待するので、議論をチーム、ペアプログラミング、TDDで働く方向に変えたいと思います。

長いインタビューになりそうですね;)

インタビュー後の更新2011-12-09

再びあなたの良い答えに感謝します。彼は色とりどりのインタビューに合格しました。応募者にこれほど満足したことはありませんでした。彼のMathematicaソリューションは非常にうまく構成されているようです。彼は高階関数をどこで使用したかを説明できましたが、これらがこのように参照されていることを知りませんでした。The Camel Has Two Humpsから簡単な割り当てと制御フローに加えて、数学ベースの再帰の質問に答えてくれました。彼がいくつかのアルゴリズムを説明していたとき、非線形フィッティングについて多くのことを学びました;)また、彼はもちろん、彼が今まで知らないプロのソフトウェア開発について学ぶことができることを保証することはできないと正直に言いました。しかし彼は、自分でも常に新しい概念を学ぶのが得意であり、ソフトウェア開発に本当に興味があると信じています。彼はまた、プロジェクトの技術スタックを要求しました。彼は最初に適用され、自宅でそれを見ることができました。彼はペアプログラミングとチームワークにも興味がありました。今、私は雇用契約が締結されることを願っています。


9
企業が使用しているテクノロジーに知識のない人を喜んで雇うことは素晴らしいことです。私は自分のキャリアのためにやったことをやる前にあなたの会社を見つけたいと思っています!
NoChance

Emmad:それが私が説明しようとしたものであり、「メタコンピテンス」で意味したものです。必要なときにScala / Liftを学ぶことができない(または意欲がない)優秀なC#プログラマーを雇ったとき、会社の利益はどこにありますか?正直に言うと、実際にドイツで良い人を獲得するのは非常に難しいです。特に、あなたが私たちのようなトレンディな大都市に居ない中小企業の場合。
サイラス

2
単純な制御フロー、および特定の言語でのその他の非常に基本的な技術について、少し研究するように彼に依頼してください。それから彼が入ったら、それらを使って問題を解決するように彼に頼みます。
ダレンヤング

2
私は、現在のポジションで数人の科学者に転向した開発者と協力しました。私見では、開発の問題解決の面で非常に優れている傾向があり、優れたオブジェクト指向の原則で保守可能なコードを書くのはそれほど優れていません。彼に「迅速で汚い」ツールを書く以上のことをしてほしいなら、彼と一緒に働く伝統的な開発者が必要かもしれません。
ジョーダンベントレー

2
私はほとんどこの男です。計算物理学/化学のバックグラウンドがあり、多くの(時には複雑で成功する)サイドプロジェクトと共に、多くの計算モデル/コードを開発しました。プロの開発環境で私がしなければならなかった主な調整は、開発方法論とチームでの作業に関係していました。彼がソフトウェアで協力するために必要なことを理解していることを確認してください。彼があなたが使用している方法(TTD / contubuous integrationのようなもの)を理解していることと、それらの操作が彼の出力にとって意味することを確認してください。
drxzcl

回答:


21

数年前に物理学の博士号を取得してソフトウェア開発者として始めたが、コーディングの経験はほとんどない(Fortranの学部課程に相当する)ため、ここで非常に偏見があります。明らかにそれはあなたが開発しているソフトウェアの種類に依存しますが、私の意見では、コーディングスキルは中途半端な科学的/問題解決スキルを持つ人なら誰でも簡単に習得できると考えています。私は、コンピューターサイエンスを学んだ生涯プログラマーに対するin辱としては意図していません。もちろん、マスターするために真剣なトレーニングを受ける技術的側面があります(たとえば、マルチスレッドと非常に低レベルのアーキテクチャ)。埋めようとしているポジションではありません。

私の現在の位置に対する技術面接では、かなり複雑な数学的問題に直面し、それを解決するプログラムを設計するように頼まれました。重点は、実装されれば問題を解決するアルゴリズムを書くことにありました。私は自分の解決策を説明するために単語だけを使用して答えを書くことができましたが、希望する場合は選択した言語でいくつかのコードを書くことができました。このテストは、問題解決能力と、「プログラマーのように考える」ことができるかどうかに関するものでした。明らかに、同等の能力を持つ候補者がいて、より直接的なコーディング経験があれば、彼はトップに出ていただろうが、それは私にとって十分に公平だと思われる。

肝心なのは、あなたが彼を雇うスキルのために候補者を調べてください、あなたが彼が達成することを望む理想のためではありません。


2
元科学者であるプログラマーと仕事をしたことは、彼らが無知であるのは低レベルの詳細だけでなく、非常に高レベルのことでもあります。もちろんYMMVですが、一般的な深さの欠如が問題です。すべての仕事にそれが必要なわけではありません…
ドナルフェローズ

1
@DonalFellows:特定のトレーニングを受けていない開発者が幅広い知識と深い知識の両方を欠いている可能性があることは疑いません。それは、役割と、提供される社内トレーニングの量に依存します。
プリンスグーラッシュ

1
@DonalFellowsは:... OPはなく、彼の現在の知識を学ぶための申請者の能力を決定することに関心があることを与えられた

2
@DonalFellows:私は、OPは、申請者の決定に興味を持っていることを考えると、前に言ったように、ではない彼の現在の知識を学習する機能を ...

2
@Mark Ba​​nnister:優秀な科学者は学ぶことができますが、ここでは有用な質問ではありません。科学者が彼または彼女が知る必要があることを学ぶならば、より役に立つ質問はそうでしょう。それは性格の問題です。科学者は、ソフトウェアエンジニアリングについて知らないことを知っていますか?
デヴィッドソーンリー

37

彼が必要なプログラミングスキルを習得するかどうかを確認するにはどうすればよいですか

できません。彼がまだ持っていないスキルを正確にテストすることは不可能です。あなたは彼の知性と態度に基づいて判断を下さなければなりません。最終的には常にリスクになります。

個人的な経験から、科学からプログラミングに移行することは非常に可能です。どちらも基本的には、複雑なパズルを解くために脳を使用することに要約されます。


8
+1「両者は基本的に、脳を使って複雑なパズルを解くことに要約されます」
joshin4colours

1
どうしたの?天国のために男を雇う!プログラマは単なるハイテク旋盤オペレータであることを忘れないでください。彼は熱心で、頭が良く、多くの化学を知っています。あなたがいる場合はありません、そして、次回彼を雇うあなたは今あなたがしなかったこと、あなたのお尻を蹴ることになりますから、誰か年を雇うために行きます。
ピートウィルソン

1
CSの卒業生が13歳くらいの頃からプログラミングをしていることは珍しくありません。彼らが大学に入学する頃には、ほとんどの規模ですでに中級プログラマーになっています。それは彼らが学位から何も学ばなかったことを意味しません。プログラミングは簡単です...コンピュータサイエンス/ソフトエンジニアリングはそうではありません。これは、彼らが貢献して価値あるメンバーになることができないということではありません...しかし、それは彼らがおそらく同じCS基盤を持たないことを意味します。
user606723

6

この論文を検証する二次資料はないため、保証することはできませんが、

ラクダには2つのこぶがあり
ますhttp://www.eis.mdx.ac.uk/research/PhDArea/saeed/paper1.pdf

プログラミング適性のテストを見つけました。詳細を示します。学生がプログラミング言語と非常に高い精度で接触する前であっても、数週間の暴露後に同じ機器で非常に正確にテストすることで、成功または失敗を予測できます。


3
論文を読んだ後、私は少し前にこの研究についてもっと読んだことを覚えていると信じています。ただ、再びそれを見つけることができません:(編集を:それはされたコーディングホラーで述べた、リマインダーに感謝を
サイラス

あなたは、私は約コーディングホラーリンク@Silasとの回答であった、それに私を打つ追加
Izkata

5

彼が必要なプログラミングスキルを習得するかどうかを確認するにはどうすればよいですか?

とても簡単です。彼にスキルを与えます。

さて、それはあまり満足のいく答えではありませんが、詳しく説明させてください。

私は土木工学で3年間働いた後、プログラミングを始めました。それは応用物理学と数学のかなり堅実な背景です。CS学位が与える理論的な数学ではありませんが、何か価値があります。私がエンジニアリングの経験から引き出したのは、問題解決のしっかりした背景でした。数学のバックグラウンドを持つ人は誰でも、問題の解決策について話すとき、優雅さの概念を高く評価しています。彼らはすでに6ページのチキンスクラッチを取り、それを提出のためにエレガントなハーフページプルーフに変換するのに時間を費やしていたので、リファクタリングの教育を受けています。

物理学を学んだ人は誰でも、基本的なフレームワークからのソリューションを組み合わせる直感的なアプローチを開発しました。

そして、これらのスキル以外のプログラミングとは何ですか?-言語、イディオム、パターン、フレームワーク。これらは簡単に教えることができます。解決できない問題です。これらの領域で指示を提供できる場合、優れた開発者になります。

質問は、「彼がスピードを上げるのをどれくらい待つことができますか?」

tl; dr; タイピングを教えることができます。賢く教えることはできません。


+1、とてもいい答え。人々が職業についてもっと開かれた意見を持っていればいいのに。学ぶことを学ぶことは重要なスキルIMOです。
K.ステフ

2

私はマテリアルサイエンスの理学士号を取得していますが、ソフトウェア開発のすべてのキャリアに携わってきました。

あなたの候補者はおそらく基本的なプログラミングとアルゴリズムに問題がないことをお勧めしますが、より「工学的な」タイプの要件に関しては、いくらかのガイダンスが必要かもしれません。つまり、500行の関数を持たず、効率的にテストし、効率的に設計することで、彼のコードを適切に構造化することを意味します...

これのほとんどは教えることができますが、これを確認するためにいくつかの質問を設計することができます。


2

また、彼は物理化学の問題を解決しましたが、これはMathematicaで実装された彼自身のソフトウェアを使用して、MScの論文ではおそらく理解できないでしょう。GUIと8,000 LoCの注目すべきサイズが含まれています。

候補者はすでにプログラミングの方法を知っているように思えますが、専任の開発者ほど多くの経験はないかもしれませんが、完了した実証済みのプロジェクトがあり、それを完了するには重要な作業が必要です。そのため、ショップで使用している言語とは異なる言語を使用する開発者と同じ方法で候補者にインタビューすることができます。

  • コアコンピテンシー -候補者は、基本的なプログラムロジック、フロー制御、基本的なデータ構造を理解していますか。
  • 高度な能力 -候補者はオブジェクト指向プログラミングと設計、高度なデータ構造、インターフェース、抽象クラスなどを理解していますか
  • 問題解決スキル -問題が与えられた場合、候補者は確実な問題解決スキルを示しますか。

Mathematicaが使用する言語はかなり高度であり、Mathematica用のソフトウェアを書くのが得意な人は他の分野でかなり能力があるはずなので、その経験に焦点を当て、それをコーディング経験の基礎として使用することはインタビューにアプローチする良い方法です。


2

航空宇宙工学の卒業生としてプログラマーになったといえば、自然科学からプログラミングに飛躍することは確かに可能です。ただし、問題を解決できることは、コードを書く能力と常に相関するとは限らないことに注意してください。あなたはこれを実現しているようで、それは良いことです。

私にとって、彼が把握していることを確認するための最も重要な概念は、制御フロー再帰(および、一般にこのサブセットとしてのループ)です。候補者を雇用する前に、明らかに非常に知的な人でも、問題を解決するために平易な言葉のアルゴリズムを書くことができることを確認してください。彼がその平易な言葉のアルゴリズムを利用して、少なくとも擬似コードに変換できることを確認してください。彼が少なくともポリモーフィズムの概念を理解できるかどうかを調べることもできますが、この状況でこれが必要な知識であるかどうかはわかりません。

また、Mathematica / MatLab / Whateverの科学の問題を解決する能力に注意してください。彼が良いコードを書くことができるという意味ではありません。それは、彼が基本的な(時には非常に基本的な)プログラミングの原則、通常if / elseステートメントを適用できることを意味します。一般的に、優れたプログラマーになることを学ぶには、この段階で誰かに個人的および雇用主の両方のコミットメントがかかります。警告:私は、紙の袋から抜け出す方法をプログラムできず、基本的な言語の基礎を正直に理解できなかった優秀なエンジニアである非常に知的な人々に会いました。

個人的体験

私は学校を卒業し、工学の学位と少しのプログラミング経験がありました。私は非常に少量のC、かなりのMatLabとVB + Accessを使っていました。VB.NETショップのプログラマーとして本当に役立つようになるには、約3か月の勉強が必要でした。完全に習熟するまでにさらに9か月かかりました。ただし、かなりの自信を持って、私の問題解決スキルは、仕事で出会った他のプログラマの99%よりも優れていると言えます。私の雇用主は、私を彼らのより価値ある資産の1つと常に考えてきました。

結論

それはリスク/報酬の命題ですが、多くの場合、純粋な問題解決スキルを持っている人を引き受けることは、彼らがプログラミングの概念を学ぶことができ、あなたの両方が彼のプログラミングの拡大に時間を費やすことを喜んでいる限り、長い目で見合うことができます知識。ただし、仕事を提供する前に、プログラミングの基礎について少なくとも基本的な理解が必要であると固く信じています。私の経験では、この時点に達したら、さらに先へ進むことができます。


お返事をありがとうございます。それは私の考えのほとんどを確認します。IMOが優れたコードを書くことができない開発者やアーキテクトとして何年も働いている多くのコンピューター科学者に会ったことを付け加えたいと思います。プログラミングに関する技術記事を書いている人もいます。結論:優れたプログラムを作成するには、多くの本を読んだり、さまざまな言語を習得したりする必要があります。
サイラス

1

彼がアルゴリズムとプログラミングのロジックに興味があるかどうかを確認するために、基本的なアルゴリズムの質問と基本から始めます。アルゴリズムが何であるかを理解できる場合、最終的には具体的なことを行うために必要なスキルを開発できます。


1

彼が私たちのプロジェクトでソフトウェアの実装を行うために必要なプログラミングスキルを習得できるかどうかを確認するにはどうすればよいですか?これは仕事の重要な部分になるからです

正直なところ、1〜2時間のインタビューではこの情報を入手できないと確信しています。彼にC#(あまり技術的ではないもの)でプログラミングを割り当て、1〜2週間で解決します。Mathematicaでプログラミングをすでに学んでいる人にとって、言語の基礎を学ぶのに十分な時間であるはずです。次に、彼とコードレビューを行い、そのベースを決定します。


1

あなたは見てかもしれない科学的な環境でプログラミングするためのプラクティス?(Stack Overflowで)自然科学のプログラミング文化がどのようなものかを理解するために。そうすれば、あなたは彼の準備を彼の仲間の準備と比較することができます。

その点については、他の方法があることに気付いているかどうかを知るために、彼が慣れ親しんでいるプログラミング手法を説明するように頼むかもしれません。

私のビジネスには多くの「優秀なプログラマー」がいます。その資格は頭の中で十分な状態を保持して作業コードをまとめることができますが、その作業は構造化されておらず保守が難しい傾向があります。一般的に教えられますが、...彼ら教えられなければなりません。


0

私が働いている別の部門では、標準テストのバリエーションを使用しています。最初のタスクは、文字列内の単語を元に戻すことです。次に、そのコードを使用して、文字列内の単語の順序を逆にします。プログラミング言語を使用する代わりに、候補者は紙の上でアルゴリズムを設計し、スクラブルボードを使用してそれらを実行します。


0

物理学から何かを計算するためのアルゴリズムを(自然言語を使用して)記述してください。単純な式よりも少し複雑なもので、彼の計算がオブジェクトにカプセル化されているのをどのように見るか尋ねます(OOPの知識は不要で、オブジェクトに対する期待を説明できます)。このようにして、彼の論理的思考を見ることができます。これは、プログラミングスキルよりも重要です。


0

第一に、彼らはおそらく非常に賢いので、最悪の場合のシナリオでは、指導のある優れたプログラマーになることを学ぶことができます。しかし、あなたがそれらに飛び込んで、始めからまともなプログラマになる必要がある場合は、彼らが書いたサンプルコードを送ってもらう。

それは1つまたは2つの巨大な多目的機能ですか、それとも適切な抽象化レベルで機能をカプセル化しましたか?マジックナンバーは全体にわたってハードコードされていますか?コードは乾燥していますか?それらは変数に適切な名前を付けましたか、それともすべてが判読できない略語または単一文字の変数ですか?あなたは主に彼らのコードのロジックに従うことができますか?彼らはオブジェクト指向の基本を理解していますか?

バージョン管理に何を使用しているかを尋ねます(git / hg / svn / cvs / bzrなど)。彼らはコードのプロファイリングやデバッガーの使用を行ったことがありますか?

彼らがこのテストに失敗し、最初から優れたコーダーが必要な場合は、この人をスキップしてください。それ以外の場合は、それらを雇い、一般的なプログラミング/ CSの本に加えて、ソフトウェアエンジニアリングの本(コードコンプリートなど)を読むことを提案します。

(記録のために、私は物理科学者でもプログラマーになりました。)


-3

彼はまだ大学にいるか、最近になって卒業したばかりなので、勉強に慣れています。彼にデザインパターンの本を読んで理解してもらい、1か月後(または1か月)にトピックについて徹底的に話し合います。(私は思う)これは彼の能力について多くのことを伝えることができます(難しいもの(だけでなく)だけでなく、新しい概念の把握、その使用の理解、賛否両論などを扱う方法も)。ただし、1か月かかります。


8
-1質問は彼にインタビューする方法についてであり、彼がポジションを欲しがらないようにする方法ではなかった。
ピーターテイラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.