エンジニアのキャリアを考えるときに必要な要素


エンジニアのキャリアを考えるには様々な情報が必要ですぐに分かるものではありません。
これまでに採用担当として経験して知ったこと、感じたことを書いてみました。

# これを書く人は誰？
これまでエンジニア採用に長く関わっているエンジニアリングマネージャです。
メガベンチャーやスタートアップでエンジニア採用をして８年になります。

エンジニアとしてはSI系もWeb系も経験をしており、片手では足りないくらいの転職を経験しています。

SIを経験した後にメガベンチャーへ転職を経験しています。
SIの会社での採用については面接の経験を少ししたことがありますが、１人のエンジニア時代だったため、Hiring Managerとしての採用意思決定に関わった経験はありません。

自分自身の転職経験と採用担当官としての両面からエンジニアのキャリアについては色々な経験をしているかなと思っています。

# エンジニアのキャリアを考えるときに必要な要素

## ３+１ の要素

キャリアは転職するだけで作られるものではないです。
様々な要素の変化や組み合わせを理解しながら過去、現在、未来を考えるものになります。

時間軸の要素を考える前に、エンジニアは３つの要素を知る必要があると考えました。
- 技術
- 環境
- 成長

そして、これら３つを加味した上でのキャリアの選択です。

エンジニアにとって**技術**は生命線です。この要素を忘れるわけには行きません。
次に技術の進化スピードが早いため、それに合わせた自分自身の**成長**を出来なければキャリアはステップアップしません。逆を言うと成長できなければ緩やかに周りから認められる力を失っていきます。
そして、技術や成長などのあらゆる要素を包括して検討するべき、働く**環境**があります。
つまり、エンジニアの場合は多様な要素を深く理解しながらキャリアの**選択**を考える必要があるため、エンジニアのキャリアを考えることは難しいと思います。


#### 次のキャリアを早急に決めすぎてしまう
よくあるのが、１つの要素だけで転職などを決めてしまうケースもありますが、それは将来のキャリアを選ぶには少し検討が足りないと思っています。
この技術がやりたいから転職したいとか、今の環境が嫌だから辞めたいとか、成長だけを求めていくとか。１つだけで選ぶと残り２つは運に任せる形になるため、短期で次の環境を求める原因になると思います。

残念ながらエージェントやキャリアアドバイザーの方であっても３つの要素を深く理解してアドバイスが出来る人は少なく感じています。。

そこで、自分でこの３つの目線で考えられると良いと考えてこの記事を書きました。

# ３つの要素の個別説明

非常に多くの要素があるため、なるべく短い文章で説明したいと思います。

## 環境
- 会社
    - 会社の文化は大事です。仕事の意思決定の基準になります
    - 開発を大事にしている組織と開発をないがしろにしている組織の両方があります
    - エンジニアにとってどちらが良いかは言うまでもないです
    - 他の職種にとっては良い会社でもエンジニアにとってはどうかということが大切です
- 事業ドメイン
    - 自分の興味がある事業に関わることが良いでしょう
    - 事業とはどういうものかを考えてみると良いです
    - 想像する以上に事業の形が開発文化に影響を与えます
    - 技術を使っていても、最後に事業に貢献することがなければ技術は最後の最後に価値を発揮しません
    - 事業への興味があれば技術は自然と価値を最大にするための取り組みが出来ます
- ビジネスモデル
    - 開発文化に非常に影響を与えます
    - SES、SI系、Web系など様々な形態がありますが、どれも良いところがあります
    - どれが良いかは人によります
    - 自分に合う環境を探すことです
- チーム
    - 会社が大きくなるとチームごとに文化が違うことがあります
    - チームがどのように構成され、どう交流しているかを知りましょう
- メンバー
    - 最後は誰と働くかによって成長も変わります
    - 面接ではマネージャではなく、現場の人と話しましょう
    - 現場の人と話せない会社はちょっとやばいかもしれません
