日本では、プログラマーの給料に大きな差があるようだ。
短時間労働で高給を手に入れ、空いた時間で次々と新しい技術にキャッチアップしているイケイケのエンジニアもいれば、長時間労働かつ低賃金で、およそ知的な作業とは言えないようなコーディング作業に充実するIT土方もいる。
どこで差がついたのか…。
個人的には、日本のエンジニアの給料はもっと全体的に上がって欲しいと思っている。
今回は、かつてエンジニアとして働き、社長としてエンジニアを雇ったこともある俺の経験から、「給料の高いエンジニアになるためには何をすればいいのか?」を徹底的に解説していく

プログラマーの凄さなんて一般化できない
プログラミングは、なかなか普通の人には理解されない世界で、あるいは当事者たちにもよくわかっていない場合が多いので、ネットなどの言説を見ると、プログラミングに関する様々な伝説や逸話が見つかる。しかし、あまりそういうものを真に受ける必要はない。その手の話をしたがるおじさんは多いけど、彼らは有能ではないので気にしなくていい。
プログラミングはあくまで問題を解決するための手段だ。優れた手段を使ったからといって成功するわけじゃないし、凡庸な手段で大成功を収めた例はたくさんある。
「手段のプロ」であるプログラマーたちが「手段」にこだわるのは当然だ。だから、プログラム言語の仕様のアレコレとか、「今はこの技術がアツい!」、みたいな話がエンジニアの間でバズったりする。ただ、そこに習熟したからと言って君の給料が上がるわけではない。
「技術に詳しいプログラマー」が「優秀なプログラマー」とは限らない。手段にこだわりを持ちすぎることで、逆に成果が出せなくなるというのはよくあることだ。
「優秀なプログラマーは一般的なプログラマーの10倍から100倍くらいの生産性がある」みたいなことがよく言われるが、これに関してはよくわからん。「生産性」とか「成果」って言葉をどう定義するかにもよるだろう。
何十年もキャリアのあるエンジニアが必ずしも現場で重宝されているわけではないし、大学でプログラミングを始めたばかりの素人に近い学生がものすごい成果を出すこともある。これは、技術や環境が移り変わるとか色々な理由があるが、とにかく俺が言いたいのは、「凄腕プログラマ」みたいな曖昧な言葉に踊らされるなよってことだ。
高給なエンジニアを目指すのであれば、「自分が優秀なプログラマーかどうか」よりも、「自分の書いたプログラムがどういう結果をもたらすか」にフォーカスしたほうがいい。
「この人達はすごい!」と思えるエンジニアがいる職場で働けるのは素晴らしいことだし、スキルアップしたいなら積極的にそういう場所を求めるべきなのだが、ネットで言われている「優秀なプログラマの条件」みたいなものには踊らされないようにしよう。

なるべく給料の高い職場で働け!
当たり前の話だが、給料の高いエンジニアになりたいなら、なるべく給料の高い職場に行く努力をしろ。
会社から給料もらう雇われエンジニアになる以上は、給料を上げたいなら給料の高い会社に行くしかない。
「それができれば苦労はしねェ!!!」って思うだろうが、「給料の高い職場で働いてやるっ!」という強い意志はめっちゃ大事。究極的な話、腕がへっぽこでも高給の職場に行けば君は高給エンジニアだ。
よく、TwitterなどのSNSを見てると、「技術のことよくわかってる僕が不理解な上司に苦しめられて日本の企業ってクソだわ〜」的なやつが流れてくる。中の下くらいの能力の大衆にはそういうものがウケやすいということなんだけど、この手のものを読んで気持ちよくなっていると能力が下がっていくので注意しろ。
日本の作家である村上ドラゴンは、
美人は三日で飽きるというのは、ブスの自殺を救うための嘘である。
と言った。
俺がそう思ってるわけではなく、村上ドラゴンがそう言ってたんだ。弱い人の心を慰める何かしらの嘘は世の中に必要だと言うことだ。
で、「優秀なエンジニアが無能な上司の下で苦しめられてる」というのも、「美人は三日で飽きる」と同じたぐいの優しい嘘なのだ。
優秀なエンジニアは引く手あまたなんだから、上司が無能ならすぐに転職してもっと労働条件の良い職場で働けばいいだけの話。
もちろん、よくわかってない人たちに現場が引っかき回されることはよくあるよ。ただ、そんなことやってる職場は競争力を失うし、今はそういうところがどんどん消えてる。エンジニアは人材の流動性が激しいので、まともな技術力とコミュニケーション能力がある人なら、好条件の職場に行けないわけがない。それができないのなら、自分の能力か行動力を疑ったほうがいい。
- SNSでよく見られる技術者上げ、上司(経営者)下げのエピソードを積極的に見て溜飲を下げてしまう
- そのようなメンタリティで1年以上SNSなどを使ってしまっている
に当てはまるなら、わりと言い訳の余地もなく君は無能だ。
「苦しめられているエンジニア像」に居心地の良さを感じるメンタリティを脱して、貪欲に「給料の高い職場」を求めなければいけない。

