∑考=人

そして今日も考える。

SIerに就職する前に覚悟しておくべきこと

それは、「SIerの本質はIT業ではなく、サービス業である」こと。要するに、召使いってこと。

 

SIer、特に大手の会社の場合、システムを実際に作る工程は外注するのが常識になってます。その理由は、システムを作ること自体に大きな付加価値がないから。逆に上流工程に近いほど付加価値は高いと言われており、もう何年も前から外資系のSIerっぽい企業はコンサル領域にシフトしています。

 

10年前のアメリカを見れば今の日本に何が起こるかわかるとか言われてますけども、確かに同じような流れは日本のSIerにもとっくに押し寄せているんです。今のSIerが本当に重きを置いているのって、お客さんの要求をいかに満たすか、なんです。どちらかというとこれは非常にマーケッター的、ビジネス的な考え方ですね。

 

もちろん、お客さんの要求を満たすことを目的として最終的にはシステムを作るのが私たちの仕事なので、ITエンジニアとしての側面がないわけではありません。ある程度の技術的な知識も必要とされます。

 

ただ、そこを極めていくことは全く求められてません。「極めたいなら勝手に極めれば?でもうちの会社じゃ大して役に立たないよ?」って感じです。そして、私がずっと腑に落ちていないのは、”良い”システムを作ることにあまり関心がない人が多いことです。

 

ちょっと面倒な改善案を出したりすると、「実害がないならいいんじゃ・・・」とか「お客さんがいいって言ってるかいいんじゃ・・・」みたいな感じになります。この点がうちがエンジニアの会社ではない、と強く感じる理由でもあります。

 

断っておくと、悪いシステムを提供しているわけではありません。ただ”良い”システムとは大きくは二つの側面から考えることができて、ユーザー、すなわちお客さんから見て良いかどうかに加えて、開発者、すなわち私たちのようにシステムを作る人間にとって良いかどうかが最終的にはシステムの良し悪しを決める要素なんです。

 

当然、お客さんから見て良いと思われないシステムを提供すれば職務怠慢になってしまいます。そもそもお客さんがこんなことを実現したい、というWillをもとにシステムは作るものなので、極端な話着実にこなせば程度の差はあれ、お客さん視点から見て良いシステムはできます。(簡単にできるわけではないですよ。)

 

ただ、お客さんを優先するあまり、開発者視点の良さが全く伴っていない場合が少なくありません。開発者視点の良さが何なのかがピンとこない方もいると思うので、簡単な具体例を。

 

仮に、お客さんが「1+2の結果を出力するシステムが欲しい」といってきたとします。ここまで単純なシステムであっても、本来ならば、「何に利用するのでしょうか?」とか「出力結果はCSVファイルで良いでしょうか」みたいな問答を繰り返し、細かいところまで詰めていかなくてはならないのですが、今回は本当に結果を出力できれば何でも良いものとしましょう。

 

すると、おそらく下記が最もシンプルなプログラムになります。

 

int main(void) {

printf("3");

}

 

1+2の結果は必ず3なので、3を出力するだけでOKです。これはお客さんの要求を満たしているので、お客さんから見れば間違いなく”良い”システムです。

 

ただ、少し開発者視点での良さを考えると、例えばこう言う書き方になります。(C言語忘れてきたので間違っていればご容赦を。)

 

int main(int input1, int input2) {

  printf("%d"input1+input2);

}

 

ここでは1や2を変数として取り扱い、それを計算するロジックを記述しています。そして、変数の中に1や2を代入するための定義ファイルのようなものを別で作成する、といったイメージです。input1=1 input2=2として定義すればこちらもお客さんの要件を満たしています。

 

こういった作り方をすると、もちろん、工数は膨らんでしまいます。しかし、どんな嬉しいことがあるかというと、例えば、開発終了後に「次は3+4の結果を出すシステムを作ってくれ」とか言われた場合です。

 

前者の作り方ではまた一から同じだけのコードを書かなければならない(再利用できない)んですが、後者であれば、定義ファイルだけ新しいものを作ればいい、つまり次の開発がしやすいんです。

 

でも、この保守性はあんまり重要視されません。だって、今の開発を乗り切るのが最優先だから。それにお客さんから見えないところの品質が上がっても、受注額は変わらないからあんまりメリットはないし、むしろ保守性が高いと、工数が下がるので金銭的にはデメリットすらあるんです。

 

じゃあまぁ考えられる範囲でいいか、とか今回問題じゃなけりゃいいか、ってなるわけ。

 

同じような理由で新しい技術を導入したりすることも難しいですね。新規開発だとしても、それなりに実績のある…すなわち既に大衆化している技術しか採用されない傾向にありますね。やっぱり新しいことをするのはリスクがでかいから。

 

すると、まぁリスクとって凄いことやろうとするよりも、今までどおり堅実にやりましょう、となる。まぁここら辺は正直仕方がない。特定の顧客に依存しているのがSIerなので、一つの失敗が致命的になっちゃうからそうせざるを得ないんです。構造的に。

 

長くなってしまいましたが、まとめると、SIerにいると、開発者としてのスキルはほとんど上がらないんです。会社の中には技術を磨くキャリアパスも用意されているケースがほとんどですが、どんな仕事につけるかという偶然性に大きく左右されちゃいますし、「ITスペシャリスト」なんて肩書きが着いたとしても、我々がそうなる頃には本当の意味でスペシャルではないスペシャリストが量産されているだけでしょう。

 

「自主的に学ぶことで目指すことはできる」とか上の世代の人は言ってきますけど、自主的に学ぶための時間なんてものは与えられないですし、仕事が占める時間や検討の深さとは次元が異なるので、エセスペシャリスト止まりです。もしバリバリの技術志向の方がSIerに入るならそれなりの覚悟を持った方が良いでしょう。