新卒採用試験
なんとなく最近著書に直接関係ない話題が多い感じもしますが、同じことを繰り返し書いていても面白くありませんので・・・。
さて、私の勤務先でも毎年新卒採用を行っていまして、このところ優秀な方々に来てもらえてとても社内の雰囲気も盛り上がっているのですが、応募する側としては採用試験に合格できるかどうかがまず重要なポイントで、その先のことは合格してからでないと考えるどころではないのかもしれません。
採用試験は、次のような内容です。
・会社説明会参加・適性検査
適性検査はITとは無関係の一般的なものです。頭の回転や算数問題などという感じです。短時間でたくさんの問題を解くので疲れますし、意外と点数が伸びないのですが、基本的には足きり程度の判定に使っています。あまりにもひどい人はやる気がそもそもないのでは?というような基準です。
・レポート課題
作文とプログラミングのレポート課題を1週間くらいで提出してもらいます。
・面接
レポートの内容に関することや、意気込み、さらにコミュニケーション力などを確認するために行います。
基本的に、レポートと面接が重視されます。面接ではさまざまなポイントを見ています。身だしなみ、言葉遣い、姿勢、受け答え、そして何より顔つき、目つきといいますか、目の輝き、明るい表情、です。協調性の有無も印象で大体わかるものですし、単に技術力があれば良いというものでもありません。どうしても面接は緊張してしまいますので、本当の人柄がわかりにくく、緊張を解きほぐすような話題も面接官の重要なポイントです。
短時間でプログラマーとしての適正を判断するのは、実は意外と難しいもので、すばらしく出来る人はすぐに判断できるのですが、現状はそれほどの力がない人で、これから伸びるかどうかの判断はなかなか微妙です。合格したことがかえってその人の人生の失敗になる可能性もあるわけですから、判断する側も責任がなかなか重たいのです。
さて、今回はレポート課題について紹介してみましょう。実際今年の採用試験で出した内容ですので、これから応募する方にはとても有利な内容だと思いますが、実は結構毎回内容が変わったりしますので、この内容に対応できれば合格できるとも限りません。課題の難易度も毎回相当変動があり、今回の内容は相当ハイレベルだと思いますがいかがでしょうか。
●作文
※テキスト形式で、文字数制限なし。
・過去に打ち込んできた事は?
・なりたい自分の姿とは?
・自信のある事は?
作文課題は腕は必要ありません。自分自身を熱くアピールできれば良いのです。長ければ良いというものでもありませんし、短すぎても心配になるかもしれませんが、あまり見栄を張りすぎると面接で困ることになったり、入社後に叱られるときのネタに使われたりします。
●プログラミング
※ソースファイルと仕様書を提出。仕様書は「テキスト」「ワード」「エクセル」いずれかの形式とする。
※完成できなくても過程を提出すること。
・インタプリタ電卓
"+ - * / ( )" :演算子
"[0-9]" :数値
上記演算子と数値を組み合わせた式が入力されると計算結果を返す関数と、その関数をインタラクティブに呼び出す main() 関数を作成すること。
条件
・言語は C/C++言語またはJavaを用いること。
・演算子の優先度をきちんと考慮すること。
・与えられる式の長さ、扱える桁の最大数は特に定めないが最低でも 3桁同士の演算は出来ること。
・不正な式が入力された場合は間違った答えを出さずエラーを出力すること。
・簡単な仕様書を添付すること。
例
3+4+2*8 = 23
-4+5 = 1
4+-5 = 正しい数式ではありません
4+(-5) = -1
4+6*(3+2)= 34
3+4*2/0 = ゼロでは除算できません
9+4-a = 数字以外は計算できません
9*7/ = 正しい数式ではありません
8-+3 = 正しい数式ではありません
8-(+3) = 5
参考
・Linux に付属しているコマンドライン電卓 'bc' の動きを参考にして下さい。
プログラミングの課題は今回は非常に難易度が高いと思います。今年新卒で来てくれたメンバーが考えてくれた課題です。もちろんその彼は、「プロならこう作る」という模範解答を自ら披露してくれました。私も面接の際に突っ込めるようにC言語で作ってみましたが、2時間以上かかりました。本当はここで紹介しようかと思って作ったのですが、ちょっと納得できる出来ではないので・・・。
この試験にチャレンジしてくれた方は明日、面接なのですが、立派なソースを提出してくれました。「プロのレベル」で見るとエラー処理や少々間違えた優先順位などもあるのですが、自力で課題に取り組む姿勢が試験では重要ですので、答えが正しければ良いというものでもありません。彼は式を一度逆ポーランド記法に変換し、それから計算すると言うプログラムを作ってくれました。逆ポーランド記法は人間にはあまり把握しやすい記述ではないのですが、プログラムで処理を作る際にはスタックに積んで計算して、ということの繰り返しで計算できるので、非常に良く使われます。これを知っているということも心強いですね。ちなみに私はそれを見た後に作ってみましたので、敢えて人間が計算するのと同じようなアルゴリズムで作ってみました。再帰と連結リストをうまく使うのがポイントという感じでしたが、なかなか難しいです。
プログラマーの仕事の現場では、実際にはアルゴリズムを考えさせられる場面というのは少ないと思います。受託開発ではボリュームがあるのはユーザインターフェースや帳票出力などの部分が多く、それらはアルゴリズムというほど処理で悩むことは少ないもので、データベース検索のSQLの最適化などで頭を使うくらいでしょう。私が得意なネットワーク関連では意外と高速化などでアルゴリズムの考慮が必要な場面もありますが、全体の割合としては少ないでしょう。画像処理やCADシステムなどの開発になるとアルゴリズムはかなり重要になってきます。
さて、このような難しい問題を出したメンバーたちは果たして自分で回答できるのかがちょっと心配なところですが、とりあえず全員に各自の得意な言語で作ってみるようにとメールしておきました。皆さんもたまには頭の体操にいかがでしょうか。
2007.5.8
from 2007/1/13