C#コラム

C#の派遣プログラマーが仕事をもらうために面接でするべき質問とは#2

前回はC#プログラマーの働く形態について解説しました。基本的にはメーカー勤務,請負,派遣というタイプがあります。

今回はその中でも派遣プログラマーにフォーカスして考えていきたいと思います

面接地獄!派遣は面接がつきもの

派遣プログラマーの特徴は,とにかく仕事をもらうためにはまず面接に始まります。普通面接とは,会社に就職するときにだけありますよね。派遣プログラマーは,仕事をもらうために毎回面接があります。

世の中で,プログラマー募集!と求人されているものの多くが,プログラマーを派遣する会社の求人だと思います。

基本的に,プログラミングの仕事とは,どこかの会社でシステムを刷新するか,新商品を開発する場合に発生します。新商品や,大掛かりなシステム開発は,数十人や,おおければ,数百人で開発することになるので,メーカーとしては,自社でそんなに多くのプログラマーを雇用することはできます。なので,大掛かりな開発をするときだけ,派遣でプログラマーを雇って,開発を行います。

派遣プログラマーは,そういった大型開発がある場合に,招集されて,一部のプログラミングをするという仕事の形態になります。

その場合,その仕事を与えてくれるメーカーなどの社員の人のところに行って,面接を受けることになります。とにかく初めて行く現場での仕事の話があったら,とにもかくにも面接をすることになります。

20代の頃はあまり気になりませんが,30代になり,34歳くらいになると,いつまで面接を受けないといけないのだろう?と私は不安になっていました。

このままこの会社にいて,50歳になっても面接があるのかな?その頃の面接官はきっと年下だろうなと思っていました。

私はそれが嫌なこともあり,タイミングよくメーカーに就職する話が舞い込んだため,そのままメーカーに就職していましたが,その話がなかったら,いまだに請負か,派遣プログラマーとして働いている可能性はあります。

派遣プログラマーは面接時に何を見られているのか?

私は,派遣プログラマーに始まり,請負でプログラミングの仕事をしている時期があったり,現在ではメーカーに勤務して,商品開発をしているため,いろんな立場でプログラマーという職業を見てきました。

プログラマーの人口からすると,派遣プログラマー的な,スポットでシステム開発の現場に行って,面接を受けて,仕事をもらう人の割合が多いのではないかなと思っていて,現在のメーカー社員からすると,派遣プログラマーの方が,面接のときにこんな質問をしてきたら,一緒に働きたいと思うだろうなーということを考えて,勝手にまとめてみましたので,どうぞお付き合いください。

派遣プログラマーは,面接のときに何を見られているのでしょうか?

当たりのソフトさ

まずは面接時の第1印象というものがあります。私は,最初に当たりのソフトさを見ます。ツンツンしている感じの人はダメです。というのも,この業界,一人でソフトを作る時間が多いのは確かですが,人とのコミュニケーションは非常に大事です。仕様一つ決めるにも,コミュニケーションなしには何もできません。

時々いますが,技術力があると思っているのかもしれませんが,俺は技術があるからすごい人!メーカーの人はあんまり技術力ないでしょ,「僕はいくつもの現場を渡り歩いてきたからあなたよりも経験ありますよ」的なオーラで接してくる人がいます。

勘違いも甚だしいです。メーカー職員は結構いろんな修羅場をくぐらされるし,私もいくつもの現場を渡り歩きましたが,メーカー職員のように,一つの職場でずっと特定の製品を作り続けることもものすごく大事な経験だったりします。

そのあたりはお互いをリスペクトできる関係でないとうまくいきません。「私はシステムのプロ」みたいな高飛車な派遣プログラマーはいりません。どうぞお引き取りください。と思ってしまいます。グループワークがシステム開発の常なので,輪を乱す人間はいないほうがいいです。忙しいときに,仕事を手伝ってくれて,助けてくれるのも「人」ですが,同時に問題を運んでくるのもまた「人」なのです。だから,単純に人が増えれば仕事を楽になるわけではないのです。人が増えて,仕事の分担が減った分,人が増えることによって問題が増えるので,仕事量は同じという場合もあるし,変な人が来た場合は,職場のコミュニケーションが悪くなり,いざこざや,コミュニケーション不足から起きるミスやトラブルで,仕事が余計に増える場合があります。だから変にプライドのある方は来ないでいただきたいというのが本音です。

だから最初の話に戻ると,第一印象で「あたりがソフト」というのは非常に重要な要素となります。

技術力はそこそこでよい

派遣プログラマーを招集する場合は,ある程度基本設計が終わっていることが多いです。その場合,技術的な実現方法もある程度クリアーしている場合が多いので,それほど難しい技術を求めていません。要するに,技術的には解明できているが,作る量が多いので,納期に間に合わすためには,人手が足りていないので,派遣プログラマーを雇おう!という流れです。

