
プログラマーの力量を見極める質問 162
ストーリー by hylom
優れたプログラマが選べるほどいればいいんだけど 部門より
優れたプログラマが選べるほどいればいいんだけど 部門より
あるAnonymous Coward 曰く、
ZDNet Japanの「プログラマーの力量を見極める--面接官になったら尋ねるべき質問実例集」という記事が話題になっている。
プログラマーを採用する場合、実際のプログラミング能力を推量するのは難しい。そのため、この記事では「開発者を評価するうえでの優れた質問を紹介するとともに、なぜそれらが優れているのかを説明している」としている。
詳細は記事を参照してほしいが、計算機科学に関する基礎的な知識を問うものや思考問題、ホワイトボードに実際にその場で簡単なコードを書いてもらう、コードを渡してレビューしてもらう、履歴書の経験について深く掘り下げて質問する、などが挙げられている。
いっぽうはてなブックマークでは「挙げられている問題の解答が分からない」といった旨のコメントが多数付けられている。
ブラック会社の力量を見極める--面接官への尋ねるべき質問実例集 (スコア:5, 興味深い)
・「プログラマー」と「コーダー」の違いを説明してください
・「委任契約」と「請負契約」の違いは何ですか?労働基準法や下請法において、これらにはどのような違いが存在するのかを説明してください。
・「うたっておどれるSE」とは何かを説明してください。
・「悲観的デスマーチ」と「楽観的デスマーチ」を比較し、違いを明確に述べてください。
これらの質問のうち、最初の2つに答えられない会社は、どう考えても「ブラック会社」ということになる。
また残り2つの質問は、「開発経験者がプロマネになれる会社」であれば答えられるはずである。
Re:ブラック会社の力量を見極める--面接官への尋ねるべき質問実例集 (スコア:1, すばらしい洞察)
まあ、そういう形で質問すれば、相手がブラックで無くとも採用は無くなる可能性が増える上、
ブラック企業の場合はサラリと流されてしまう可能性も。
本当に怖いブラック企業は理解していないが故にブラックなんじゃない。
判っていてブラックで有り続けているのだから。
おもしろおかしい+1 (スコア:1)
現時点で「興味深い=1, 参考になる=1」がついてるけど、
これは元記事をひねったギャグだろ
Re:ブラック会社の力量を見極める--面接官への尋ねるべき質問実例集 (スコア:1)
プログラマーの力量を隠し通す--面接になったら答えるべき回答実例集 (スコア:5, おもしろおかしい)
コンピュータ科学に関する基礎的な質問
* 「等値」と「等価」の違いを説明してください
答え:「直」と「西」が違う
* 「値渡し」と「参照渡し」の違いは何ですか?
オブジェクト指向システムや手続き型システムにおいて、
これらにはどのような違いが存在するのかを説明してください。
答え:渡し舟で、船頭さんの言いなりの値段で料金を払うのが「値渡し」
他の舟の料金も調べて、交渉の余地があるのが「参照渡し」
「参照渡し」の方が料金が安くなる傾向があるが、
過度な交渉はトラブルの元になる場合があるので、注意が必要。
* 「ポリモーフィズム」とは何かを説明してください。
答え:ポリエチレンで作られた毛布を、アメリカでは「ポリモーフ」と呼んでおり、
眠るときには、その「ポリモーフ」を使おうと主張する健康法。
* 「悲観的ロック」と「楽観的ロック」を比較し、違いを明確に述べてください。
答え:騒音を撒き散らし、やたらと陰々滅々な歌詞をがなるのが「悲観的ロック」
'50-'60年代初頭の、まだメロディの残存があったのが「楽観的ロック」
プレスリーの死去と共に、楽観的ロックは終焉を迎えてしまった。
思考問題
* 自分の好きなようにできるとすれば、どのような鶏をデザインしますか?
そしてその理由は何ですか?
答え:そもそも、鶏をデザインする必要が無い
ホワイトボードプログラミング
* 数値Xのフィボナッチ数を計算する。
答え:充分に多くのフィボナッチ数を昇順に収めた配列の
X番目の要素を返すプログラムを作る。
* 指定された数値Xが素数であるかどうかを判定する。
答え:Xが偶数ならfalse、奇数ならtrueを返すプログラムを作る
(奇数には、『素数であるか、ないか』という二通りの状態しかないから、
50%の確率で正解しているはずだ)
* ループを使わずに配列の順序を逆にする。
答え:順次、配列を画面に表示して行ってオペレーターにメモさせておき、
メモした値を逆順に入力するよう促すダイアログを出す。
* Fizz Buzz(関連英文ブログ)
答え:404 blog not foundをぐぐってコピペ
コードのレビュー
答え:レビューに着ていく服が無い
「よくある質問」
* 現在の仕事においてあなたが今までに直面した最も困難なことは何ですか?
答え:今、求職中なんです
あなたの最も大きな弱点は何だと思いますか?
答え:どんな馬鹿げた質問にも、真面目に答えを見出そうとしてしまうんです
経験をじっくり吟味する
Scully:あなたの履歴書には、CP/Mシステムの新規開発において
重要な役割を果たしたと書かれていますが、
そのことについてもう少し詳しく説明してもらえますか。
Mulder:その開発は、EDとDUMPを使用したアプリケーションのものであり、
開発言語はWhitesmithでした。
Scully:あなたはその開発においてどのような役割を果たしたのでしょうか?
Mulder:私はデータアクセス層とビジネスロジックを担当し、
ユーザーインターフェースとの連携部分を実装するために
デザイナーの役割も兼業していました。
それと、使い方を理解できないユーザのために、サポートもやってました。
あとは、ダイレクトメールを送ったり、
セールスのためにショップをドサ廻りしたり、それから、それから ……
Scully:モルダー。あなた、疲れてるのよ。
結論
私には力量は無いみたいだ。
Re:プログラマーの力量を隠し通す--面接になったら答えるべき回答実例集 (スコア:2)
> * ループを使わずに配列の順序を逆にする。
python では、
>>> a = 'abcdefghijklmnopqrstuvwxyz'
>>> a[-1:0:-1]
'zyxwvutsrqponmlkjihgfedcb'
こうなりますが、そういう答えではないですよね。
# 'a' が出てこない!どーすりゃいいんだ。
>>> a[-1:-27:-1]
'zyxwvutsrqponmlkjihgfedcba'
こうか。
よくわからん問題だなぁ (スコア:2)
ベタ打ち以外はアセンブラに落としたらどこかループになるんでしょうけど・・・
単に再帰呼び出ししたらいいのかと思ったのですが、題意がよく見えない。
・・・はっ!これは読解力を問う問題なのか!?
Re:プログラマーの力量を隠し通す--面接になったら答えるべき回答実例集 (スコア:2)
いわゆる「ネタにマジレス」ですけど、素数と合成数の数は同じでしょう。
# だから、確率1/2でfalseを返せばOK!
Re:おふとぴ(Re:プログラマーの力量を隠し通す--面接になったら答えるべき回答実例集 (スコア:2)
# で、でもっ…経験則では、サイコロ振った(1D6)ら確率1/2で素数が出たんです!(><)
凄くオフトピだけど (スコア:5, 興味深い)
前に契約社員(3ヶ月限定)でプログラマーを募集したんだよ
面接に巫女服着てきた女性(やたら美人)が居て、他の社員が仕掛けたドッキリか、あるいはこの人に遊ばれてるのか、と凄く悩んだ。
あと能力的には問題なさげだけど、面接にそういう服装で来るような人は大丈夫なのだろうか、とかね。
結果的に(他に能力的に十分な人が居なかったのもあり)採用したんだ。
プログラマーとしては凄く優秀だった、らしい。現場の人から聞いただけだけど。
♯その人の採用直後に大阪にとばされたのでAC
♯仕事しているところを見たかった……
Re:凄くオフトピだけど (スコア:5, 参考になる)
つ参考 [srad.jp]
仕事が出来て美人でしかも巫女服が似合うなんて最高じゃないか!
服装や宗教で差別するなんてどうかしてると思うんだぜ?
#・・・男だったら幾ら美人で似合ってても常識を疑うけど私は採用する気がスル
Re:凄くオフトピだけど (スコア:5, 興味深い)
元ACです。
あまり詳しくは書けないけど、神社関係者とは言ってました。暇な時期だけ出稼ぎみたいな感じだと。
本当なのかは知らんけど。
今さっき、その女性と現場で会った人と飲んできて、話題に出したんだけど、技術者としては優秀だったそうな。ただ、社員食堂でアジフライにタバスコかけてるのに気がつかずに食べてのたうち回ったり、LANケーブルで転んでキーボードに変な飲み物をかけたり、巫女服の袖をシュレッダーに喰われたりと、色々騒がしかったそうで。
上の話を聞いて少し萌えたことは正直に認めよう!
でも俺はメイドのほうがうわぁ何をするやめr
Re:凄くオフトピだけど (スコア:2, すばらしい洞察)
#1727624 [srad.jp]の参考の人は「NOTどじっこ。」なので別人ということか…いやしかし自覚が無くてこそドジッ娘なのだとも言えるし…
いずれにしても、世の中にはすばらしい女性がいることを知って生きる希望が湧いて来た。ありがとう。>元コメ主
#俺には縁が無い気もするが
Re:凄くオフトピだけど (スコア:3, すばらしい洞察)
ロック (スコア:3, おもしろおかしい)
「楽観的ロック」:今度はどの雑誌に連載されるのかな。わくわく。
個人的には無縁な感じ (スコア:2, すばらしい洞察)
時間に余裕があって面接する相手は無限にいて、ハードルを高くした所で幾らでも代わりがいる
環境での話ですよね?
どうにもならんのは排除せざるを得ないだろうけど、あんまりハードルを上げた所で「見合う力
量の人間はいませんでした」で終わりそうな予感。
Re:個人的には無縁な感じ (スコア:3, 参考になる)
オーバースペックくれくれ厨の会社が多そうですよね。
googleのように、全く新しいコンセプトのサービスを開発する会社なら
知能指数の高い研究者のような人を取る必要があるかもしれませんが
帳票設計のようなものは、どぶ板サービス業ですから
頭の良い人にはつとまりません。
Re:個人的には無縁な感じ (スコア:1, 参考になる)
しかしプログラマという仕事は平凡な人より優れた人が10倍働ける可能性のある業種だから、とにかく数を揃えるよりも精鋭を揃えて5倍給料を払った方がいいかも知れない。
年収1億稼げる(かも知れない)仕事術 [hatena.ne.jp]
でも正社員採用:「なし」47% 帝国データ調査開始以来最悪--10年度 [mainichi.jp]というのを見ると、平凡な人を10人雇う会社の方が社会に貢献している気もする。
Re:個人的には無縁な感じ (スコア:2)
みたいな状況になったら、同じような人を一人用意するとか
あるいは並みの人10人体制で引き継ぐとかいうことは
なかなか難しいですよね。そういう話じゃないんですか?
Re:個人的には無縁な感じ (スコア:1, すばらしい洞察)
それをやらずに奴隷商人を始めたから今のようになった
気がつけば育てられる者がほとんどいなくなっていた
仕事が外国に流出するのも当然の結果
Re:個人的には無縁な感じ (スコア:2, すばらしい洞察)
>マンパワーか質か、どちらを求める局面か判断するのはなかなか難しいですよね、
質よりもマンパワーが要求される局面における仕事は、
中長期的には機械化・自動化される対象となるべきだと思います。
あなたのそばにも居ませんか?チケットの進捗率を Excel の変なガントチャートに
書き写すことを仕事にしてる人。
Re:個人的には無縁な感じ (スコア:1)
3倍の速度でデバッグできますか?
Re:個人的には無縁な感じ (スコア:2)
デバッグのうち大半がツール作成とツールを使ったデータ作成だとしたら、
3倍位のスピードは出るんじゃなかろうか。まあ、それも単体~連結とそれ以降の一部までだけど。
それ以降のテストは同一人物はやらないとか、あとはそういう話術で乗り切ってくれ・・・でいいのかな?
Re:個人的には無縁な感じ (スコア:2)
テストじゃなくてバグを潰すと言うことであればできるんじゃないの?
経験値積むと自分のも他人のもバグ見つけるのは早くなる。
Re:個人的には無縁な感じ (スコア:2)
初心者と熟練者では、
コードを入力する速度は3倍違う程度だが、
デバッグする速度は10倍以上違う。
テストの網羅度などでもしかり。
初心者は往々にしてテストもデバッグも不可能なコードを書くので、
それらが永遠に終わらなくなることさえある。
Re:個人的には無縁な感じ (スコア:2, 参考になる)
その先輩、僕にそう言って自慢した20数年後、40代で学部長になりました。
Re:個人的には無縁な感じ (スコア:2)
そーゆー人のばやい、バグの数が1乃至3桁少ない(、しかも大半が平易なケアレスミスで「バグらしい」バグは少数な)ので、デバッグの速さは無視できるかと。
Re:個人的には無縁な感じ (スコア:2, すばらしい洞察)
というか、本質的には実際に一緒に仕事する立場の人間が面接をするべきって事なんじゃないのかなコレ
チーム内で共通の単語使って会話したいし、これぐらいは知ってて欲しいよなーっていう。
# そりゃ当然チームによって違うだろうし。
人事が「なんとなく出来そうだから!履歴書にキミの言ってた単語もちりばめられてたし!」っていうのを止めよう
開発者も採用に積極的に関わろうって提言じゃないのかな:-)
Re:個人的には無縁な感じ (スコア:2, すばらしい洞察)
求人と実態があまりにもかけ離れてるブラック企業なので、
入った人が次々に辞めてるのかもしれませんよ。
Re:個人的には無縁な感じ (スコア:2)
| …よりよい人材を選ぶことができる…
本邦の場合(コンプライアンス的には)解雇条件が厳しいので、巨大企業以外ではこれ、即ち「絶対に外れを掴まない」ことが基本中の基本と思います。
汎用的な力量が重視されるのか? (スコア:2)
もっと局所的な力量が必要で
例えば、会社で蓄積されているライブラリを
上手く組み合わせる能力と根気の方が重要ではないかと。
俺なら、30分の捜し物競争。
もちろん鬼も出ます。
Re:汎用的な力量が重視されるのか? (スコア:2)
社内発掘・考古学は有益ですよ。
インタビューの方が良い場合もありますけど
物証から入っていく方が
効率が良い場合があります。
企業が欲しい人材 (スコア:2)
高度なことが出来る人がゴロゴロ転がっていても、使い道がないし
使いにくいと思います。
そもそも、そんな優秀な人材は来ないし。
翻訳記事なので (スコア:2)
翻訳記事なので原文もあたった方が良さそうです。
原文と訳文の間には、同等性に問題があると思います。
Re:翻訳記事なので (スコア:2, すばらしい洞察)
「怪しい日本語訳を見つけたら英語の原文を読んで確認する。」
この習慣が身についていない奴は三流と判断して良いという話かな。
値渡しと参照渡しについて説明できないだけで入門レベルというのは厳しすぎると思う (スコア:2)
参照渡しの無い言語も広く使われている現状で、値渡しと参照渡しについて説明できないだけで入門レベルというのは厳しすぎると思う。
参照渡しの有る言語: C++, C#, VB, Pascal, Perlなど
参照渡しの無い言語: C, Java, JavaScript, Ruby, Python, Scheme, Haskell, Erlangなど
それとも、原文にあるpass-by-reference(call-by-referenceではなく)というのはreference typeとかポインタとかの値渡しのことを差すのだろうか。
しかし、C#の言語仕様では“A struct may be passed by reference to a function member using a ref or out parameter.”という文があり、call-by-referenceと同じ意味として使われている。Perldocのperlsub [perl.org]でもpass-by-referenceはcall-by-referenceと同じ意味で使われている。Wikipediaのcall-by-valueやcall-by-referenceの部分 [wikipedia.org]でもやはり同じものとして扱われている。
それから「等値(原文だとequality)」と「等価(原文だとequivalence)」の違いも(英語がよくわからないので)よくわからない。
各種言語の言語仕様の文中では、equalは値としてなんかの意味で等しいことを差していて、equivalentはプログラムとして等しいことを差しているっぽい。でもSchemeはR5RSのeqv?の説明には“two literals are equivalent to each other”かどうかは不定であるという記述がある。
入門者レベルということで、オブジェクトの同一性と値としての等しさの違いを差しているのかとも思ったけど、Java, Scala, C#の言語仕様書やAPIドキュメントを見る限りどちらもequalを使っている。
それからはてなブックマークでもつっこまれてた [hatena.ne.jp]けど、「数値Xのフィボナッチ数(原文でも Fibonacci value for a number X)」という言い方もわからない。「X番目のフィボナッチ数」ならわかる。
実はこれらの質問は「プログラマー(としての質問者)の力量を見極める質問」なんじゃないだろうか。
Re:値渡しと参照渡しについて説明できないだけで入門レベルというのは厳しすぎると思う (スコア:2)
Re:値渡しと参照渡しについて説明できないだけで入門レベルというのは厳しすぎると思う (スコア:2)
例えば、Javaにおける=演算子は左辺に対して参照渡しのような動作をしますが、これを差してJavaに参照渡しがあるとは言いません。
「継続に変数そのもの(のポインタ)を入れる」という表現も不正確です。
Schemeにおいて継続は「変数そのもの」「変数そのものへのポインタ」「変数への参照」「ロケーション」のいずれも取れません。
継続はR5RSの意味論においては値(expressed value)の列とストアを受けとって最終結果を返すものと定義されています。
set!の意味を見ても、継続の内部で識別子を使って環境からロケーションを得ています。継続が外部からロケーション等を受け取ったりはしません。
> あと、"a number X"と言うのは「数値X」ではなくて、「X番目」という意味だと思いますよ。
なるほど、確かにNo. 1, No. 2とか言いますね。それのNo. Xという意味ですか。
Re:値渡しと参照渡しについて説明できないだけで入門レベルというのは厳しすぎると思う (スコア:2)
Re:値渡しと参照渡しについて説明できないだけで入門レベルというのは厳しすぎると思う (スコア:2)
確かにJavaでも渡したオブジェクトのフィールドが書き変えられると参照渡しで起きる問題と似た問題が起きますし、それは入門者より上のレベルであれば知っているべき問題だと思います。
しかしこの問題は値型と参照型の違いに関する問題であり、これを値渡し [wikipedia.org]と参照渡しの違いとして質問するのは「開発者を評価するうえでの優れた質問」(元記事より)ではありません。
例えば、C#において、次のように構造体SとクラスCが定義されているとします。
struct S {public int i;}
class C {public int i;}
また、次のような値渡しであるメソッドが定義されているとします(refやoutが付いていないので、両者は値渡し [wikipedia.org]です)。
void f(S s) {s.i = 2;}
void f(C c) {c.i = 2;}
このとき、次のようにfを呼びだすことを考えます。
S s = new S();
C c = new C();
s.i = 1;
c.i = 1;
f(s);
f(c);
このとき、s.iは1となり、c.iは2となるはずです(今手元に処理系が無いので確認できないのですが)。
これは構造体は値型であり、クラスは参照型であるためです。
ここで、fは両方とも値渡しのメソッドでした。つまりこの挙動は値型と参照型の問題であり、値渡しと参照渡しの問題ではありません。
よってこのような値型と参照型の違いについて質問したいのなら、値渡しと参照渡しの違いを質問するべきではありませんし、質問してそれに答えられなかったとしても値型と参照型の違いについて知らないとは言えないためこの質問からは入門者レベルとは言えません。
# あくまで「このような値型と参照型の違いについて質問したい」ときのみです。本当に値渡しと参照渡しの違いを知らないと入門者レベルだと考えているなら話は別です。
Re:値渡しと参照渡しについて説明できないだけで入門レベルというのは厳しすぎると思う (スコア:2)
少なくとも、Java, C#, Javascript, VB.NET, その他多くのプログラミング言語では参照型のオブジェクトもデフォルトでは値渡し [wikipedia.org](つまり参照の値渡し [wikipedia.org])で渡されます。
例えば前のコメント [srad.jp]のvoid f(C c)においてクラスCは参照型ですが、値渡しされます。これを参照渡しにするためにはvoid f(ref C c)と書きます。
他にもPHPにも参照渡し(passing by reference)はあります [php.net]が、マニュアルのObjects and referencesという節 [php.net]では、new Cなどで返されるのはobject identifierであり、関数に渡されるときにデフォルトでは参照渡しされない(object identifierのコピーが渡される)と明言されています。
# ちなみに、PerlやVB 6ではデフォルトでは参照渡しです。
鶏を自分の好きなようにデザインできるとすれば… (スコア:1, おもしろおかしい)
今より賢い頭が一つ、今より高効率な内蔵が一組、それに足と羽が10組以上ある鶏だな。
ああそうだ、卵の代わりにジャガイモ生んでくれたらもっといい。
Re:鶏を自分の好きなようにデザインできるとすれば… (スコア:3, おもしろおかしい)
え?、俺の代わりに会社に行ってくれる鶏じゃないの?
Re:鶏を自分の好きなようにデザインできるとすれば… (スコア:2, おもしろおかしい)
手羽や腿肉量産するよりも、胸が5つくらいあるほうがいいんじゃないでしょうか。
採卵鶏としてのアプローチは、また別の案件になるかと思います。
あとは萌えボイスで鳴くようにすれば完璧かと(何)。
国語の問題 (スコア:1)
単に言葉を知ってるかどうかの問題になってしまって、
概念自体は深く知ってたり、普段から使ってることだけど、
当たり前すぎて言葉は知らない人が、振り落とされてしまうね。
この質問をされると、自分は入門者レベルにも満たないらしい・・・。orz
Re:国語の問題 (スコア:1)
この質問をされると、自分は入門者レベルにも満たないらしい・・・。orz
同じく…orz
そっかーこれのことこう言うのか~と、検索してみてわかったりしてちょっと憂鬱な気分に。
関連ネタ (スコア:1, 興味深い)
人材獲得作戦 : http://okajima.air-nifty.com/b/2009/11/post-4df8.html [air-nifty.com]
人材獲得作戦・3: http://okajima.air-nifty.com/b/2009/12/post-f94c.html [air-nifty.com]
人材獲得作戦・4 試験問題ほか : http://okajima.air-nifty.com/b/2010/01/post-abc6.html [air-nifty.com]
例に挙がっている問より簡単なものでも十分いける (スコア:1)
よく足切りに使っていたのは、自分の年齢を16進数や8進数で言わせたり、「もっと上流の仕事がやりたいと思って応募した」と言った場合はダメとしたり、こんな簡単なのでも結構取り除ける。
Re:例に挙がっている問より簡単なものでも十分いける (スコア:2, おもしろおかしい)
(ぉぃぉぃ)が返される実装済みプロトコルの説明ですね、わかります。
つーかその人が面接に来たら雇うしかないと思うんだ。
信教の自由 (スコア:1, おもしろおかしい)