仕事柄、中途採用の面接官を引き受けることがあります。
私の場合、専門がソフトなので、その人にソフトウェア技術者としての技術力があるかどうかを見ることが期待されている場合が結構あります。
メカ、ハードなどの技術者も面接しますが、半分くらいはソフト関係かな。
もちろん、それ以前に技術の吸収に対する態度などを聞いておいて、現在の技術力を測り、今後の期待値を推定するのですが、本日はその人の現在の技術力をはかる質問で私が良くする質問をご紹介します。
■過去の経験をきく
現在持っている技術なので、過去にそれを使ってどのくらいのプログラムを作ったのか、あるいは設計したのかを効かないといけないのですが、
・DFDは書けますか?
ときいたら、ほぼ100%「はい」という答えが返ってくるでしょう。
それを、その答えから、面接している人が本当にDFDを理解していなければ答えられないような質問をしないといけません。
そこで、こんな聞き方をします。
・あなたが使えるプログラミング言語は何ですか。
・それぞれのプログラミング言語でどんなプログラムを書いたことがありますか。
・それは何行(何ステップ)くらいのプログラムですか。
ここまでは、簡単に答えられる質問ですね。
・では、そのプログラムをデバッグするのに、一番困ったバグはなんだったでしょうか?
・そのバグはどうやって発見しましたか?
・そのバグの原因はなんでしたか?
・どうやって解決しましたか?
・なぜその対策が最適でしたか?
というところが質問の核心。これは、実際に経験がないと答えられません。
ただし、経験があるだけでは採用OKにはしません。この質問には、ウラ(本当に知りたいこと)があります。
バグの発見から解決までの3つのステップはワンセットの質問で、これだけ聞くと大体その人の持っている技術力と仕事力が分かります。
例えば先日ダメだった人の答え(ちょっと一般化して書いておきます)。
★――――――――――――――――――――――――――
・一番困ったバグはなんだったでしょうか?
→ユーザが操作していると時々演算結果が違う場合がでるというバグがありました。
・そのバグはどうやって発見しましたか?
→ユーザから計算結果が違うという指摘を受けました。
・そのバグの原因はなんでしたか?
→処理Aをやっている時に、割り込み処理でBをすると広域変数を書き換えてしまうので、計算結果が狂いました。
・どうやって解決しましたか?
→処理Aをやっている時には、処理Bの割り込みが入らないよう、割り込み禁止にしました。
・なぜその対策が最適でしたか?
→同時動作に問題があるので、同時動作を禁止しました。
――――――――――――――――――――――――――★
さらっと書きましたが、色々お話を聞くと、どうもプログラム上の問題ではなく、基本設計に問題があるものでした。つまり、基本設計がきちんとできてないのに、小手先でごまかして、問題をおきなくしただけに聞こえました(どうも基本設計は別の人がやったみたい)。
つまるところ、他の技術の設計者に対しても同じなのですが、
品質意識があるか
設計指針を持っており、その指針に基づいた対応ができるか?
設計的な根拠をもって対応しているか
対策の選択肢を複数個検討した上で、最適解を選んでいるか?
ということを事実をもとに聞こうとしています。
こういうのが、わりとバグ対応やトラブル対応に現れるんですね。
■その他の質問
その他、経験の浅そうな人(新卒や、第2新卒くらいの若手)にはこんな質問。
・リアルタイムOSにはどんな種類があるか知ってますか?
・それぞれの特徴を教えて下さい
・オブジェクト指向を理解していますか?
・クラスとインスタンスの違いはなんでしょう?
・RFCを読んだことがありますか?
・RFCであなたが最も大切だったと思ったところはなんですか?
・それはなぜですか?
要は、「あなたの得意な言語はなにか」を聞いておいて、その特徴をちゃんと捕まえているかどうかを突っ込んで質問します。これに明確に答えられれば、「まぁまぁ勉強しているな」と判断します。
たとえ、「RFCを読んだことがない」と言われても、それ自体で減点することはありません。
しかし、「読んだ」「知っている」と答えた以上は、その知識がちゃんとあるかは突っ込みます。
意外と付け焼刃的に「できる」「知っている」という人が多い、というのが今まで面接をいろいろやっての経験値ですが、あなたは自分の専門分野で、似たようなものの違いの説明をちゃんとできますか?