TOP
プログラミング独学コンテンツ一覧
[2023年版]独学系ITエンジニアロードマップ〜始まりの章〜

[2023年版]独学系ITエンジニアロードマップ〜始まりの章〜

最終更新日
エンジニアになろうと志し、プログラミングやサーバの独学で挫折しそうになった経験はあるでしょうか。10年以上、エンジニアとして生計を立てている自分は過去に何度もありました。
その度に自身の不甲斐なさを肌身にしみて、無力感に苛まれてきました。このコンテンツでは、そのような経験の中から抽出した「結局これをやるしかない」というロードマップを作成しました。
正しいロードマップと一貫した努力、そして継続的な学習によって、プログラミングに熟達するだけでなく、進化し続けるITの分野で常に自分を鼓舞し続けることができます。
このコンテンツでは、自分自身の道筋を決めるための第一歩を定義するために必要な情報を紹介しています。あくまでも「第一歩」に過ぎないことを理解の上で読み進めてください。
実践的かつ詳細なロードマップは各ゴールごとに作成予定です。

まずはゴールを明確にする

ITエンジニアと一言で言えど、その種類は多岐に渡ります。最近はSaaSの流れもありWebエンジニアが流行していますが、少し前のソーシャルゲーム全盛期はゲームエンジニアが人気でした。
フリーキーズでは、基本的に「流行よりも愛」を基準に職種選びを推奨しています。
Webの広大さに胸がときめくのであればWebエンジニアを選ぶべきですし、ゲームが好きでたまらない人はゲームエンジニアを選ぶべきです。ロボットを作りたければ電気工学を主力にしたエンジニアかコンピュータサイエンスを主軸にしたエンジニアで分岐もします。
とにかくまずは「何を愛していけるか」を自分の中で落とし込んでください。

高収入になれないタイプのエンジニア志望者

「作りたいものがないけど収入が高そうだから〜」という考え方の人はおそらくエンジニアとして高収入を狙うことはできません。うまくいってもそこそこの年収のエンジニアです。
最初に選んだ方向性がすべてではなく、途中で興味の対象が変わることもあります。それでも必ず最初の入口は自身が強く興味を持てる対象を選んでください。
加えて、「勉強嫌い」と「効率中毒者」もエンジニアとして上を狙えません。
ChatGPTのような生成AIやGithub Copilotのような補助AIを活用することは良いことです。しかし、だからといって「なぜそのコードを書くのか」「なぜその仕組みなのか」を理解しようとする知的好奇心のない人は単なる作業者的エンジニアに落ち着きます。
脳に汗を流し、キーボードを叩いて指を痛め、眠い目をこすって本を読み、新しい技術にワクワクしながら学び続けられる人が結果として高収入になります。

学ぶべきジャンル一覧

実際に「何を勉強すべきか」の一覧は下記のとおりです。
エンジニアの職種別に一覧化しています。当サイトで紹介する職種は、運営者の田邉が実際に「担当したことがある」または「プロジェクトにおいて協業したことがある」職種のみです。

共通で知っておくべき内容

ITエンジニアは共通で知っておくべきツールや知識があります。たとえ機械やデバイスをメインに扱うエンジニアであっても、昨今のIoTの流れを考慮するとWebの知識が必要になったりすることもあります。
ここでは共通で学習しておくべき知識の一覧を紹介します。
  • Webの仕組み(HTTP/HTTPS, ブラウザ, ネットワーク, セキュリティなど)
  • パソコンの仕組み(OS, 記憶領域, メモリ, CPUなど)
  • サーバの仕組み(OS, コマンド, セキュリティなど)
  • プロジェクトで利用するツール(Asana, JIRA, Backlogなど)
  • Gitの知識
  • クラウドとは何かを説明できる知識
  • AIと一言で片付けず、機械学習や深層学習といった専門家としてのIT知識
  • 働く業界のドメイン知識
  • 英語への苦手意識の克服
  • 一般的な社会人としてのコミュニケーション能力や文章作成能力
逆に、必要になるまで習得しなくてもいい知識は以下です。
  • 数学(データサイエンティストを目指す場合は別)
  • 物理
  • Microsoft製品(Word, Excelなど)

