パスワードを忘れた? アカウント作成
198553 story
プログラミング

プログラマーの力量を見極める質問 162

ストーリー by hylom
優れたプログラマが選べるほどいればいいんだけど 部門より

あるAnonymous Coward 曰く、

ZDNet Japanの「プログラマーの力量を見極める--面接官になったら尋ねるべき質問実例集」という記事が話題になっている。

プログラマーを採用する場合、実際のプログラミング能力を推量するのは難しい。そのため、この記事では「開発者を評価するうえでの優れた質問を紹介するとともに、なぜそれらが優れているのかを説明している」としている。

詳細は記事を参照してほしいが、計算機科学に関する基礎的な知識を問うものや思考問題、ホワイトボードに実際にその場で簡単なコードを書いてもらう、コードを渡してレビューしてもらう、履歴書の経験について深く掘り下げて質問する、などが挙げられている。

いっぽうはてなブックマークでは「挙げられている問題の解答が分からない」といった旨のコメントが多数付けられている。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • ・「プログラマー」と「コーダー」の違いを説明してください
    ・「委任契約」と「請負契約」の違いは何ですか?労働基準法や下請法において、これらにはどのような違いが存在するのかを説明してください。
    ・「うたっておどれるSE」とは何かを説明してください。
    ・「悲観的デスマーチ」と「楽観的デスマーチ」を比較し、違いを明確に述べてください。

    これらの質問のうち、最初の2つに答えられない会社は、どう考えても「ブラック会社」ということになる。
    また残り2つの質問は、「開発経験者がプロマネになれる会社」であれば答えられるはずである。

  • コンピュータ科学に関する基礎的な質問

    * 「等値」と「等価」の違いを説明してください
    答え:「直」と「西」が違う

    * 「値渡し」と「参照渡し」の違いは何ですか?
    オブジェクト指向システムや手続き型システムにおいて、
    これらにはどのような違いが存在するのかを説明してください。
    答え:渡し舟で、船頭さんの言いなりの値段で料金を払うのが「値渡し」
    他の舟の料金も調べて、交渉の余地があるのが「参照渡し」
    「参照渡し」の方が料金が安くなる傾向があるが、
    過度な交渉はトラブルの元になる場合があるので、注意が必要。

    * 「ポリモーフィズム」とは何かを説明してください。
    答え:ポリエチレンで作られた毛布を、アメリカでは「ポリモーフ」と呼んでおり、
    眠るときには、その「ポリモーフ」を使おうと主張する健康法。

    * 「悲観的ロック」と「楽観的ロック」を比較し、違いを明確に述べてください。
    答え:騒音を撒き散らし、やたらと陰々滅々な歌詞をがなるのが「悲観的ロック」
    '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:モルダー。あなた、疲れてるのよ。

    結論

    私には力量は無いみたいだ。

  • by Anonymous Coward on 2010年03月04日 15時51分 (#1727500)

    前に契約社員(3ヶ月限定)でプログラマーを募集したんだよ
    面接に巫女服着てきた女性(やたら美人)が居て、他の社員が仕掛けたドッキリか、あるいはこの人に遊ばれてるのか、と凄く悩んだ。
    あと能力的には問題なさげだけど、面接にそういう服装で来るような人は大丈夫なのだろうか、とかね。

    結果的に(他に能力的に十分な人が居なかったのもあり)採用したんだ。
    プログラマーとしては凄く優秀だった、らしい。現場の人から聞いただけだけど。

    ♯その人の採用直後に大阪にとばされたのでAC
    ♯仕事しているところを見たかった……

  • ロック (スコア:3, おもしろおかしい)

    by BlueRain (37857) on 2010年03月04日 23時03分 (#1727727)
    「悲観的ロック」:また廃刊か。
    「楽観的ロック」:今度はどの雑誌に連載されるのかな。わくわく。
  • 個人的には無縁な感じ (スコア:2, すばらしい洞察)

    by Anonymous Coward on 2010年03月04日 13時14分 (#1727380)

    時間に余裕があって面接する相手は無限にいて、ハードルを高くした所で幾らでも代わりがいる
    環境での話ですよね?

    どうにもならんのは排除せざるを得ないだろうけど、あんまりハードルを上げた所で「見合う力
    量の人間はいませんでした」で終わりそうな予感。

    • by metta (20740) on 2010年03月04日 14時00分 (#1727419) 日記

      オーバースペックくれくれ厨の会社が多そうですよね。

      googleのように、全く新しいコンセプトのサービスを開発する会社なら
      知能指数の高い研究者のような人を取る必要があるかもしれませんが

      帳票設計のようなものは、どぶ板サービス業ですから
      頭の良い人にはつとまりません。

      親コメント
    • by Anonymous Coward on 2010年03月04日 13時38分 (#1727400)

      しかしプログラマという仕事は平凡な人より優れた人が10倍働ける可能性のある業種だから、とにかく数を揃えるよりも精鋭を揃えて5倍給料を払った方がいいかも知れない。

      「私は、30年程度プログラミング経験があります。平均的なエンジニアの3倍以上の速度でプログラムを設計し、コードを書くことが出来ます。しかし電話のやりとりやメールのやりとりが極端に人より速いわけではないですし、理解速度が人の3倍速いわけでもないので、大局的には2倍ぐらいの実効値であると仮定しましょう。

      次に、私は毎日15時間のデスクワークをすることが出来ます。普通の人が毎日15時間も働けば過労死してしまいます。しかし、私は決して過労死しません。何故なら、デスクワークをすることに何のストレスも感じないからです。

      《昨日のエントリの文章がいくつかここに入る》

      つまり、(ワーストケースでも)2倍の3倍で、少なくとも人の6倍の仕事量がこなせます。平均的なエンジニアへの支払いが40万だとしたら、その6倍で月に240万円相当の仕事をこなせます。

      ここまではご理解いただけますか?」

      「ああ、なるほど」と言う返答をもらう。それを確認して、私は次のように続ける。

      「私が一人でプログラムを書く時は上司に進捗を報告する必要もなければ、部下の進捗を尋ねることもありません。また同僚と共同作業をすることもありません。同僚にプログラムの構造を説明することもありません。

      エンジニアが二人以上で作業する場合、同僚にこんなプログラムを書いてくれと伝えるのにとてもロスが発生します。平均すれば2割ぐらいのロスがあるでしょう。二人は1.6人分しか働けません。

      10人のチームではそこに加えて進捗報告の時間やグループミーティングの時間が発生しますし、各自がそれぞれ等しく新しいテクノロジーを学ばなければならないため、学習コストが10倍になります。しかも途中でプロジェクトから抜ける人の引き継ぎをしたり、設計が破綻していて完成しないリスクだってあります。

      つまり、収穫逓減があり、人数が増えてくるとロス率も上がります。10人ぐらいの平均的なプロジェクトでは4割程度のロスが出るのが普通です。すなわち、10人居ても6人分しか働けていません。これでは私の作業スピード(6倍)と同じです。

      しかも各自の書くコードにはムラがあるので能力のない人のコードを書き直したり、複数人で作業しているので一貫性のないコードになっていて保守が大変だったりすることが往々にしてあります。

      私に任せていただければ
      ・設計が破綻するリスクがありません。
      ・一貫性のないコードになるリスクがありません。
      ・途中でプロジェクトメンバーが抜けて暗礁に乗り上げるリスクがありません。
      ・本を数冊書いた程度には文章を書き慣れており、不明瞭なドキュメンテーションになることがありません。
      それゆえ私一人で10人の精鋭チームに相当する戦力となるのです。」

      年収1億稼げる(かも知れない)仕事術 [hatena.ne.jp]

      でも正社員採用:「なし」47% 帝国データ調査開始以来最悪--10年度 [mainichi.jp]というのを見ると、平凡な人を10人雇う会社の方が社会に貢献している気もする。

      親コメント
      • ああ、でもこの人が例えばダンプカーにはねられて動けません!
        みたいな状況になったら、同じような人を一人用意するとか
        あるいは並みの人10人体制で引き継ぐとかいうことは
        なかなか難しいですよね。そういう話じゃないんですか?
        親コメント
        • by Anonymous Coward on 2010年03月04日 14時48分 (#1727463)
          だから同じような人を育てねばならんのだが
          それをやらずに奴隷商人を始めたから今のようになった

          気がつけば育てられる者がほとんどいなくなっていた
          仕事が外国に流出するのも当然の結果
          親コメント
      • 3倍の速度でコードがかけるのはわかりました。
        3倍の速度でデバッグできますか?
        親コメント
        • デバッグのうち大半がツール作成とツールを使ったデータ作成だとしたら、
          3倍位のスピードは出るんじゃなかろうか。まあ、それも単体~連結とそれ以降の一部までだけど。
          それ以降のテストは同一人物はやらないとか、あとはそういう話術で乗り切ってくれ・・・でいいのかな?

          親コメント
        • テストじゃなくてバグを潰すと言うことであればできるんじゃないの?
          経験値積むと自分のも他人のもバグ見つけるのは早くなる。

          親コメント
        • 初心者と熟練者では、
          コードを入力する速度は3倍違う程度だが、
          デバッグする速度は10倍以上違う。
          テストの網羅度などでもしかり。

          初心者は往々にしてテストもデバッグも不可能なコードを書くので、
          それらが永遠に終わらなくなることさえある。

          親コメント
        • by saitoh (10803) on 2010年03月04日 20時07分 (#1727629)
          私の先輩は、学生時代COBOLプログラマのバイトをしていました。時給は安かったみたいですが、結構稼いでました。それは、その会社の想定する5倍だったかの速さでCOBOLプログラムが書けるので実質時給は×5なのだと、僕に向かって自慢しておりましたハイ。デバッグも含めて、並みのプログラマの3倍の速度と言う人材はそれなりに居ると思いますよ。

          その先輩、僕にそう言って自慢した20数年後、40代で学部長になりました。

          親コメント
        • | …3倍の速度でデバッグ…

          そーゆー人のばやい、バグの数が1乃至3桁少ない(、しかも大半が平易なケアレスミスで「バグらしい」バグは少数な)ので、デバッグの速さは無視できるかと。
          親コメント
  • もっと局所的な力量が必要で

    例えば、会社で蓄積されているライブラリを
    上手く組み合わせる能力と根気の方が重要ではないかと。

    俺なら、30分の捜し物競争。
    もちろん鬼も出ます。

  • by NOBAX (21937) on 2010年03月04日 13時27分 (#1727390)
    パッケージのカスタマイズがソツなく出来るレベルの人材じゃないでしょうかね。
    高度なことが出来る人がゴロゴロ転がっていても、使い道がないし
    使いにくいと思います。

    そもそも、そんな優秀な人材は来ないし。
  • by ef (25263) on 2010年03月04日 21時57分 (#1727693)

    翻訳記事なので原文もあたった方が良さそうです。

     

    Explain the difference between “equality” and “equivalence” (credits to TechRepublic member Tony Patton for this question).
     

     

    「等値」と「等価」の違いを説明してください(この質問はTechRepublicのTony Patton氏に教えてもらったものである)。
     

    原文と訳文の間には、同等性に問題があると思います。

    • Re:翻訳記事なので (スコア:2, すばらしい洞察)

      by Anonymous Coward on 2010年03月04日 22時24分 (#1727707)

      「怪しい日本語訳を見つけたら英語の原文を読んで確認する。」

      この習慣が身についていない奴は三流と判断して良いという話かな。

      親コメント
  • 参照渡しの無い言語も広く使われている現状で、値渡しと参照渡しについて説明できないだけで入門レベルというのは厳しすぎると思う。

    参照渡しの有る言語: 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番目のフィボナッチ数」ならわかる。

    実はこれらの質問は「プログラマー(としての質問者)の力量を見極める質問」なんじゃないだろうか。

    • 訂正: Perldocのperlsubだと、pass-by-referenceは参照(スカラー値)を渡すことを指していて、call-by-referenceとは別の意味で使っている。
      親コメント
  • by Anonymous Coward on 2010年03月04日 13時05分 (#1727378)

    今より賢い頭が一つ、今より高効率な内蔵が一組、それに足と羽が10組以上ある鶏だな。
    ああそうだ、卵の代わりにジャガイモ生んでくれたらもっといい。

  • by hirachan (7458) on 2010年03月04日 13時14分 (#1727381)
    「コンピュータ科学に関する基礎的な質問」にあるようなだと、
    単に言葉を知ってるかどうかの問題になってしまって、
    概念自体は深く知ってたり、普段から使ってることだけど、
    当たり前すぎて言葉は知らない人が、振り落とされてしまうね。

    この質問をされると、自分は入門者レベルにも満たないらしい・・・。orz
    • by denchu (6847) on 2010年03月04日 13時46分 (#1727408)

      この質問をされると、自分は入門者レベルにも満たないらしい・・・。orz

      同じく…orz
      そっかーこれのことこう言うのか~と、検索してみてわかったりしてちょっと憂鬱な気分に。

      親コメント
  • 関連ネタ (スコア:1, 興味深い)

    by Anonymous Coward on 2010年03月04日 13時24分 (#1727385)

    人材獲得作戦  : 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]

  • よく足切りに使っていたのは、自分の年齢を16進数や8進数で言わせたり、「もっと上流の仕事がやりたいと思って応募した」と言った場合はダメとしたり、こんな簡単なのでも結構取り除ける。

typodupeerror

アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家

読み込み中...