最近読んだ記事で、人材派遣会社が「高給な仕事がありますよ」と人を集め、IT技術者のフリをするノウハウを伝授し、IT技術者募集に応募させていた、というのがありました。
IT技術者の面談というのは、応募者側から事前に提出された技術経歴書をもとに行われます。雇う側は事前に技術経歴書を読み、期待するスキルを持っている技術者との面談を行います。面談の場で、雇う側は募集案件の内容を説明し、案件に必要なスキルを応募者に確認、応募者は自分のスキルを説明し、お互いの要望がマッチすれば、めでたくご就業となります。雇う側が応募者に試験を受けさせたり、経歴が事実かどうか調査したりはしません。
応募者は正直に自分のスキルを申告するはずという、お互いの善意に基づいた、金と時間をかけない、とてもシンプルなやり方をします。
その善意につけこみ、経歴書をでっち上げて、嘘八百を並べたて、面談をクリアして開発現場に潜り込もう、いったん潜り込んでしまえばこっちのものだ。そういう詐欺師のような人材派遣業者が出てきたわけです。
雇う側は、万が一、そういう輩が現場に潜り込んできた時のことを考慮し、最初の契約は1ヶ月、その間に期待した技術を持っていないことが判明すれば、その後の契約の更新はしない、というような防衛策を取らざるを得ないでしょう。
詐欺師はたとえ1ヶ月分でも報酬が手に入ればしめたもの、なのでしょうが、雇う側としては、詐欺師なんかに報酬を持っていかれるのは悔しいですよね。
そんな回りくどいことをせずに、面談の時に、その自称技術者がスキルを偽っていないか、たちどころにわかるような方法はないものでしょうか。
そこで思い出したのが、40年くらい前の「ブレードランナー」という映画で、脱走して人間の中に紛れ込んだレプリカントに、捜査官がいくつか質問をすると、人間かレプリカントか分かるというシーン。レプリカントというのは人間に似せて精巧に作られたロボットですが、ウソの記憶を埋め込まれたニセ人間ですから、質問を工夫すれば、人間なら絶対にしないような答えを引き出すことができるわけです。
というわけで、開発現場のレプリカント野郎を見分けるための質問を考えてみました。
こんな案件があったとします。
ある電機メーカーの、既存の製品用にC言語で作られたプログラムがあります。これを新製品用にC#言語でアップデートするプロジェクトの設計工程から参画していただきます。言語の種類は問いませんが、開発現場で3年以上の経験のある方を希望します。優秀な方は、その後の製造工程、テスト工程、さらに次期製品のプロジェクトへの参画をお願いします。
どうです? 長期の就業が見込める、詐欺師が涎を垂らして喜びそうなおいしい案件ですよね?
詐欺師を間違って採用しないために、面談では次のような問題を出します。
#問題
先輩プログラマーのAさんと、新人プログラマーのBくんが夜遅くまで残業をしています。リリース時期が迫っているのに、彼らの担当部分のプログラムが応答しなくなってしまったのです。2人とも難しい顔をして画面を見ていましたが、突然Aさんが画面に表示されたコードを指差して笑い出しました。Aさんの説明を聞いて、Bくんも笑い出しました。
以下、2人が見ていたコードです。
int loop_counter = 100; // ループ回数の定義
int temp = 0; // 結果を一時的に格納する変数
bool ret = true; // 判定結果
while(loop_counter > 0)
{
temp += global_data_get();
// 2022.06.18 〇〇〇から受領した関数がうまく動作しないため、
// 今回のリリースには含めない
//ret = statistical_judgement(temp);
//
// 統計的判断が否なら終了
//
if (ret == false)
{
break;
}
// カウンター更新
loop_counter = loop_counter + 1;
}
#質問1
2人はなぜ夜遅くまで残業していたのでしょうか?
#質問2
Aさんが指差したのはコードのどの部分だと思いますか?
#質問3
2人はなぜ笑ったのでしょうか?
#質問1の答え
「プログラムがうまく動かないから」という答えでは不十分です。「2人はプログラムのこの部分の担当者で、これを正しく動作させる責任があるから」が正しい答えです。開発現場を知らない素人にはこの責任感が理解できません。
#質問2の答え
開発現場の経験のある技術者なら、もっともらしいコメントに惑わされることなく、たとえC言語が得意でなくても、不具合箇所を指摘できるでしょう。1文字の違いが大変な事態を招くこともある技術の世界を知らない素人には、このことの重大さは理解できません。
#質問3の答え
遅くまで残業をした原因が、単純なミスによるバグだと分かったからです。謎を解いたぞ、という喜びと安心感があったのでしょうね。開発経験のない素人にはこの喜びが理解できません。
以上、開発現場ではありそうな光景ですが、現場の経験のない素人には答えられない質問ばかりだと思います。
上流工程や、テスト工程を担う技術者の中には、プログラミングの経験がない人がたくさんいます。誤解されると困るのですが、コードが書けない技術者はダメ、などと言っているのではありません。コードが書けなくても、価値のある仕事が出来るエンジニアを何人も知っています。
ただ、技術者の中には、ソースコードのコメント部分を読んで、プログラムを理解しているかのような「ふり」しているような輩がいるのも事実です。コメントがプログラムを表現できていないことは、上の例のようによくあることなんです。
上の人から評価されたい、とか、同列の技術者のマウントを取りたいとか、そういう欲望がそうさせるのでしょう。哀れではありますが、同情の余地はありません。
分かっているような「ふり」はいけません。
ひとつのウソが、プロジェクトを大混乱に陥れることがあるからです。そういう人たちの存在が詐欺師に「こいつがプロだというなら、オレにも簡単に出来そう」というモチベーションを与えてしまっているのではないでしょうか。
ソフトウェア作りには、ものを作る楽しさと、作ったものが思った通りに動いた時の喜びがあります。プログラムを使った人に喜んでもらえれば、喜びも増すでしょう。
そういう楽しさと喜びをもっともっと感じたい。
そのために場数を踏んでいった結果、スキルが積み上がっていくのであって、ただ稼ぎ続けるために、スキルを偽り、分かったようなフリをしながら、現場にしがみついていくことに、いったいどんな価値があるのでしょう?
そんな人たちが現場に居座り続けているせいで、日本のIT業界は詐欺師が蔓延り、世界のレベルから取り残されてしまっているのではないでしょうか。
*余談
「ブレードランナー」は1982年の映画ですが、時代設定が2019年なんですね。空飛ぶ自動車や、人造人間を素晴らしい想像力で作り出した制作者たちも、コンピューターのモニターが、40年後にはとても薄くてフラットになるとは想像できなかったのでしょうか。現実は人間の想像力を超えて進んでいくものなんですね。
*余談2
1982年当時、ライジング・サンと呼ばれ、その成長のピークに迫りつつあった日本経済を反映して、この映画には、日本の文化があちこちに散りばめられています。アメリカは将来、日本に乗っ取られるんじゃないだろうか。制作者の中に、そんなふうに考える人がいたのかもしれませんね。現実はそんなことにはならず、40年後の日本はジリ貧で息も絶え絶え、というのが現実です。現実は人間の想像力を超えて進んでいくものなんですね。
コメント