やりたいことをするための環境を探そう

この記事は「エンジニア転職」のアドベントカレンダー10日目の記事になります。

https://qiita.com/advent-calendar/2023/change-jobs

# 経験の場や成長をするための「環境の重要性」

今までの経験を振り返って考えると、様々な会社を経験しましたが、１つの会社に居るだけではとても経験できなかったと思うことがたくさんあったと感じました。

同じことを繰り返すだけの毎日やチャレンジしない毎日を過ごせば楽かもしれませんが技術的な成長は止まってしまうと感じます。技術的な成長を望むのであれば、同じ会社であっても、定期的に違う環境にへのチャレンジが必要なのだと思います。

また、会社によって得られるものが違うため、環境によって得られる成長速度が数倍くらい違うのは当たり前なのだと実感しました。早いスピードで成長するためには大変なことも多く、たくさんのことを乗り越える必要はありますが、振り返ったときに得られたと感じることは大きいと感じます。

一言でまとめれば、コンフォートゾーンから出る機会を自分で作っていく必要があるということです。

今の時代のエンジニアは沢山の選択肢があるので、環境というものをいつも考えておくと必要があると感じています。

## 記事の筆者の今までのキャリア紹介

転職の話をするにあたって、どんな経験を持った人間が書いているか、背景を含めて知ってもらえればと思います。
社会人になってから基本的にウェブアプリケーション開発のエンジニアとしての経験をずっと辿っています。SI系とWeb系の経験を両方経験しており、それぞれの良さと悪さを経験としていくらかは持っているつもりです。

弱小SIerでSES → Web系メガベンチャー → スタートアップ → 次に何をするか考え中
(キャリア詳細は読み飛ばしてもらってもOK)

### 弱小SIerでSES
100名以下の会社を数社経験しており、10年ほどエンジニアとして働きました。どの会社でも基本的な流れは変わらず、どこかの大きなプロジェクトの現場に出向し、システムを開発していました。
システムの開発が終わってリリースすると次の現場へという、典型的なSIerのSESの働き方をしていて、零細企業である開発フェーズのみの担当をしており、ひたすら開発でプログラミングコードを書きまくって実装をしているのが楽しかったです。

### Web系メガベンチャー

1. アドテクノロジーのシステム開発を経験
デジタル広告の配信システムの開発に関わりました。
DSP (デマンドサイドプラットフォーム) やDMP (データマネジメントプラットフォーム) などの開発のエンジニアや開発リーダーなどを担当。
世の中に４つものDSPの新規立ち上げに関わった人間はそうは居ないと思われる。

2. スマホ決済システム開発

新規事業としての立上げフェーズに途中から参加しました。初めてエンジニアリングマネージャとして転職して、チームを推進しました。
アプリのリリース後も継続して機能開発をするチームでマネジメントをしていました。

### スタートアップ

スタートアップと言っても100人以上いるフェーズでの入社なので、まあ普通に色々と普通の会社っぽいフェーズの会社ではありました。

とはいえスタートアップなので、足りないものは無限にあるし、事業を進めるスピードは普通の会社の数倍はあるので、相当面白いですし、大変と思う人もいると思います。

自分が所属していた会社は変な軋轢がなかったため、自分でやれるかどうかということが大事ですが、求められるレベルが高い。
権限も大きく、期待されることも大きく、大変だったが、成長も大きくできたと感じる経験ができました。

### 次に何をするか考え中

３年勤めたスタートアップを今月で卒業する予定です！
まだまだ会社でやることもやれることもあるが、成長できた。この成長した経験で、自分のやりたいことにチャレンジしたいと考えている。

まだ卒業していないので、来月くらいに自己分析もしながらじっくり考えたいと思っています。

# 記事本編 

## やりたいことをするための環境とは？

エンジニアであれば興味がある技術を使いたいですし、伸ばしたいスキルもあると思います。

しかし、環境に求められて無ければハイレベルな技術であっても、ただの自己満足になることもあります。事業の実現に必要性があるからこそ、システムを実現するための技術が必要になりますが、必要のない技術もあります。
オーバーエンジニアリングもアンダーエンジニアリングも本当の技術価値の発揮には避けたいエンジニアリングのブレです。
つまり、技術活用の機会がなければ、技術的な利用機会もなく、技術的な成長の機会がないため、成長が難しくなってしまいます。


# 野球場ではサッカーは出来ない

環境が違うと使うことができない能力がある。
エンジニアであれば技術的な成長を考えたときに、どんな技術力を身につけたいのか？ 技術をどんな風に活用したいのか？
チャレンジしたい技術を利用できる「環境」なのか？

例えば、サッカー選手になりたいのに野球をやっていてもサッカーはあまり上手くなりません。しかし、スポーツ選手としての基礎力は上がりますし、自主練でサッカーもいくらか上手くなれます。しかし、サッカーが上手くなりたいのであれば、サッカーを出来る場所に行くのが一番です。

機会があるところに行かないとやりたいことは出来ません。
欲しい技術、使いたい技術、技術を活用したい方法は何でしょう？


# 環境へ参加するときには資格が必要