コミュニケーション能力はめっちゃ大事!
みんな勘違いしてるけど、プログラマーにとっても、コミュニケーション能力ってめちゃくちゃ大事だぞ! ある程度の規模で仕事をしたいなら、コミュニケーション能力はトップクラスに重要な能力。
プログラマーってのは気難しくてコミュ障なイメージがあるんだけど、一定のポジションを得て高い給料もらってるエンジニアは基本的にコミュ力が高い。
「IT土方」と呼ばれるようなブラックな働き方をしているプログラマーは、「技術力」か「コミュニケーション能力」のどちらかが足りていない。
「プログラマーはコミュ力なくても大丈夫」というのはよくある勘違いだ。ただ、別に面白い雑談したりとか大声で騒いだりみたいな、営業マン的なコミュ力が求められているわけであない。
大切なのは、相手の要求を理解して、自分の要求を相手に伝えることができる能力だ。
技術がよくわかってない相手の意図を噛み砕いて、適切な解決策を相手が納得できるように提示できる人はかなり強い。コミュ障なプログラマーは技術が苦手な人を見下して、まともなコミュニケーションをとろうとしなくなってしまいがちだからだ。
技術音痴の人と普通にコミュニケーションがとれるだけでも、凡百のプログラマーからは一歩抜きん出れるかもしれない。
相手の漠然とした意図を把握して、需要ピッタリのものをそれなりのクオリティで作れる、あるいはそれをやろうとする意志を持っているなら、多くの職場で活躍できるプログラマーになれるだろう。

忠誠心が武器になることを認識しよう
これも多くの技術者が見逃しがちなことなのだが、「忠誠心」は実はかなり大事な素養だ。
プログラマーは人材の移り変わりが激しい職業だ。技術者があるヤツはたいていの職場で需要があるので、待遇や給料に不満があるならすぐにやめることができる
ただ、経営者や、一緒に働く側の視点に立てば当たり前のことだが、ちょっとでも気に入らないことがあったらすぐに居なくなるつもりのやつよりも、一緒に事業に全力でコミットしてくれるやつのほうがいいに決まってる。自社のプログラマーが自社のプロダクトに愛着とモチベーションを抱いていてくれるほうがいいということだ。ちょっとやそっとのことでは止めないやつが欲しいんだ。
勘違いしないで欲しいのだが、「やりがい搾取」としか言いようのない糞ブラック企業に忠誠心を抱くのはバカとしか言いようがない。
俺が言いたいのは、「格上のポジションをゲットするために忠誠心を使え」ということだ。これは「コミュニケーション能力」の範疇とも言えるが、「俺は信用に値する人間だし簡単に裏切らない」ってことを相手に理解させることができれば、信用の無い人間よりも良い待遇を得やすくなる。
腕はあるけどいつ止めるかわからないやつよりも、腕はそこそこだけどめっちゃやる気があるやつを選ぶ会社は多いということだ。
別に「そういう態度を演じる」だけでも、若さや忠誠心みたいなものはけっこう武器になる。エンジニア連中はそういう考えを嫌うが、日本企業のほとんどは忠誠心の対価として仕事を与えてもらう仕組みになっている。
まあこういうことを界隈で言うとめっちゃ怒られるんだけどな。ただ、忠誠心が有用であることは間違いなく、凡庸な技術力でも、信用されている人は良い条件で働きやすい。

