仕事でプログラミングしかやっていない不安から脱却する生存戦略 

## はじめに

今年に転職して数年ぶりにC++で開発をすることになったのですが、ふと自分がエンジニアとしてキャリアをスタートさせた時のことを思い出して、この記事を書くことにしました。

というのも、私は組み込みエンジニアとしてキャリアをスタートさせたとき、このままでいいのかという不安をずっと抱えていました。

- 大学で学んだC言語のみを使い続けている不安
- 機械学習など流行りの技術に触れずにおいていかれる不安
- 開発だけしていて、それ以外の企業活動について何も知らない不安

今ならこれに「AIにエンジニアの仕事を奪われる不安」が追加されるかもしれません。

そんな不安に対して、今の自分ならどう対処するかを考えてみました。自分がキャリアをスタートさせた10年前とは状況もかなり変わってきていますが、同じような不安を抱えている人の一助に慣れれば嬉しいです。

### この記事で書かないこと

この記事では現在携わっている仕事に関連した領域で自身のスキルやキャリアの幅を広げる戦略について書きます。ですので、関連の無い領域にアクロバティックにチャレンジするようなことには言及しません。

もちろん、そのようなチャレンジがダメだと言っている訳ではありません。現在仕事で関わっていなくても、データサイエンティストを目指したり、スマホアプリやゲームの個人開発、流行りのプログラミング言語の習得等々、新しい領域に挑戦することも大いに結構です！

しかし、そうなると選択肢は膨大になります。ここでは上に挙げたような不安を抱え、何から始めればよいか分からない悩みを持つエンジニアを対象読者とします。

一般論ばかりかもしれませんが、キャリアアップや収入アップにつながりエンジニアライフを充実させる方法を考えてみました。また、以下に挙げる順番通りに進むべきというものではなく、自分に合った方法を選ぶないし参考にしてもらえればいいと思います。

## 技術を極める(基礎編)

技術力を高めてエキスパートになる案を列挙してみました。

### 仕事で使っているプログラミング言語を極める

まず挙げるのは、「仕事で使用しているプログラミング言語のエキスパートを目指す」というプランです。

タイトルにある『仕事でプログラミングしかやっていない不安から脱却～』に反するような案ですが、プログラミング言語は基本的にWeb上に全て情報はありますし、参考書もたくさん出版されています。

数ある選択肢の中で**最もとっつきやすいプランだと思います!**

それにオライリーの書籍などを読んでみると分かりますが、奥が深く内容も広いので、その専門性を評価してくれる環境は必ずあります！
Qiitaでも今なお非同期処理や並列処理を説明する記事なんかは度々バズっています。

https://qiita.com/y_kato_eng/items/ca0de5cf1224c807e7e5

https://qiita.com/Toyo_m/items/992b0dcf765ad3082d0b

仕事でプログラミングをしている人は、言語仕様と合わせてテストツールの使い方もマスターしてほしいです。Javascriptならjest, C++ならgoogletest, Pythonならpytestと定番のテストライブラリがあります。それぞれクセがあるので、詳しくなると職業エンジニアとしてはレベルが一段上がります。

しかし、プログラミング言語はソフトウェアを開発するための道具です。道具は使わなければ習得できませんし、「その道具を使って何を作るのか？」が重要になってきます。そこで次の章からは、プログラミング言語を使って何をするかの案を出していきます。

### 競技プログラミングに参加してみる

一つ目の提案は競技プログラミングです。

私自身も試したことがあるのですが、プログラミングスキルに加えてアルゴリズムの知識も身に付きますし、何より問題を解けたときの達成感が気持ちいいです！