Webエンジニア(フロントエンド)

Webにおけるフロントエンドエンジニアとは、エンドユーザー(利用者)が使う画面を構築する専門職です。デザイナーとは別職種となるため、一般的にデザインセンスは求められませんが、「どうすれば使いやすくなるか」といった審美眼は必要になります。
フロントエンドエンジニアに必要なスキルセットは以下です。
  • マークアップ言語および拡張メタ言語(HTML, CSS, Sassなど)
  • プログラミング言語(2023年現在はTypeScriptがメイン)
  • フレームワーク(ReactやVue.jsなど)
  • Figmaのようなデザインツール

Webエンジニア(バックエンド)

Webにおけるバックエンドエンジニアとは、エンドユーザーの目に見えないデータベースやビジネスロジックをシステム化する専門職です。ノーコードツールの台頭によって挿げ替えられると言われていた時代もありましたが、複雑な要件において、設計・運用の技術まで含めることを考慮すると一生モノの技術と言えるでしょう。
バックエンドエンジニアに必要なスキルセットは以下です。
  • プログラミング言語(Python、Ruby、PHP、Golang、Scala、Javaなど)
  • フレームワーク(Django、Rails、Gin、Play Frameworkなど)
  • インフラの知識(Docker、Kubernetes、Nginx、GCPなど)
  • ネットワークの知識(DNS、HTTP/HTTPS、SSLなど)
  • セキュリティの知識(耐障害性、冗長性、攻撃者の思考とその対策など)

データサイエンティスト

データサイエンティストは、複雑なデジタルデータの収集、分析、解釈を担当する専門職でビジネスの意思決定プロセスを支援する役割を担っています。数学、統計学、プログラミングの専門知識を駆使して、さまざまなソースからデータを収集し、アルゴリズムやモデルを適用して、そこから意味のある洞察を引き出します。
データサイエンティストの仕事の最初の段階では、ビジネス上の問題を理解した上で必要なデータを収集しクリーニングします。
データがきれいになったら統計学や機械学習の技術を駆使して、データを分析・解釈します。予測モデルの構築、パターンの発見、その他の洞察の導出などの実施してレポート、ダッシュボード、ビジュアライゼーションなどの形で提供します。
データサイエンティストに必要なスキルセットは以下です。
  • 数学と統計学(微積分、線形代数、確率、統計的検定など)
  • プログラミング言語(PythonやRなど)
  • よく利用されるライブラリ(NumPy、Pandas、Matplotlibなど)
  • データ操作(データの抽出、クリーニング、再形成をするためにSQLや類似のデータベースの知識)
  • 機械学習(教師あり学習と教師なし学習、さらに強化学習や、決定木、ニューラルネットワーク、回帰、クラスタリングなど)
  • データ可視化(PythonのMatplotlibやSeaborn、Rのggplot2など)
  • データプラットフォーム(Hadoop、Spark、Hiveなどのビッグデータツール)

セキュリティエンジニア

セキュリティエンジニアは、企業のコンピュータシステムやネットワークの安全確保に責任を持つ専門家です。デジタル情報のセキュリティや、サイバー脅威からのシステム保護にまつわる複雑な問題に対処します。顧客情報を含む企業の機密データを不正アクセスから守り、安全性を確保するため、IT分野で重要な役割を果たします。
セキュリティエンジニアの仕事は多岐にわたります。マルウェアやハッキングから守るための新しいシステムの構築、既存のシステムの脆弱性の監査、緊急のセキュリティ脅威への対応などが含まれます。
セキュリティエンジニアに必要なスキルセットは以下です。
  • 技術的な専門知識(システムアーキテクチャ、ネットワーキング、クラウドサービス、データベースシステムなど)
  • セキュリティツール(侵入検知システム、アンチウイルスソフト、ファイアウォール、SIEMツールなど)
  • プログラミング言語(Python、Java、Bashなど)
  • サイバー脅威と防御(データ暗号化手法、マルウェア、フィッシング、ソーシャルエンジニアリング攻撃など)
  • コンプライアンスと法規制(データ保護やサイバーセキュリティに関する関連法規)
  • 倫理(機密データを任されるため強い倫理観と誠実さが必要)

