(いいアイキャッチ画像がなく、こんなのにしてしまい済みません。)

先日某所で、「稼げるエンジニアになるにはどうすれば良いか」みたいな話が出ました。そんな話を別の場所でしたところ、そこでもその話題で盛り上がりました。お金というのは多くの人が興味がある話題だと思うので、今回は「稼げるエンジニアになるためにはどうすれば良いか」を考えてみます。

基本的な話

需要と供給 → 稼げる技術とそうでない技術がある

「需要と供給」は経済学の最初の方で習いますが、我々一般人にも馴染みのある概念でしょう。需要が多ければ価格が高くなり、需要が少なければ価格が安くなります。

つまり、需要が大きく供給の少ない技術を持っていれば、「稼げるエンジニア」になれるはずです。
以上!

と話が終われば良いのですが、そんな単純でもありません。

技術力が必要

とある技術を持っている人が複数いた場合、技術レベル(やその他の要素)で稼げるかどうかが決まってきます。

では、その技術レベルがどう決まるかというと、

  • 努力(勉強量、経験値)
  • 生まれ持った向き不向き

という要素に影響されます。そして、自分で何とか出来るものは前者の努力だけです。

という事は、(前項で書いた)「稼げる技術」に関して、技術力を向上させる努力をしていけば、稼げるようになるはずですね。本当でしょうか。

盲点

努力は大変、好きこそものの上手なれ

前項で「技術力を向上させる努力をしていけば」と簡単に書きましたが、実際には結構大変な事です。勉強を始めたけど分からないところがあって挫折するかもしれませんし、途中で飽きてしまうかもしれません。

以前、以下のようなブログ記事を書きましたが、やはり何かを「好き」で「やりたい」という気持ちがあれば、大変な努力も続けられると思いますし、そもそも「大変」と思わないかもしれません。

逆に、大して興味が無い技術を「稼げそう」という理由だけで勉強し始めても、挫折してしまう可能性が高くなります。

「稼げる技術」は移り変わる

沢山の努力をして、何とか「稼げる技術」を身につけたとしても、それで一生安泰という訳にはいきません。「稼げる技術」あるいは流行りの技術と言い換えても良いかもしれませんが、そうした技術は時代によって移り変わります。

(この段落はちょっと専門的な話を含みます。)プログラム関連に限定しても、ここ20年で Java, Ruby (on Rails), Scala, Python, Go, Rust など、トレンドは移り変わっています。もちろん、これらの技術は廃れた訳では無く今でも至る所で使われているので、そうした意味では今でも稼げると思いますし勉強した甲斐があったと思います。では、CakePHP や Chainer とかはどうでしょう。控えめに言っても、新規のプロジェクトで使われる事はまず無いと思います。

そうした廃れた技術を頑張って覚えた人、特に好きでも無いのにこれらの技術を覚えた人は、残念な気持ちがするのでは無いかと思います。

では、そうした技術に費やした時間は全くの無駄だったのでしょうか。必ずしもそうとは言えません。CakePHP を学ぶ過程で、web アプリケーションの基本的な構成や仕組みについて理解が深まったかもしれませんし、他の web フレームワークを学ぶ時に使える知識も多いと思います。

どうしたら稼げるのか

ここからが本題ですが、結局のところどうすれば稼げるようになるのでしょうか。

一番最初で「需要と供給 → 稼げる技術とそうでない技術がある」という見出しを書きました。そこでの稼げる技術はカギ括弧無しの稼げる技術です。その後、カギ括弧付きの「稼げる技術」についても書きました。では、カギ括弧無しの稼げる技術とはどうしたものでしょうか。

稼げる技術 ≒ 廃れない知識

上の方で「稼げる技術」とカギ括弧付きで書きましたが、個別のプログラム言語やフレームワークの知識などは廃れてしまう可能性もあるため、(その技術が大好き、開発にも携わっている、とかの理由でも無い限り)流行りを追って個別の技術を深追いしても、長期的に稼げるようになる確率はそこまで高くありません。それよりは、どのプログラム言語やフレームワーク、あるいはミドルウェアでも共通の仕組みや前提となる知識を勉強した方が、長く使えていわゆるコスパが良いと思います。

具体的には

  • データ構造・アルゴリズム
  • ネットワーク
  • データベース
  • 数学

といった、少し低レイヤーの知識を学んだ方が良いと思います。

本当に需要が大きい事(=改善)が出来ると稼げる

前項で説明した「廃れない知識」をどのように使っていくか、というのも稼げる/稼げないに関わってきます。

少し話は変わりますが、「技術」という言葉は文脈によって異なります。technology という意味もあれば engineering という意味もあると思います。稼ぐためには、technology も engineering も必要ではないかと考えます。稼げる技術を知識として持っているだけで無く、それをソフトウェア開発の現場で活かして、お客様の課題を解決する事によってお金が発生するからです(BtoB, BtoC どちらでも基本的には同じです)。

では、お客様の課題をソフトウエアの力で解決するためには、新たなシステム・サービスを素早く・バグが少ない形で提供できれば良いのでしょうか。もちろんそれも必要ですが、世の中には新規システム開発の仕事より既存システムの改善・改修の仕事の方が多いのです。従って、既存システムの改善・改修もこなせる人の方が稼げる可能性が高いです。

既存システムの改善・改修もこなせるようになるためにはどうすれば良いのか、については本ブログのスコープを超えると思うので、機会があればエンジニアブログの方に書こうかと思います。

まとめ

私が考える稼げるエンジニアとは

  • 廃れない知識(コンピューターサイエンス、数学等)を土台として持っている
  • そうした知識を使って
    • 新規システムを素早く・バグが少ない形で提供できる、だけでなく
    • 世に存在する千差万別の既存システムを状況に応じて適切に改善・改修できる

という人です。逆に言うと稼げないエンジニアとは

  • 流行りの技術を追いかけるが、廃れない知識を得る事にはあまり興味が無い
  • 新規システム開発には興味があるが、既存システムの改善・改修には興味が無い

といった人です。