有名どころだと[AtCoder](https://atcoder.jp/)と[LeetCode](https://leetcode.com/)でしょうか。
[AtCoder](https://atcoder.jp/)ならランクが上がっていくのをゲーム感覚で楽しめますし、外資転職を目指して[LeetCode](https://leetcode.com/)でトレーニングする人も多いです。

https://qiita.com/e869120/items/f1c6f98364d1443148b3

### OSS開発に参加してみる

二つ目はOSS開発への参加です。自身で一から有名OSSを立ち上げられる猛者もいますが、既に有名なOSSにメンテナーとして参加できるのもOSS開発のメリットだと思います。

https://findy-code.io/engineer-lab/event_oss

https://qiita.com/shunsuke227ono/items/94dd6e707d34a1da2617

### RaspberryPiでIoTソフトウェア開発に挑戦

組み込みソフト開発をやっていた過去の自分に勧めるならこれだと思うのが、RaspberryPiを使った開発です。

RaspberryPiにこだわる理由はなく、JetsonやArduinoでも構いません。ただし、本当の組み込み開発だとパフォーマンスを理由に使用できる言語が限られてしまうのですが、RaspberryPiはけっこうパワフルかつ比較的安価なのでお勧めです。

自分がエンジニアを始めたときは、まだこれらの電子工作基盤があまり普及してませんでした。しかし今では活用事例も多くなってきました。

https://qiita.com/h_id32/items/a2655e8b7040c1c10016

通信機能を活かしてクラウドアプリ開発への足掛かりにできるのもお勧めのポイントです。自分は組み込みエンジニアからクラウドエンジニアに転向した身なので、技術の幅を広げられる良い案だと思っています。

### コミュニティ活動に参加する

最後の提案はコミュニティ活動への参加です。もちろんコミュニティに参加し、活動の中で発表できるほどになれれば素晴らしいです。技術力のみならず人前で発表する経験は非常に貴重です。

https://qiita.com/kojimadev/items/9fe72b90c15e32131895

しかしそれはハードルが高いという人は、自身が身に付けたプログラミング言語や技術の活用方法を探索する場として、オーディエンスとして参加するのもいいのではないでしょうか。

競プロ、OSS開発、RaspberryPiもそうですが、要は自身が身に付けた技術の活かし方を見つける手段としてこれらを提案しました。技術は使わないと意味がありません。包丁の使い方を学んで料理しないようなものです。特にプログラミングはやった分だけ自信につながるので、自分が楽しめる方法を摸索してみましょう！

## 技術を極める(応用編)

チームをまとめたり、エンジニアリングマネージャーを目指す案を列挙してみました。

### ソフトウェア・アーキテクチャについて学ぶ

プログラミングの次にくるのはソフトウェア・アーキテクチャではないでしょうか。
有名なところだと[Clearn Architecture](https://www.amazon.co.jp/Clean-Architecture-%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E6%A7%8B%E9%80%A0%E3%81%A8%E8%A8%AD%E8%A8%88-%E3%82%A2%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%89%E3%83%AF%E3%83%B3%E3%82%B4-%EF%BC%B2%EF%BD%8F%EF%BD%82%EF%BD%85%EF%BD%92%EF%BD%94-%EF%BC%A3%EF%BC%8E%EF%BC%AD%EF%BD%81%EF%BD%92%EF%BD%94%EF%BD%89%EF%BD%8E-ebook/dp/B07FSBHS2V/ref=sr_1_1?crid=3JA6BQLJDF2EG&dib=eyJ2IjoiMSJ9.tPnoTYoounMZlgS3pbzc73vY9-Yp8cY97KnUpDYp9Vg5fGl5dwRKebLKqMwj4E4U_7SUYEY61Nv00kXbrJR7mt9xIe_j8saVI6rdQR36A6UeGkNaEOzAU4H2G1blv36pldDofkiQC5I0Nu4NJAjwEGt95c7g6R34Z83ebMJ1gkIue6oy0YwWFBNoq1AMsoz62SlJ4m6bXqFY4DBmOB5gSdigekxy3XIZHw0u0UX4paU.zrdskLSUTO4U9tqMLpgiZjxXiVvKBUTZmkZDyX55v44&dib_tag=se&keywords=clean+architecture+%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E6%A7%8B%E9%80%A0%E3%81%A8%E8%A8%AD%E8%A8%88&qid=1718315295&sprefix=clean+ar%2Caps%2C162&sr=8-1)やドメイン駆動設計が有名です。特に大規模なソフトウェア開発になると、いかにきれいなアーキテクチャになっているかが、開発やメンテナンスのスピードを左右します。

https://qiita.com/nrslib/items/a5f902c4defc83bd46b8

プロジェクトを立ち上げる時や、炎上しているプロジェクトの立て直し、レガシーなプロジェクトの刷新などの際にソフトウェア・アーキテクチャの知識を活かせるとリーダーシップをはれるイメージがあります。

### システム・アーキテクチャについて学ぶ

ソフトウェア・アーキテクチャよりこちらの方がメジャーかもしれません。

クラウドアプリ開発になど携わっている方は普段からシステム・アーキテクチャの知識が身に付く機会がありますし、関連する資格なども多いです。

システム・アーキテクチャとは少し違うかもしれませんが、その構成要素を知るのにroadmap.shが有効です。

https://roadmap.sh/

ソフトウェア・アーキテクトや他のカテゴリー、職種についてもロードマップが追加されているので、興味があるもについて一度見てみるのがお勧めです。

### 資格を取ってみる

資格については賛否両論あって、私も最初は否定派でした。

しかし資格を評価する環境は確かにあります！

それに実際の仕事で成果を出せるかは外部要因にも左右されますが、資格は自分が勉強すればいいだけです。また、エンジニアに限らず社会人で大学に戻って勉強しなおす人もいますが、それと比べたら資格取得はるかにコスパは高いと思います。

### プロジェクトマネージメントについて学ぶ

プロジェクトマネージメントについてはいろいろありますが、エンジニア界隈ではやはりアジャイル開発でしょう。

私自身は製造業でエンジニアとして働いてきましたが、ウォーターフォールを長くやってきた後遺症のためか、半ば新興宗教のようにアジャイルを厚く信仰している人もいました...

言い過ぎたかもしれませんが、それだけ活躍の場があるということです！

私は機会あって認定スクラムマスターの資格を持っていますが、アジャイルやスクラムは理論としては難しくないです。難しいのはアジャイル開発を可能にする環境作りだったり、関係者とのコミュニケーションや調整です。ソフトスキルが必要になるので、技術力以外の何かを求めるなら良い選択肢ではないでしょうか。

## ビジネス領域に軸足を移す

エンジニアでもビジネスへの理解を求められる時はあります。また、技術部門に所属していてもゴリゴリのエンジニアでない人はたくさんいます。ビジネス路線の案も列挙してみました。

### 英語を勉強する

最近話題の某プロ野球選手の元通訳さんの年収は4500~7500万円だったとか...

私は転職して外資系企業で働いていますが、英語が話せることでキャリアの幅が大きく広がるのは確かです。

英語にアレルギーを感じるエンジニアは多いと聞きますが、幸い無料で英語を学べる教材は今や豊富にあります。

https://qiita.com/morry_48/items/b5d7fd0dd2a68cd3dd3b

実際に働いている身としては、今はSlackのようなチャットアプリでのコミュニケーションが多いので助かっています。ですが、直接話すときにはテクノロジーの力は借りられません。私もまだまだ勉強中です。

### 資格を取ってみる

2回目の「資格を取ってみる」ですが、「ビジネス系の資格を取ってみる」という案です。

普段、プログラミングしかしていなくても会社のビジネス状況などを耳にする機会はあると思います。そういう意味では全く無関係ではないと言えます。

トータルで企業活動全般の知識をカバーできるものでは「中小企業診断士」があります。コンサルタントのための資格ですが、エンジニアからコンサルタントに転身する人は少なくないですし、レパートリーを増やすにはもってこいです！

### MBAを取ってみる

お酒の席で教えてもらったことがあるのですが、マネージャー職の方たちの中にはMBAやグロービスのコースを取っている人は意外に多いようです。(その知見が本当に活かされているか定かではないですが...)

それなら若いうちに先取りしておくというのも手です。

ただし私自身は資格の方がコスパはいいと思っています。一つ前の章で資格の話をしたのはそのためです。

## プライベートで頑張る

仕事で常に期待通りのポジションにつけるとは限りませんし、会社の状況次第で収入が上がらないこともあるかと思います。そこで最後に仕事以外のところで頑張る案を出しておきました。

### 投資の勉強をする

「投資は自己責任で」は決まり文句ですが、円安が進み、賃金が上がらない日本ではもはや必須ではないでしょうか。
投資の具体的な方法はもちろん割愛しますが、プログラミングスキルを利用する手もあります。

https://qiita.com/innovation1005/items/024a8ea59109894d0e66

もちろん個人開発で何か作るのも大いにアリです。でも何を作るかで悩んでしまうぐらいなら投資に全集中するのもアリだと思っていますし、何ならそこにプログライングスキルを投入してみてもいいのではないでしょうか。

しかし、この手のデータ分析系のことをやるならPythonは必須です。Pythonの勉強はしておきましょう。

## おわりに

ベテランエンジニアの方からすれば在り来たりな内容だったかもしれませんが、駆け出しの頃の自分に勧めるならと思って厳選してみました。

もちろんこれ以外にも無数のプランがあるかと思います。でもあれこれ目移りしていると気が付いたら何も身に付いてないということにもなりかねません。特に駆け出しのエンジニアは勉強しなければならないことだらけで絶望することも多いと思いますが、**覚悟をもって何か一つをピックアップすることが大事です**。一つのカテゴリーでもしっかり身に付ければキャリアを大きく前進させられることを強調しておきます。

### なぜ勉強するのか？

「エンジニアはずっと勉強し続けないといけない」とよく耳にします。それが辛いという意見もありますが、私個人の意見では勉強するのは楽をするためです。

あくまで私の経験ですが、これまで会社でマネージャーの方や先輩方を見てきて、知識や技術をしっかり身に付けている人ほど働き方はスマートな傾向にあるように見えました。逆にそうでない人で出世している人はゴリゴリの長時間労働者だったりします...

日本企業だと非効率でもたくさん働く人が評価されたりするのでしょうが、そうはなりたくないですよね。

### AIへの対抗策は？

正直、そこまでAIに仕事を奪われる危機感はいだいていません。

AIといっても本当に知性がある訳ではないです。入力に対して回答を出してくれる言わば関数です。

むしろ生成AIを上手く利用して自身のキャリアアップにつなげることが重要だと思います。

### まずは真似から始めよう

私は個人開発に憧れていたのですが、作りたいものを思いついても「既に同じようなサービスあるしなー」と思って結局何も手に付かなかった人間です。

そんな過去の自分に提案するなら、「作りたいものが見つからなければ、まず既存のサービスのクローンを作ってみる」ことを勧めます。ギターの練習でアーティストの名曲をコピーするのと同じようなものです。

有名な取り組みだとNetflixのクローンを作るというのがあります。

https://qiita.com/terry_6518/items/4112243ef2ea742bfbf2

Netflixがどういう技術の元に作られているか説明できる人ってそうそういないと思います。作ってみると分かる訳ですが、それに加えて「自分だったらこうするのに」とか「こうした方が良さそう！」とか新しいアイディアが生まれることもあります。

### 自分が考える最高のエンジニアライフプランは？

最終的には「個人で稼げるだけのスキル(と生活に困らないお金)を手に入れて、東京からそう遠くない地方に移住してプログラミングで好きなものを作って生計を立てる」ということになると思います。

やろうと思えば今からでもできるのでしょうが、自分の場合は会社でのキャリアアップに限界を感じたらと考えています。けっこう寂しがり屋だからかもしれません(笑)。それまでに今回挙げたプランを踏襲しつつ、ビジネススキルや自分で作りたいものを作れるだけの技術力を身に着けたいです。