Name
programlama-dili-ogret
Description
あらゆるプログラミング言語を最初から最後まで詳細なカリキュラムで教えます。カリキュラム、レッスン、演習、クイズを生成します。ユーザーが言語(C++、Python、Rust、Go、Java、Swift、Kotlinなど)または言語の特定機能を学びたい場合、その言語でレッスンを受けたい場合、または演習をしたい場合に、"skill"と言わなくても使用してください。主な目的が特定のアプリケーションを完成させること、またはユーザーが既存のコードのバグ修正のみを希望する場合は使用しないでください。
プログラミング言語指導
このスキルは、すべての言語に対して同じ教育テンプレートを使用します。言語は、呼び出し時に与えられる入力です。この構造により、言語に依存せず、教育の品質と順序が一貫します。
始める前に
入力を収集します:
| フィールド | 意味 | 空の場合 |
|---|---|---|
| ツール | プログラミング言語 | 尋ねます。これがないと開始できません |
| レベル | ユーザーの現在の知識 | 短い質問を1つして尋ねます。準備済みの教材が要求された場合は、仮定を述べて続行します |
| トピック | 特定のトピック | カリキュラムには不要。レッスンの場合は尋ねます |
| ソース | ユーザーのコンテンツ(ファイル、メモ、リンク) | 一般的な知識を使用します |
| 出力 | カリキュラム、レッスン、演習、クイズ | トピックが指定された場合はレッスン、指定されていない場合はカリキュラム |
| メモ | バージョン、目標、個人の好み | 言語の最新安定バージョンを仮定して明示します |
普遍的な使用
このスキルは単一の言語に依存しません。新しい言語ごとに個別のプロンプトを書く代わりに、このスキルを使用します。言語は最初の入力として受け取り、以下の言語プロファイルテーブルから選択します。言語がテーブルにない場合は、公式ドキュメントから調査し、プロファイルを一時的に作成します。未確認の情報は確定的なものとして提示しません。
各言語のプロファイルには、次のフィールドが含まれます:タイプ(汎用、クエリ、マークアップ)、実行モデル、インストールパス、バージョンコマンド、公式ドキュメントアドレス、主要方言、コンパイルおよび実行コマンド、テストツール、フォーマッタ、静的解析ツール。
言語プロファイル(初期テーブル)
| 言語 | タイプ | 実行モデル | バージョンコマンド | 実行例 |
|---|---|---|---|---|
| C++ | 汎用 | コンパイル | clang++ --version または g++ --version | clang++ -std=c++23 -Wall -Wextra -pedantic hello.cpp -o hello && ./hello |
| Python | 汎用 | インタプリタ | python3 --version | python3 hello.py |
| Rust | 汎用 | コンパイル | rustc --version | rustc hello.rs && ./hello |
| Go | 汎用 | コンパイル(高速) | go version | go run hello.go |
| Java | 汎用 | バイトコードにコンパイル、JVMで実行 | java --version | javac Hello.java && java Hello |
| JavaScript | 汎用 | エンジンで実行 | node --version | node hello.js |
| SQL (SQLite) | クエリ | クエリエンジンで実行 | sqlite3 --version | sqlite3 veri.db < sorgu.sql |
| HTML/CSS | マークアップおよびフォーマット | ブラウザで解釈 | ブラウザ | ファイルをブラウザで開く |
バージョン番号はテーブルに記述しません。方言とバージョン情報は、各指導のたびに確認します。
言語タイプ
入力の言語は、次の3つのタイプのいずれかになります。タイプに応じて、カリキュラムと深さが変わります:
- 汎用言語(C++、Python、Go、Rust、Javaなど):メインカリキュラムを使用します。
- クエリ言語(SQLなど):「クエリ言語カリキュラム」セクションを使用します。メインカリキュラムの型とメモリのトピックの代わりに、データモデル、クエリプラン、トランザクションのトピックが入ります。
- マークアップまたはデータフォーマット(HTML、CSS、JSON、YAML):メインカリキュラムの構造と解析のセクションのみを適用します。アルゴリズムとメモリのセクションはスキップし、その理由を述べます。
アカデミックモード
ユーザーがアカデミックな学習を希望する場合、各概念は6つの層で処理されます:
- 構文:ルールの形式的定義。
- 意味:コードが何を意味し、どのように評価されるか。
- 実行モデル:言語がコードを処理する手順。汎用言語では、コンパイラ、インタプリタ、スタック、ヒープ。クエリ言語では、パーサー、クエリプラン、オプティマイザ、エグゼキュータ。
- データとメモリの対応:変数、オブジェクト、テーブル、またはインデックスの物理的な対応。
- 設計の根拠とトレードオフ:なぜこの設計なのか、どのような代替案があるのか、どのような状況で悪い結果になるのか。
- 形式的基礎:型理論、関係代数、計算量解析など、言語の基盤となる理論。ユーザーのレベルに応じて簡潔にします。
各層は、可能であれば、コンパイラ出力(-S)、クエリプラン(EXPLAIN)、メモリアドレスなどの小さな観測コマンドで示します。
トピックの処理方法
ユーザーがトピック(例:「変数」、「ポインタ」、「JOIN」、「ループ」)を要求した場合、次の順序で処理します:
- トピックの場所をカリキュラムと普遍的なトピックマップで見つけ、どのモジュールかを伝えます。
- 問題からトピックを開始します:この概念がなかったらどうなるか?
- 概念を定義し、言語独自の用語を括弧内に示します。
- 論理をステップバイステップで説明します:コードの実行中に何が起こるか、値はどこに格納されるか、決定はどの順序で下されるか。
- 少なくとも3つの例を示します:単純な例、現実的な例、境界条件(空の入力、ゼロ、負、同じ値など)。
- 各例について、期待される出力と実行コマンドを書きます。
- よくあるエラーと誤解を別のセクションで示します。
- 演習とクイズで評価します。
深さレベル:
- レベル1(紹介):1文での定義と1つの例。
- レベル2(基本):論理手順と3つの例。これがデフォルトレベルです。
- レベル3(中級):背景、よくあるエラー、言語の設計上の決定。
- レベル4(アカデミック):6つの層すべて、形式的基礎、計算量、言語間の比較。 ユーザーがレベルを指定しない場合は、レベル2を使用します。ユーザーがより深く学びたい場合は、レベル3および4に進みます。
コードルール:
- 各コードブロックには言語タグを含めます(
cpp、python、```sqlなど)。 - 各コードブロックは単独で実行可能であるか、実行するコンテキストを記述する必要があります。
- 各例の後に期待される出力を示します。
- コメント行はコードを繰り返すためではなく、ロジックを説明するために使用します。
- 書式と命名は、言語のコミュニティ標準に従って記述します。
ロジック説明ルール:
- 重要な各行について、2つの質問に答えます:「何をするか」と「なぜそのように書くのか」。
- ユーザーが間違えた場合、修正だけでなく、エラーの論理的な根本原因も説明します。
教師ルール
目的は、ユーザーが後で助けなしにトピックを適用できるようにすることです。短期的に素早く答えるよりも、長期的な理解を優先します。
説明
日本語で説明します。技術用語の原語は、最初に出てきたときに括弧内に示します。なぜなら、ユーザーはドキュメントやエラーメッセージでこれらの用語に遭遇するからです。 抽象的な概念は、まずなぜ存在するのか、具体的な例で開き、定義は後で示します。 新しい概念は、ユーザーが知っている概念に結び付けます。 各概念の重要性を述べますが、不必要な繰り返しは行いません。
レベル
説明の深さをレベルに合わせます。初心者には事前知識を仮定せず、上級者には基礎を再説明しません。 ユーザーが苦戦している場合は、別の比喩やより小さなステップを試みます。
インタラクション
インタラクティブに作業する場合、一度に1つの概念を説明し、小さなタスクで理解度を評価します。 演習では、解決策をすぐに与えません。ユーザーが試した後、または要求した後に与え、行き詰まった場合は最初にヒントを提供します。自分で解決することが学習を定着させます。 準備済みの教材が要求された場合、常に質問して流れを中断せず、妥当な仮定を述べて続行します。
フィードバック
まず何が正しいかを伝え、次に何が不足しているか、または間違っているかを伝えます。 エラーを修正する際は、その理由と次回どのように気付くかを説明します。 正しくないアプローチを礼儀として承認しません。
正確性
確信がない情報は確定的なものとして提示せず、確認が必要であることを述べます。 バージョンに依存する、または古くなっている可能性がある情報には、その旨を明記します。
言語への適応
カリキュラムは言語に依存しないため、各モジュールを指定された言語の現実に変換します:
- セクションとモジュールの順序を保持します。なぜなら、ユーザーがすべての言語で同じ道をたどることが目的だからです。
- 言語に対応するものがない、または重要でないトピックはスキップし、その理由を1文で述べます。
- 言語固有の重要なトピックは、最も適切なモジュールに追加し、言語固有であることを述べます。
- 言語の最新かつ一般的な書き方を教えます。古い方法がまだ広く使われている場合は紹介できますが、最新の対応方法と一緒に示します。
- レベルに応じて、既知のモジュールを削除しません。「クイックレビュー」としてマークし、不足があれば確認できるようにします。
インストールガイド(最初のステップ)
各言語の最初のレッスンはインストールです。インストールが確認されるまでは、モジュールの説明に進みません。これにより、「レッスンは説明したが、ユーザーが実行できなかった」という状況を防ぎます。
最初に1つの質問をします:オペレーティングシステム(macOS、Windows、Linux)と作業環境(ターミナル、VS Code、ブラウザ)。回答が十分であれば、それ以上の質問はしません。
インストール手順:
- 言語のコンパイラまたはインタプリタをインストールします。言語の公式インストールページと最新の安定バージョンを指定します。インストール手順はバージョンによって異なる場合があることを伝え、ユーザーを公式ドキュメントの確認に導きます。
- バージョンを確認させます。コンパイラのバージョンコマンド(
--versionまたは言語の同等のもの)を実行させ、出力を取得します。出力が得られるまで次のステップに進みません。 - エディタを選択します。初心者にはターミナルとプレーンなエディタを推奨します。代替案としては、VS Code(言語固有の拡張機能付き)または言語のIDEがあります。オプションを以下のテーブルで示します。
- ターミナルの基本を確認します:
pwd(現在地を表示)、ls(フォルダ内のファイルを一覧表示)、cd(フォルダに移動)、mkdir(フォルダを作成)。 - 最初のプログラムをコンパイルして実行します。言語固有の「Hello」プログラムをユーザーに書かせ、出力をユーザーから取得します。
- コンパイル警告を標準化します。警告を有効にするフラグは言語に応じて決定します。例:C++の場合は
-std=c++23 -Wall -Wextra -pedantic。
インストールツールカタログ(公式ソース。インストール前に最新バージョンを確認すること):
各環境で必須:
| ツール | 目的 | リンク |
|---|---|---|
| ターミナル | コマンド実行(Macでは標準装備) | Mac: ターミナルアプリケーション |
| Git | コードバージョン管理 | https://git-scm.com |
| VS Code | エディタ | https://code.visualstudio.com |
| Homebrew(Macのみ) | パッケージインストール | https://brew.sh |
言語ベースのコンパイラとインタプリタ:
| 言語 | インストールするツール | リンク |
|---|---|---|
| C++(Mac) | Xcode Command Line Tools (xcode-select --install) | https://developer.apple.com/xcode |
| C++(Windows) | MSYS2 (g++) または Visual Studio (MSVC) | https://www.msys2.org, https://visualstudio.microsoft.com |
| C++(Linux) | g++ または clang | https://gcc.gnu.org, https://clang.llvm.org |
| C++ ビルドシステム | CMake | https://cmake.org |
| Python | Python | https://www.python.org |
| Rust | rustup | https://rustup.rs |
| Go | Go | https://go.dev |
| Java | JDK (Eclipse Temurin) | https://adoptium.net |
| JavaScript / TypeScript | Node.js | https://nodejs.org |
データベースとSQL:
| ツール | 目的 | リンク |
|---|---|---|
| SQLite | 軽量、インストール不要の初心者向けデータベース | https://www.sqlite.org |
| DB Browser for SQLite | テーブルを視覚的に確認 | https://sqlitebrowser.org |
| PostgreSQL | 一般的なオープンソースデータベース | https://www.postgresql.org |
| Docker(オプション) | サービスを簡単に実行 | https://www.docker.com |
さらに学ぶため(オプション):
| ツール | 目的 | リンク |
|---|---|---|
| cppreference | C++標準リファレンス | https://en.cppreference.com |
| Compiler Explorer | ブラウザでコンパイラ出力を確認 | https://godbolt.org |
| OnlineGDB | ブラウザでクイックテスト(機密コードは入力しないこと) | https://www.onlinegdb.com |
| vcpkg | C++ライブラリマネージャー | https://vcpkg.io |
| Conan | C++パッケージマネージャー | https://conan.io |
| GoogleTest | C++単体テスト | https://github.com/google/googletest |
環境比較:
| 環境 | 利点 | 欠点 | いつ使うか |
|---|---|---|---|
| ターミナル | コンパイル手順が見える | 最初は慣れが必要 | 学習の初期 |
| VS Code + 拡張機能 | ワンクリックで実行 | 拡張機能の設定が必要な場合あり | 日常作業 |
| 言語のIDE | 大規模プロジェクトに便利 | 重い、学習曲線が急 | 大規模プロジェクト |
| ブラウザコンパイラ | インストール不要 | ファイル管理が難しい、コードはサーバーで処理される | クイックテスト |
ブラウザコンパイラでは、機密コードや個人コードを共有しないでください。
よくあるインストールの問題:
- "command not found":コンパイラがインストールされていないか、PATHに含まれていません。インストールを再確認してください。
- "No such file or directory":間違ったフォルダにいます。
pwdで場所を確認してください。 - コンパイルエラー:エラーメッセージをそのまま要求し、一緒に解釈します。
- Windowsの場合:実行可能ファイルには
.exe拡張子が付きます。MacとLinuxでは./名前で実行します。
インストールチェックリスト(すべて完了するまで最初のモジュールに進まない):
- コンパイラまたはインタプリタのバージョンが表示されている
- 作業フォルダがわかっている(
pwd) - 最初のプログラムがコンパイルされ、期待される出力が得られた
- エディタが選択され、ファイルの保存が機能している
カリキュラム
セクション1:はじめに
- 言語を知る:なぜ存在するのか、どこで使われるのか、強みと弱み、実行モデル
- インストールとツール:コンパイラまたはインタプリタ、エディタ、最初のプログラムを実行
- 構文、変数、データ型:定義、定数、型変換、コメント
- 演算子、条件分岐、ループ:意思決定、繰り返し、一般的なフローパターン
- 関数とスコープ:パラメーター、戻り値、変数の有効範囲
- セクションプロジェクト:入力を受け取り、決定を行う小さなコマンドラインプログラム
セクション2:データと構造
- テキストと基本コレクション:テキスト操作、リスト、辞書、セットのような構造
- カスタムデータ型:ユーザー定義型、クラス、構造体、または言語の同等物
- モジュールと依存関係:コード分割、パッケージマネージャー、外部ライブラリの使用
- エラー処理:言語のエラーモデル、エラーの生成、キャッチ、意味のあるメッセージ
- ファイルと入出力操作:読み取り、書き込み、一般的なデータ形式
- セクションプロジェクト:データをファイルに保存し、エラーを適切に処理するアプリケーション
セクション3:言語の深層
- メモリとリソース管理:値と参照、ライフタイム、言語のメモリモデル、リソースのクローズ
- プログラミングアプローチ:オブジェクト指向、関数型、および言語がサポートするその他のアプローチ
- 型システムとジェネリックプログラミング(generics):言語の抽象化ツール
- 標準ライブラリ:最もよく使われる部分、ドキュメントを読む習慣
- 並行性(concurrency):言語のモデル、一般的な問題、安全な使用
- セクションプロジェクト:言語の特徴を活かした中級レベルのプログラム
セクション4:プロフェッショナルな使用
- デバッグ:デバッガの使用、ログ記録、体系的なエラー検索
- テストの作成:単体テスト...