ですので,特に技術力が高くなくてもいいのです。正直,技術力が欲しい場合は,ベンダー企業とコンサル契約をして,ベンダーから直接ノウハウをもらいます。1人月200万とかべらぼうに高かったりしますが,ベンダーからの情報は素晴らしいです。そういった方とは一時だけお付き合いをして,ノウハウを提供してもらって,製品に組み込むので,派遣プログラマーの方には,そういう面ではなく,ある程度解明された技術をメーカーの希望通りつくってくれる人が求められます。

となると,技術力よりも,人的な部分が大事です。

要するに,話しやすい人物かどうか。気の利く人物かどうか。気か利くとは,仕様書の間違いなどを行間を読んで気づいてくれたり,よい提案をしてくれることです。

だから,あたりがソフトで,一般常識のある接しやすい人であれば,仕事はどんどん舞い込みます。

基礎文法ができるか

技術力という面でいうと,C#の基礎文法が理解できているか?という程度で十分です。面接では「オブジェクト指向」や「テスト駆動開発」の理解度まで聞かれることはありません。ある程度C#での文法が理解できていれば問題ありません。

それよりも,現場ごとに,実装するアーキテクチャーは異なるので,その職場にあったコーディングができるか?というのは非常に重要です。時々いますが「The俺のやり方」みたいなコーディングをする人は本当に帰っていただきたいです。

私の職場ではコードレビューをMUSTにしているので,そういう「俺流コーディング」をしていたら,ガンガン指摘します。「ここは何でこうしたの?」「ここはこう書いてください!」って私がガンガン言います。それでへそを曲げる人がいます。こちらはより良いコードを一緒に見つけていきたいのですが,自分のコードを批判されたイコール自分が批判されたと思うのかもしれませんが,顔が曇って,いやいやコードを直す人がいます。

そういう人も,ぜひお引き取りいただきたいです。文法プログラマーの方に限って,30歳を超えると変にプライドがあるのか,コードレビューでの指摘に嫌そうな顔をする人が多いです。逆に,知識の深い人ほど,腰が低く,お願いした変更もすぐしてくれるし,よりよい提案もしてくれます。

「コードを憎んで人を憎まず」をテーマにコードレビューをしていますが,私のいい方が悪いのかもしれませんが,気分を害する人もおられます。そういう人を見ると,知識なんてそこそこでいい,技術はこっちが教えるから,素直な若い人来てくださいという気持ちになってしまいます

ということで,まず面接で見るのは「人」。素直さ,向上心,当たりの柔らかさ,声の出し方が大事です。

長くなったので,面接でどんな質問をすればいいかはまた次回とします。

リフレクション

はじめに
A01_はじめに
A02_コースの概要
Type
B01_Typeクラスとは
B02_型からTypeを取得する
B03_自前の型からTypeを取得する
B04_インスタンスからTypeを取得する
B05_Typeのインスタンスは1つだけ
Assembly
C01_Assemblyとは
C02_Assemblyの生成_実行中のアセンブリを取得
C03_Assemblyの生成_アセンブリ名で取得
C04_Assemblyの生成_パスを指定して取得
C05_Assemblyの生成_呼び出し元を取得
C06_Assemblyの生成_型から取得
C07_すべての型を取得する
C08_publicな型だけを取得する
C09_名前を指定して型を取得する
C10_メタ情報の取得
インスタンスの生成
D01_インスタンスの生成
D02_インスタンス生成後の具体例
D03_空のコンストラクタがないとエラーになる
D04_Activatorを使ったインスタンスの生成
D05_引数ありのコンストラクタで生成する方法
ConstructorInfo
E01_コンストラクタの情報を取得
E02_パラメータの情報を取得
E03_コンストラクタの情報からインスタンスを生成する
E04_コンストラクタを検索して生成する
E05_public以外のコンストラクタを取得
E06_staticなコンストラクタがある場合の注意点
E07_コンストラクタのアクセスレベルを取得する
MethodInfo
F01_MethodInfo
F02_引数ありのメソッド呼び出し
F03_メソッドがオーバーロードされているときの指定方法
F04_GetMethods
F05_属性で取得する
F06_staticメソッドを呼び出す
F07_戻り値を取得する
PropertyInfo
G01_PropertyInfo
G02_GetProperties
G03_属性を使ったチェック
G04_汎用的なチェックメソッド
G05_CanWrite

FieldInfo
H01_FieldInfo
H02_public以外のFieldInfo

EventInfo
J01_EventInfoとは
J02_AddEventHandler
J03_EventInfoの注意点
J04_RemoveEventHandler

dynamicを利用したリフレクション
K01_dynamicを利用したリフレクション
K02_dynamicを利用したメソッドの呼び方
K03_オーバーライドされたメソッドの呼び出し
K04_メソッドの存在チェック
K05_dynamicを利用したプロパティへのアクセス
K06_dynamicを利用したフィールドへのアクセス
K07_dynamicを利用したイベントへのアクセス