「プログラミング的思考」は、プログラミングをする、あるいはそれがうまくなるための思考ではありません。
現代社会の課題解決の手段やプロセスを、コンピューターのプロセスを学ぶことで身に着けてもらうため、MITのJeannette Wingが提唱した「Computatinal Thinking」に対応した言葉です。
米国で「Computatimal Thinking」は教育現場やモンテッソーリ教育を始めとする児童教育の現場などにも広がりを見せています。

小学校にプログラミング教育を導入

日本でも2020年度から小学校にも「プログラミング教育」が導入されることが定められました。文科省の「小学校プログラミング教育の手引き」によれば、その背景を下記のように説明されています。

誰にとっても、職業生活をはじめ、学校での学習や生涯学習、家庭生活や余暇生活など、あらゆる活動において、コンピュータなどの情報機器やサービスとそれによってもたらされる情報とを適切に選択・活用して問題を解決していくことが不可欠な社会が到来しつつあります。

プログラミングそのものの習得を目指すのではない

このように「プログラミング教育」を始めるというと、小学校で、コンピュータを並べてBASICとかC言語などのプログラミング言語を覚えて、プログラミング(コーディング)をするのだろうか?と思う方も多いと思いますが、決してそうではありません。文科省の有識者会議(小学校段階における論理的思考力や創造性、問題解決能力等の育成とプログラミング教育に関する有識者会議)の発表においても、

プログラミング教育とは、子供たちに、コンピュータに意図した処理を行うよう指示することができるということを体験させながら、将来どのような職業に就くとしても、時代を超えて普遍的に求められる力としての「プログラミング的思考」などを育むことであり、コーディングを覚えることが目的ではない。

とされています。

つまり小学校で行うプログラミング教育とは「プログラミング的思考」を身に着けるということに他なりません。

プログラミング的思考とは何か

「プログラミング的思考」という言葉を始めて聞いたという方も多いと思います。
あまり浸透している言葉ではないことは、日本で書かれた「プログラミング的思考」というタイトルの本は、まだ2冊しか出版されていないということからもわかります。
(そのうち一冊はエクセルやVBA(Visual Basic Application)の使い方の本で、もう一冊はアルゴリズムやフローチャートについての本)
子供向けのプログラミング入門の本は多数出版されていますが、多くはプログラミング言語の入門書であったり、SCRACHというプログラミング入門ソフトの使い方の本であったりします。

出版界にもプログラミング的思考=プログラムができるようになること、という「誤解」が広がっているのかもしれません。

ではプログラミング的思考とは何かというと、文科省の「小学校プログラミング教育の手引き」によれば次のように定義されています。

「プログラミング的思考」は、「自分が意図する一連の活動を実現するために、どのような動きの組合せが必要であり、一つ一つの動きに対応した記号を、どのように組み合わせたらいいのか、記号の組合せをどのように改善していけば、より意図した活動に近づくのか、といったことを論理的に考えていく力」と説明されています。

つまり要約すると、プログラミング思考は、
⑴ 物事を正しく分類・分析(要素に分ける)する力
⑵ 要素同士の組み合わせ(関係性)を考える力
の2つであることがわかります。前者が「論理的思考」、後者が「システム思考」です。

図示化すると下図のようになるでしょう。一番最上位の「プログラミング技術」は、職業プログラマーになる人以外は当面覚える必要はありませんが、論理的思考、システム思考に支えられた「プログラミング的思考」は、小学生はもちろん、私たち全員が身に着ける必要があるものといっても過言ではないと思います。

論理的思考とは

論理的思考あるいはロジカルシンキングという言葉は、多くの人が聞いたことのある言葉だと思います。しかしそれがどんなものか説明できる人は意外と少ないようです。
論理的思考とは、物事は、どのような構成要素で成り立っているか、分析し、物事を理解するための思考法です。簡単に言えば下図のようになります。

例えば人間は、生物学的に男性と女性に分離される。逆に言うと男性と女性で構成されているのが人間です。この関係がWhy soとSo whatになります。(縦の関係)

また横の関係は、人間を男性と女性に分類した場合、相互に漏れやダブりがない(Mutually Exclusive and Collectively Exhaustive 略してMECE)状態になっているかどうかが大事です。例えばここに「同性愛者」を入れると、同性愛者は男性か女性でもありますからダブりがあることになり、この関係はMECEではありません。

