プログラミングを行う上で意識していること4選

## 本記事について

プログラミングを学び始めたばかりの頃、どのように学習すれば良いか悩む方が多いと思います。私自身も最初は同じように悩み、遠回りしてしまったと感じています。

そんな私が、プログラミング経験を積んで年数を重ねた今だからこそ実感する、プログラミングを学ぶ際に意識すべき4つのポイントを紹介します。

:::note warn
今回紹介する内容が全て正しいとは限りません。
全て鵜呑みにせず、参考程度に留めてください。
:::


## 意識するポイント4選

1. ざっくりと全体像を掴む
1. コメントを活用する
1. デバッグでコードの流れを把握する
1. 自身で作りたいものを考えてコードを書いてみる

### 1. 全体像を掴む

コード細かく全てを理解せずに、ざっくり把握することを意識しています。
ざっくり把握するために、まず大枠のstruct（構造体）やclass（クラス）の名前から理解していきます。

下記のサンプルコードを見ながら、実際にイメージしてみましょう。
これはどんなデータまとまりでしょうか？

```swift
struct UserSetting {
    var firstName: String
    var lastName: String
    var age: Int
    
    func fullName() -> String {
        return "\(firstName) \(lastName)"
    }
}
```

<details><summary>考え方（クリックで詳細を見る）</summary>

- structはUserSettingという名前になっている
- UserSettingは、ユーザの設定するためのデータのまとまりだろうと予想する

</details>


### 2. コメントを活用する

コードにコメントを追加し、自分で理解しやすいように説明を加えます。
そうすると、コードが増えていっても、整理しやすくなります。（ある程度理解できたら、コメントは消します）

```swift
// 本に関するデータのまとまり（構造体）
struct Book {
    var title: String
    var author: String
    var pages: Int
    
    // 本の詳細を返す関数
    func description() -> String {
        return "\(title) by \(author), \(pages) pages"
    }
}
```

### 3. デバッグでコードの流れを把握する

print()などを使って実際にコードがどのように動いているかを確認します。
コードを見るだけではなく、実際にコードに触ることが大事です。

下記のサンプルコードをコピペして、実際にデバッグしてみましょう。

```swift
struct UserSetting {
    var firstName: String
    var lastName: String
    var age: Int
    
    func fullName() -> String {
        return "\(firstName) \(lastName)"
    }
}
```

<details><summary>やり方（クリックで詳細を見る）</summary>

```swift
// Person構造体のインスタンスを生成
var person1 = Person(firstName: "John", lastName: "Doe", age: 30)
var person2 = Person(firstName: "Jane", lastName: "Smith", age: 25)

print(person1.firstName) // John
print(person2.fullName()) // Jane Smith
```

</details>

### 4. 自身で作りたいものを考えてコードを書いてみる


コードを考える力を身につけるには、自分で考えてコードを書くのが一番です。例えば、こんな機能を作りたいと決めて、どのように作るか1から考えます。

#### 作りたいものを具体的にイメージする

まずは、自分が作りたいものを具体的にイメージしてみましょう。例えば、以下のようなものが考えられます。

- 自分の好きな映画や本を管理するアプリ
- シンプルなTo-Doリスト
- 日記帳アプリ
- 簡単なゲーム（例えば、じゃんけんや数当てゲーム）

#### 必要な機能をリストアップする

作りたいものが決まったら、そのために必要な機能をリストアップしてみましょう。例えば、To-Doリストを作る場合、以下のような機能が考えられます。

- タスクの追加
- タスクの一覧表示
- タスクの削除
- タスクの完了状態の変更

機能をリストアップすることで、どの部分から取り組むべきかが見えてきます。

#### （重要）小さな部分から取り組む

大きな機能を一気に完成させようとすると、途中で挫折してしまうことがあります。
そこで、まずは小さな部分から取り組むのがオススメです。To-Doリストの場合、まずは「タスクの追加」機能だけを実装してみましょう。

例えば、以下のようなSwiftコードでタスクを追加する部分を実装できます。

```swift
struct ContentView: View {
    @State private var tasks: [String] = []
    @State private var newTask: String = ""

    var body: some View {
        VStack {
            HStack {
                TextField("新しいタスクを入力", text: $newTask)
                    .textFieldStyle(RoundedBorderTextFieldStyle())
                Button(action: {
                    addTask(task: newTask)
                    newTask = ""
                }) {
                    Text("追加")
                }
            }.padding()

            List {
                ForEach(tasks, id: \.self) { task in
                    Text(task)
                }
            }
        }
    }

    func addTask(task: String) {
        tasks.append(task)
    }
}
```

このように、まずはタスクを追加する機能だけを実装してみます。これがうまく動くようになったら、次の機能に取り組みましょう。

#### 継続的に改善する

プログラミングは一度に完璧なものを作る必要はありません。最初はシンプルなものを作り、少しずつ機能を追加したり、改善を重ねていくことが大切です。以下のようにタスクの削除機能を追加することもできます。

```swift
struct ContentView: View {
    @State private var tasks: [String] = []
    @State private var newTask: String = ""

    var body: some View {
        VStack {
            HStack {
                TextField("新しいタスクを入力", text: $newTask)
                    .textFieldStyle(RoundedBorderTextFieldStyle())
                Button(action: {
                    addTask(task: newTask)
                    newTask = ""
                }) {
                    Text("追加")
                }
            }.padding()

            List {
                ForEach(tasks, id: \.self) { task in
                    Text(task)
                }
                .onDelete(perform: deleteTask) // 削除機能を追加
            }
        }
    }

    func addTask(task: String) {
        tasks.append(task)
    }

    func deleteTask(at offsets: IndexSet) { // 削除機能を追加
        tasks.remove(atOffsets: offsets)
    }
}
```

#### 自分のペースで楽しむ

最後に、自分のペースで楽しむことが最も重要です。プログラミングは楽しい反面、難しいこともあります。焦らず、一歩一歩進めていきましょう。自分が作りたいものが完成したときの達成感は、他に代えがたいものがあります。