新人エンジニアのためのプログラミング基礎学習ロードマップ
新人研修でそのまま渡せる学習ガイド。最初の言語の選び方、基礎が身につく勉強法、ターミナル・Git・SQL と Python・Java・PHP・Dart・Swift・C#・VB.NET などの講座を初級から読む順番。
新人研修の時期になると、毎年のように「何から、どの順番で勉強すればいいですか?」と聞かれます。私たちは2001年からソフトウェアを作ってきましたが、この質問への答えはいつも口頭か、その場限りのチャットでした。この記事はそれを1ページにまとめたものです。配属先の仕事に合った最初の言語、基礎が定着する勉強のしかた、そして当サイトの講座を初級から上級までどの順番で読めばよいかを整理しました。先輩やメンターがリンクを1つ送れば済むように書いています。
対象読者と、この記事の使い方
想定しているのは次のような人です。
- 新人エンジニア。 数行のコードは書けるものの、実際に何かをリリースした経験はなく、「まずはチームの言語に慣れておいて」と言われた人。
- 担当分野が変わった人。 Web 開発から Flutter チームに異動した、Java しか書いてこなかったのに VB.NET の社内ツールを引き継いだ、といったケース。
- OJT 担当・メンター。 毎回同じアドバイスを書く代わりに、リンク1つで済ませたい人。
使い方は簡単です。次の節の「勉強の習慣」を一度読み、判断表で言語を1つだけ選び、その言語の講座一覧を上から順に進めます。当サイトの講座は冒頭にレベル(初級・中級・上級)が書いてあり、最後に次の講座へのリンクがあります。
ほとんどの講座には実測の節があります。実行時間、メモリ使用量、ベンチマークの表などです。1周目は飛ばして構いません。 自分で測った数字でなければ信用できないので載せていますが、配属1週目に必要なものではありません。仕事の中で「これで十分速いのか?」という疑問が出てきたときに戻ってきてください。
私たちの基礎の学び方(講座もこの方針で書いています)
このサイトの講座は、すべてコードを実際に動かし、エラーも含めた出力をそのまま載せています。読む側も同じやり方で勉強しないと効果が出ません。1か月後に戦力になる新人と、3か月たってもコードをコピーしている新人を分けるのは、たいてい次の7つの習慣です。
- コードは自分で打って、自分で動かす。 コピー&ペーストはしません。自分で打つと、セミコロン、Python の
ifの後ろのコロン、Dart の型の後ろの?が目に入ります。打ち間違いが最初のエラーメッセージを生み、それを読む練習こそが今必要な練習です。 - 検索する前にエラーメッセージを読む。 コンパイラのエラーは見た目より親切です。Swift は行番号と一緒に直し方まで示すことが多く、Java の
incompatible typesは両方の型を表示し、VB.NET のBC30512は Option Strict が止めた暗黙の変換をそのまま書いてくれます。メッセージを最後まで読み、行番号を探し、その行を見てから検索します。 - 1か所だけ変えて、実行前に結果を予想する。 例が動いたら、値を1つ変えてみます。リストを空にする、
nullを渡す、21億を超える数を入れる。予想を先に書いてから実行します。予想が外れたら、まだ理解していない部分を見つけたということで、それが目的です。 - 練習問題は答えを見る前に解く。 Dart・Swift・PHP の講座には最後に練習問題があります。答えを開く前に、1問につき最低15分は粘ってください。練習問題のない講座では、3番がそのまま練習問題になります。
- 「よく言われること」を信じる前に測る。 プログラミングには、昔は正しかったルールがあふれています。当サイトの Python 並行処理の講座では、CPU を使う処理にスレッドを増やしても速くなりませんでした。機械学習シリーズでは、特徴量をスケーリングしない勾配降下法は同じ損失に届くまで 140,538 エポック、スケーリングした方は 2 エポックでした。すべてを測る必要はありませんが、大事な主張は自分で確かめます。
- AI アシスタントはエラーの説明に使い、タイピングを省くのには使わない。 自分で読んだエラーを貼って「なぜこうなるのか」を聞くのは良い使い方です。練習問題を代わりに解かせると、肝心の学ぶ部分を飛ばしてしまいます。修正案をもらったら、なぜそれで直るのかを自分の言葉で説明できるときだけ採用します。
- 具体的に、短く。 動画を2時間見るより、コードを30分動かす方が身につきます。勉強の時間は「読んだもの」ではなく「動かしたもの」で終えるようにします。
最初の言語は目的で選ぶ
言語は人気ランキングではなく、これからやる仕事で選びます。チームにすでにコードベースがあるなら、その言語が正解です。議論の余地はありません。
| やりたいこと | 最初の言語 | 次の一歩 |
|---|---|---|
| モバイルアプリ(1つのコードで iOS・Android) | Dart → Flutter | ネイティブ iOS のコードも触るなら Swift |
| iOS 専用アプリ、ネイティブ iOS 機能 | Swift | チームが Flutter も使うなら Dart |
| Web ページ、API、サーバー | PHP・Java・Python のうちコードベースが使うもの | 正規表現、PHP PDO 講座の SQL の安全対策 |
| データ分析、AI、業務自動化スクリプト | Python | 機械学習ゼロから実装シリーズ |
| 社内の .NET アプリ、Windows ツール | C# | VB のコードを保守する場合のみ VB.NET |
| 動かし続ける必要がある古い VB のコード | VB.NET | 連携の講座のために C# |
| コンピューターサイエンスの基礎(全員) | アルゴリズム・データ構造 | 正規表現 |
チームがどの言語を使っているか誰も教えてくれないなら、まずそれを聞いてください。この記事が答えられるどんな質問よりも良い最初の質問です。
シリーズ別の順番:初級から上級まで
6回構成のシリーズはどれも同じ構成です。第1・2回が初級、第3・4回が中級、第5・6回が上級です。1周目は第4回で止めてください。
Python
Java
PHP
インターネットに公開する PHP を書くなら、第4・5回は「上級」ではなく必修と考えてください。
Dart(Flutter 向け)
Flutter の仕事なら、第5回は早めに読んでおいてください。ほぼすべてのアプリが通信を行い、画面が固まる原因はたいてい非同期の書き方のミスです。
Swift
VB.NET
企業の現場では、VB.NET で書かれた社内システムがまだ多く残っています。保守担当になったら、第1回の Option Strict だけは初日に読んでおくと後が楽です。
C
C# の講座は6回構成ではなく、1テーマ1記事の短い記事の集まりです。次の順番で読んでください。
初級:環境準備と文法の骨組み
- C#開発環境の準備2026:.NET 10 SDKとdotnet CLIで始める
- C#の変数・データ型・定数:.NET 10で確かめた範囲と落とし穴
- C#の演算子:オーバーフロー・??・負の%・シフトの罠を.NET 10で検証
- C#のif・switch:パターンマッチング、CS8509、速度比較(.NET 10)
- C#の繰り返し文 while・for・foreach:.NET 10でILと速度を確認
- C#のbreak・continue・goto:多重ループの抜け方とgoto case
- C#の配列:.NET 10で動かし直した基本とジャグ配列・Spanの実測
- C#のメソッド:ref・out・paramsとオーバーロードを.NET 10で検証
- C#の例外処理:.NET 10で検証したtry・catch・finally
中級:クラスとコレクション
- C#のクラスとオブジェクト:プライマリコンストラクター・required・初期化子
- C#のアクセス修飾子6種類とfile、this:2つのアセンブリで検証
- C#のコンストラクターとファイナライザー:実行順序・GC・IDisposable
- C#プロパティの基本:get/set・自動実装・init・セッターの検証
- C#プロパティ応用:fieldキーワード・required・変更通知
- C#のクラス継承:overrideとnewの違いとコンストラクターの罠
- C#のインターフェイス:既定実装・static abstract・明示的実装
- C#の構造体:値コピー・防御的コピー・ボックス化のコスト実測
- C#の拡張メソッド・partial・入れ子クラス:C# 14 extensionまで
- C#のArrayList・Hashtable・Queue・Stack:旧式コレクションとボックス化の実測
- C#の
List<T>の内部:Capacityの増え方・コレクション式・AsSpanを実測 - C#コレクションの選び方:Dictionary・HashSet・FrozenDictionaryを実測
- C# ファイル入出力:using・非同期 API・UTF-8 BOM・Path の罠を実測
上級:値としての関数、LINQ、ジェネリック、イベント
- C#の匿名型と匿名メソッド:.NET 10で確かめた等価性とwith
- C#のラムダ式:.NET 10で動かし直した入門と落とし穴
- C#のFunc・Actionデリゲート:落とし穴と呼び出しコストの実測
- C# LINQの基本:.NET 10で動かし直した入門
- C# LINQ クエリ構文とメソッド構文:コンパイラの変換・let・SelectMany
- C# LINQのGroupByとJoinを深掘り:複合キー、ToLookup、CountBy
- C#ジェネリック入門:.NET 10で検証した制約・変性・ボックス化
- C#のデリゲートとイベント:.NET 10で検証した基本と落とし穴
- C#デリゲートのコールバック設計:進捗・キャンセル・チェーンの例外
- C#イベントの応用:add/remove・asyncハンドラー・弱いイベント
- C# リフレクションと属性:Invoke のコスト実測と AOT 警告
Windows 専用のテーマ(業務で必要になったら):C#でレジストリの読み書き:.NET 10のCA1416とRegistryView ・ WinFormsのモーダルとモードレス:ShowDialogとShow(.NET 10) ・ WinFormsのOK・キャンセルボタン:AcceptButtonとDialogResult ・ WinFormsでフォーム・アプリを1つだけ表示:staticとMutex
HTTP・Web の基礎(サーバーや API に触れる人全員)
アプリは必ず HTTP で通信します。ローカルのテストサーバーに対する実際の curl -v 出力を読みながら、ステータスコード・リダイレクト・Cookie・キャッシュ・TLS・圧縮を学びます。最初の API 業務の前に第1〜3回を。
JavaScript(JavaScriptCore で実行)
言語のコア(型・関数・オブジェクト・クラス・Promise・性能)を、macOS 標準の jsc シェルで実行しています。ブラウザの DOM や Node.js は説明のみで「ここでは未実行」と明記しています。
C言語(コンピューターの仕組みを知る)
多くの業務では必須ではありませんが、メモリとポインタ、そして他の言語がなぜそう動くのかを理解する最短ルートです。clang でコンパイルし、AddressSanitizer でバグを捕まえます。
C++(C の次に、または他の言語から直接)
ゲーム、組み込み、高速な処理、競技プログラミング向け。Apple clang 21 と libc++ でコンパイルし、サニタイザでバグを捕まえ、速度の主張はすべて実測しています。
| レベル | 講座 |
|---|---|
| 初級 | 1. C++入門:最初のプログラム・型・参照・std::string |
| 初級 | 2. C++の関数・オーバーロード・std::vector・文字列 |
| 中級 | 3. C++のクラス・RAII・0/3/5のルール:二重解放をASanで追う |
| 中級 | 4. C++ スマートポインタとムーブセマンティクスを実測で理解する |
| 上級 | 5. C++ テンプレート・コンセプト・STL アルゴリズム・ranges |
| 上級 | 6. C++ のコンテナ・スレッド・-O2 を実測で比べる |
アルゴリズム・データ構造(全員共通)
例は主に C・C++、一部が C# ですが、考え方はどの言語にもそのまま通じます。自分の言語でループと関数に慣れてから読んでください。基本情報技術者試験のアルゴリズム分野の復習にも使えます。
- 初級・探索と整列: 線形探索の実測:番兵法・SIMD・二分探索・HashSetを比較 → C言語の二分探索:2021年のコードを動かし直してわかったこと → バブル・挿入・クイックソートをC言語で動かし直して測った
- 初級〜中級・線形のデータ構造: 連結リストをC++で実装:削除処理のバグとキャッシュの実測 → 双方向連結リストをC++で:prev/next の更新順バグを ASan で検証 → 循環連結リストをC++で:無限ループの罠とヨセフス問題 → スタックのC++実装:溢れチェック・ASanの指摘・速度の実測 → 連結キューのC++実装:ノードのリーク、空キューのdequeue、速度実測 → 循環キューのC++実装:満杯と空の区別、%とビットマスクの実測
- 中級・木とヒープ: 木構造の走査:再帰と反復、退化した木でスタックが尽きる深さ → 二分探索木(BST):2021年のCコードのバグと整列済み入力の罠 → ヒープ:sift-up/down、O(n)構築の実測、PriorityQueue
- 上級・グラフと戦略: 深さ優先探索(DFS):再帰の限界を実測、閉路検出とトポロジカルソート → 幅優先探索(BFS):最短経路の復元と訪問済みチェックの落とし穴 → 貪欲法:お釣り問題が失敗する条件と区間スケジューリングの証明
正規表現(全員共通)
ログの検索、入力チェック、急ぎのデータ整形など、開発者なら最終的に誰もが正規表現を書くことになります。例は .NET・Python・PHP・JavaScript 系のエンジンで動かしています。
- 初級: 正規表現とは?得意・不得意と.NETでの速度実測 → 正規表現で文字列検索:大文字小文字・トルコ語のI・エスケープ → 正規表現のメタ文字:^ $ . と末尾改行の罠、\dの違い → 正規表現の文字クラス
[ ]:範囲・否定・\p{L}を4エンジンで検証 - 中級: 正規表現の量指定子:貪欲・最短・強欲とバックトラック実測 → 正規表現のグループ:番号の規則・名前付きグループ・エンジン差 → 正規表現の後方参照
\1:.NET・Python・PHP・JSで検証 - 上級: 正規表現で同じ文字の連続を探す:
(.)\1+と連続の圧縮 → 正規表現の先読み・後読みを5つのエンジンで試してわかったこと
コマンドライン(全員共通・最初に)
この3つのシリーズは、どの言語を選んだ人にも共通です。新人はたいてい初日にターミナルと Git に、最初の1か月で SQL に出会います。メインの言語に慣れるより先のことがほとんどです。実行環境は SQLite 3.51、Git 2.54、macOS の zsh/bash で、Linux(GNU 版)と挙動が違う箇所は各講座に明記しています。
Git(全員共通)
SQL(全員共通)
機械学習をゼロから(Python の次に)
Python の標準ライブラリだけを使う5回の講座です。ライブラリが隠してしまう前に、「学習」が実際に何をしているのかを自分の目で確かめます。先に Python の第1〜4回を終えてください。
新人の最初の4週間プラン(例)
通常の新人研修や OJT と並行して、1日1時間ほどを想定しています。扱うのは言語1つと共通の基礎までで、上級の講座はあえて入れていません。
| 週 | やること | ここまでできれば完了 |
|---|---|---|
| 1週目 | 開発環境をインストールし、選んだ言語の第1・2回。例はすべて手で打つ。 | ターミナルからファイルを実行でき、出会ったエラーメッセージを1つ説明できる。 |
| 2週目 | 第3・4回のあと、自分用の小さなツールを1つ作る(CSV の整形、ファイル名の一括変更、1画面だけのアプリなど)。 | 自分のデータで実際に動く、100行前後のツール。 |
| 3週目 | 共通の基礎:線形探索・二分探索、ソート、スタックの講座。正規表現は「正規表現とは?」と「メタ文字」。 | HashSet がリストより有利な場面を説明でき、ログ1行を拾う正規表現が書ける。 |
| 4週目 | チームのコードを読む。1〜3週目に学んだことが出てくる箇所を1つ探す。最初の小さな修正を出す。 | どんなに小さくても、レビューを通ったプルリクエスト1つ。 |
1週目の前、または並行して: コマンドライン講座の第1・2回と Git 講座の第1・2回。最初の週の「動きません」は、言語ではなくパス、ファイル名の空白、コミットし忘れが原因であることがほとんどです。
C# の場合は「第1・2回」を初級リストの1〜9、「第3・4回」を中級リストの10〜22に読み替え、1・2週目の分に3週間ほど見てください。1本ずつは短くても本数が多いので、それで普通です。
第5・6回のような上級講座(非同期、並行処理、性能、メモリ)は、実際の業務で必要になったときに読みます。2週目に先取りしても、たいていは混乱するだけです。
詰まったときは
- プログラムを小さくする。 問題が消えるまでコードを削り、最後に削ったものを戻します。10行で再現する例は、理解するのも質問するのも簡単です。
- 思っているより多く出力する。 値と一緒に型も表示します。Python なら
type(x)、Dart ならx.runtimeType、C# ならx.GetType()。初心者のバグの半分は「思っていた型ではない値」です。 - バージョンを確認する。
python3 --version、java -version、dart --version、php -v、swift --version、dotnet --version。新しいバージョン向けに書かれた例は、古いバージョンで分かりにくいエラーになることがあります。 - 質問は整理してから。 コード、エラーの全文、すでに試したこと。この3つがあれば先輩は2分で答えられます。「動きません」だけだと20分かかります。
- 30分詰まったら聞く。 午後いっぱい一人で悩むより、30分で解決して残りを練習に使う方がずっと多く学べます。聞くことも新人の仕事のうちです。
実行環境についての正直なメモ
講座は Apple Silicon Mac(M1 Pro)上で、特定のバージョンで動かしています。Python 3.9 と 3.11、OpenJDK 26、PHP 8.5、Dart SDK 3.11、Swift 6.4、.NET 10、Apple clang 21、SQLite 3.51、Git 2.54、macOS の zsh 5.9 / bash 3.2 です。正確なバージョンは各講座に書いてあります。Windows や Linux、別のバージョンでは、ファイルパス、実行時間、一部のエラーメッセージが異なることがあります。WinForms の記事は Windows 向けにコンパイルしただけで Mac では実行できておらず、記事にもそう明記しています。実行時間は1台のマシンで測った値なので、どちらがおよそ何倍速いかを見るための目安として読んでください。
講座の内容と手元の結果が違う場合は、まずバージョンを確認してください。それでも違うなら、それ自体が役に立つ発見で、おそらく何かが変わったというサインです。
よくある質問
新人はどのプログラミング言語から学べばよいですか?
配属先のチームが使っている言語です。モバイルアプリなら Dart(Flutter)、iOS 専用なら Swift。Web・サーバーならコードベースで使われている PHP・Java・Python のいずれか。データ・AI なら Python のあと機械学習シリーズ。社内の .NET や古い Windows ツールなら C#、VB のコードを保守するなら VB.NET。コマンドライン・Git・SQL は全員が最初に、アルゴリズム・データ構造・正規表現も全員共通です。
講座の実測(ベンチマーク)の節も最初から全部読むべきですか?
いいえ。1周目は説明を読み、例を手で打って実行し、練習問題を解くところまでで十分です。ベンチマークの表と、6回構成シリーズの第5・6回(上級)は飛ばし、業務で性能や並行処理を扱うようになったら戻ってきてください。
勉強中に AI アシスタントを使ってもよいですか?
使って構いません。自分で読んだうえで分からなかったエラーメッセージの説明や、予想と違う出力の理由を聞くのに向いています。例を代わりに書かせるのは避けてください。手で打つことで文法が身につき、最初の1週間のミスの多くもそこで見つかります。
初級・中級の講座を終えるのにどれくらいかかりますか?
1日1時間ほどなら、1つの言語の初級・中級の4回分は2週間で終わります(本記事の4週間プランの場合)。C# は短い記事が多数に分かれているため、初級・中級で3〜4週間を見ておくのが現実的です。