その分野の知識を持っているか
プログラミングそのものじゃなくて、作ったシステムがどういうふうにその現場で使われるのか、みたいな視点があるといい。
不動産系のプロダクトを作るなら不動産についての知識、教育系のプロダクトを作るなら教育関連の知識だ。
これはプログラマーの役割ではないにしても、いわゆる「上流」の工程を考えることができれば、チャンスが増える。
身も蓋もない話だが、技術力を必死に磨いて商品価値を上げるよりも、君を雇ってるようなやつらと友達になれるコミュ力や知識をつけたほうが、給料は上がりやすいということだ。
プログラミングってのはあくまで「手段」だ。めちゃくちゃ高度な技術を知っているからと言って、それがそのまま結果につながるわけではない。むしろ、やたら高度な技術を使いたがるというのはプログラマーにありがちなんだけど、そういうのは事業にマイナスの影響をもたらしたりする。
料理がめっちゃ下手なヤツって、無駄にオリジナリティを出そうとして、結果的に普通じゃありえないようなクソ不味い飯ができあがったりする。普通に旨いもんを普通に作れればいいんだ。
「相手の好みにぴったり合うような普通に旨いもんを作れる」ってのは最強だろ? プログラマーもだいたい同じで、高度な技術使うよりも需要を的確に把握して作業できるやつが強い。
環境は移り変わっていくもの
環境は移り変わっていく。技術そのものよりもむしろ、労働環境の移り変わりのほうが目まぐるしいかもしれない。
だから、先輩エンジニアが「俺はこういう働き方をしてこれくらいの給料になった!」みたいな話はほどんど当てにならない。これからも環境は変わっていくし、プログラマーとして高い給料をもらうための方法も変わっていくだろう。
「どうすれば良い給料がもらえるのか」にセオリーはないし、最終的なところは自分の手持ちのカードと相談しながら自分で判断しなければならない。
最近だと、FacebookやTwitterといったSNSから採用、というのが普通に行われるようになってきてると感じる。まあ転職サイトとかエージェントに高い金払うの馬鹿らしいし、お互いに情報を発信してる同士ならSNSから繋がって会ったほうがコストパフォーマンが良い。
何が言いたいかと言うと、「○○しないとダメなんだ」とか「○○すれば高給プログラマーになれる」みたいなことはないってことで、最終的には自分の頭で考えるしかないってことね。ある意味で残酷な話だけど。
プロダクトを公開している人は強い
GitHubなどで、何らかのプロダクトを公開している人は強い。
情報やノウハウがコモディティ化するほど、「何かを完成させる」能力が重視される傾向が高まっていくから、「職歴何年です」って言うよりも「俺はこういうのを作ったんだ」って言えるほうがバリューが高くなってくる。
書いたコードは他人に見せよう。
「技術ブログ」を書くというのも、これからは非常に重要な手段になっていくだろう。オピニオン記事やバズるような記事を書く必要は一切ない。そんなことしてもむしろ逆効果だ。
作ったものを公開して、完成までに躓いたところやわからなかったところ、改善できそうなところをサラッと書けばそれはもう立派な技術ブログだ。それをやるだけでも十分貢献になるし評価される。

まとめ
長くなったからまとめだ
- ネットの「こういう技術はすごい!」みたいな話に惑わされない
- 「給料の高い職場に行くんだ!」という強い意志が大事
- コミュニケーション能力が必要だという事実から逃げない
- 結果にコミットする気があると思われると優遇されやすい
- 成果物がどういう働き方をするかについての想像力があるやつは強い
- 環境は移り変わっていくので、過去のやり方が正しいとは限らないし、様々な新しいチャンスがある
- 公開しているプロダクトや技術ブログがあると話が早くなることがある
ってことだ。
でも実は、「給料の高いプログラマーになりたい人」って、日本にはそんなにいない。なんだかんだでみんな居心地の良くて楽な空間を求めてる気がする。
給料アップのために努力するつもりのプログラマーは、ここで書いたことを意識すれば成功率が上がると思うぞ。
一方で不都合な真実だが、自分のやりたい技術にこだわりだすと、キャリアアップとしてはむしろマイナスに働いてしまうこともある。
「やりたいことをやってお金になるのは一握りのトップクラスだけ」という当たり前の話なのだけどね。