プログラミング学習で挫折する人の多くは、「作るものが決まっていない」「モチベーションに依存している」「完璧を求めすぎる」という3つの落とし穴にはまっています。このガイドでは、初心者が最短ルートでスキルを習得するための実践的な方法を、準備→基礎→応用→実践の4段階で紹介します。
学習を始める前の準備が9割
作るものを先に決める
プログラミング学習で最も重要なのは、学習をスタートする前に「何を作りたいか」を明確にすることです。これには2つの大きなメリットがあります。
第一に、学習効率が飛躍的に向上します。毎日「今日は何を勉強しよう」と悩む必要がなくなり、「これを作るにはこの技術が必要だ」と進むべき道筋がはっきりします。行き詰まったときも「これを突破しないと作りたいものが完成しない」という強力な動機になります。
第二に、採用市場での価値が向上します。企業が必要としているのは「プログラムが書ける人」ではなく「プログラムを使って何かを生み出せる人」です。何かを生み出すプロセスには設計、実装、テスト、デバッグなど様々な工程があり、コードを書くのはその一部分でしかありません。この全体像を把握している人材は、雇う側にとっても雇われる側にとっても大きな強みになります。
プログラミングの真の魅力は、自分が問題だと感じたことを、プログラムという極めて表現力の高い手段で解決できることです。だからこそ、「単にコードが書ける人」ではなく「プロダクトを生み出せる人」を目指すことが重要なのです。
アイデアの見つけ方
ゼロからアイデアを生み出す必要はありません。自分が気に入っているWebサービスやアプリを模倣して作れば十分です。制作途中で「もっとこうした方が良い」とカスタマイズしたり、難易度が高すぎて妥協したりするので、結果として完全に同じものにはなりません。
複数のサービスの機能を組み合わせたり、想定ユーザーを変えてみたりするのも良い手法です。途中で「やはり難しすぎる」と判断したら、別のアイデアに軌道修正するのも問題ありません。
具体的には以下の手順で進めると良いでしょう。
- 何を作るのか決める - 自分が使いたいと思うものや、既存サービスの改良版など
- 近い機能やページを持つ参考サービスを見つけて必要な機能を書き出す
- そのサービスを実際に触ってみてデザインとレイアウトを決める
- 作りたいサービスに類似した教材を探す - 処理の流れやフレームワークなどが参考になるもの
得意な技術を1つ持つことから始める
自分が作りたいもの、目指す分野から学ぶ言語を絞ることが大切です。色々なプログラミング言語がそこそこ使える器用貧乏になるよりも、まずは1つの言語をしっかりと身につけましょう。
特定のプログラミング言語に特化している方が、別のプログラミング言語を学ぶときにも習得が容易になります。これまで書いたコード、読んだコードの量に比例してスキルが向上するため、まずは一つの言語でコードを書きまくることが重要です。
学習に必要なマインドセット
プログラミング学習を継続するには、適切なマインドセットが不可欠です。
モチベーションを保つ仕組み作り
感情に依存したモチベーション管理ではなく、システムとして学習を継続できる環境を整えましょう。
- 学習管理を行う - 計画を立ててスケジュールに沿って学習量を確保する。学習日記をつけることで進捗を可視化できます。
- 躓いてもイライラせず楽しむ - 一度で全て理解できる人はなかなかいません。つまづいても落ち着いて少しずつ前に進みましょう。間違えても「まあ最初はこんなもんだ」と割り切って楽しんで学習することが大切です。
- エラーを楽しむ - エラーを見つけて解決するプロセス自体が学びになります。エラーは成長のチャンスだと捉えましょう。
- 環境構築や問題解決で悩むのは当たり前 - 実装が難しくて2、3日悩むことも普通です。焦らずにじっくりと取り組む根気が必要です。
試行錯誤の時間が成長につながる
諦めないのが大切ですが、それ以上に重要なのは**「つまづいて自分で考えて試行錯誤する」時間に比例して、スキルが習得できる**という事実です。「つまづいたらすぐに答えを聞いて」を繰り返しても絶対にスキルは身につきません。
プロでもミスはつきものです。勉強をすると誰でも大量のエラーやわからないことに遭遇します。ただそこで諦めて自分で考えたり調べるのをやめてしまうと、学習効果は低くなります。自分なりに検索し、考え、解決できるように最大限の努力をしましょう。
苦しいとは思いますが、その試行錯誤の時間が成長につながります。最初は平気で1つのエラーの解決に1日近くかかってしまうことも多くありますが、そういうものだと割り切って努力を続けることが重要です。
プロでも全部覚えてすいすい実装できるわけではありません。**「調べて答えにたどり着くまでが早い」**だけなのです。
アウトプット重視で進める
学習にミスはつきものです。完璧主義になりすぎず、最初は「動けばOK」くらいの気持ちでどんどんコードを書いていきましょう。コードを書く時間に比例してスキルが身につきます。
知ったことは手を動かしてアウトプットすることを心がけます。コードの書き方について学習したなら、解説通りに出力するのではなく自分なりに色々な方法を試すことで技術が身についていきます。
また、できるようになった技術はメモに残しておきましょう。似たような実装を行う時に復習できるため、のちの学習を効率よく進められます。
継続して学習することが大切
一度で全てを覚えようとせず、継続的に学習することを優先しましょう。覚えるのはキーワードやポイントを覚えておいて、後で調べやすくすることです。
思い出す作業や振り返りをすることで覚えやすくなります。使う頻度が高いものは自然と覚えていくので、無理に暗記する必要はありません。
英語に慣れておく
プログラミングの世界では英語のドキュメントや情報が圧倒的に多いため、英語に少しずつ慣れておくことで学習効率が大きく向上します。
楽しむことを忘れない
最も重要なのは、プログラミング学習を楽しむことです。楽しみながら学ぶことで、自然と継続でき、より深い理解につながります。
習慣化できる環境を作る
「モチベーション」に依存した学習は継続しません。モチベーションがなくても学習しないと落ち着かないくらいの習慣にすることが、継続の鍵です。
量より頻度を優先する
習慣化で最も重要なのは、一回あたりの学習量ではなく頻度です。最初は物足りないくらい少ない量からスタートして構いません。その代わり、毎日確実に学習に取り組みます。習慣として定着してきたら、少しずつ量を増やしていけば良いのです。
プログラミング学習は長期戦です。最初から無理なペースで進めて途中で挫折するより、ゆっくりスタートしても習慣化してから量を増やす方が、最終的には圧倒的に多くを習得できます。
固定した時間帯を決める
「時間があったらやる」では永遠にやりません。朝起きてすぐの30分、通勤時間、寝る前の1時間など、毎日同じ時間帯に学習する習慣をつけましょう。時間帯を固定することで、その時間になると自然と学習モードに入れるようになります。
スキマ時間を活用する
まとまった時間が取れない日でも、通勤時間や待ち時間にプログラミング関連の記事を読んだり、スマホで学習アプリを使ったりすることで、学習を途切れさせない工夫ができます。
救済措置を用意しておく
予期せぬトラブルで一日できなかっただけで、一気にモチベーションが低下することはよくあります。あらかじめ「できない日があったら翌日に2倍こなして取り戻せば問題ない」という対処法を決めておきましょう。ただし、この対処法に頼りすぎると怠ける原因になるので、「月に1回まで」などの上限を設けておくことが大切です。
情報が豊富な環境を選ぶ
初心者がつまずく問題の大半は、知っているか知らないか、適切な情報に到達できるかできないかで解決できるかが決まります。調べたり質問したりするときに、できるだけ豊富な情報が得られる環境を整えましょう。
具体的には、WindowsよりもMacの方が情報量が豊富です。また、学習する言語やフレームワークも、初心者のうちはできるだけ情報が充実しているものを選択します。Googleトレンド、Stack Overflow、Githut、Github Compareなどのツールで、どの技術が支持されているか確認できます。
プログラムを作るときの考え方
プログラムとは「小さな命令」の積み重ね
コンピューターは自分自身では何もできないため、人間がコンピューターにどのように動いて欲しいかを命令する必要があります。この命令がプログラムです。
難しそうに見える動作も中身を見れば小さな単純な命令の積み重ねです。これを理解することで、複雑なプログラムも段階的に構築できるようになります。
プログラムを組み立てるときに役立つ3ステップ
- 分解
大きな問題を小さな要素に分けます。いきなり全体を考えるのではなく解決するべき問題をシンプルな要素に分解します。分解することでエラー発生時も原因を見つけやすくなります。
例えばWeb検索のプログラムを分解すると、
- 検索キーワードの入力の受け取り
- キーワードに一致する情報を探す
- 見つかった情報を並べ替える
- 検索結果を表示する
- 手順設計
分解した要素をもとに命令を論理的に組み合わせてどの順番で実行するか、最適な手順を設計します。
- 一般化
繰り返し行われる処理や似たような動作はパターンとしてまとめます。より効率的なプログラムになります。
プログラムの基本的な3つの構成要素
- 順次処理 - プログラムの最も基本的な動作で、書かれた通りに上から順番に命令を実行する
- 分岐処理 - 条件に応じて異なる処理を実行する
- 反復処理 - 同じ処理を何度も実行する
これら3つの要素を理解し組み合わせることで、あらゆるプログラムを構築できるようになります。
基礎学習は「動かす」ことが全て
3つの学習原則
原則1: 暗記ではなく理解する
プログラミングは試験ではありません。いくらでも参考書やネットを見て構いません。実際、現場で活躍するベテランエンジニアでも全てを記憶しているわけではなく、大まかに覚えていて詳細な部分は都度確認しています。彼らがある程度記憶しているのは、意図的な暗記ではなく繰り返し書いているうちに自然と身についたものです。
暗記すること自体がかなりの苦行であり、つまらないものです。大切なのは暗記ではなく、概念や処理の理解です。
無理に細かく暗記しようとしない
プロの世界では、わからなかったらググるのが当たり前です。グーグルを使ったカンニングOKの世界なので、わからなかったらその度ググればいいだけです。
何度も同じことを調べるのはもったいないためメモを取っておくのはお勧めですが、完璧に暗記する必要はありません。
間違った考え方と正しい考え方を整理しましょう。
❌ 何かを作ろうとした時に文法が出てこなくて「自分は全然ダメだ」と思う。
⭕️ ただググればいいだけ。むしろググりの正確性・スピードを上げるのが大切!
❌ Progateや書籍のスライドを完璧に覚えようとする。
⭕️ 理解は必要だけど無理に完璧に覚えようとはせず、忘れた時に参照しよう!
❌ カラフルでとても綺麗なノートを作ろうとしてそこに時間をかける
⭕️ 何度も調べたのに忘れがちな重要文法だけメモるのは有効。全てノートに細かく記載して整理するのは非現実的なのでやめる!
プロの実際
「適宜忘れた部分をググりながら実装している」のが現実です。できるエンジニアは正確に知識を全て暗記しているのではなく、根本的な考え方や・リサーチの正確性・スピードにおいて優れているのです。
暗記は要らないが、索引能力はとても重要です。
例えばHTML/CSSを使って画像を横に並べたい時、一瞬でこの時は「flex-boxを使用する、親要素にdisplay:flexを設定して・・・」のように細かい文法まで出てこなくていいのです。実際は以下のようなフローで答えにたどり着ければ十分です。
「HTML/CSSで画像を横に並べたい」→「なんかcssを使って横並びにする方法あったな」→「HTML css 横並び」で検索→ヒットした記事を見て思い出して納得して適宜参考にして実装
💡 検索のコツ:「使用する技術・ツール名 + 実現したこと」で検索するとかなり高い確率で答えに辿り着ける。
原則2: 30分考えてわからなかったら飛ばす
わからないことを長時間考え続けるのは極めてストレスフルですし、考え続けて理解できるケースは稀です。ためらわずに飛ばすようにしましょう。
一度理解できなかったものを理解するには、知識・経験や目の前の課題のとらえ方がアップデートされた状態で再挑戦することが重要です。プログラミングを学習していると、以前わからず飛ばしていた箇所が時間を置いて再度見たら突然理解できるようになっていたり、全く異なることを学習している際にふと結びついて理解できたりすることが頻繁に発生します。
根詰めて考えた結果学習するのが嫌になるより、気にせずスルーして再び出てきた時に考えるというスタンスの方が効率が高いのです。目安としては30分ほど調べたり考えてわからないことは、飛ばして先へ進めましょう。
ただし、わからなくてもすぐ聞かず一度自分で試行錯誤することは重要です。自身の仮説なしの質問はせず、論理的思考力・リサーチ能力・問題解決能力・自走力を鍛えるためにも、質問をする前に多少時間がかかっても自分でまずは検索し、試行錯誤をしましょう。
原則3: 基礎学習はちょっと物足りないくらいで卒業する
楽しいからといって、ある程度理解している箇所を何度も何度も繰り返しやってしまっているなら警戒が必要です。復習にはなっても新しい学習には結びつきません。
ひとまず一つの教材を2〜3周してみて、理解度の低い箇所は個別で検索し、Qiitaや個人ブログの記事などをいくつか読んでみると良いでしょう。完璧な理解に固執しすぎず、ほどほどで次へ進むことが大切です。
必要な分だけ学ぶ【遅延評価学習法】
その知識が必要になった時に初めて勉強する
プログラミングの世界は膨大です。あらかじめ必要になりそうな知識をインプットしてからアウトプットするというのはスピードも遅いし非現実的です。遅延評価学習法だとインプットしながらアウトプットすることになり定着率が高くなります。
検索力を鍛える
ぶつかるたいていのエラーのほとんどは、すでにどこかのエンジニアがぶつかり解決してきたものがほとんどであり、勉強したての内容であれば、99%のエラーは検索すれば解決できます。
またWEBスキルに関するほぼ全ての知識は検索すれば出てくる。とにかくわからないことが出てきたらすぐにググる癖をつけましょう。
プロは「検索力」が圧倒的に高いのです。
Google検索のコツ
- 何度も複数のキーワードで検索して複数の記事を確認する - 複数のキーワードでそれぞれ4-5記事確認し自分がピンポイントで欲しい情報がないか探索する努力が必要
- 遭遇したエラーやツール上に表示されているメッセージをコピーして検索する
- 抽象度に気を付けて検索ワードを設定する - 具体的過ぎても抽象的過ぎてもヒットしない
- 英語での検索にチャレンジする
- 検索ツールをフル活用する
おすすめの情報収集サイト
- Stack Overflow(スタック・オーバーフロー)- 世界最大の技術Q&Aサイト
- teratail(テラテイル)- ITエンジニア特化型Q&Aサイト
- GitHub - オープンソースコードの宝庫
- Qiita - エンジニアの知識共有プラットフォーム
試行錯誤のスキルを身につける
「試行錯誤」とは、「エラーが出たときにその原因を特定し、色々試しながらコード等を修正しエラーが出ないようにすること」です。
WEBスキル学習はいつまで経っても、エラー / わからないこととの戦いです。WEBスキルを身につけるには自分で試行錯誤して疑問を解決できる力が必要不可欠です。この自分で試行錯誤する時間に比例し、本質的なWEBスキルが身についていくのです。
**「エラーが出る or わからないことが出てくる→原因を考える→リサーチする→解決策を複数考え、試してみる」**という一連の流れが試行錯誤です。
試行錯誤の2ステップ
①エラーの原因を分析する
エラーの原因を特定しないと解決しようがないため、まずは原因特定から入ります。原因特定のためには以下のようなことをすると有効です。
- ターミナル等に出てくるエラー文をしっかりと読み込み、エラー文をコピペしてググってみる - エラーメッセージは一見英語で複雑そうに見え、初心者の方だとちゃんと読むのを敬遠してしまうことが多いですが、ここに解決のヒントが落ちていることはたくさんあります
- 色々コードを変更し実行するなどして、どのような場合にエラーが出るかパターンを把握する - エラーが起きるパターンを把握することができれば何が原因か見えてきます
- console.logやprintなどを使って値を出力するコードを埋め込み、エラー箇所を絞り込む - こちらは学習前の方にはわかりづらいかと思いますが、学習していく中で重要性がわかっていきます。値を出力することでエラー箇所を絞り込めるケースはたくさんあります
- 原因の可能性を網羅的に考える - 原因は一つだけに絞られることはあまりありません。原因可能性をできるだけ網羅的に多く想定します
②エラー原因となる可能性を一つずつ潰してエラーが起きなくなるか確認する
非常に地道な作業になりますがこれをやるしかありません。原因の可能性を網羅的に想定したら、可能性が高そうなものから順番に、Googleで検索をしてその原因を解決する方法を調べます。そして、プログラムに反映してみて実行し、エラーが解消するかを一つずつ調べていく必要があります。
コーチや質問をうまく使う
人に魚を与えれば一日で食べてしまうが、釣り方を教えれば一生食べていける。
自分の力だけでは解決できないことが必ず出てきます。そういう場合は、その道に精通した人に聞くことで学習効率を最大化することができます。
プロのエンジニアになっても質問をすることはよくあるため、遠慮せずに質問して成長しましょう。質問するスキル自体身につけることに大きな価値があります。
ただし、答えではなく答えにたどり着く方法を学ぶことが重要です。
質問フォーマットに沿って質問する
- 実現したいこと
- エラーの内容・わからないこと
- 原因の予想
- 実際に試したこと(どうやってGoogle検索したかなど)
- 回答者が参考になりそうなソースコードやファイルなど
このフォーマットに沿うことで、的確な回答が得られやすくなります。
ChatGPTを学習パートナーとして活用する
現代のプログラミング学習では、ChatGPTなどのAIツールを効果的に活用することで学習効率を大幅に向上させることができます。ただし、ChatGPTは先生ではなく相談相手というイメージで使うことが重要です。
コードの意味を理解するために使う
コードの意味がわからないと感じる3つの理由があります。
- 基礎的な概念が曖昧になっている - 変数や関数、条件分岐、繰り返しといった基本的な概念を抑える必要があります
- コードを上から1行ずつ読んでいる - どのコードがどの順番で実行されるのか、また他のコードに影響を与えるのかを意識しないで上から1行ずつ読んでしまうと混乱してしまいます
- プログラムの全体像を把握できていない - プログラムは一連の指示の積み重ねです。そのため、プログラムの全体像を把握できていないと、「このプログラム・関数はいつ呼び出されるのか、どのようなときに使われるのか」といった、個々の役割がわかりにくくなり、それらに含まれるコードの理解も深まりません
ChatGPTでコード理解を深める実践的なポイント
- 全体像を聞いてみる
大まかなコードの意図や、どういう順番で何をしているのかを理解する手がかりを得ます。
このコードの全体的な動作の流れを説明してください。
-----------------------------------------------------------------
次のコードの実行順序と処理について教えてください。全体の流れを把握したいです。
初心者にもわかる言葉で説明してください。
コード:
(コード貼り付け)
- 気になる部分を具体的に質問する
コードの全体的な流れがつかめたら、より詳しく知りたい処理やわからない箇所について、1つずつ具体的に質問します。
この部分のif文は何を判定しているのですか?
---------------------------------------
この関数の引数は何を意味しているのですか?
--------------------------------------
「Dog クラスは Animal クラスを継承しているので、Animal のプロパティとメソッドを使用できます。」の、継承についてがわかりません。特に継承によって行われる処理について詳しく教えてください。
- 文脈や背景情報を補足する
疑問点を解決しきれないときは背景情報を追加します。実行環境や言語のバージョン、現在の状況など。
このコードはNode.js環境で動かしています。全体的な動作の流れを説明してください。
-----------------------------------------------------------------------
このコードは今日投稿したポストの数を集計する関数のはずなのですが、よくわからないので、ステップバイステップでどう動作しているかを説明してください。
---------------------------------------------------------------------------------------------------
このコードはJavaScriptのES6で書かれています。説明を変更する必要があれば変更し、説明してください。
- 完璧な答えではなく解決の糸口を見つけるために使う
コードの意味の完全な説明を求めて質問を繰り返しても誤った回答を返す可能性もあり必要な情報が得られないこともあります。一方で何から手をつけて良いかわからない時や次に何をするか悩んだときに、全体像を把握したり相談できる壁打ち相手となります。
つまり先生ではなく相談相手というイメージです。
- 返答に難しい言葉が入っていたら
文系の高校生にもわかるように
初心者にもわかるように
このように追加で指示を出すことで、より理解しやすい説明を得られます。
問題を解くためのヒントを引き出す
プログラミングの問題が解けない主な理由は以下の3つです。
- 問題文からゴールがイメージできていない
- 問題を細かいステップに分解できていない - 一度に全ての問題を解決しようとしない。問題を細かいステップに分解して1つずつ解決するアプローチに慣れる
- 情報収集・疑問の特定ができていない - 問題の整理ができていないと、自分の疑問点を整理・特定することが難しくなる。その結果、得たい情報が曖昧になり、適切な情報になかなか辿りつかない
ChatGPTを通して問題の解き方を学ぶための3ステップ
- 問題の要件を整理する
問題文をそのまま渡すのではなく、要件を箇条書きにすることでChatGPTがより具体的な回答をしやすくなります。
(問題文)
問題が以下のようであったとき
引数として与えられた商品(オブジェクト)をカート(配列)に追加するプログラムを作成します。
商品には商品名と商品の数量があります。商品をカートに追加するときに、同じ商品がカートに存在する場合は、その商品の数量を増やし、存在しない場合は新しい商品をカートに追加してください。
-----------------------------------------------------------------------------------------------------------------------------------------------------
(プロンプト)
次のプログラミング問題の要件を整理してください。
問題文:
・引数として与えられた商品(オブジェクト)をカート(配列)に追加するプログラムを作成します。
・商品には商品名と商品の数量があります。
・商品をカートに追加するときに、同じ商品がカートに存在する場合は、その商品の数量を増やします。
・商品をカートに追加するときに、同じ商品が存在しない場合は新しい商品をカートに追加してください。
- 「{問題}を解くための具体的な手順を教えてほしい」と質問する
この問題を解く具体的な手順をステップバイステップで考えてください。
- わからない箇所を質問する
要件の整理と具体的な手順があれば、考えることを絞ることができます。まだ質問があるのなら、具体的に要件の何がわからないのか、手順のどこがわからないのかを質問します。その他にも、「なぜこの手順なのか」、「なぜこのコードになるのか」など、質問を細かく分け、具体的に尋ねることで、欲しい情報を得ることができ理解を深められます。
Array.prototype.find() メソッドの使い方を詳しくまた、初心者にもわかるように説明してください。
質問の仕方を工夫して精度の高い回答を引き出す(プロンプトテクニック)
- Chain-of-Thought(思考連鎖) - 問題をステップごとに分解してChatGPTに説明させる
- Decomposition(分解) - 大きな問題を小さな要素に分けてそれぞれを個別に解決するアプローチ
これらのテクニックを使うことで、より的確で理解しやすい回答を得ることができます。
おすすめの基礎学習教材
基礎学習教材はProgate一択です。学習したい分野のレッスンを一通り完了したら、理解度の低い箇所について他の教材や検索で学び直します。
効果的な学習記録のつけ方
学習の進捗を可視化することで、モチベーション維持と効率化につながります。
何を学んだかを記録する
毎日の学習内容を簡単にメモしておきましょう。「今日学んだこと」「つまずいた箇所」「明日やること」を3行程度でまとめるだけで、学習の軌跡が見えてきます。後から見返したときに、自分の成長を実感できます。
エラーと解決方法をストックする
遭遇したエラーとその解決方法をメモしておくと、同じエラーに再び遭遇したときに素早く対処できます。これは自分専用の技術ナレッジベースになり、学習効率を大幅に向上させます。
応用学習で引き出しを増やす
基礎学習を通じて、プログラムを動かすことやどんな機能があって何ができるのかおおよそわかった段階になります。ただ、まだ具体的なユースケースについてはイメージしづらい部分があります。
応用学習のゴールは、どのようにして自分が作りたいものができるのかイメージできるようになることです。Webサイトやアプリなどを実際に制作してみるような内容の教材に取り組み、これまで学習した基礎知識をどう活用していくのかの選択肢を増やしていきます。
応用学習の2つの鉄則
鉄則1: 1つの教材を最低3周する
人間は1周だけではどんなに意欲があっても理解できないため、複数回復習する必要があります。また、理解できない箇所について30分以上悩むのも効率が悪いため、ひとまず理解できないところは飛ばしながら先へ進みます。
ソースコードを完璧に記憶する必要はありませんが、特定の機能やサービスを作る時にどんな処理をどんな流れで組み合わせたかという、大まかな部分は記憶してある程度自分の中にストックしておく必要があります。
具体的な学習サイクルは以下の通りです。
1周目:写経
コードと解説を見ながら丸写しします。コードを1行ずつ追い、コメントアウトで説明を入れていきます。
2周目:コードを見ながら再現
間を置かずに、ひとまず教材は見ずに1周目で書いたコードを参照しながら進めていきます。意味が理解できない箇所があれば教材を確認し直します。
3周目:自力で再現
教材もコードも見ないで進めます。どうやって進めれば良かったかわからなくなったら、今度は検索します。実務では検索して情報に到達し解決する力が必須不可欠だからです。ただし、30分調べてわからなかったら教材やコードを確認します。
自分が納得するまで追加で2〜3周するのも良いでしょう。
鉄則2: 写経する際は必ずひと工夫入れる
いつの間にか頭を使わず、本当にただ手を動かして目の前のコードを真似するだけになってしまっていることがよくあります。単純に丸暗記するためならそれでも良いかもしれませんが、プログラムは覚えるのではなく、処理や概念などを理解し、活用できるようになることが重要です。
理解するためには思考する必要があります。思考停止の丸写し状態にならないよう、少し工夫をしてみると良いでしょう。
工夫の例としては、各行にコメントアウトでその行が何を意味しているのか自分の言葉で説明したり、以前に学習した内容でパッと思いつくもので少しだけ変更してみたりすることが挙げられます。
Githubを活用した写経
初心者を卒業した段階では、Githubのオープンソースプロジェクトの一部を写経し、どんな思想でどんな書き方をしているのか学ぶのは極めて有効です。世界中の優秀なエンジニアが日々ブラッシュアップし続けているコードから学べます。
ただし、あまりにも規模が大きすぎるプロジェクトは全体像を把握することが困難で、写経には適していません。Advanced Searchでプロジェクトのサイズを指定して検索すると、ファイルやプログラムの行数が一定以下のプロジェクトのみを検索できるので便利です。
開発環境を整える
快適な開発環境は学習効率を大きく左右します。
必須ツールの導入
- VS Code: 最も人気のあるコードエディタ。拡張機能が豊富で初心者にも使いやすい
- Git/GitHub: バージョン管理ツール。コードの変更履歴を管理でき、ポートフォリオにもなる
- ターミナル(iTerm2など): コマンドラインでの操作に慣れることは必須スキル
便利な補助ツール
- DeepL: 英語のドキュメントを読むときに重宝する翻訳ツール
- Prettier: コードを自動整形してくれるツール。綺麗なコードを書く習慣がつく
- Emmet: HTMLやCSSを高速で書けるようになる省略記法
おすすめの応用学習教材
- Udemy: 実践的なプロジェクトを作りながら学べる動画教材が豊富
- TechTrain: 実務に近い課題に取り組める学習プラットフォーム
- Techpit: 実際のサービスを作りながら学べる教材
- Code4Startup: スタートアップ風のサービスを作る実践的な内容
- Frontend Mentor: フロントエンド開発のデザインを見ながら実装できる
自分でサービスを作る段階へ:最大の壁を越える
実際に自分でサービスを制作することは、想像以上に困難だと思っていた方が良いです。
教材ありきの学習では、何を作るのかという仕様も教材が設定してくれていました。しかしここからは、そもそもプログラムを書く前にサービスにどんな機能を持たせるのか、どう制作していくのかゼロから自分で設計し、必要な情報を収集しながら進めていかなければなりません。
制作するサービスの種類や使用する言語、フレームワークによっては中々求める情報が見つからず行き詰まることも増えます。これまでのポイントやコツを全て動員していく必要があります。
プログラミング学習最大の壁:ゼロからのロジック構築
プログラミング学習は言語学習と同じです。次第にリーディングやリスニング(既存のコードを読む・理解する)は効果を実感できるようになってきますが、最大の壁はスピーキング、つまり自分でゼロからロジックを組み立てることです。
ここで重要なのは、「単にコードが書ける人」にならないために、実際に自分でプロダクトを制作することを中心に学習を進めることです。
開発の進め方:小さく始めて徐々に拡張する
いきなり完璧なサービスを作ろうとすると挫折します。以下のステップで進めましょう。
ステップ1: MVPを作る
MVP(Minimum Viable Product:最小限の機能を持った製品)から始めます。核となる機能1つだけを実装して、まず動くものを作りましょう。例えばToDoアプリなら、「タスクを追加する」「タスクを表示する」だけでOKです。
ステップ2: 機能を一つずつ追加する
MVPが動いたら、優先度の高い機能から一つずつ追加していきます。「タスクを削除する」「タスクを完了にする」など、段階的に機能を増やすことで、複雑さに押しつぶされずに開発を進められます。
ステップ3: リファクタリングする
機能追加で汚くなったコードを整理します。この段階で、より良い書き方を学び、コードの品質を高めていきます。
開発の記録も重要です。以下の点を記録しておくと、後で振り返る際や面接時に役立ちます。
- さまざまな状態を想定して柔軟に対応しやすいようにする
- つくろうと思ったきっかけ
- 使った技術スタックとその理由
- 開発の中で大変だったこととそれを乗り越えた方法
- もう一度開発するならどのように開発するか
AIを活用した効果的な学習サイクル
自分でサービスを制作する段階では、AIを学習パートナーとして活用することで、効率的に成長できます。以下のサイクルを回すことを意識しましょう。
- まず自分で考えて手を動かす - AIに頼る前に、自分なりの解決策を考え、実装を試みます
- エラーや疑問にぶつかったらAIに相談 - 30分考えてわからなければ、AIに具体的な状況を説明して相談します
- AIの回答を読み解き、納得できるまで質問 - 提示された解決策を鵜呑みにせず、なぜそうなるのかを理解するまで質問を重ねます
- 再度、「自分の言葉(コード)」で再構築する - 理解した内容を、今度は自分の力で書き直してみます
このサイクルの核心は、AIを「答えを教えてくれる存在」ではなく「理解を深めるための対話相手」として使うことです。コピー&ペーストで終わらせず、必ず自分の言葉(コード)で再構築することで、本当の意味で「自分のスキル」になります。
つまずいた時の対処法
コミュニティを活用する
一人で悩み続けると行き詰まります。以下のコミュニティで質問したり、他の人の質問を見たりすることで、解決の糸口が見つかります。
- Stack Overflow: 世界最大の技術Q&Aサイト
- teratail: 日本のITエンジニア特化型Q&Aサイト
- Qiita: 日本語で技術情報を共有できるプラットフォーム
- Discord/Slackコミュニティ: リアルタイムで質問できる学習者コミュニティ
- X(Twitter): #駆け出しエンジニアと繋がりたい などのハッシュタグで仲間を見つける
質問の仕方を工夫する
良い質問をすることで、的確な回答が得られやすくなります。
- エラーメッセージを正確に伝える
- 何を試したかを説明する
- 最小限の再現コードを提示する
- 期待する動作と実際の動作を明確にする
ポートフォリオとして公開する
作ったサービスは積極的に公開しましょう。
Githubで公開する
コードをGithubにアップロードすることで、採用担当者があなたのスキルレベルを確認できます。READMEには以下を記載しましょう。
- サービスの概要
- 使用した技術スタック
- 工夫した点や苦労した点
- デモサイトのURL(可能であれば)
実際にデプロイする
Vercel、Netlify、Herokuなどの無料サービスを使って、実際にインターネット上で動くサービスとして公開します。「作った」だけでなく「世に出した」経験は、面接でも強力なアピールポイントになります。
準備段階で決めた「作りたいもの」に向けて、学んだ全てを統合して取り組んでいきましょう。壁にぶつかることは当然ですが、それこそが最も成長できる瞬間です。自分が課題だと感じたことを、プログラムという表現力の高い手段で解決できる喜びを、ぜひ体験してください。