インフラエンジニア

インフラエンジニアは、サーバー、ストレージ、ネットワーク、各種アプリケーションなど、ハードウェアとソフトウェアの両方の安定性を管理する守護者です。新しいシステムの設計とサーバ周りの実装、既存のシステムの保守とアップグレード、問題のトラブルシューティング、データとサービスの利用可能性と安全性を確保します。
インフラエンジニアの仕事は、企業のクラウド・コンピューティング・プラットフォームの構築、データセンターの管理、組織のネットワークのオンライン化と安全性の確保、災害復旧プランの導入などです。
インフラエンジニアに必要なスキルセットは以下です。
  • プログラミング言語(PythonやShellスクリプトのようなシステム管理言語)
  • OSに関する知識(LinuxやWindowsサーバー)
  • ネットワーク(ネットワークアーキテクチャ、プロトコル、セキュリティ、ファイアウォール、VPN、ルーター、ロードバランサーなど)
  • クラウドサーバー(Amazon Web Services、Google Cloud Platform、Microsoft Azureなど)
  • 仮想化(VMwareやHyper-Vなど)
  • データベース(SQLとデータベース管理の知識)
  • セキュリティ(暗号化、証明書、安全なネットワーク設計など)

ゲームエンジニア(ゲーム開発者)

ゲームエンジニアは、ゲーム開発者とも呼ばれ、ソフトウェア工学の知識を応用してビデオゲームを作成する専門家です。ビデオゲームやゲームアプリの制作は、芸術、プログラミング、数学、ストーリーテリングの側面を組み合わせた複雑なプロセスです。
ゲームエンジニアの仕事は、ノンプレイヤーキャラクターを動かす人工知能の設計から、ゲーム世界のオブジェクトの相互作用を制御する物理システムの開発まであらゆることに携わります。コーディングだけではありません。アーティスト、デザイナー、サウンドエンジニアなどと密接に協力し、ゲームのコンセプトを実現します。
ゲームエンジニアに必要なスキルセットは以下です。
  • プログラミング言語(C++、Python、JavaScript、C#など)
  • ゲームエンジン(Unity、Unreal Engine、Godotなど)
  • 数学(幾何学、三角法、代数学などの数学の基礎)
  • コンピュータグラフィックス(OpenGLやDirectXなどのレンダリング技術やAPI)
  • ゲームへの情熱(ゲームのジャンル、スタイル、メカニズムに関する知識)

IoTエンジニア

IoT(モノのインターネット)エンジニアは、IoT技術を駆使して接続されたデバイスからデータを収集、集約、分析するシステムを構築、開発、保守する専門家です。スマート冷蔵庫やサーモスタットなどの家庭用品から産業機械まで、これらの機器にはセンサーやソフトウェアが組み込まれておりインターネットを介してデータを共有できます。
IoTエンジニアはこのデータを活用して効率性を向上させ、新しいサービスを実現し、より良いユーザー体験を生み出すために重要な役割を担っています。IoTエンジニアリングは成長中の分野であり、より多くのデバイスがインターネットへと接続されるようになるにつれてその重要性はますます高まっています。IoTエンジニアリングはヘルスケア、農業、輸送、ホームオートメーションなどの業界にまたがる膨大な可能性があります。
IoTエンジニアに必要なスキルセットは以下です。
  • プログラミング言語(Python、Java、C/C++、JavaScriptなど)
  • ネットワーク(TCP/IP、UDP、MQTTなど)
  • ハードウェアインターフェース(マイクロコントローラー、組み込みシステムの知識など)
  • データ管理(SQL/NoSQLデータベースなどのデータ管理技術、データ分析、HadoopやSparkなどのビッグデータプラットフォームの知識など)
  • クラウドコンピューティング(AWS、Google Cloud、Microsoft Azureなど)
  • セキュリティ(暗号化方式、安全なデバイス管理、データプライバシー基準に関する知識)

RPAエンジニア

RPA(ロボティック・プロセス・オートメーション)エンジニアは、ロボットと呼ばれるソフトウェアツールを使って自動化されたビジネスプロセスを管理・開発するIT専門家です。通常は人間の従業員が行う反復的な定型作業を自動化する役割を担っています。RPAの目的は、業務の合理化、コスト削減、効率化を図ることです。そのため、RPAエンジニアの仕事は、既存のビジネスプロセスを調査し、自動化がもたらすメリットを特定し、自動化ワークフローの設計と開発を実施します。
RPAは物理的なロボットを使うわけではありません。人間のユーザーと同じようにビジネスシステムやアプリケーションと対話できるソフトウェアロボットです。RPAは銀行やヘルスケア、物流などさまざまな業界で応用されており、ITの分野で急速に成長している分野です。特に手作業が多く、ヒューマンエラーが発生しやすい業務に有効です。
RPAエンジニアに必要なスキルセットは以下です。
  • プログラミング言語(VBA、Python、.NETなど)
  • RPAツール(UiPath、Blue Prism、Automation Anywhereなど)
  • ビジネスプロセスへの理解
  • 分析力
  • システムインテグレーション

業界のトレンドは常に仕入れておこう

IT業界は急速なスピードで進化しており、自分のスキルが適切なものであることを保証するためには常に最新の情報を得ることが重要です。Medium、Stack Overflow、GitHub、各プログラミング言語や技術の公式サイトなどは情報を得るための素晴らしいリソースです。
さらに、ソフトウェア開発の全体像の中で自身の技術スタックがどのように位置づけられ、どこで使われているのかを理解するようにしましょう。自分の技術が活かせる新しいドメインはあるのか、参加組織やコミュニティにおいて、あなたに影響を与えそうな変化はあるか、これらを自問自答することで学習努力をどこに集中させるかを決めることができます。

AI製品と上手に付き合おう

まず、フリーキーズではAIの利用について推奨派であると明言します。
理由としては以下です。
ITエンジニアは、AIを脅威としてではなく自分たちのスキルを補完するために設計された強力なツールとして捉える必要があります。AIを搭載したツールはありふれた作業を自動化し、より複雑な問題解決に時間を割くことができ、生産性を向上させることができます。例えば、GitHub Copilotはあなたがコードを入力する際にコードの行やブロックを提案し、時間を節約し、新しい技術を教える可能性があります。
さらに、AIツールは学習とスキルアップの絶好の機会を提供します。
AIと対話することで、高度なアルゴリズムや戦略に関する洞察を得ることができ、エンジニアはそれを自分の仕事に取り入れることができます。
ITエンジニアとAIの関係は、AIが人間の能力を補強し、ITエンジニアがAIの適用を指導・改善するという相互利益の関係であるべきです。
このアプローチは、IT分野においてより効率的で創造的で価値のある結果をもたらすことができると考えます。

ブログ、ポッドキャスト、コミュニティを使った継続的な学習

プログラミングを学ぶことは生き方であり目的地ではありません。探求し続け、構築し続け、共有し続けましょう。ブログやポッドキャストは新しいことを学び、最新情報を得るのに最適です。日本国内外の情報リソースは数多にあるため、自分が興味を持てるトピックを提供するリソースは積極的に取り入れていきましょう。
また、技術コミュニティに参加することも非常に有益です。Stack Overflowで質問に答えたり、GitHubでオープンソースプロジェクトに貢献したり、地域で開催されるミートアップに参加したりできます。こうすることで、他の人から学ぶだけでなく自分のスキルを証明し、評判を高める機会にもなります。

とにかく経験を積み続ける

諺にもあるように「継続は力なり」です。技術的な知識とプログラミングの概念を強化する最良の方法は実践的なアプリケーションです。LeetCode、AtCoderなどのオンラインコーディングプラットフォームや競技プログラミングプラットフォームでは、プログラミングを使用して解決できる実世界の問題を数多く提供しています。これらの問題は単純な作業から複雑なアルゴリズムによる課題まで多岐にわたります。
これらの問題を解くことで、コーディングスキルが向上するだけでなく問題解決能力や批判的思考能力も身につけることができます。さらに、これらのプラットフォームの中では、世界中のプログラマーと競い合ったり互いのコードを読み合ったりできるため、刺激的でモチベーションの高い学習環境を提供します。

個人プロジェクトを作り公開する

個人プロジェクトは学んだことを実践する場として最適であり、自身の学ぶ意欲を高めスキルをアピールする場となります。あったらいいなと夢想するツールや、作ってみたいゲームなど、ワクワクするようなことを考えましょう。そのアイデアを小さなパーツに分解して、一度に一歩ずつ作り始めましょう。
個人プロジェクトは複雑である必要がありません。ToDoリストアプリや個人ブログのようなシンプルなプロジェクトでも学習する良い機会になります。目標は、学び、成長することです。何かを作ったらそれを共有することを忘れないでください。GitHubや個人のウェブサイト、あるいはSNSで自分のプロジェクトを紹介できます。

オープンソースに貢献する

オープンソースプロジェクトへの貢献は、あなたのプログラミングの旅において、大きな変化をもたらす可能性があります。コラボレーション、既存のコードの理解と改善、Gitのようなバージョン管理システムを含む、実世界のソフトウェア開発の経験を得ることができます。
Pythonベースのオープンソースプロジェクトの多くは、スキルレベルに関係なく、常に貢献者を募集しています。Up For GrabsGood First Issueのようなウェブサイトは、初心者に優しいオープンソースプロジェクトを見つけるのに役立ちます。オープンソースへの貢献は、コーディングだけではないことを忘れないでください。ドキュメンテーション、テスト、バグ報告などを通じて貢献できます。さらに、プログラミング・コミュニティでのネットワークと評判を高めることができます。

フリーランスとインターンシップ

ある程度のキャリアを積んだ多くのエンジニアがフリーランスへの道を考え始めます。実際にフリーランスエンジニアとしてキャリアを積み上げ続けることができるかはさておき、フリーランスになること自体は非常にハードルが低くなりました。
しかし、フリーキーズでは最低でも一年以上の企業内エンジニアをおすすめしています。
IT業界のプロとしての立ち居振る舞いを、先輩や同僚を見ながら身につけるほうがフリーランスエンジニアとしての価値も上がるからです。
ただし必ず覚えておいてほしいのは、誰もがフリーランスに向いているわけではないということです。企業内エンジニアにはより大きなプロダクトに関わる機会やサービスの意思決定に関われる機会が多かったり、継続的に仲間とチームビルディングしていけるという大きな強みがあります。
これはフリーランスエンジニアを長く続けた人間にとっても大きな魅力として映ります。
また、インターンシップもプロとしての経験を積むのに最適な方法です。多くの企業が初心者向けにインターンシップを提供しており、経験豊富なプロフェッショナルの指導の下、実際のプロジェクトに携わることができます。インターンシップが正社員の内定につながることも少なくありません。

エンジニアの学習曲線

プログラミングやIT技術は、特に初心者のうちは難しいものです。エラーやバグ、何もかもうまくいかないような状況に遭遇することもあるでしょう。しかしそれは全く問題ありません。エラーは学習プロセスの一部です。むしろエラーはあなたの最高の教師です。すべての間違いは新しいことを学ぶチャンスなのです。
バグに遭遇してもイライラする必要はありません。その代わりになぜそれが起こったのかを理解するようにしましょう。デバッグツールを使ったり、エラーメッセージを読んだり、ネットで検索したり、助けを求めたりしましょう。こうした課題を克服することでコーディングスキルが向上するだけでなく、より優れた問題解決能力も身につけることができます。

「急がば回れ」継続の重要性

どんなスキルも一貫性や継続性が重要ですが、プログラミングも例外ではありません。一朝一夕で熟練したエンジニアになれるわけではありません。時間、練習、忍耐が必要です。毎日、たとえ数分でもいいからコードを書くことを習慣にしましょう。この一貫した練習が徐々にあなたのスキルと自信を高めていきます。
一度にたくさんの情報を詰め込むよりも毎日少しずつ学ぶ方が良いのです。英語の諺にもあるように、"Slow and steady wins the race"(「ゆっくり着実に進もう」の意)です。日々の小さな努力が積み重なり、やがて複雑な問題にも簡単に取り組めるようになるのです。