プログラマーに必要な思考フレームワーク3つ

## はじめに
プログラマーとして働き始めて、<font color="Blue">技術の勉強は順調</font>。
でも、上司から<font color="Red">「もうちょっと案件の仕様を把握しようか。」</font>と言われることが多い...そんな悩みありませんか？

もしかしたら、その悩みは<font color="Red">技術の習得では解決できないかもしれません！</font>
プログラミングスキルとは別に「思考法のスキル」が必要かもです。

この記事ではプログラマーに必要な思考フレームワーク3つを解説します。

## 対象者
この記事は下記のような人を対象にしています。
- 駆け出しエンジニア
- プログラミング初学者
- 上司に「もうちょっと考えてみようか」と言われがち
- 複雑な問題にぶち当たると頭痛がする

## 結論
目的に合わせて、下記の思考フレームワークを使い分けよう！

:::note
- 実装　　　　　　→　ロジカルシンキング(垂直思考)
- 設計・障害対応　→　ラテラルシンキング(水平思考)
- 顧客折衝　　　　→　クリティカルシンキング(探求思考)
:::

## 突然ですがクイズです。
```
あなたはチョコレートを10個持っています。
喧嘩をせす、公平かつ均等に3人の子供がチョコレートを食べられるようにしたいです。
さて、あなたならどうしますか？
```
このクイズにどのように回答するかによって、あなたが得意な思考法がわかります。
### 回答例A(ロジカルシンキング)
```
チョコレートを3個ずつ渡す。
さらに、残りの1個を3等分して渡す。
```
きっちりと3等分するアイデアですね。
こんな回答をしたあなたはロジカルシンキング(垂直思考)が得意です。

### 回答例B(ラテラルシンキング)
```
チョコレート10個を溶かして、ホットチョコレートを作る。
3つのコップに均等にホットチョコレートを分けて、子供に渡す。
```
チョコレートの形で渡せ、とは言われていませんよね。
ホットチョコレートに変えて、3等分するアイデアです。
こんな回答をしたあなたはラテラルシンキング(水平思考)が得意です。

### 回答例C(クリティカルシンキング)
```
子供たちに内緒で、チョコレート1つを自分で食べる。
残りの9つのチョコレートを3人の子供に見せ、目の前で3個ずつ渡す。
```
10個全部を渡せ、とは言われてないですよね。
子供たちは最初から9つしかチョコレートはなかったと信じているので、均等に分けれたと納得するアイデアです。
こんな回答をしたあなたはクリティカルシンキング(探求思考)が得意です。

では、それぞれの思考法について解説していきます。

## ロジカルシンキング(垂直思考)とは
ロジカルシンキングとは、**論理的に物事を分解して考える思考法**のことです。
複雑な課題を単純な課題に切り分けて、一つ一つ地道に考えていくやり方になります。

ざっくり言うと<font color="Blue">「AをやったらBになるはず」</font>と言う考え方なので、とっつきやすいのが特徴。
プログラマーで言うと、主に**実装を担当する人が使う思考法**と言えます。

ロジカルシンキングでは、過去のデータや経験に基づいて判断します。
そのため、<font color="Red">経験のない現象に関しては効果的に対処ができない場合がある</font>ので要注意です。

アプローチの方法は「演繹法」「帰納法」の2つです。

ロジカルシンキングの詳細は[プログラマーに必要なロジカルシンキングとは](https://qiita.com/YutaManaka/items/26b6ad868c0779db55b9)をご覧ください。

### ロジカルシンキングで使うフレームワークとは
ロジカルシンキングでは、複雑な課題を単純な要素に分解するのに役立つフレームワークを用います。
- MECE
- [ベン図](https://qiita.com/YutaManaka/items/74d9c853be75f934ffc2)
- [ロジックツリー](https://qiita.com/YutaManaka/items/59e549073f7bff792d48)
- ピラミッドストラクチャー
- [IPO](https://qiita.com/YutaManaka/items/6e6df2fd0397898d930a)
- TOC
- ストーリー法
- 因果と相関
- 親和図法

## ラテラルシンキング(水平思考)とは
ラテラルシンキングとは、**さまざまなやり方を考え、その中からより効率の良い解決策を採用する思考法**です。
課題を解決できそうなアイデアをたくさん出して、比較検討することになります。

ざっくり言うと<font color="Blue">「プランAはどうかな、プランBもあるし、プランCもよさそう...よしプランCで行こう」</font>というやり方です。
プログラマーで言うと、**設計や障害対応で活躍する思考法**です。

ラテラルシンキングでは、膨大な事象から共通点を見つける力が必要になります。
<font color="Red">専門的な課題であればあるほど、素人だけでは共通点を見つけづらくなる</font>点には注意が必要でしょう。

アプローチの方法は「類推思考」「仮説思考」の2つです。

ラテラルシンキングの詳細は[プログラマーに必要なラテラルシンキングとは](https://qiita.com/YutaManaka/items/33cb905eb89f846daca2)をご覧ください。

### ラテラルシンキングで使うフレームワークとは
ラテラルシンキングでは様々なアイデアを出すのに役立つフレームワークが活用されます。
- ブレインストーミング
- 欠点希望点列挙法
- SCAMPER
- ミメーシス・ミミック
- シネテクス法

## クリティカルシンキング(探求思考)とは
クリティカルシンキングとは、**本当に達成すべき課題を見つけて最短で解決する思考法**です。
表面上の課題を一旦無視するので、少し強引に見えるかもしれませんが、非常に効率的な考え方です。

ざっくり言うと<font color="Blue">「あなたは〇〇と言ってるが、本当はXXが問題ですよね？それは△△で解決できますよ」</font>という感じです。
プログラマーで言うと、顧客折衝をする際に役立つ思考法です。

クリティカルシンキングでは、相手の意見を「それは本当に正しいのか」「なぜそんなことを言うのか」など、深掘りしていきます。
そのため、<font color="Red">深掘りに時間をかけ過ぎてしまうと、結論に辿り着かずに時間を浪費してしまう</font>点には注意が必要でしょう。

アプローチの方法は「弁証法」「背理法」の2つです。

クリティカルシンキングの詳細は[プログラマーに必要なクリティカルシンキングとは](https://qiita.com/YutaManaka/items/e11a89b9fc2cc939d10a)をご覧ください。

### クリティカルシンキングで使うフレームワークとは
クリティカルシンキングは、議論の論点を整理するのに有用なフレームワークが豊富にあります。
- ヒストグラム
- BATNA / ZOPA
- [プロコン](https://qiita.com/YutaManaka/items/e6759414d7722a136ed1)
- フィットギャップ分析
- ジレンマ
- PAC思考
- オッカムの剃刀
- 認知バイアス

## おわりに
プログラマーに必要な思考フレームワーク3つについてまとめました。
ロジカル、ラテラル、クリティカルシンキングを使い分けて、駆け出しプログラマーを卒業しましょう！

## 関連記事
[プログラマーに必要な思考フレームワーク3つ](https://qiita.com/YutaManaka/items/5f0c38f1b3a29d1f028e)
[プログラマーに必要なロジカルシンキングとは](https://qiita.com/YutaManaka/items/26b6ad868c0779db55b9)
[プログラマーに必要なラテラルシンキングとは](https://qiita.com/YutaManaka/items/33cb905eb89f846daca2)
[プログラマーに必要なクリティカルシンキングとは](https://qiita.com/YutaManaka/items/e11a89b9fc2cc939d10a)

## 参考文献
[ビジネス思考法使いこなしブック](https://www.amazon.co.jp/dp/B00ZZ4JGGU/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)