- 開発プロセス
    - アジャイルやウォーターフォールでエンジニアとして学べる範囲が違います
    - どちらが良いかは自分のスキル状況やどのような働き方がしたいかによります
    - アジャイルやウォーターフォールという言葉が通じない環境はちょっと危ないかもしれません
- コミュニティ
    - 会社以外の環境としてエンジニアのコミュニティがあります
    - 他の職種に比べて異色なほどに社外の交流の場があります
    - 会社をやめなくても外の世界を知る機会として非常に良い場所です
    - 多くの学びが溢れています


## 技術
- 開発言語
    - 自分の好き嫌いと流行り廃りがあります
    - フレームワークやライブラリでもレガシーなのかモダンなのかが分かるレベルにまずは自分自身が成長したいところです
- パブリッククラウド
    - 特別な理由がない限りは当たり前に使う時代です
    - もし使われていない場合はその特別な理由を考えてみるのが良いでしょう
    - 特別な理由がレガシーだったり、開発が評価されていないだったりのときは転職しましょう
- データ量
    - データの量が多いだけでも多くの技術力が必要になります
    - ハイレベルな技術活用環境を探したいときには１つの指標にすると良いでしょう
    - 私の経験では１日10億件のデータが増えるケースもありました
- データ質
    - データの量を求めるケースではデータ構造がシンプルなケースが多いですが、データの質を求める場合は、データとデータの関係性が複雑であったり、ドメイン(業務知識)の工夫が必要になったりする、設計の難しさとしての技術力が求められるケースがあります
    - こちらもハイレベルな技術活用環境を探したいときには１つの指標になることもあります
- 開発規模
    - 大規模が良いか小規模が良いのかは好みです
    - ただ、志向性に合わない環境は不幸です
    - 個人的には5〜10人程度までの組織がチーム力と自己の責任のバランスが良いと感じます
    - 数十人を超えると、自分が作っているものがどう役に立ったとしてもサービスの一部開発しか見えない状態かと思います
    - ただ、数十人集まると、自分の専門に尖った開発だけをやっていてもサービス運営できることもあります
    - 人数が少ないほど自分の責任も大きくなるので自由に技術を使うことが出来ることが多いです
- 開発範囲
    - SI系では要件定義・設計・実装・テスト・運用などのフェーズで分けられて、担当範囲に分担することが多いです
    - Web系ではバックエンド、フロントエンド、インフラ、ネイティブアプリなどの職能的な分け方だけで、工程は全てを担当することが多いと思います
    - どちらが良いかはその人の能力と志向性しだいです
    - 広くできる方が偉いわけではいです
    - 「できない」と「しない」には大きな差があるため、自分の強みスキルを活かすためにどこまでが必要なのかは考えてみるのが良いでしょう

## 成長
- 初級者
    - まずは狭い範囲でも自分の強みとなる自信のある技術を身につけるべきです
    - いきなりフルスタックを求めると、色々触っているがどれも活躍するレベルにないという状態になったりします
    - 基本はチーム開発があたりまえの時代なため、それぞれの強みを組み合わせてサービスを作る方がより良いものが作れます
    - その時に、どれもすこしずつ出来る人よりも、どこか一つ負けないスキルがある方が良いので、まずは深く技術を身につけることを意識する方が良いです
    - そのため、開発フェーズに集中できるSIerやSESも選択肢に入れることが出来ます
    - 開発現場ごとの当たり外れは激しいですが、逆に色々な現場を経験できたり、初級者でも大きな開発に参加できるチャンスがあったりします
- 中級者
    - まだフルスタックを求めることはおすすめしません
    - ハイレベルな技術を活用できる環境を求めると良いと思います
    - ハイレベルな技術を使う環境がなければ、技術なんてこんなもんだと思ってしまいますが、そうすると成長が止まります
    - 少年野球でどんなに練習しても、４番でピッチャーをしていても、甲子園でヒットを打てるレベルに成長することはありません
    - 求められる技術レベルが高い環境を探してステップアップすると良いと思います
    - 技術を使うことだけでなく、技術を使う意味を考えて理解し、技術を適応した後の未来がどうなるかを予測しながら技術を使い、設計し、コードを書き、テストを実装して、リリースしましょう
    - 半年後や１年後にその技術や実装が正解だったかがわかります
