ソフトウェアエンジニアのキャリアパスを考える

調べても調べてもどうしたらいいかわからない。
システムエンジニア、プログラマ、主にITに関わる人のキャリアパスをガッツリ調べた。
主に分野別にまとめ。





スペシャリスト



中小企業だとどれか一つに会社全体が特化しているとかでもない限り難しいかもしれない。
専門分野 + αがあると強い。


インフラエンジニア


範囲が広すぎるのでひとくくりにできない。が分けるには知識が足りない。
(自分の周りでは)単価が高い、需要が高い。
最近はAWS,GCPなどクラウド周りの需要が高い。

ネットワークエンジニア


インフラと兼任するケースが多いかもしれない。
詳しく知らない。

データベースエンジニア


新規大規模プロジェクトやデータ分析プロジェクトで必須(後者はデータサイエンティストとも呼ばれる)
それ以外だと活躍の場があまりないかもしれない。

セキュリティエンジニア


詳しく知らない。重要と言われる割にあんまり見ない気がする。

アーキテクト


業務分析、設計、プロジェクトの技術選定をする人。CTOとも呼ばれているケースもあるかも。
プロジェクトを中長期に渡って正しく進捗するようにしないといけない。
色々な技術、言語、フレームワークを知っている必要があるのでゼネラリスト的な面も必要。

チーフ(シニア)エンジニア


高スキルエンジニア。
開発責任技術者、熟練技術者。
国内で明確な定義はないが技術リーダーと言ったところ。

.netエンジニア


ほぼWindows向け。
一応ASP.netならウェブもいけないこともない。
需要はまだそれなりにある。いつまで続くかは分からない。

組み込みエンジニア


ハンディ、IoTなど
ロボティクス分野などで需要は高いらしいがよく知らない。情報が少ないのが難点か。
Cやアセンブリが現役。

サーバサイドエンジニア


1つの言語、フレームワークに特化するくらいピーキーなら常に当該技術についてウォッチしてコミッターレベルになるくらいはあったほうがいいかもしれない。
最低限のセキュリティに関する知識は必須。
極めるならLinux、コンテナ などの知識もほぼ必須になる。

フロントエンドエンジニア


1つの言語、フレームワークに特化するくらいピーキーなら常に当該技術についてウォッチしてコミッターレベルになるくらいはあったほうがいいかもしれない。
今のところ変化が一番早い分野。
一例を上げるとVue,React,PWA,AltXxx,Webpack,テスト,etc...あたり。
+αでデザインに対する知識も欲しい。

モバイルアプリ開発


iOS, Androidのネイティブアプリケーションを開発する。
需要はまだまだ高い。
常に情報は追っておきたい。+αでデザインに対する知識も欲しい。

フルタイムコミッター


会社に所属しながらOSS開発をする人。
OSSに自社の要望を通したいケースとOSS利用時の知恵袋的なケースの二種類ニーズがあると思われる。
業務時間の半分だけといった場合もある?

こぼらー


職種というわけではないがCOBOL,RPGなどレガシーなシステムを保守する人。
需要に対して供給が足りていないのでそれなり。
キャリアパスとして選ぶかというと選ばない。

AIエンジニア


今をときめくエンジニア。
これからどうなるかは分からない。
主に研究系とどうやって活用するかの2種に分かれる。後者はプロダクトマネージャに近いかも。
前者は極めればg○○gleあたりが拾ってくれるかもしれない。


テストエンジニア


テストを専門とする職種。
国内ではニッチ。


その他


特定の言語に特化したりアルゴリズムなどを極める。
主に研究機関。
狭き門な気がする。
バイオエンジニア、航空エンジニア、メディカルエンジニアなどもあるらしい。、





ゼネラリスト



気づいたらなっていたパターンが多いかもしれない。
それぞれの分野についてあまり深くないのが欠点か。

プレイングマネージャ


歌って踊れるプログラマ。管理もコーディングもする人。管理を手抜きしていいわけではない。
実装しながら管理可能な人数は5人までが目安らしい。
それ以上は実装を諦めてマネジメントに徹するしかない。

フルスタックエンジニア


一人で完結する人。
組み合わせの例として
iOS,Android,サーバサイド
フロントエンド、デザイン(+Firebaseなど)
サーバサイド、フロントエンド、インフラ周り
など
サーバとフロントを見れる人をフルスタックと表現するケースもあるかも。


