プログラミング教育の課題

2023年9月14日

最近読んだ本の中から、プログラミング教育にも通じる課題をあげる。
参考にしたのは、
「プログラマーのジレンマ 夢と現実の狭間」(スコット・ローゼンバーグ 日経BP社)
「キーワード 現代の教育学」(田中智志ほか 東京大学出版会)
「シュレディンガーの猫、量子コンピュータになる」(ジョン・グリビン 青土社)
「認知心理学 心のメカニズムを解き明かす」(仲真紀子 ミネルヴァ書房)
である。
(以前のブログ記事にも書いたとおり)小学校におけるプログラミング教育は、プログラミングそのものを教えるのではなく、プログラミング的思考を教えるものである(現在の教育論の流れを考えると、「教える」のではなく、「学び」を促すというべきだろうが・・・)。
しかし、プログラミング教育に関するいくつかの書籍を見ていくと、結局プログラミングを教えるのと同等のこと、すなわち、逐次処理や分岐、繰り返しを使って論理を組み立てる方法を教育している。
名前がビジュアル言語であろうがプログラミング言語の一種(手続き型言語であり且つインタープリター言語)である。
プログラミング教育の注意点として一番にあげるべきは、現在のプログラミング・パラダイムには問題が多いという点である。
問題点を端的に言うと、現在のプログラムは規模が小さいうちは問題が少ないが、規模が大きくなるとバグ(不具合)を取り除くのに多大な時間を要するなど、多くの問題を抱えていることである。それゆえに、システム開発・ソフトウェア開発の歴史の中で、デスマーチに陥った大規模プロジェクトは数多くある。予定通りの「予算」と「納期」と「品質」で完了したプロジェクトの方がずっと少ないはずだ。
ハードウェアがムーアの法則に従って急速に高速化したきたのに対して、ソフトウェアの進歩は亀のように遅い。これも規模の問題と同じく、現在のプログラミング・パラダイムに問題があることを示唆している。

ここで、Fortranの父であるジョン・バッカスの言葉を引用する。
「フォン・ノイマンの言語では絶えずアドレスを評価し、個々の命令を別々に計算しなければならない。Fortranやそれに続く言語がフォン・ノイマンのコンピュータの概念から発展したのはやむを得ないだろうが、これらの言語が20年にわたって我々の思考を支配しているのは残念なことである。
なぜ残念かというと、長年この方法に慣れてしまうと将来はるかに優れた知的能力の計算機を提供する新しいプログラミングスタイルを理解し採用することが難しくなるからだ」
ジョン・バッカスも今のプログラミング・パラダイムには問題があることを指摘している。
ジャロン・ラニアーというエンジニアは次のように言っている。
「コンピュータ科学の恥ずべき点は、ハードウェアが高速化していくのにソフトウェアが向上しないことだ。それにもかかわらず、プログラマーは自己満足するようになり、不十分な現状を不変なものとして受け入れている」
フェノトロピック・コンピューティングを提唱しているジャロン・ラニアーは次のように言っている。
「プログラマーは最初は小さなプログラムから始め、そのレベルで基本や実践方法を学ぶ。しかし、プログラムが小型サイズを超えたとたん、もろさが最も突出した特徴となり、ソフトウェア工学は果てしない徒労に終わる」
さらに、ジェラルド・ジェイ・サスマンは次のように指摘している。
「コンピュータ科学は極めて困難な状況にある。・・・この問題は構造的だ。複雑性の問題ではない。何らかのモジュラリティによって解決されるものではない。新しい発想が必要なのだ。柔軟、堅牢で発展性のある効率的なシステムを開発するための新しい工学の基本が必要なのだ」
これらの指摘からわかるように、現在のプログラミング・パラダイムには大きな問題があり、これらの問題を抜本的に改善するブレークスルーないしはイノベーションが必要ではないか、ということである。
現在のプログラミングスタイルを学ぶことは、現在のパラダイムを是と考え、これに縛られる恐れがある。今後の10年20年を考えると、新しい発想が必要なのではないだろうか。
問題解決手法の一つとしてプログラミング的思考を学ぶことには一定の効果があると考えられる。しかし、世の中の問題はプログラミング的思考で扱えるものばかりではない。
問題の分類の仕方に、良定義問題と不良定義問題に分ける考え方がある。良定義問題とは、数学の問題のようにアルゴリズム(正解に到達する手順)が存在する問題である。これはプログラミング的思考とほぼ同じだと考えられる。
一方、不良定義問題とは、「社会で成功する」や「金持ちになる」など、ゴールに到達する方法がはっきり分らない問題である。
「不良定義問題に対して人間は、過去に経験した問題解決手法で、ある程度成功した、比較的簡単な手続きを用いる場合が多い」そうだ。
テストで良い成績をとり、良い学校に進学する、などの方法がこれに相当するのかもしれない。良い学校に進学して一流企業に入社したからといって、必ずしも成功するとは限らないことは多くの人が知っていることである。
「女性(男性)にもてたい」なども不良定義問題だろうか?
ノーベル物理学賞を受賞したリチャード・P・ファインマンは、10代のころに興味があったのは2つ、数学と女の子だけだった、といっているからこれは極めてまじめで、切実な問題なのである。
考えてみると世の中の多くの問題は不良定義問題であるように思えてくる。
推論の方法を演繹的推論と帰納的推論に分ける考え方がある。演繹的推論は、三段論法のような方法であり。プログラミング的思考(手続き型言語)に近いと思う。
一方、帰納的推論は個別命題から一般命題を導く方法であり、厳密には論理的必然性がない。論理的必然性がないからコンピュータには向かない気もするが、有名な画像認識の話(googleのAIが猫を判別した話)などを考えると機械学習などはこれに近いのかもしれない。(論理的必然性がないから、ある確率で正解に到達するということだろう)
アルゴリズムの学習はパターン学習に陥る可能性もあるので注意が必要だろう。パターン学習とは、数学の解法をマニュアル化して繰り返すことである。
「マニュアル化を繰り返していると、子どもの思考力は減退していく。子どもは一般的に9歳から13歳くらいまでに抽象的思考ができるようになるが、この時期にパターン学習ばかりを子どもにさせていると、しばしば具象的思考から抽象的思考へと飛躍できなくなる」との見解もある。

プログラミング教育
「プログラミング教育」のINDEX