チャレンジしたい技術があるとして、今の自分に出来ることはどこまでやったのか？
よくあるのが入社したら頑張ります！というセリフ。
高いエンジニアリングの基礎力がある人は別にしても、まだ何もしていない人が頑張れる可能性はどこにあるのでしょうか？

エンジニアリングの知識を得るということは、PC１台とインターネットに繋げば多くのことが１人でも出来ます。その環境がある中で、あなたのやりたいという気持ちはどこまで行動に移されていて、あなたの知識や経験となっているのでしょうか？

どんな資格が必要なのかは目指す会社や環境によります。
今の環境のせいにするのは簡単ですが、環境によって選ばれる資格が必要になります。

自分が選ぶだけでなく、選ばれるということは大変です。


# 「開発し続けるシステムを作り続ける」 スキルを高められる環境 
システム開発では
「リリースしたら仕事が終わるシステムを作る」ことと
「開発をし続けるシステムを作り続ける」ことの違い
があると考えています。

システムが作って終わりにするよりも、システムを作り続けることの方が難易度が高いのです。
作り続けるためには、作る力だけでなく、運用する力と、それらをどのようにバランスするかを考えて推進する必要があるため、バランスするために技術の本質的な理解や他社と議論するための言語化が必要になります。

当然ですが、自社サービスをしている会社の方が作り続けることを必ず求められるため、エンジニアとしてもチャンスが多いです。反面、エンジニアリングの言語化ができない場合にビジネスメンバーの言われるがままに作るしかない環境になっていることも多いです。

つまり、１つの環境で全てが良いわけでなく、自分自身の能力成長のフェーズや成長機会のタイミングはあると思います。


# 技術の深掘りをする

技術はユーザーの課題を解決するための道具です。つまり事業と繋がるときに価値が最大化することが多く感じます。
高い技術レベルを求めらるのは、事業がその高い技術を必要としていた体験があります。


私の経験を少し紹介させてもらいます。

### アドテクでの経験と技術に求められること
私の経験のアドテクの部署では秒間数万リクエストの処理をすることが当たり前で、１日に何十億ものデータを処理して、１リクエストは100ミリ秒以内に返す必要がありました。このデータを数カ月分をまとめて機械学習処理して、次の配信に活かすための集計することが当たり前でした。これは立ち上げ時の件数なので、もっと成熟して事業が大きくなっているチームはもっと大きな処理をしていました。

当然ですが、この現場ではデータ量とレイテンシが求められる技術レベルが最低レベルになります。なぜなら、レスポンスが1秒掛かるコードを書いてしまうとシステムが止まってしまうからです。数千億レコード集計出来ないSQLやDB設計をするとシステムが止まってしまうからです。そして、このような実装をするのは事業で求められている価値を実現するためです。

### 医療系のDXでの経験と技術に求められること
スタートアップでは医療系のDXのシステムでしたが、医療ドメインのシステムはデータが複雑であり、ハイレベルなデータモデリングが必要になります。DBやクラス構造の設計は仕様を決める人が作ってくれるわけではありません。システムと実装方法を理解したエンジニアが適切に設計する必要があります。手法としてDDDなどの考え方の一部を活用する場面も多くあります。


### より深い技術に求められること
私は働いた経験がありませんが、プラットフォーム系の会社や大規模なシステムを扱う会社は専門技術領域を深く担当する役割があります。技術を突き詰め、効率的なアルゴリズム生み出すことで事業の価値とすることです。
ここでも事業の価値に繋がるからこそ、技術の深さを求められます。


# 環境を選ぶには自分がやりたいことが何かを明確にすることが一番大事

つまり、技術とは事業の価値を実現するための手段に過ぎず、客観的な見方に過ぎません。

重要なのは自分自身が技術をどう扱いたいのか？技術力を成長したいと考えるのか？ を考えることが、環境を決める軸になります。

自分やりたい技術が活用される環境に行く必要があります。
サッカーがしたいのに野球場に居ても出来ないのです。

# 環境の探し方

理想としては、様々な環境をリサーチをして、自分自身で判断できるようになることが１番大切です。

転職を推奨しているわけではありませんが、環境を変えるという目的を達成する選択肢として会社を変えるということは一番わかりやすく環境が変えることができます。

しかし、私はSIの会社で転職をして何社か経験しているのですが、SIの会社では得意な案件や開発の進め方が似た会社に転職したとしても、人間関係や会社の制度が変わるだけで技術的な経験は大きく変わらなかったことを実感しています。づまり、似ている企業に転職するだけでは、環境を変える価値が高くないことです。

転職の前に検討するべき選択肢として、転職で実現したい価値を明確にすることです。

自分を明確にした次に、どんな環境が存在するかをリサーチが必要です。
リサーチして今いる会社の外の様々な環境の情報を集め、自分自身で判断ができるようになっていく必要があると思います。


# まとめ
エンジニアとして色々な技術を経験することは楽しいと思います！
本気でやりたい技術を見つけたなら、それを活用している環境を探してみるのが良いと思います。

やりたいけど出来ない、と言っている人は、ぜひやれる環境を探してみて欲しいです！
その技術が存在するということは、どこかの環境ではその技術が求められているはずなのです。

私も絶賛新しいチャレンジを探し中です！
一緒に楽しくエンジニアをしましょう！