はじめに
CodeZineでは、はじめて連載させていただきます。株式会社ナレッジワーク CTOの@mayahjpです。ナレッジワークは「できる喜びが巡る日々を届ける」というビジョンのもとで、ワークエクスペリエンス領域と呼ばれる、会社内で生産性を向上させるために従業員が実際に使うソフトウェアたちをSaaSにて提供するスタートアップです。ついでにですが、いわゆる技術顧問的な立ち位置で技術設計を支援したり実装したりする株式会社ラムダボックスという個人会社もやっております。
筆者は東京大学理学部情報科学科、東京大学大学院情報理工学系研究科コンピュータ科学専攻を卒業、修了し、そこで得たコンピュータサイエンスの知識と技術力を武器に、長らくIBMの研究機関やGoogle日本法人などのいわゆる外資系IT企業で研究者やソフトウェアエンジニアとして働いていました。その一方で、あまりプログラミング力が重視されていたとは言いがたい、ベンダー的な会社でも働いたこともあります。そのような対照的な会社で働いた知見から、システムを作る上でプログラミング力がいかに重要であるか、そしてプログラミング力があることがどうキャリアにつながるかについてお話します。
対象読者
- システムインテグレーターなどに勤めていて、自らプログラムを書いてプロダクトやサービスの開発を行うことが少ないが、プログラミング力をつけてキャリアアップあるいはキャリアチェンジさせたい方
GAFAとキャリア
キャリアアップというと、みなさんは何を想像するでしょうか? やはりマネージャーとなり、人を使うことを想定するでしょうか?
いきなりですが、みなさんが「GAFAでは~~、GAFAだと~~」などと語るのが大好きなGAFAのソフトウェアエンジニアのキャリアの話をします。と言っても私が詳細にわかるのはGoogleだけなので、Googleの話をすることにします。Googleでソフトウェアエンジニア職で働いている人たちは、一般に組織で偉いとされている人ほどプログラミング力が高いことが多いです。
Googleでは、ソフトウェアエンジニアとプロダクトマネージャー、ピープルマネージャーは別の職種として位置づけられています。ソフトウェアエンジニアのレベルが上がったからといってプロダクトマネージャーやピープルマネージャーに「昇格」するということはありません。ソフトウェアエンジニアからプロダクトマネージャーに「職種変更」することを選択する人は稀にいるそうですが、ソフトウェアエンジニアはソフトウェアエンジニアのままで、ずっとコードを書いています。
レベルの高い人は「すごいソフトウェアエンジニア」として、技術面のリードをすることになります。ただし、レベルが上がると一般には部下を持つことになり、チームとしての出力が求められるようになってきます。より難しい問題を解くためには、どうしても頭数が必要だからです。すごいソフトウェアエンジニアは、複雑な問題を切り分け、部下に渡し、チームで成果を出していきます。問題を上手に切り分けることができないと、チームの出力が増えず、高い地位には行けない構造になっています。
問題を切り分けるにはその問題の構造を理解し、自分で解決策が出せる程度にはなる必要があるため、プログラミング力がなければ必然的にキャリアアップを望みにくい構造になっています(なお、プログラミング力があっても、上司とうまく行かなかったり、自由に働きたくてキャリアアップを選択しなかったりする人もいるので、職位が低いからといってプログラミング力が低いとも限りません)。