ここ最近、「AIにプログラミングをしてもらう」お話をちらほら聞くようになりました。エンジニアの人が今までの知識と経験を活かしてガシガシ書かせるものから、私のような非エンジニアの人が「ぼくわたしが考えた最強仕様のアプリ・プログラム」を作るまで。AIプログラミングは便利ですよねー。
その一方で、「プログラミング素人がプログラミングを学習するお話」を全然聞かないんですよね。みんな全自動プログラミングで満足しちゃっている印象。プログラミングの学習も楽しいのに……。情報が全く出てこない。なんてこった!
と言うことで、今回は「プログラム素人(後ほど定義を説明)がプログラミングをどうやって勉強すればいいの?」と言うお話をしようと思います。このブログ記事がきっかけで、AIとプログラミングを勉強する人が増えたり、学習情報が増えてくれると嬉しいなあ。
## 私のスペックとか言葉の定義とか
「プログラミング素人」って言っても範囲が広すぎるので、ここで私のお話をして言葉を定義していきます。
- Fラン情報デザイン学部(not情報工学部)でプログラミング専攻
- Fランなので本屋で売っている入門書レベルのことしかしてなかった
- 使用言語はJavaが中心、次点VBA・C++
- 大学卒業後は非IT企業に就職
- 1989年生まれ・大学は2012年卒。何があったかはここで察せると思う
- 2023年に(ニートで暇だったので)Pythonを趣味で勉強し始める
- その半年後くらいにAIプログラミングを始める
- GPT-4に聞きながらプログラミングをしていた。懐かしい。
- 2025年12月にRustのマニュアルを見ながら遊び始める
こうして見てみると、「全くの素人ではないけど、プロのエンジニアではない」みたいなところがありますね。まあ、個人的にも「完全な初心者がAIとプログラミングするのはちょっと厳しいかも(AIに頼りがちになる)」と思っているので、「プログラミング言語の入門書を1冊終わらせた人かつエンジニアではない人」くらいの範囲で話していきます。
## 実際に私がしてきたこと
### 使用ツール・モデルなど
1. Web版ChatGPT 4系・Claude 3系
2. Cursor
3. VSCode + ClineやContain
4. VSCode + Claude Code
現在はClaude Codeの`Learning mode`と学習用にカスタムしたプロンプトで落ち着いています。
### AIチャットの入門:Web版
一番敷居が低いやつ。わからないことがあったら気軽にAIに質問したりできる。個人的にはエディタ上でできなかったことがしんどかったので、Cursorが出てきた頃にやめました。
今は勉強モード(学習モード)が各種AIであるのですが、正直あれを毎回ONにするのはかったるいので、自分用の学習用プロンプトを作成(後述)し、プロジェクトに放り込んだ方がいいと思います。
### Cursor
エディタ上で会話できる!便利!Tab補完は抹殺ましょう。あれは学習者にとってミステリー小説のネタバレを話す輩と同じ存在です。ブチ切れながらOFFにしましょう、いいね?
プログラミング素人がCursorに月20ドル払うのはしんどかったので、VSCodeに戻りました。
### Cline や Contain
Claude CodeでOKになった時から使わなくなった。
## 本題:どうやって勉強しているのか
前置きが長くなりました。ここからが本題。
### 1. Tab補完を切る
ネタバレ野郎は沈めましょう(2回目)
VSCodeの設定パネルで「tab」と入力し、「Tab Complation」の項目をOFFにします。Cursorも似たような項目があるはず。
### 2. 学習用プロンプトを設定する
Web版だろうがCLIだろうが、学習用プロンプトにしたら学習者むけの好みの動きをしてくれます。私はこんな感じで設定しています。Web版でも「Claude Code」周りの話を削ったら使えるはず(未検証)。
```markdown
# 対話型プログラミング家庭教師の基本方針
ユーザーは現在、PythonとRustを勉強しています。
Claude CodeのLearning modeと併せ、ユーザーの学習をサポートしてください。
ユーザーはプログラミングの実力をアップさせることを最優先かつ「自分で考える」ことを重視しています。
そのために、以下のガイドラインを必ず守ってください。
1. 自動コード生成・修正禁止
- ユーザーの学習する機会を奪うので、ユーザーのコードを勝手に改変・整形・最適化しないこと
2. ヒント優先・段階的サポート
- ユーザーが質問した際、情報不足もしくは思考不足だった際は、思考を促す質問を1〜3個提示してください
- その上で、最小限のヒント(一般的な考え方や公式ドキュメントの参照先など)を示してください
- ヒントは正確性を重視しています
- 回答に時間がかかってもいいので、正確性・回答の品質を重視してください
- Web検索などを行いソースのページと共にユーザーに渡してください
- ユーザーが「ヒントをもう少し」と言ったら、段階的に詳細なヒントを提示すること
- ユーザーが「最終解答を見せて」と言ったときに完成版コードを提示すること
3. 学習機会の尊重
- ユーザーの発言を途中で遮らず、思考過程や疑問を十分に発話させてください
- 「自分でデバッグする手順」を優先的に提案してください
これらの方針に違反しそうな状況では、必ず確認を取り、ユーザーの許可がある場合のみ実行してください。
```
このプロンプトで重視したのは下記の2点。
- 自動でコードを生成しない
- すぐに回答を出さない
AIは油断するとすぐに答えを出す癖があるので、「すぐに答えを出そうとするんじゃねえよ」と釘を刺します。答えを出したらアウト、お前は脇役のNPCであるということを何度も念を押して指示しています。
#### 余談:TODO.mdを作って進捗を可視化する
ちなみに私は、Claude CodeのSkillsで進捗を管理するTODO.mdの作成・更新をしています。
```markdown
---
name: プログラミング進捗TODO管理
description: ユーザーのプログラミングの進捗をTODOリストで管理する
---
# TODO.mdの作成目的
- ユーザーのそのプロラグラムや言語を学習する目的を整理する
- ユーザーが次に何をしたらいいのか整理するため
## TODO.mdの作成ルール
- プロジェクトのルートフォルダーに @TODO.mdを作成する
- TODO.md作成タイミングは以下とする
- ユーザーが要件定義・仕様を固めた時
- ユーザーがリファクタリングを行うと宣言して、ソースコードを読み込ませた時
- ユーザーがコードレビューを依頼し、修正点を整理した時
- もしすでに@TODO.mdがある場合、最終行に追記する
## TODO.md記述・更新ルール
- H1にプログラム名を書く
- H2にTODOリストを作成・追記した日付を書く
- H3に各種ステップの見出しを書く
- TODOリストの先頭には絵文字を使用する
- ユーザーの進捗が進んだら、ユーザーの許可を取らずに@TODO.mdを読み込むこと
- すでに進捗が進んだ・完了したTODOの絵文字を上書きし、随時進捗を管理する
### 例
`` <この点を3つにして>
# Foo変換プログラムTODOリスト
## 2025/12/21 プログラム作成
### Step1. HogeHoge
- ◻️未着手TODO
- ⌛着手中TODO
- ✅完了TODO
## 2025/12/31 リファクタリング
### Step1. HogeHoge
- ◻️未着手TODO
- ⌛着手中TODO
- ✅完了TODO
`` <この点を3つにして>
```
(サイトの表示の都合上、コードブロックの表現を変えています。使用するときはコメントのところを直してください。)
主な用途としては下記の通りです。
- 自分がどこまで進めたか進捗管理し、モチベーションを上げる
- できたところまでの範囲で、Claude Codeに問題を作ってもらう
例えば、プログラミング本の目次を`TODO.md`に書き写すことで、進捗を管理できるようになります。また、「2章までの内容でプログラミングの問題を作成して」と伝えると、`TODO.md`を読み込んで練習問題を作成してくれます。
## 最後に
ちょっと疲れたから一旦休憩。まだ書きたいことがあるので、気が向いたら追記・修正します。
## リンク
- [[Claudeの学習モードを使ってお勉強をしていく話]]
- [令和最新版 AI時代のプログラミング学習ベストプラクティス - ぷりんの雑記帳](https://smooth-pudding.hatenablog.com/entry/2025/12/27/120126)