目的とするエンジニアになるために何を学ぶべきか道のりを具体的に示したのがこのロードマップです。
実際に何をどれくらい学べばいいのか説明しています。細かいところは目標によって違うので各自工夫してください。
就職/転職を目的にしているのでその後のキャリアプランはまた別に考えてください。
どの仕事にするかまだ悩んでいる人は次の記事を読んでよさそうなものを探してください。
スキルセット
エンジニアは複数の言語やフレームワーク、ツールなどを組み合わせて開発を行います。それらの組み合わせをスキルセットといいます。
自分の目指すキャリアに有利なスキルセットを身に着けていくべきです。
広い意味ではコミュニケーション能力やマネージメント能力もスキルに含まれるので、積極的に高めていったほうがいいです。
Java系スキルセット
- 言語:Java
- フレームワーク:Spring/Struts/Seaser2/JavaEE
- ORM:Hibernate(ハイバーネート)/JPA(Java Presistance API)
- DB:Oracle/PostgreSQL/MySQL/DB2など
- フロントエンド:JSP/HTML/CSS/JavaScript/TypeScript
- フレームワーク: jQuery/React/Angular/Vue.js
- サーバーサイド:Java/PHP/Ruby/Python
- パッケージマネージャ:npm/Yarn
- GUIアプリ:Swing/JavaFX/AWT
- IDE:Eclipse/NetBeans/IntelliJ/Android Studio
- テストツール:JUnit/TestNG/Mockito/Selenium/Cucumber
- 互換言語:Scala/Kotlin
Javaの用途は広く、システム系、Web系、スマホ、組み込み系などの分野で活用されています。
Javaは言語としては少し古いですが、クロスプラットフォームや安全なメモリ管理、また今では高速処理ができる部類の言語として重宝されています。
クラウド副業ではあまり案件がないようですが、業務系の案件は多いです。
数百人規模での大規模開発を安定的に行うことができるので、今後も需要が続くと予想されています。
システム系とWeb系のスキルセットは類似しているのでコンバートしやすい特徴があります。
クラウドワーカーのみなさんには残念ですが、業務系ではリモート案件が少ないので、リモートワーカーを目指している人には向いていません。
補足:「インフラを除く」の意味
インフラ作業として想定してるのは次です。
- 各種ツールのインストール
- 仮想環境などの構築
- ネットワーク構築
- セキュリティ対策
- DB環境構築
- サーバーチューニング(負荷分散や速度調整など)
本来はこれらも含めて、要件定義から開発、テスト、リリースまで、すべて一人できることがフルスタックエンジニアの条件というべきでしょう。
ですが、今回は言語別に限定したフルスタックスキル案なので省いています。
セキュリティとサーバーチューニング以外は、頑張って調べればできそうな気もしますので、真のフルスタックエンジニアを目指す人はチャレンジしてみてください。
別のフルスタックの定義としては、ひとりで全部作れるくらいの意味もあります。
AWSなどのクラウドサーバーやWebAPIなどを駆使して、とにかく一人でプロダクトが作れるスキルがあるなら、その分野のフルスタックエンジニアを名乗ってもおおむね問題ないでしょう。
もう少しハードルを下げるなら、どの言語やツールも調べれば使える程度のスキルがある状態で、分野を限定したフルスタックエンジニアを名乗ることもできるかもね。
実際の自称〇〇系フルスタックエンジニアはだいたいこのタイプなんじゃないかと思うよ。
クラウド副業なら、まずはスクレイピング系フルスタックエンジニアを目指すのもいいかもね。
開発/コミュニケーションなどのツール
- 各種IDE:VSCode/Eclipse/Android Studio/PyCharmなど
- バージョン管理:Git/GitHub
- 開発環境仮想化:Docker
- コードレビューツール:GitHub、GitLab、Bitbucket
IDEと同じように、その他の開発ツールも使い方を覚える必要があるので、スキルセットに近い扱いになります。
プロフィールでは自分のスキルセットとしてアピールしたほうがいいです。
クラウド副業では、使わない案件もありますが、Git/GitHub、Dockerは開発ツールなのでエンジニアの基本スキルとして使えるようにしておくといいです。
基本だけ覚えておいて、後は必要に応じて覚えていけばいいでしょう。
開発ツールは他にもテストツール、CI/CDツール、問題管理ツールなどがあります。
ですが、クラウド副業では、システム開発に長期参画でもしなければ、あまり使うことはないはずなので省いています。
- チャットその他のコミュニケーション:Slack/Chatworkなど
- オンライン会議:Zoom/Microsoft Teamなど
- ドキュメント共有:Googleドライブ、Microsoft OneDriveなど
その他のツールはここに挙げた以外にもたくさんあります。ですが、開発ツールではないので、習得はあまり難しくありません。
基本的にはクライアントが使っているものを使うことになるので、必要になってから使い方を覚えるのでいいでしょう。
- タスク管理:Jira、Asana、Trello
- プロジェクト管理:Redmine、Backlog、ClickUp
タスク/プロジェクト管理ツールは、長期案件ならスケジュールや進捗の記入を求められる可能性があります。
ですが、有料ツールが多いので、必要になってから覚えればいいでしょう。
エンジニアのライフサイクルと選択肢
勉強して就職/転職してエンジニアになり、60歳くらいまでに引退したり、会社経営に関わったり、フリーランスとして続けるというのが、エンジニアのライフサイクルになります。
- 独学
- オンライン学習サービス/メンター/サロンなど
- プログラミングスクール
- 専門学校
- 大学
学習期は、目的に合ったスキルセットを学習すべきです。
- サブスキルとして活用
- クラウドソーシング副業
- 派遣社員/SES社員
- 社員
- フリーランス/契約社員
- 会社経営
サブスキルとして活用とは、本業やプライベートな目的で効率化のためプログラミング技術を活用するサンデーエンジニアような意味です。
需要の多いエンジニアであっても、他の業界と同じように35歳以降の未経験転職はハードルが高くなります。
スキルさえあれば関係ないですが、そのスキルをアピールするのもなかなか大変なことです。
エンジニアへ転職するなら、せめて40歳になる前に転職しておかないと厳しいです。
派遣社員やSES社員は、40代以降需要が減ってくるので、それまでにフリーランスや開発企業に移るなど、次の戦略を考えておいたほうがいいです。
開発企業の社員になれば60歳まで働けるのかというと、会社によって違いはありますが、おおむねそれ以前に会社から退職を望まれることが多いです。
これは社員の年齢層の分布を確認すればおおよそ予測できます。50代の社員が管理職しかいないとすれば、管理職にならないと生き残れる可能性は低いということです。
一度給料の金額を上げてしまうと下げにくいので、社内で実績を積み、信頼を得ないと50代以降も同じ会社に居続けるのは難しくなります。
- 自由な年金生活者
- 副業エンジニア
- 現役エンジニア
- 会社経営
50代なら仕事はありますが、単価が下がってくるので、妥協は必要になってきます。
マネージメント系の仕事は、基本的に社員でないと任されないので、実質60歳前後のいわゆる定年ラインまでの仕事と考えたほうがいいです。
マネージメント系の仕事ではスキルよりも人脈が重要になってきます。プロジェクトリーダーは無理でもアドバイザーやCTO的な立場の仕事が取れるよう根回ししておくといいでしょう。
60歳以降もエンジニアとして生きていきたいなら、フリーランスや副業に力を入れておくべきです。
マネージメント系だと職場でプログラミング系スキルを学べなくなるので、クラウドソーシングなどで現役エンジニアとして通用するスキルを維持しておくのもいいでしょう。
自分が社長や会長などになってしまえば定年退職をさせられるリスクは少ないです。ですが、事業を成功させること自体のハードルが高いので、万人におすすめできることではありません。
自分で作ったサービスを長年育てていって、その収益で暮らすくらいが現実的かもしれません。収益を拡大して自社開発企業に成長させるなど夢は膨らみます。
WebプログラマとWebエンジニアの違い
Web系なのでどちらもWebサイト/アプリで一般ユーザーの目に見える部分を開発します。
Webプログラマは主にプログラミング(コーディング)を担当します。フロントエンドエンジニアもほぼ同じ部分を担当します。
あまり細かく分かれていませんが、Webエンジニアはプログラミングの他に管理/運営/営業などを含めたWebサイト全体に関わる傾向があります。
フロントエンドエンジニア/Web系プログラマ
ECサイトやWebサービス、社会システムなどで一般ユーザーがブラウザで見える部分を担当するプログラマのことです。
どちらも広い意味ではWebエンジニアに含まれます。
フロントエンドは技術の変化が激しく需要の多い職種のひとつです。
30歳くらいまでの比較的若いエンジニアが多いのが特徴です。
この記事では少し分けて SQLやJavaScript などでより高度な機能を実装するエンジニアとしてフロントエンドエンジニアとしています。
スキル的にはWebエンジニアよりコーディング能力が重視されデザイン能力はあまり求められないイメージです。
Railsなどのフレームワーク知識が活かせるのがこちらです。
Web系エンジニア
企業やお店のホームページやブログの作成、管理運営などをするエンジニアのことです。
デザイナーの作ったデザイン(カンプ/モック)をコードに落とし込んだり、簡単なデザインを自分で行ったりするとこもあります。
それぞれ入門書レベルの実装は出来るようにしておきましょう。
練習とポートフォリオを兼ねて自分のサイトをレンタルサーバーを借りるなどして公開しましょう。
シェアが大きいので最初はWordPressを使えばいいでしょう。
クライアントによっては有料テーマで十分なのですが仕組みを理解するために自作テーマを作成しましょう。
バックエンド(サーバーサイド)
一般ユーザーからは見えない管理画面やサーバー内での処理、DB構築/管理などを担当するエンジニアのことです。
大量のデータを深夜に一括処理したり、定期処理したりするバッチ処理なども担当します。
コンピューターの処理はクライアント(ブラウザやアプリ)とサーバー(サーバーマシンやDB)に分かれていますが、そのサーバー関連処理の実装/DB構築/運用などを担当します。
ブラウザやアプリにデータを送信する処理で、それに必要なデータをDB(データベース)に入れて管理しています。
専門性が高くフロントエンドほどは技術トレンドの変化が激しくないので現場で作業するエンジニアとしては年を取っても長く働きやすい傾向があります。
特にDB構築やチューニングはシステム全体のパフォーマンスに大きく影響する重要な部分です。
特定言語さえ学べばいいというものではないので学習環境の構築の難易度がやや高く個人でのスキルアップがしにくいのが特徴です。
会社やプロジェクトの現場で学びスキルアップしたほうがやりやすいです。
ちなみにバックエンドとサーバーサイドエンジニアはほぼ同じ意味です。どちらを使うかは担当者/会社/業種などの文化に依存します。
インフラエンジニア
特定言語には依存せずOSやサーバーアプリなどの幅広い知識が求められます。
具体的にはサーバーをオンプレで実装したり、AWSなどのクラウドを使うスキルが必要になります。
インフラは基盤という意味でコンピューターや通信の実行環境のことを指します。
インフラエンジニアもサーバー関連の仕事ですが、環境構築やチューニングなどをするのが特徴です。
サーバーOS/アプリやDBシステムのインストールや管理、アクセスが集中したときの負荷分散処理などを担当します。
バックエンドエンジニアよりもさらに専門性が高くプロフェッショナルなイメージが強いエンジニアです。
スマホアプリエンジニア
iPhoneやAndroidスマホで動くアプリを作るエンジニアのことです。
それぞれのOS用のプログラミング言語やクロスプラットフォームの言語を使います。
副業エンジニアの学習と案件受注
就職するほどではないが、副業プログラミングで稼ぎたいという未経験者には、クラウドソーシングがおすすめです。
挫折率9割への対策
エンジニア学習は普通の人にとっては未知の世界であり挫折してしまう人が多いです。
挫折しない人はしないのですが、なかでも独学での挫折率は9割と言われるほどハードルが高いです。
そんな挫折を乗り越える方法がいくつかあります。
これ以上はやりたくないなどと思い始めたら次の記事を読んで希望を取り戻してください。
まとめ 目的と過程をはっきりさせる
技術トレンドは変わっていくので必ずしもこの記事のロードマップに従う必要はありません。
要は自分の目的と実現過程をはっきりさせておければ大丈夫です。
あとはそれに従って突き進むだけです。エンジニアのロードマップはだいたい決まっていて再現性も高いので大きく失敗する可能性は低いでしょう。
職種にもよりますがエンジニア就職に必要な技術習得には500~2000時間くらいかかります。1日3時間で半年~2年くらいかかるイメージです。
自分のスキルアップを実感するにはかなりの時間がかかります。ですが、時間をかけて頑張れば自分もスキルアップできると信じて取り組んでください。
とはいえ、やってみたら思っていたのと違っていたり、目的が変わってきたときは自分のロードマップも変えてもいいでしょう。
自分の人生ですから自分が輝けるロードマップへ更新していきましょう。
どうすればいいのかよくわからない人は自分がいいなと思うエンジニアを探してお手本にしてマネしていくといいです。
そうすればそのいいエンジニアの方に近付いていけます。
マネするって言ったってマネできない部分もあるんじゃないか?
自分とスキルや属性が近い人の中から選べばだいたい大丈夫だろ。
まだ先の話ですが、最終的にはエンジニアリングもビジネスの一部なのでもうかるものを作れるようになることが大事になります。
ビジネスなので利益拡大とさらに社会貢献が目的になります。
社会貢献は誰かを幸せにすることです。実はお金よりこちらを目指した方がビジネスはうまくいきやすいです。
上司やクライアント以外の同僚や後輩なんかも幸せに出来るとなおよいです。そすうれば自分も幸せに近付いていけます。
逆に人を不幸にするとそれが自分にはね返ってくるのでダメです。世の中そんなものです。
一般的なITエンジニアの学習ロードマップ
ここで紹介するのはあくまで一般論なので全部を学ぶ必要はありません。
自分の目指すエンジニアやキャリアプランに必要なものを重点的に学んでください。それが自分の専門分野になります。
それ以外の技術は教養程度に知っておけばまず問題はないでしょう。
自分の専門以外の技術で何か学ぶなら、そのとき注目されている新しい技術を学ぶのが無難です。
- プログラミング言語の基礎
Java、Python、Cなど主要なプログラミング言語の文法や基礎的なプログラミング技術
- データ構造とアルゴリズム
配列、リスト、ツリーなどのデータ構造や、ソート、探索などのアルゴリズムなど
- オブジェクト指向プログラミング
クラス、継承、ポリモーフィズムなどのオブジェクト指向プログラミングの概念
- データベース
データベースの基礎、SQL言語の基礎、正規化、トランザクションなど
- Web開発
HTML、CSS、JavaScript、サーブレット、JSP、PHP、Ruby on RailsなどのWeb開発技術
- 言語別フレームワーク
Ruby:Ruby on Rails、JavaScript:Vue.js/React、Java:Spring Framework、CSS:Foundation/Bootstrap、PHP:CakePHP/Laravel、Python:Django/Flaskなど
- クラウドコンピューティング
AWS、Azure、GCPなどのクラウドプラットフォーム
- セキュリティ
暗号化、認証、認可、脆弱性診断などのセキュリティ技術
- AI・機械学習
Pythonを使った機械学習の基礎、ディープラーニング、自然言語処理、画像認識などのAI技術
- AIビッグデータ
Hadoop、Spark、MapReduceなどのビッグデータ処理技術
- オンライン学習サービス/スクール
学習サポートを受けられる
- 書籍
体験学習できるハンズオンの入門書や辞書的な技術書で知識を深める
- チュートリアル
公式ドキュメントやオンラインのチュートリアルで実践的に学ぶ
- オープンソースのコード
GitHubなどのオープンソースのコードで実際に動くコードを参考に学ぶ
- プロジェクトに参加
オープンソースプロジェクトや、個人で作成したプロジェクトに参加することでチーム開発などの実践的なスキルを学ぶ
- 実践的なプロジェクト立ち上げ
実際に自分でプロジェクトを作ることで、問題解決能力やプログラミングスキルを向上させる
- ポートフォリオ
自分の作成したプロジェクトや、実務で関わったプロジェクトなどをまとめたポートフォリオを作成し、採用担当者に見せることで、自分のスキルをアピールできる
- 実践的なスキル
企業は、学歴や資格よりも実践的なスキルを重視する傾向があり、プロジェクト参加や個人開発で実践的なスキルを身につけることが大切
- コミュニケーション能力
個人作業が多いので少ないやり取りでも業務に支障をきたさないコミュニケーション能力が求められる
- インターンシップ
実務経験を積むながら企業に直接アピールでき就職に有利
- コンテストやハッカソンに参加
入賞すればハイレベルポートフォリオ並みの評価をえられるチャンスがあり、結果に問わず意欲は就職時に評価対象になる、また新しい技術やアイデアを学ぶ機会にもなる
自分の性格や目的の職種にあった学習方法やアプローチを見つけ、着実にスキルを身につけていきましょう。
また、エンジニアは常に新しい技術やトレンドに対応できるよう、学習意欲を持ち続けることも大切です。
日々の学習を習慣化し、コミュニティやメンター、同僚などとの交流を通じて、スキルアップを目指していきましょう。
また、未経験者の採用担はポテンシャル採用なので今の技術力だけでなく成長が期待できる点をアピールできるといいです。
近頃は自分の自走力ばかりアピールする人が増えているのですが、企業分析も大切なのでその企業で自分の力がどう活かせるのかアピールできるようにしておきましょう。
スキルと企業との相性や意欲の他にもうひとつ大事なことがコミュニケーション能力です。人柄や一般的な礼儀作法や協調性などが判断されます。
コミュニケーションスキルは学んで身に着けることができます。不安のある人は素直に学んでおきましょう。
なるべく人から信頼され好かれる人物と評価されることを目指し、最低限、人から嫌われないレベルまでは高めておきたいです。知らない間に人から嫌われてしまう人は要注意です。
ITエンジニアになるための2つの高いハードルを越える必要があります。それが学習の継続と就職です。
学習を継続できるようになったら、自己・業界・企業分析を行い、就職をターゲットにしたアピールポイントに特化していくことが重要です。
書類や面接では嘘をついてはいけませんが、自分自身を客観的に評価し、自信を持ってアピールすることが大切です。
実際の面談ではブラック企業/ホワイト企業を見分ける方法などがありますので、面談や企業分析テクニックもみがいておくと失敗を未然に防げます。
エンジニアとしては最新技術にアンテナを張り、常に学び続ける姿勢で夢のあるキャリアを築いていきましょう。
コメント