20160629-1

サイエンスライターの竹内薫が週刊新潮で連載しているコラム「もう一度ゼロからサイエンス」でド・モルガンの法則について書いていた。

喫茶店でセットメニューに「トーストと一緒にコーヒーまたは紅茶をお選びいただけます」と書いてあったとする。論理的な人間である竹内は給仕係にこう言う。
「よろしいか。論理用語の"AまたはB"は、AだけかBだけかAとBの両方か、という3つの場合を含む。ということで、私はコーヒーと紅茶を両方所望する。もちろん追加料金は払わんよ」

ド・モルガンの法則は高校の数学で習う論理演算の基礎であり定理である。その説明には、AとBという丸い集合体が示す範囲を表したベン図が用いられる。

竹内の話がよく分からない人がいるかも知れない。「コーヒーまたは紅茶」という表現は、論理演算でいうと「コーヒー OR 紅茶」と受け取れる。ORと表現される論理和は、「A、B、AとB」のいずれかの組み合わせになる。
「コーヒーか紅茶のどちらか」という意味合いであれば、論理演算なら排他的論理和を使って「コーヒー XOR 紅茶」でなければならない。
20160629-2
OR(論理和)
20160629-3
XOR(排他的論理和)

ジョークの話なので、こんな会話が実際にあるとは思えないし、実際に客がこんなことを言い出したら、給仕係は「日本語の"または"はそのような意味ではないので」と冷たくあしらえばいい。
そもそも、論理演算のANDは論理積、日常会話では「かつ」と表現され、ORは論理和、会話で「または」と表現される。ただ、排他的論理和のXORを一言で表す言葉はない。
だから、本来なら喫茶店のメニューには「トーストと一緒にコーヒーまたは紅茶をお選びいただけますが、コーヒーと紅茶を一緒にお選びいただくことはできません」とか、トーストと一緒にコーヒーか紅茶のどちらか一方だけをお選びいただけます」と書かねばならない。

めちゃくちゃ回りくどい言い方で書いてあると気持ち悪くなる。常識的に考えれば「コーヒーまたは紅茶」という表現は「コーヒーか紅茶のどちらか一方」という意味合いなので、面倒臭い"論理的な"オッサンのことを記にする必要はないのだが。

このド・モルガンの法則は、プログラミングをするときの基本である。ANDやORを使うビット演算もよく出てくるが、それ以上に条件文というのがよく出てくる。「AまたはB」、もしくは「AかつB」、あるいは「0以上5以下」などという条件のとき、なにかをするというプログラムは山ほどある。
この条件の付け方を間違えると、自分が考えている条件のときに指定した処理が実行されないことがある。下手をすると、どんなパターンもその条件に当てはまるなんてこともある。

プログラミングを学ぶと、論理的思考や問題解決能力が身に付くと言われている。プログラマーのすべてが論理的思考ができ、問題解決能力があるとは思えないが、確かに間違いではないと思う。自分がなにかを作りたいと思い、条件を付けながらアレコレやって、問題が起きればどう対応すればいいのか考えられる。
遊びのなかでそれが身に付くこともあるが、遊びのようにプログラミングをやれば、それが自然に身に付きそうである。

文部科学省は、2020年から小学校でのプログラミング教育の必修化を検討しているという。
英語の必修化のようにこういうニュースがあると、「そんなことをやらずにもっと国語を学ばせるべきだ」などと主張する保守派の権化のような化石が出てくる。こういう人たちは1か0でしかものが考えられないのだろうか。「国語をなくし、プログラミングを学ばせる」なら問題だが、国語もやって、プログラミングもあるのならいいではないか。
個人的には大賛成である。

プログラミングといっても、子供向けのものはソースコードを直接いじりまくるものではない。学校でハッカーを養成するわけではない。本当に論理的思考などを身に付けさせるための教育である。

文部科学省のホームページに「プログラミン」という子供向けのプログラミングが体験できるページがある。MIT(マサチューセッツ工科大学)の子供向けプログラミング言語「Scratch」をベースにしているという。

【文部科学省】プログラミン
【MIT】Scratch

これを見れば分かるが、プログラミングというよりも絵を動かして、画面の端まで来たら折り返させるとか、背景をスクロールさせたり、なにかの条件でイベントを発生させたりするというものである。
アニメやゲームを作るような遊び感覚で、いろいろな思考能力が身に付くというわけだ。

このような取り組みは非常に重要である。時代は急速に変わっている。「読み書き算盤」もいいが、今や「読み書きパソコン」が将来の産業や国力を付けるうえで必要なことになっている。
プログラミングをするなら、ある程度英語も必要だ。子供向けプログラミングを発展させていくと、英語の説明書を読んだり、英語の規格書を読む必要も出てくる。

小学生がタブレットを使い、小学校でプログラミングを学ぶのだから、すごい世の中になったもんである。子供のためにプログラミングを学ばせる親も大勢いるらしいが、そのうちこれが進めば、夏休みの自由研究がプログラミングによって作成したソフトウェアになったりするのかも知れない。子供の自由研究の手伝いをできない親が続出し、教育に関する世代間のギャップがものすごいことになるだろう。

それは悪いことではない。社会の変遷とともに、教育も変わっていくべきなのである。
時代遅れの大人に合わせて子供の教育を決めるべきではないのだ。