「プログラマー脳」のchapter1「コーディング中の混乱を紐解く」

# 目次
[1.初めに](#1-初めに)
[2.プログラムを読むときに3つの認知プロセスが存在する](#2-プログラムを読むときに3つの認知プロセスが存在する)
[3.知識不足](#3-知識不足)
[4.情報不足](#4-情報不足)
[5.ワーキングメモリ](#5-ワーキングメモリ)
[6.【プログラマー脳】Chapters](#6-プログラマー脳chapters)

# 1. 初めに
「プログラマー脳」という本を読んでいます。
その中で印象に残ったことや大事だなと思う部分をまとめています。
自分の理解の必要に応じて自分が慣れているJavaScriptで処理を書いています。

# 2. プログラムを読むときに3つの認知プロセスが存在する

- 知識不足
- 情報不足
- ワーキングメモリ

# 3. 知識不足

知識不足とは、長期記憶の中に関連する情報が十分に存在しないこと

例. JavaScriptのfilterメソッドを用いて、データの絞り込みを行う

filterメソッドを用いてデータの絞り込みを行った長期記憶があれば、下記のコードをすぐに理解できるでしょう。

```typescript
const users = [
  { id: 1, name: "Alice", age: 25 },
  { id: 2, name: "Bob", age: 30 },
  { id: 3, name: "Charlie", age: 20 },
  { id: 4, name: "Dave", age: 35 },
]

const adults = users.filter((user) => user.age >= 20 && user.age < 30)
console.log(adults) // [{ id: 1, name: "Alice", age: 25 }, { id: 3, name: "Charlie", age: 20 }]
```

この例では、users配列の中から、ageプロパティが20以上かつ30未満のユーザーのみを絞り込んでいます。(user) => user.age >= 20 && user.age < 30という条件関数を渡しています。この条件関数は、ageプロパティが20以上かつ30未満であるかどうかを判定し、trueを返すかどうかを決定します。絞り込み結果の配列adultsには、{ id: 1, name: "Alice", age: 25 }と{ id: 3, name: "Charlie", age: 20 }が含まれます。


# 4. 情報不足
情報不足とは、短期記憶の中に関連する情報が十分に存在しないこと。容量を超えた場合や時間経過とともに獲得した情報は忘れてしまう可能性がある。

例. number型からstring型に変換する処理

`convertToString`という関数を見たときにnumber型をstring型に変換する関数だということが推測できます。しかし、`toString`メソッドはどのように機能するかという情報を知らなければ調べる必要があります。

```typescript
const convertToString = (num:number) => return num.toString()

const num = 123
const str = convertToString(num)
console.log(str) // "123"
```

JavaScriptでは、**`toString`**メソッドを使用して、数値を文字列に変換することができます。**`toString`**メソッドは、数値オブジェクト（**`Number`**オブジェクト）に対して呼び出すことができます。

このことを理解しても、１時間後や1日過ぎたら短期記憶から消去してしまいます。

constを用いて定義したconvertToStringがアロー関数であることやconsole.logを用いて引数を出力することは説明をしていなくても理解できます。それらは短期記憶ではなく長期記憶に格納されていれば、その情報をもとに脳が無視して良いと判断を下しています。

- 長期記憶がハードティスクであれば、短期記憶はRAMやキャッシュ、ワーキングメモリはプロセッサ



# 5. ワーキングメモリ

一度に多くの情報を処理する必要があり、負荷がかかる場所をワーキングメモリという.

プログラムを読んでいる間、どのような処理が行われているかを理解するために脳内でコードを実行しています。

このプロセスをトレースと呼び、脳内でコードをコンパイルすることを意味します。

トレースやその他の認知的に複雑な作業をワーキングメモリが行っています。

複雑なコードをトレースしようとするとワーキングメモリの容量がいっぱいになります。そのため、コメントを残すなどで脳の外部に情報を記録しておく必要があるわけです。メモしたいと思ったときは、情報の処理が追いつかなくなったサインかもしれません。

---

認知プロセス
1. コードを確認する
2. 脳のフィルターにかけられる
    1. 長期記憶に引っかかるキーワードがあるか検索
    2. 短期記憶にメソッドや変数名といった情報を一時的に保持する
3. ワーキングメモリにて長期記憶や短期記憶にある情報をもとにコードが何をやっているのかを理解して、判断する


# 6. 【プログラマー脳】chapters

Now →[「プログラマー脳」のchapter1「コーディング中の混乱を紐解く」](https://qiita.com/kosuke-17/items/b64f9450ebbd99b274d5)
[「プログラマー脳」のchapter2「コードを速読する」](https://qiita.com/kosuke-17/items/645babd7445203f4734a)
[「プログラマー脳」のchapter3「プログラミング言語の文法を素早く習得する方法」](https://qiita.com/kosuke-17/items/67220ced21104ddda933)
[「プログラマー脳」のchapter4「複雑なコードの読み方」](https://qiita.com/kosuke-17/items/4b1348afe3ba74d6d4de)
[「プログラマー脳」のchapter5「コードの深い理解に到達する」](https://qiita.com/kosuke-17/items/77794aa78c9b8d51a1aa)
【TODO】「プログラマー脳」のchapter6「プログラミングに関する問題をよりうまく解決するには」
【TODO】「プログラマー脳」のchapter7「思考に潜むバグ」
【TODO】「プログラマー脳」のchapter8「より良い命名を行う方法」
[「プログラマー脳」のchapter9「汚いコードとそれによる認知的負荷を避けるための2つのフレームワーク」](https://qiita.com/kosuke-17/items/e5750ba01fc742a3b142)
【TODO】「プログラマー脳」のchapter10「複雑な問題をより上手に解決するために」
【TODO】「プログラマー脳」のchapter11「コードを書くという行為」
【TODO】「プログラマー脳」のchapter12「より大きなシステムの設計と改善」
【TODO】「プログラマー脳」のchapter13「新しい開発者のオンボーディング」