見出し画像

エンジニアの市場価値とは

学生時代からある程度はプログラミングに親しみ、専攻も情報系であった自分にとって、社会におけるエンジニアに求められるスキルというのはアカデミアのそれとは大きく異なるものであった。

業務プログラミングという、未知の世界

業務プログラミングではダイクストラなんか1mmも出てこないし、クイックソートが実装できる必要どころか、そのオーダーでさえ理解していなくとも、日常の仕事の98%はできてしまうのだ。
もちろん残りの2%は、高速化が求められたり、事業がスケールしたタイミングなどでちゃんと向き合う必要があるため完全に不必要かというとそんな訳はない。しかしそれはそのタイミングにならないと価値がわからないことである。

逆に、アカデミアでは全く触れなかったのに業務では当たり前のものもある。HTML/CSS/JSはWebエンジニアには必須のスキルだが授業では出てこなかった。研究では大学のスパコンを借りることこそあれど、インターネット上にサーバーをデプロイすることはなかったし、そもそもGCPやAWSすら何ですかという状態だった。iOS/アンドロイドアプリを書くこともなかったし、セキュリティや負荷について考えることもなかった。挙句の果てにはノーコードとかいうやつを使えばそこそこ複雑なLPなども作れてしまうため「え、僕達必要ないやん」と思うこともあった。

頭を動かす < 手を動かす

機械学習や量子コンピュータなどが話題を掻っ攫っていくテクノロジー業界だが、そういう最先端の技術が出てくることは全体の2%ぐらいで、日頃の業務の98%くらいは、データを整形したり、UIコンポーネントを作ったり、コンソールに出てくる謎のエラーログを見ながらウンウン唸ったりしているだけなのだ。

昨今エンジニアが持て囃され、怪しいプログラミングスクールが跋扈していたりする世の中であるが、それも(大抵の場合において)抜群の技術を持ったエンジニアが必要な場面よりも、一般的な技術を用いてプロダクトを実装する必要がある場面の方が圧倒的に多いからであると思う。

エンジニアの市場価値

ここまでは市場/ビジネスがエンジニアに要求する観点に沿って話していたが、ここからはエンジニアが市場に提供できる価値について考えよう。

高度な技術ではなく手を動かせる人が必要ということは、エンジニアという人種がコモディティ化しているともいえる。実際技術に関していえば、プロジェクトで使用する言語すら触れたことがなくても、他に何か一つの言語をちゃんとやったことがある人なら、そこから学び始めても大抵何とかなるものである。

では、エンジニアが自分の市場価値を上げるための差別要因は何なのか。私見であるが、重要だと思うポイントが3点あるので紹介したい。

①技術に関して水平的に知識がある

これは、自分の専門以外の分野にもある程度の知見があるということである。

事業における開発は、定型の開発受託でもない限り様々なスキルが要求される。Webサイトを作ると思えば、ログイン機能ができて顧客データを管理しなければならなかったり、スマホアプリを作ってみたらサーバーへの負荷が凄くてネットワークを見直さなければならなかったり。ましてや会社が突然ピボットして全く違うプロダクトを作ったりすることもある。

そういう突然発生する想定外の要件に対応できる人材は貴重である。事業としてもチームとしてもリスクヘッジとなる。

②ドメイン知識がある

これは世の「エンジニアの価値」論において見過ごされがちだが、個人的にはかなり大事だと思う。ドメイン知識とは、プロダクトがターゲットとする領域や分野、業界についての知識である。

プロダクトは、構想から完成までに二段階クオリティが落ちる。1段階目は「要件定義書に書き起こしたとき」で、2段階目は「エンジニアが要件定義書を読んだ時」である。プロダクトは高々、エンジニアが理解している範疇を超えることがない。

またプロダクトは、単独で存在するものではなく、ビジネスロジックに組み込まれて価値を発揮するものだ。それゆえ、それを使う人の使用場面や業務フローを意識して開発する必要がある。

どれだけ優秀なエンジニアであっても、開発に際してドメインへの理解は必要不可欠である。広告業界、ゲーム業界、不動産業界、機械、化学、法律、金融、出版、この世の中には様々なドメインがあり、様々なビジネスがある。そんな中で、何か一つ根差したドメインがあるエンジニアは、他のエンジニアにはない価値を生み出せるだろう。

③マネジメントの視点がある

プロジェクトマネージャーはプロジェクト全体を俯瞰するが、各個人のすべての進捗を管理するのは難しい上、そもそも技術的に全分野を理解することは不可能であろう。そうなると、下で働くメンバーたちは必然的に、自分しか知らない部分を持ちながら開発することになる。

そのように現場の見えない部分で重要な問題が起こった場合、PMがその問題に気づくのが遅れてしまう。もしその現場のエンジニアが一度でもマネジメントをしたことがある人なら、今自分が詰まっている問題がプロジェクトの進行におけるボトルネックになっていることがわかり、即座に適切なアラートを出せるかもしれない。また、この人はこの情報を知っておくべきだと判断し、自分からコミュニケーションを起こすこともできるだろう。

いずれにせよ、プロジェクト全体/チーム全体を俯瞰し、その中での自分のポジションを見極めながら仕事ができる人は、チームの開発に大きく貢献できるであろう。

まとめ

自分自身そこまで多くの現場で開発したことがあるわけではないので視点が偏っている部分はあるかもしれないが、単なる個別の開発スキル以外で重要視しているのがこの3点である。

最後に注意しておきたいのは、個別の開発スキルが重視されないというわけではなく、ある程度の技術は持っておく必要があり、さらにはそのある程度の技術について十分な(実務)経験があることは、これから先も要求され続けるだろう。先にあげた3点は、この足切りラインを超えた後の話であることは忘れてはいけない。

この記事が気に入ったらサポートをしてみませんか?