ソフトウェア開発のキャリアパス

>こちらの記事は、[John Sonmez](https://medium.com/@jsonmez?source=post_page-----c9c4ef0549f5----------------------) 氏により2018年1月に公開された『 [Software Development Career Paths](https://medium.com/@jsonmez/software-development-career-paths-c9c4ef0549f5) 』の和訳です。
本記事は原著者から許可を得た上で記事を公開しています。

ソフトウェア開発のキャリアパス（ソフトウェアエンジニアリングのキャリアパスとも呼ばれる）はたくさんあります。この投稿では以下について話していきます。

1. 開発者の主な３つのタイプ
2. 開発者のキャリアの３つのオプション
3. Web開発
4. モバイルアプリ開発
5. デスクトップアプリ開発
6. ゲーム開発
7. 組込みシステム開発
8. データサイエンス
9. ツールとエンタープライズ
10. クラウド開発
11. 自動化
12. 正しい方法でキャリアアップする
13. マネジメントと技術開発
14. 将来について考える

ジャン！
レベルアップしました。
あなたは今レベル12のWeb開発者です。
新しい[JavaScriptフレームワーク](https://simpleprogrammer.com/cg55-javascript)のロックが解除されました。
そして、テレビゲームのように、道に中にはいろんな選択肢があります。

**最終的にどこでソフトウェア開発のキャリアを終えるかは、あなたが選択する特定のパスによって決定されます。**

間違った道を選べば、一生COBOLを書くゴブリンになってしまいます。
正しい道を選べば、あなたは白い魔法使いや建築家になって、アイボリーの高層タワーに住み、そこから指示を出しているかもしれません。

OK、もしかしたら、そんなことはないのかもしれません。
しかし、**あなたのキャリアパスの選択は、[違いをもたらす本当に重要なもの](https://simpleprogrammer.com/cg55-paths)なのです。**

あまりにも多くの初心者プログラマーは、自分の実際のキャリアパスが何であるかを検討する時間を十分に取らず、意図的に道を選択し、どのギルドに参加したいかを選択していません。

代わりに、彼らは、ただ道路脇に立って、「グループを探している」と叫んで、冒険者に仲間入りするために、迎えに来てくれるチームに参加するだけです。

この章では、ソフトウェア開発者としてどのキャリアパスを追求したいかを意識的に選択することがすべてです。

# 開発者の主な３つのタイプ
![image](https://miro.medium.com/max/1400/0*kAGKvfMHEvypRGZZ.png)

私は、ソフトウェア開発者を最も高いレベルで3つの大まかなカテゴリーに分類しています。

読者は、これらの3つのカテゴリのうち、ほとんどのソフトウェア開発者にあてはまる、最大のカテゴリーのみを考慮しがちなので、ソフトウェア開発者とソフトウェア開発をこの3つのカテゴリーで考えることにはおそらく慣れていないでしょう。

しかし、ソフトウェア開発のキャリアパスの網羅的なリストを見たいのであれば、ここから始めなければなりません。

とは言うものの、ソフトウェア開発者の大まかなカテゴリーは次の3つです。

1. 会社勤めの開発者(最も一般的)
2. フリーランス(雇われ人)
3. アントレプログラマー(プログラマー/アントレプレナーとのハイブリッド)

それではざっと説明していきましょう。

まずはじめに、**会社勤めの開発者からです。**

実際には、ほとんどの書籍が会社勤めの開発者に焦点が当てられています。そして、この章でも主に焦点を当てています。

理由はシンプルです。ほとんどのプログラマは、キャリアの中で会社勤めの開発者であったか、あるいはこれから会社勤めの開発者になろうとしているかのどちらかだからです。

会社勤めの開発者とは、私の定義によると、ソフトウェア開発者で、誰かのために働いて定期的に給料をもらっている人のことです。

ほとんどの会社勤めの開発者は、自分の好きな会社で働きたい、その会社の中で昇進したい、もしかしたらその時々で会社を変えたい、いい給料をもらいたい、そしていつかは退職したいと思っています。

このパスに問題はありません。先ほど言ったように、これがデフォルトです。

**次に、フリーランサーについてです。**

前章でフリーランサーとは何かという話をしたので、ここではあまり繰り返さないことにします。

本質的には、フリーランサーは、自分自身のために働き、任意の特定の会社に忠誠を誓っていない、雇われ人として働くことを選ぶ代わりに、どんなクライアントのためにも仕事をすることを選んでいます。

この章では、そのキャリアパスについては触れません。すでに述べたように、フリーランスのキャリアパスは自著に値するものです。

**最後に、私はその中の一人であり、アントレプログラマーであり、ソフトウェア開発者の起業家であり、開発者でもあるので、私にとって最も身近で大切なタイプのソフトウェア開発者がいます。**

このキャリアパスはフリーランスとは異なり、ソフトウェア開発のスキルを使って誰かのために仕事をするのではなく、そのスキルを使って自分の製品を作ったり提供したり、その製品を直接クライアントに販売するというものです。

これは、あなたが販売する独自のアプリケーションを作ることができ、トレーニングビデオやチュートリアルを作成し、ブログを書いて、書いて、ひどく、さらにあなたの作品についての音楽を作成して、どうにかして、これらのことから毎晩夕食のテーブルにいくつかのマカロニとチーズを置くために、十分なお金を稼いでいます。

この章では、そのキャリアパスについても触れません。なぜなら、繰り返しになりますが、私たちは、アントレプログラマーになる方法について説明すると、それだけで一冊の本になってしまいますし、基本については、前章で軽く触れたからです。

# 会社勤めの開発者のオプション

[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/MylEpDO9b3s/0.jpg)](http://www.youtube.com/watch?v=MylEpDO9b3s)

次に、ソフトウェア開発者として選択できる広範囲な専門分野について説明します。
注:これは、 「ジェネラリスト対スペシャリスト」 の章で説明した専門分野とは異なります。この章の専門分野はあまりに広いものです。

これらの専門分野を考えると、混乱を抑えるためにオプションと呼ぶこれらの専門分野を、技術的な意味でソフトウェア開発者として進むことができる**非常に高いレベル**のキャリアパスと考えてください。

はっきり言って、これらの選択肢は会社勤めの開発者だけのものではありません。どんな種類の開発者でも、これらのキャリアパスのいずれかを選択しなければならないでしょう。

複数のキャリアパスを選択する「デュアルクラス」とすることもできます。しかし、少なくとも一つは選択しないといけません。

# Web開発

今日ではおそらく最も大きいソフトウェア開発者のクラスです。

ほとんどのソフトウェア開発者はWeb開発者であり、少なくともWeb開発作業を行っています。Web開発者として、あなたは...まあ、Webアプリケーションを作ります。驚きです！

ウェブ開発者として、フロントエンドで仕事をしてきれいなものを作ることもできますし、バックエンドで仕事をして...動作するものを制作することもできますし、両方の仕事をして、ウェブ開発のユニコーンのような素晴らしい魔法のような存在になることもできます。

典型的なWeb開発者は、フロントエンド、ミドルウェア、バックエンドなどのWeb開発技術をフルスタックで開発しているので、「フルスタック開発者」と呼ばれています。

# モバイル開発

アプリマン、アプリこそがその場所なんだよ!

そこには、あなたが知っているアプリがあります。

今日、ますます多くのソフトウェア開発者がモバイル開発者になろうとしており、携帯電話、タブレット、さらにはアプリ対応テレビやウェアラブルデバイス向けのモバイルアプリケーションを開発しています。

アプリ開発は、ソフトウェア開発者としてエキサイティングな機会を提供しています。

ほぼすべての企業が、最近ではモバイルアプリを必要としています - そして、もしかしたらそれ以上のものかもしれません。

# デスクトップアプリ開発

ソフトウェア開発者は、デスクトップソフトウェア開発がまだ存在するかどうかを尋ねてくることがよくあります。

ほとんどの場合、彼らはデスクトッププログラムを実行しているコンピュータからその電子メールを入力していたので、私はこれが幻想的であると思います。

実際のところ、どのようにコードを書いてコンパイルするのでしょうか？

クラウド IDE が普及してきていますが、ほとんどの人がデスクトップベースの IDE を使っています。

OK、いいでしょう。デスクトップ開発者には不利なのは認めましょう。

それであなたは幸せですか？と、私は言いました。

しかし、現実的には、PC上で直接動作するアプリケーションを書くソフトウェア開発者には、少なくとも何らかのニーズが常にあると思います。

間違っているかもしれませんが、少なくとも今のところは、人気が高くないだけで、実行可能なキャリア選択です。

# ゲーム開発

はい。あなたがゲーム開発者になりたいことを知っています。

はい。私も同じです。

そういうわけで、ソフトウェア開発者になりました。

しかし、実際にゲーム開発者になる代わりに、私はプリンタのプログラミングを始め、Webアプリケーションをたくさん書き、モバイルアプリを作り、その他いろいろなことをしました。そして、皮肉たっぷりの本を書き、ソフトウェア開発者として女の子をナンパする方法についてのYouTubeビデオをたくさん作りました。

人生はいつも期待通り行くとは限りません。

しかし、真面目な話、これは実行可能なキャリアの選択肢です。競争が激しく、長時間のゲームの仕事をするのは難しいものですが、それ以外のデメリットは考えられません。

くそっ、この道を行くべきだった。

ゲーム開発者の道をいきましょう！

# 組込みシステム開発

OK、儲かるようには聞こえませんし クールにも聞こえませんが 信じてください。

私はかつてプリンターを作る組込みシステム開発者でした！

YES！プリンター！

一緒に言ってみましょう。

ワクワクしながら言ってください!

組込みシステムはロックだぜ！

ロックだぜ！ベイビー！

OK、魅力的ではありませんが、想像してみてください、あなたが飲んでいるグラスの氷を作った冷蔵庫には...脳が入っています。

今では全てのものが脳を持っています。

そして誰かはそれらの脳をコーディングしてました。

そして誰かはあなたになれました。

組込みシステム開発者は、[電子機器の内部で動作するほとんどのリアルタイムOSを開発している](https://simpleprogrammer.com/cg55-embedded)ため、組み込みシステムと呼ばれています。 クレバーですよね。

ニーズが高く、専門的なスキルセットが必要とされるため、価値の高いキャリアと言えるでしょう。

私がこれまでソフトウェア開発者として行ってきた中で最も困難な作業の中には、組み込みシステムのプログラムにおける本当に毛むくじゃらなタイミングの問題のトラブルシューティングが含まれていました。

# データサイエンス

こちらは、かなり新しいキャリアパスですが、最も儲かるキャリアパスの一つになりそうです。

データサイエンティストは具体的に何をするのでしょうか？

誰も実のところ知りません。。。ビッグデータで何かをするのでしょう。

しかし、真面目な話、データサイエンスはソフトウェア開発者が、特に大金を稼ぎたい場合に、参入できる巨大で急成長している分野です。

データサイエンティストは、いくつかの異なる分野のスキルと技術を利用して、大量のデータを取り出し、それを理解し、結論と予測を導き出します。

データサイエンティストは、そのプログラミングスキルを利用して、データを抽出、操作、および再編成して、データを消化しやすい方法で表現するカスタムプログラムを作成することがよくあります。

データ量が増え続ける中、データサイエンスには確かに興味深いかもしれません。

# ツールとエンタープライズ

多くのソフトウェア開発者は、実際には、市販されて販売されるソフトウェアや、市販されている製品の内部で使用されるソフトウェアを作成していません。代わりに、組織または内部アプリケーション内で使用するツールを作成します。

実際のところ、ツール開発は非常に興味深く、やりがいがあります。チームや他のチームの仕事をより良くする効果的なツールを構築すると、その効果が非常に顕著になることがあります。

企業の開発者はしばしば、ソフトウェアがどのように作られるかを形作る組織と政治的派閥について深い理解を持たなければならないので、企業の開発は非常に挑戦的であり、ユニークな一連の能力と知識を必要とします。

# クラウド開発

クラウド開発もかなり新しい分野ですが、アプリケーションのクラウド化や分散モデルへの移行が進み、急速に成長しています。

クラウドアプリケーションの多くはWebアプリケーションでもありますが、必ずしもそうである必要はありません。

クラウド開発者は、クラウドがどのように機能するか、特にスケーラビリティと可用性に関して理解する必要があります。

クラウドIDEがあれば、クラウドで開発するクラウド開発者になることも可能です。

# 自動化

自分で書いた自動テストが実行され、アプリ内のフィールドを自動で記入し、ボタンをクリックし、アプリ内をナビゲートし、結果を検証するのを見ていると、かなりすごい気持ちになります。

テスト自動化は楽しいです。

大好きです。

楽しいだけでなく、急速に拡大し非常に高い需要です。

自動化フレームワークを作成し、他のソフトウェアをテストするための自動テストを作成する適切な方法を理解している有能なソフトウェア開発者が、非常に不足しています。

テストの自動化に重点を置くソフトウェア開発者は、アプリケーションのテストを自動化するためのツールを構築し、機能を実行および検証するための自動テストを作成します。

テストの自動化は、基本的に別のアプリケーションをテストするためにアプリケーションを作成する必要があるため、非常に困難で複雑です。

しかし、言ったように、かなり楽しいと思います。

# ガラスの天井を超えて前進する

一般的には、特定のクラスのソフトウェア開発者を選択した場合でも、あるいは複数のソフトウェア開発者を選択した場合でも、最終的に「ガラスの天井。」と呼ばれる状態に達することがあります。

**このガラスの天井は、ソフトウェア開発者としてどれだけ前進できるか、あるいはどれだけの報酬を得られるかという現実的な限界です。**

自分がどれだけ優秀であるかは問題ではありません。頂点に達した時点で、それ以上進むことはできなくなります。

しかし、このガラスの天井を回避する方法はいくつかあります。

はじめに、他の誰かのために働くことを辞めることを選ぶことができます。

フリーランサーとしてのあなたのガラスの天井は、はるかに高いですが、あなたはまだ**お金のために時間をトレードする必要がある**ので、フリーランサーとしてあなたが得ることができるいくつかの実質的な制限があります。

起業家として、それは完全にキャップされていませんが、0ドルまたは負のドルを稼ぐこともできます。

これらの選択肢はいずれも、ガラスの天井を通り抜けられる実行可能な方法です。

会社勤めの開発者であり続けたいと考えているのであれば、パーソナルブランドや自分自身のマーケティングに多額の投資をすることができますし、評判だけで平均よりも大幅に高額な給与を支払ってくれる企業を見つけることができるかもしれません。

実際に、私は、この方法を学ぶのに役立つように、ソフトウェア開発者として自分自身を売り込む方法を具体的に作成しました。

しかし、別の道もあります。。

大企業を探して、管理職か技術職のどちらかの道に進むこともできます。

# 管理職か技術職か？

![image](https://miro.medium.com/max/1400/0*gQkEQ9WSaZR1w7X_.jpg)

ほとんどの中小企業は、上向きの移動に現実的な限界があります。

ソフトウェア開発者としては、彼らが持っている最高レベル以上のものを手に入れることができないだけで、それは全く高いレベルではないかもしれません。

しかし、**マイクロソフト、アップル、IBM、グーグル、フェイスブック、HPなどの大企業では、その天井はもっと高くなることがあります。**

この種の企業は、最高の技術者を求めていることが多いので、特別な技術トラックを作成して、それらを組み込むようにしています。

通常、大企業のこれらの種類のいずれかの技術的または管理トラックの進歩のために持っています。

管理職コースを選択した場合、開発者のマネージャーになってキャリアを積み、セクションマネージャーやプロジェクトマネージャーを経て、開発ディレクターや最高技術責任者（CTO）のようなエグゼクティブレベルの役職に就くことができます。

**マネジメントトラックは誰でもできるのか、それとも「人」である必要があるのでしょうか？**

どの道を選ぶにしても、人としての人間性が必要です。

本当に、そうなんです。キャリアで成功したいなら、絶対にヒューマンスキルに力を入れた方がいいんですよ。

この本ではあまりピープルスキルに焦点を当てていませんが、私の別の本「SOFT SKILLS ソフトウェア開発者の人生マニュアル」や、デール・カーネギーの不朽の名著「人を動かす」を読んでみてください。

管理職に関して言えば、管理職の仕事をこなせる「人」を扱う人になれるかどうかではなく、技術的な仕事をしなくても生きていけるような「技術者」になれるかどうかが最大の問題だと思います。

これまでどんな管理職に就いても、私の最大の課題は、コードを書いて技術の中で仕事をしたいということでした。

ほとんどのソフトウェア開発者は、お金のためだけではなく、技術的な問題を解決することが好きなので、この職業に就きます。

だから、自分のキャリアの残りの部分をコードを書かないことに対応できるかどうか？ということを本当に自分自身に問うべきです。

技術的なトラックを選択すると、上級開発者からアーキテクトへ、そしてフェローや上級フェローへと進むことになるかもしれません。

**それぞれの組織で、技術的な進歩と非技術的な進歩のための専門的なトラックを持つことになりますので、肩書きやポジションは大きく変化します。**

しかし、そのガラスの天井に到達して、ずっと進み続けたいと思ったら、技術系かマネジメント系かの選択を迫られることになります。

実際、高度な技術トラックを提供している大企業でなければ、選択の余地すらないかもしれません。

管理職になることは、出世のための唯一の選択肢かもしれません。または独立するかです。

# 常に自分がどこに向かっているのか考える

本当に、この章のポイントは、自分がどこに向かっているのかを真剣に考え、意図的にキャリアの舵取りをしてもらうことです。

キャリアアップしたいのであれば、どのような方向に進んでいるのかを把握しておく必要があります。

そのため、自分がどのようなソフトウェア開発者になりたいのか、まずよく考えてみてください。

永遠に会社勤めの開発者でいたいですか？

もしそうなら、どのようなタイプの開発者でしょうか？

Web？モバイル？それともクラウド？

そして、なんのために？

最終的にアーキテクトになりたいのでしょうか？

あなたはただコードを書いてカッコいいことをしたいだけで、特定のポイントを超えて進むことを気にしませんか？

可能な限り、高みに上りたいですか？

もしそうなら、ハイレベルな技術トラックを持っている会社を探し始めた方が良いでしょう。

最終的には管理職になりたいのかもしれないし、最高技術責任者 (CTO) や最高経営責任者 (CEO) になりたいのかもしれません。

あるいは、キャリアの早い段階で会社勤めの開発者になり、その後フリーランサーや起業家になりたいと思うかもしれません。

**何をするにしても、決断して計画を立てることが大切です。**

あなたは常に後で計画を変更することもできます。選択したパスに永遠にコミットする必要はありません。しかし、あなたは常に少なくともいくつかの計画を持っている必要があります。そうでなければ、あなたのキャリアの中で無目的に漂流することになるでしょう。

# 翻訳協力
Original Author:  **[John Sonmez](https://medium.com/@jsonmez?source=post_page-----c9c4ef0549f5----------------------)** 
Thank you for letting us share your knowledge! 

この記事は以下の方々のご協力により公開する事が出来ました。
改めて感謝致します。
選定担当: @_masa_u
翻訳担当: @r_pg10
監査担当: takujio
公開担当: @r_pg10


# ご意見・ご感想をお待ちしております
今回の記事は、いかがだったでしょうか？
・こうしたら良かった、もっとこうして欲しい、こうした方が良いのではないか
・こういったところが良かった
などなど、率直なご意見を募集しております。
いただいたお声は、今後の記事の質向上に役立たせていただきますので、お気軽にコメント欄にてご投稿ください。
みなさまのメッセージをお待ちしております。