システムエンジニア


どこにも入らなかったらこの枠に入る。
要件定義、基本設計、詳細設計、環境構築、実装、テスト計画、テスト、運用設計、運用、保守 のうちいずれか0以上場合によっては全部を担当する。
範囲が広すぎてよく分からない。


SRE


Site Reliability Engineering
ざっくり言うと運用とアプリケーションエンジニアの中間。あるいは間を埋めるもの。
https://landing.google.com/sre/sre-book/chapters/introduction/
国内にポジションがあるかはわからない(あっても本来と乖離しているかも)


社内SE


主にメーカ系のシステム部門。
会社によって大幅に待遇と仕事内容が変わる。
安定感はあるかも。



マネージャ



しっかりやると難易度が高いうえセンスがいるにもかかわらず軽視されがちな気がする。


プロダクトマネージャ


プロダクト(製品)に対して責任を持つ人。


プロジェクトマネージャ・リーダ


プロジェクトに対して責任を持つ人。
PMだと顧客より、PLだと現場よりの意味で使っているところが多い(厳密な定義は恐らくない)
チームがより進捗できるよう環境を整える。
プロダクトマネージャが製品の完成度を高めて売り上げを伸ばすのに対し、プロジェクトマネージャは期限遵守&スコープを抑えて売り上げを伸ばすのが役割。
請負と自社開発と言い換えてもいいかもしれない。


プロジェクトマネージャ(小・中規模)


小規模プロジェクトは数人*1〜3ヶ月程度を想定。
中規模プロジェクトは〜10人*〜1年程度を想定。
複数プロジェクトを兼任するケースが多い。
小規模だとそもそもあまり関わらないケースもある。


プロジェクトマネージャ(大規模)


大規模〜超大規模クラスの場合サブプロジェクトを設けてそれぞれのサブプロジェクトマネージャを管理するといった形態をとる。
求められるスキルが全く異なるうえ大手くらいしか機会がない。
立ち上げ、進行、結果のすべてのフェーズにおいて能力を適切に判断する術がないため大きな勘違いと悲劇を生んでいる気がする(実際のところは知らない)


スクラムマスタ


アジャイル開発を進める文脈で出てくる。
主にスクラムを組むうえで自律的なチーム作りを支援する。


PMO


Project Management Office
プロジェクト管理の標準化・支援などをおこなう。



その他



ITコンサルタント


企業の経営課題を解決する人あるいは詐欺師
業績に大きなインパクトを与えられる人はそれほど多くない気がする。

セールスエンジニア


技術に詳しい営業。

フリーランス


営業、各種事務処理も自分でしないといけない。
高給を狙うなら特定の分野のスペシャリストになる必要もある。




その他トピック



特定の言語に特化するのはありか


個人的にはなし。これはJava歴10何年というベテランが実際には私より設計(実装)があまり上手でなかったことに起因する。
言語制約上止む終えない概念などをなんの疑問も持たずに他の言語に持ってくるのでかなり癖が強くなる(読みづらい)
少なくとも手続き型、オブジェクト指向型、関数型をそれぞれ1つ以上やっておきたい。
その言語の第一人者レベルになれば話は別かもしれないがハードルが高い上にその手の人は他にも言語を触っているだろう。


生涯プログラマで入れるか


今更語ることでもないかもしれないが余裕。
自分の所属している会社では50代のプログラマがいるし何なら定年退職している。
プログラマ3x歳定年説は全くのデタラメだったということになる。


転職について


現状では実力があればあるほど昇給幅が大きくなるといったことはない(多少はあるが実力差を埋めるほどではない)
おそらく年功序列だとか特に解雇規制が原因だと思われる。
よって収入だけを追い求めるのなら景気が良くなったタイミングで転職するというのが最善手のようだ。
あくまで本当に実力があればだが...


需要について


少子高齢化も相まって需要は上がり続けると思われる(この業界に限った話でもない)
一時はAIに置き換わるといった話も出ていたようだが少なくとも今のAIには無理。



業務知識を持ったエンジニア、育成、組織設計する人なども必要とされるはずだがどの枠に入れていいのか分からなかった。
適宜更新予定。

2019年2月13日水曜日