- 上級者
    - 自分の強みから一つ隣の技術を身につけることで、自分の強みがより強化されるように動くのが良いと思います
    - 結果的にフルスタックになっているかもしれません
    - １つの技術を深掘りして極めると、技術選択をするときの引き出しがいくつもある状態になっていると思います
    - その技術はチームの方向性を決める力となって、チームを導くことが出来ます
    - 技術の理解が深ければなぜそれを使うべきかを説明可能になっているはずです
    - 事業と技術をつなぐ技術選択が出来るはずです
    - 技術のメリット・デメリットの説明が上手く出来ず、好き嫌いでしか説明できない場合は、まだ技術の理解が足りません
    - 技術の強みを説明するために、違う技術に触れてみるのも良いと思います
    - 技術の概念、理念、意図、戦略、設計がフレームワークやアーキテクチャなどにはあるので、それが理解出来ていて、説明が出来て、ベストなタイミングで利用が出来ると良いでしょう

## ３つの要素を踏まえて、キャリアをどう選択するか
- 過去
    - 今までの実績です
    - 成長の過程の証明
    - 職務経歴書で表現するべき事象になります
    - 職務経歴書には言われて作ったことではなく、自分がやりたいと思ってやったことを書くのが良いでしょう
- 現在
    - 今の気持ちです
    - 過去の気持ちは考えすぎなくて良いと思います
    - いままでや今いる環境がどうかではなく、これからどうしたいかを考えることが出来ます
    - 過去を重ねて作った今持っているスキルと将来を繋ぎます
    - 今いる環境が違うと思うのであれば、違う道を自由に選べます
    - 常にキャリアの分岐点です
- 未来
    - 成長したいこと、経験したいことを選ぶことが出来ます
    - その道に行くために力が足りないなら、その力を伸ばす時間も使えます
    - 技術を選んだ後に本当にそれで良かったのかを試されるのは実際に使われ始めて、機能を追加したり、拡張したりしたときです
    - そこまで想像して技術を選ぶエンジニアになっていきたいです
- 行動する
    - 環境、技術、成長をあわせた次のステップをどう考えるか
    - そのためには、これまでやってきた過去の実績、現在の思い、未来の計画が必要になります
    - どんなに考えを巡らせても行動が変わらなければ未来は変わりません、キャリアは進みません
    - 新しいことをするときには失敗するのは当たり前です
    - 多少の失敗をする前提でも挑戦して行動することが成長に繋がり、それがキャリアを作ります



# まとめ

それぞれ短い文章ですが、多数の観点について今までの経験から感じることを書いてみました。
転職やキャリアを考えるときの観点としてだけでも役に立ったらと思います。

エンジニアのキャリアには様々な情報が複雑に絡み合い、整理が難しいです。
色々な情報を書いたのですが、エンジニアのキャリア選択に置いて最も注目するべきは成長観点だと思っています。

エンジニアはキャリアを考える上で成長を考えたとき、何を成長するのかというと技術研鑽になります。
技術研鑽をするには技術のチャレンジが出来る環境が必要になります。

３つの要素のどれから整理しても影響し合う結論になるのですが、
成長という要素こそ、今使っている技術や会社などの枠にとらわれずに自分にフォーカスして考えることが出来るため、成長を起点に考えることが良いと考えています。

過去・現在・未来の中で、自分で変えることが出来るのは未来だけです。成長観点で自分の力を伸ばすことのできる未来が想像できることが大切です。

本当に必要なものは職務経歴的なキャリアではなく、エンジニアして企業に依存せずに働くことができるようになるスキルではないでしょうか。

スキル成長を加速させるためのキャリアを考えてみても良いのではないでしょうか。