プログラマーに必要なクリティカルシンキングとは

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

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

この記事ではプログラマーに必要な思考フレームワーク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)

## 対象者
この記事は下記のような人を対象にしています。

- 駆け出しエンジニア
- プログラミング初学者
- 上司に「もうちょっと考えてみようか」と言われがち
- 複雑な問題にぶち当たると頭痛がする

## 結論
:::note
- クリティカルシンキングとは、本当に達成すべき課題を見つけて最短で解決する思考法。
- 顧客折衝をする際に役立つ思考法。
- アプローチの方法は「弁証法」「背理法」の2つ。
:::
## クリティカルシンキング(探求思考)とは
クリティカルシンキングとは、**本当に達成すべき課題を見つけて最短で解決する思考法**です。
表面上の課題を一旦無視するので、少し強引に見えるかもしれませんが、非常に効率的な考え方です。

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

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

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

### 弁証法とは
弁証法とは、**意見の対立に着目して解決策を出す思考法**です。
課題が置かれている状況や前提条件を深掘りし、真の課題を炙り出すことで最短で解決に導けるのが強みです。

実際にプログラマーが遭遇しそうなシーンで解説しましょう。

【前提条件】
- クライアントから依頼され、楽天やYahooショッピングのようなECサイトを制作している。
- クライアントから<font color="Red">「お客様からの問い合わせに自動で回答できるbotみたいなやつをすぐ作ってくれ！」</font>と言われた。

【解説】
botの実装はそれなりに時間がかかるので、お客様のご要望通り「すぐに」実装できなさそうです。
さあ困った...と言うことで、下記のようなやりとりをして解決しました。

:::note
(私)「なんでbotが必要なのでしょうか？」

(クライアント)「問い合わせフォームに質問がめっちゃ来て、社員が対応するのが大変なんだよ。」

(私)「では、問い合わせがよく来る質問をまとめて、FAQページを作るのはいかがでしょう？2日くらい出来ると思いますよ。」

(クライアント)「早！問い合わせ減るなら、それでお願いします〜。」
:::

上記のケースでは「botを実装してくれ」「すぐに」という要望に対して、いきなり「はいやります！」ではなく、<font color="Blue">「なんでbotが欲しいんですか？」</font>と質問したところがキーになります。
そうすることで<font color="Blue">「質問対応に社員の時間を割きたくない」</font>という真の課題が見えてきました。
結果、工数のかからない「FAQページの実装」で解決できたので、クラアントも開発者もハッピーになりました。

最短のスピードで課題を解決できる弁証法ですが、問題もあります。
関係者が増えてきた際、<font color="Red">全員の希望を解決できるようにしようとすると、深堀りに時間がかかり過ぎてしまう</font>のです。
関係者の納得度と、課題の解決スピードのバランスを上手く調整するように注意しましょう。

### 背理法とは
背理法は、**解決アイデアの欠点を指摘することで、別のアイデアの採用に誘導する思考法**です。
多人数で合意を取りつつ最短で解決策に導けるので、使いこなせれば超強力です。

実際にプログラマーが遭遇しそうなシーンで解説しましょう。

【前提条件】
- クライアントから依頼され**楽天やYahooショッピングのようなECサイト**を制作している。
- クライアントから<font color="Red">「上司から売上を上げろと言われてるんだよね。決済方法を増やしたら購入につながると思うので、電子マネー決済できるようにして欲しい、すぐに！」</font>と言われた。

【解説】
電子マネー決済機能の実装はかなり時間がかかりそう...と思いつつ、下記のようなやりとりをしてみます。

:::note
(私)「なるほどかしこまりました、実装検討してみます。〇〇と××の検証をしなければいけないので、実装に1ヶ月ほどかかる見込みです。いかがでしょう？」

(クライアント)「まじすか、1ヶ月は時間かかりすぎだな...今月の売上に反映できなきゃ意味ないじゃん。」

(私)「商品ページの購入ボタンのデザインを変えて目立たせてみたら売上が上がるかもしれませんね？それでしたら、3日で実装できますが試してみませんか？」

(クライアント)「3日！いいね！それ試してみて！」
:::

...と言う感じで、一旦相手の意見を肯定しつつ、実行した場合のデメリットを説明しています。
クライアントも自分の意見がベストではないことを納得できたので、こちらから出した対案(ボタンデザインの変更)に賛成しやすい雰囲気が作れていたと思います。

一見、無敵そうに見える背理法ですが、これにも注意点があります。
まず、相手の意見を否定する形になるので、<font color="Red">やりすぎると皮肉に聞こえてしまう</font>ので、関係性が崩れない程度に留めておく必要があります。
また、一つの意見を否定できただけで、<font color="Red">自分が出した対案を採用してくれるかどうかはまた別の話</font>なので、さらに議論が必要になる点も要注意です。

## おわりに
「プログラマーに必要なクリティカルシンキングとは」についてまとめました。
弁証法と背理法を使い分けて、駆け出しエンジニアを卒業しましょう！

## 関連記事
[プログラマーに必要な思考フレームワーク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)