こんにちは!Java/Springのメンターをしている、じゅんじと申します。

プログラミング学習を始めたての方は、「コードをどのように書いていったらいいのかわからない」
という壁にぶち当たることがよくあるかと思います。
そういった方に向けて、アドバイスや参考になることが話せたらと思い、テキストでまとめて、それを動画で解説しました!
ぜひ、参考にしていただければ幸いです!

プログラムを書こうとすると頭が真っ白になるときの対処法

1. 既存プログラムに数多く触れる

プログラミングは「経験の積み重ね」で身につく部分が大きいです。(自転車と同じ)

多くの既存プログラムに触れることで、「こういう場合はこう実装するのか」という知見が自然とたまっていきます。

なので、とにかくたくさんのプログラムを触れる(読解する・変更や追加をしてみる)ことが重要です。

例)

複数の値の中から条件に合うものを取り出す場合:

  • 配列やListに複数の値を格納する
  • for文で回す
  • 条件に合うものを見つけたら別の変数に格納する

こういった「定番の流れ」は既存プログラムを読むことで身についていきます。

僕自身もJavaの課題をたくさん用意しているので、それらを読解・実装するだけでも大きな力になります。


2. 「1から全部書けないとエンジニアになれない」という誤解

僕自身の話をします。

会社員を3年半やってからフリーランスになったのですが、その時点で「Javaのプロフェッショナル」と胸を張れるほどのスキルがあったかというと全然そうではありません。ギリギリ一人で対応できるかどうかというレベルでした。

でも、既存のプログラムを理解し、それを参考にして似た機能を作れるようになれば、十分にエンジニアとして仕事はできます。

スキルが上がったと感じた瞬間

フリーランス時代に、ある忙しいプロジェクトで1日にAPIを何本も作ることになった経験があります。当時はAIもなく、既存プログラムの内容、自分のこれまでの知見、ネット検索だけが頼りでした。

その中で「こういう時はこう実装する」という知識がどんどん蓄積され、コーディングスピードも読解力も飛躍的にアップしました。

これは自転車に乗るのと同じです。最初は怖いけど、繰り返すうちに自然とできるようになります。プログラミングも、コードを大量に読み・書くことで自然とスキルが上がり、頭に実装方法が浮かぶようになります


3. 新しい機能をどう書き始めればいいか

「そうはいっても、新しい機能を書くときに何から手をつければいいかわからない」という方も多いと思います。

以下の順序で考えてみてください。

(1) 既存プログラムを理解する

まず自分がこれから書くコードは置いておいて大丈夫です。

既存アプリのコードを読み、「何が行われているのか」を理解します。

1行1行どんな処理がされているかを把握することが重要です。

(2) マクロ(大きな流れ)を考える

料理に例えるとわかりやすいです。

料理は「材料を準備 → 加工する(切る・炒める・煮込む) → 盛り付ける」という大きな流れがあります。

プログラムも同じで、まず大きな流れを考えます。

例:ユーザーの名前を変更する機能を作る場合

  • 材料を準備
    • 現在のユーザー情報をDBから取得、新しい名前の値を受け取る
  • 加工する(切る・炒める・煮込む)
    • ユーザーオブジェクトに新しい名前をセットし、DBに保存する
  • 盛り付ける
    • 更新後のユーザー情報をAPIレスポンスとして返す

(3) ミクロ(細かい部分)を考える

大きな流れを決めたら、各ステップを細かく分解します。

例えば、材料を準備(現在のユーザー情報をDBから取得、新しい名前の値を受け取る)のところでいうと、

  • 「DBからどのようにしたらユーザー情報を取得できるか」
  • 「新しい名前はどこからどのようにしたら取得できるか」

これらを既存のプログラムを参考にしたり、AIからヒントを得て

1つずつ具体化して、コードとして書いていきます。


Javaでの簡易的なコード例(ユーザー情報の取得)

/**
 * ユーザーに関する情報を扱うサービスクラス。
 */
public class UserService {

    // 例: ユーザーの名前を更新する簡易メソッド
    public UserDto updateUserName(long userId, String newName) {

        // ■■■■■材料を準備■■■■■

        // 1) DBから現在のユーザー情報を取得
        User user = userRepository.findById(userId);

        // 2) 変更後の値(newName)はメソッド引数で受け取っているので準備不要

        // ■■■■■加工する(切る・炒める・煮込む)■■■■■

        // 3) ユーザーオブジェクトに新しい名前をセットする
        user.setName(newName);

        // 4) ユーザーオブジェクトをDBに保存する
        User savedUser = userRepository.save(user);

        // ■■■■■盛り付ける■■■■■

        // 5)保存後のユーザー情報を返す
        return savedUser;
    }
}

/**
 * ユーザークラス。
 */
class User {

    private int id;
    private String name;

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getName() { 
        return name; 
    }
    public void setName(String name) { 
        this.name = name; 
    }
}

このようにシンプルなコードでも「データを取得して加工する流れ」を掴むことができます。


4. コーディングする上でのコツ

ここでは、実装をスムーズに進めるための具体的なコツを紹介します。

  • 既存コードを真似する

    似たような処理があれば、それを参考に実装するのが一番効率的です。

  • 日本語コメントで流れを書く

    「ユーザー情報を取得する」「更新後の値を受け取る」「DBに保存する」など、まず日本語で書いてしまう。

    その後、一行ずつコードに置き換えれば実装しやすくなります。

  • 小さく作ってすぐ動かす

    大きな機能をいきなり完璧に作ろうとせず、まずは小さな単位で動かしてみる。

    「名前を受け取って表示する」だけでもOK。最初の一歩を動かすことが自信につながります。

  • エラーメッセージを味方にする

    「エラーが出たら失敗」ではなく、「エラーは次に進むためのヒント」と捉える。

    調べる過程で理解が深まります。

  • 他人に説明できるレベルを目指す

    「この処理はこういう流れになっています」と人に説明できると、自分の理解も整理されます。

    説明を意識すると、頭が真っ白になりにくくなります。


5. 基礎知識の重要性

今回の例で出てきた「クラス」「フィールド」などはJavaの基礎知識です。

基礎知識がないと当然コードは書けません。

「自転車を漕げなければ目的地に着けない」のと同じで、知識のインプット+実際のアウトプット(コーディング)が両方必要です。