はじめに
ロジカルシンキング(MECE)とプログラミング的思考力とプログラミング構造考案力のアルゴリズム的思考力の階層構造について、自分なりのまとめをメモしておきます。
ロジカルシンキング(MECE)論理的思考力
論理的思考力一般やロジカルシンキングとカタカナ用語となった場合でも、その概念にはいくつか多様性がありますが、わたしの中でロジカルシンキングというと下記のミーシー(MECE)でした。
- M utually(互いに)
- E xclusive(重複せず)
- C ollectively(全体的に)
- E xhaustive(漏れがない)
「MECE」とは、「漏れなく、ダブりなく」。
これはビジネスの現場では絶大な威力を発揮する、説得を目的とする思考ツールとわたしは認識しています。
プログラミング的思考力
プログラミング的思考力といった場合、英語由来のカタカナ語のコンピュテーショナルシンキングまたは計算論的思考と比較される場合もあるようですが、プログラミング的思考力の方がよくみます。
後者は提唱者がいるので、厳密には異なる概念となりますので後述します。とりあえず「プログラミング的思考力」というと下記のようなことを一般的に指すとします。(わたしのアレンジを含みます。)
- 分解・整理する 複雑な問題を小さな問題に分けて認識する
- 再構成する 異なる要素を組み合わせて新しい要素を再構成する
- 結果予測する 思考の中でいくつかの状況を想定して結果を予測する
- 抽象化する 具体的な事例から一般的な原理を導き出す帰納的な分析力
- 言語化する 自分の考えを明確に表現し、他者に伝える演繹的な力。
ほぼエンジニアリングまたはその他のビジネスの問題解決能力と同じとも言えますが、対象がソフトウェア開発の場合はこれらのことを「プログラミング的思考力」と表現しているように思われます。
コンピュテーショナルシンキング(CT) 計算論的思考
コンピュテーショナルシンキング(CT) 計算論的思考の場合は、より計算機的でソフトウェア開発的な思考が定義されています。(若干定義のゆらぎはあるようです。)前記プログラミング的思考力とかぶっている点がもちろんあり、見出しの文言が異なっていても概念的に同意な場合を含みます。
- 問題を分解する 複雑な問題を解決可能なレベルまで分解する
- パターンを認識する 繰り返し出現する要素を特定する
- 抽象化する パターン群からパターンをさらに一般化し支配的な要素を特定すること
- アルゴリズムを作成する 問題に対して解決に至るステップ手順を明らかにすること
Wing氏の英語論文の日本語翻訳版 「情報処理」誌(情報処理学会)
翻訳「計算論的思考」
https://www.cs.cmu.edu/afs/cs/usr/wing/www/ct-japanese.pdf
アルゴリズム的思考力
アルゴリズム的思考力とはあまり一般的な表現ではないかもしれませんが、コンピュテーショナルシンキング(CT) 計算論的思考の4つ目の定義の中身に相当するとわたしは考えています。ソフトウェアの場合は「問題を解決する≒ソフトウェアが動くようになる」が成立する場合が多いです。現在のコンピュータのソフトウェアが動作する手順書の構造は下記の4点からなるとわたしは考えています。
- 順次 順々にステップが進行する
- 反復 同一のステップ群がループする、繰り返される
- 分岐 あるステップで複数のステップに分岐する
- 割込み あるステップとステップの間に別のステップが出現する
割込みを含めるのはわたしのアレンジなので一般的ではないかもしれません。ただし、今日のプログラミングの現実ではこの概念を知っておかないと挫折しやすくなるポイントとわたしは考えています。
おわりに
いかがでしたでしょうか?なにかの役にたてば幸いです。あくまでわたしの認識の中で、より上位の一般的な論理的思考力から、プログラミングの実装に必要な思考力までを階層的にまとめてみました。