だから物事を説明するときに「これは○○です。なぜなら(Why so)『理由1』と『理由2』だからです。」あるいは「『理由1』と『理由2』によって(So What)、〇〇という結論が導かれます。」という話を組み立てることが、論理的思考のポイントです。
物事と、その下の項目(ここでは理由)の間にWhy So (なぜなら)、あるいはSo What(従って・だから)の関係があるか、そして、『理由1』と『理由2』の関係がMECEであるかどうか。この2つができれば、相手に説得力を持って自分の意見を伝えることができます。

これはビジネスのプレゼンや面接などで大きな力を発揮するでしょう。実際多くの人の会話を聞いているとわかりますが、これがうまくできていないために会話がかみ合わなかったり、相手にうまく伝えることができない、というときは、この2つができていない、という場合がほとんどです。

そういう人が多い中で、学校や会社の面接で、論理思考に沿って話すことができれば、これは人生にアドバンテージを得ることができるようになります。

論理的思考とプログラミング的思考

プログラミングと論理的思考の関係を見てみましょう。
ここでは、「カレーライスをつくる」というプログラミングを考えます。
カレーライスをつくるには、材料をそろえ、料理する必要がありますが、この2つはMECEです。

そしてさらにカレーライスの材料をそろえますが、下記のような関係にあることがわかるでしょう。
ここで本当は人参も入れるつもりだったのなら、これは漏れがあることがわかりますし、ここに「野菜」と記してしまえばダブりがあってやはりMECEになりません。

そして下図が「料理」の工程です。
横ではなく縦に並べていますが、これもMECEになっていることがわかると思います。
材料と比べて、例えば「肉を炒める」が欠けていたり、あるいは上から4番目の工程を「ルー、肉、玉ねぎ、じゃがいもを入れて煮込む」としてしまうと同じ工程がダブることになって、混乱してしまいますね。

この「料理の工程」の図こそが、プログラミングでいう「フローチャート図」です。
プログラミング的思考とは、論理的思考である。プログラミングができることは、論理的思考ができることとイコールであることがわかるかと思います。

システム思考とプログラミング思考

カレーライスをつくるとき、どういう順番でその材料を料理するのかが大事です。「盛り付け」の工程が、はじめや真ん中にあっては、いくらMECEであっても料理はうまくいきません。カレーライスをつくるくらいでしたら、あまり考えなくてもいいでしょうが、もう少し複雑な問題になると、それぞれの要素が相互にどういった関係にあるか、という「つながり」を考える必要があります。
また同じ肉を炒めるのも、カレーライスをつくるときと、焼き肉をつくるのでは炒め方も変わってくるように、全体とのつながりも考える必要があります。これを考えるのが「システム思考」です。

また、単に命じられたことをプログラム化する職業プログラマーになるだけなら、考える必要ないかもしれませんが、プログラミングを行うのは、何か課題があって、その解決手段をアウトプットするのが、プログラミングの目的です。

何が問題で、どうやってそれを解決するか、これはシステム思考の領域ですが、これは何のためにプログラミングをするのかを考えることに他なりません。

参考として、このブログで何度か取り上げている、ニューヨークの犯罪を劇的に減らしたシステム思考の事例、「われ窓理論」の因果ループ図とフローチャート図を載せます。
それぞれが対応していることがご理解いただけるかと思います。
 
 

プログラミング的思考はあらゆることに役立つ

政府がプログラミング教育の導入に熱心なひとつは、21世紀に入ってからの日本の凋落が背景にあります。

今世紀に入り、GAFAやマイクロソフトといったIT関連企業がインターネットその世界ばかりかリアルな世界でも大きな影響を及ぼすようになった現在、日本企業はいまだに20世紀のモデルから脱却できていません。
単なる欧米企業の模倣ではなく、「ITで課題を解決する新しい手法を」示した企業はまだ日本にはほとんどないのが現状でしょう。
プログラマー出身のビル・ゲイツやマーク・ザッカーバーグにあこがれる子供も少なくありません。彼らは社会課題をプログラミングで解決する手法を示したからこそ、今の地位を得ることができ、米国の繁栄にとっても大きな力となっています。

繰り返しになりますが、単に「プログラミング技術」を身に着けても、ゲイツにもザッカーバーグにもなりません。

論理的思考、システム思考に基づいた「プログラミング的思考」を身に着けることが、進学や就職、ビジネスの成功につながり、そのように課題の解決を考えることのできる人材が「課題先進国日本」を救うことにつながると考えます。