ガジェット通信

見たことのないものを見に行こう

『数学ガール』とプログラミングの関係

DATE:
  • ガジェット通信を≫

はじめに

こんにちは、結城浩です。

一年ぶりにCodeIQでアルゴリズムの問題を出題することになりました。
現在「マヨイドーロ問題」として出題中です。
ぜひみなさんチャレンジしてくださいね。

結城浩の「マヨイドーロ問題」

さて、今日は「『数学ガール』とプログラミングの関係」という題で、
少しお話ししたいと思います。

結城は『数学ガール』という数学物語を書籍として刊行しています。
「数学ガール」と「数学ガールの秘密ノート」という二つのシリーズがあり、
「数学ガール」シリーズは現在5冊、「数学ガールの秘密ノート」シリーズは現在6冊が出版されています。

「数学ガール」ホームページへ

最新刊『数学ガールの秘密ノート/ベクトルの真実』

「数学ガール」シリーズは高校生から大学生向け、
「数学ガールの秘密ノート」シリーズはもう少し易しい数学内容で、中学生からも読めるようになっています。

以下の文章では、
この二つのシリーズ(現在11冊)を『数学ガール』と総称することにします。

『数学ガール』では、そのタイトルの通り、「数学」が話題の中心にあり、
中学生や高校生が数学の問題に取り組む様子が描かれています。
……こんなふうに説明すると、
「なんだ、数学を勉強する生徒や学生だけが読むものなんだね」と誤解されそうになりますが、
そうではありません。

実は『数学ガール』はプログラムを書く人にも、もっと広く「物事を学んだり、考えたりする人全般」にも楽しめて役に立つ本なのです。

以下では、『数学ガール』に登場するたくさんのスローガンのうち、三つを通して、
『数学ガール』がどうして数学を学ぶ人に限らず、
「物事を学んだり考えたりする人全般」のためのものなのか、
お話ししていきたいと思います。

スローガン1.《例示は理解の試金石》

《例示は理解の試金石》というのは、『数学ガール』でもっとも大切なスローガンの一つです。

これは、

自分が「何か」を理解しているかどうか知りたければ、具体例を作ってみよ。
もしも、具体例を作れたならば、あなたは理解している。
もしも、具体例を作れなかったならば、あなたは理解していない。

ということを一言で表現したスローガンです。

たとえば、適切な例を作ることで理解を確かめよう。

《例示は理解の試金石》だ。

例示は定義じゃないけれど、適切な例を作るのは良い練習だよ……

(『数学ガール』から引用)

数学やプログラミングでは、複雑な概念や抽象的な概念を扱わなければならない場面があります。
当然ながら、自分が理解していない概念をうまく取り扱うことはできません。
でも、人間というものはつい「理解したつもり」になってしまう場合がありますよね。

そこで《例示は理解の試金石》の登場です。

自分がその概念を理解したかどうかを確かめたいなら、《具体例》を作ってみればいいのです。
それによって自分が本当に理解しているかどうかを確かめられるでしょう。

『数学ガール』の主人公にして語り部の「僕」は、
頻繁にこの《例示は理解の試金石》を実践します。
難しい問題、一般的な問題にぶつかったとき、まず、小さな数で試します。
具体的な数を使って、いったい問題が何を語っているのか、調べようとします。

プログラミングでも、具体例を使って考えることは大事です。
いまから作ろうとしている対象や、使おうとしている道具を学ぶときには、
具体的な例を挙げ、自分が本当に理解しているかを確かめつつ進むのです。

スローガン2.《構造を見抜く》

《構造を見抜く》というのも、『数学ガール』によく登場するスローガンです。

《構造を見抜く》というのは、

大きくて複雑な概念をより小さくて単純な概念に分割すること
単純な概念がどのように組み合わされているかを理解すること
さらに抽象化・具体化・一般化・特殊化できないか考えること

などを意味しています。

「……数列の一部が与えられ、次の数を考えるっていうのは、単なるクイズじゃない。
一般項を探すというのは、隠された構造を見抜くことなんだ」

「必要なのは目だ。でも、この目じゃない」

ミルカさんはそう言って、自分の瞳を指さした。

「構造を見抜く、心の目が必要なんだ」

(『数学ガール』から引用)

数学でもプログラミングでも、
いきあたりばったりで何となく問題が解けてしまうことがあります。
式をいじっていたら解けてしまった。
適当に試行錯誤していたら正しい答えが出てきたという状況です。

それで「できあがり」にすることもできますが、
『数学ガール』の登場人物たちはそれをよしとしません。

饒舌才媛のミルカさんは、《構造を見抜く》ことを重視します。
問題の構造や、扱っている概念の構造をきちんとつかむことを喜びとし、
それを表現できてはじめて納得するのです。

問題や概念の《構造を見抜く》ことは、
プログラミングでデータ構造を考えるときにも有効です。
取り扱っている題材とアルゴリズムにマッチしたデータ構造を考えることで、
プログラムがよりシンプルになったり、スピードアップしたりすることもよくあります。

ただ問題が解ければよしとするのではなく、
《構造を見抜く》という心構えが大事になってくるのです。

スローガン3.《わからなくなる最前線》

《わからなくなる最前線》は、『数学ガール』に登場する元気な後輩、テトラちゃんがよく気にしているスローガンです。

《わからなくなる最前線》をはっきりさせるというのは、

いま考えている内容のうち、自分がちゃんとわかっているのは、いったいどこまでなのか。
自分がわからないのは、いったいどこからなのか。
わかっているところと、わかってないところの境目はどこにあるのか。

これらをはっきりさせるというものです。

あたしがほんとうにわからないのは、
a + d = b + c
という式――ここがあたしの《わからなくなる最前線》です。

この式そのものの意味は、もちろん《a + dとb + cは等しい》だとわかってますけど、
でも――あたしは、”So what?”(だから、なに?)って思います。

……この式はいったい何を意味しているんでしょう。

(『数学ガール/ゲーデルの不完全性定理』から引用)

私たちは誰しも「わからないこと」にぶつかると軽くパニックになります。
「うわ、わからないぞ、どうしよう! どうしよう!」と焦ってしまいます。
そして、焦っていると「何から何まで全部わからない!」と考えがちです。

そこで、《わからなくなる最前線》の登場です。

落ち着いて考えると「何から何まで全部わからない」なんてことはめったにありません。
必ず「ここはあたりまえ。ちゃんとわかっている」という部分が少しでもあるもの。
ですから、「自分がちゃんとわかっているのは、いったいどこまでなのか」をじっくりと追っていけばいいのです。
そうすれば、必ず《わからなくなる最前線》までたどり着くことができるはず。

そして、自分が《わからなくなる最前線》までたどり着くことができれば、
そこで「次の一歩」に集中することができます。

「そうか、自分は《ここ》からわからなくなるんだな。
よし、では《ここ》を突破することに集中しよう」

そのように考えることができるのです。

これはプログラミングのデバッグにも通じるものがあります。
プログラムが、思ったようにうまく動かないとき「うわ、動かないぞ、どうしよう! どうしよう!」と焦りがちですね。

ここでも《わからなくなる最前線》をはっきりさせることが大事です。
そもそもコンパイルは通っているのか。小さなテストケースでは動くのか。
正常系では動作するのか。特殊な環境でのエラーなのか。再現性はどうか。
などなど「どこまではOKで、どこからがおかしいのか」をはっきりさせることが大切になるのです。

『数学ガール』の登場人物は、
問題を考えながらお互いによく話し合います(「数学トーク」と呼んでいます)。
相手に対して《問いかけ》を行い、その《問いかけ》に答えます。
そのやりとりを通して、自分の《わからなくなる最前線》を確認しようとするのです。

これもまた、プログラミングのデバッグに通じますね。
現在の状況を口に出して話すことでデバッグが進むことは誰しも経験があるでしょう(テディベアデバッグ、
ベアプログラミング、ラバーダックデバッグ、告白デバッグなどの名称があるようです)。
言葉に出すことで、何がどうなっているかが明確になるのです。

まとめ

以上、『数学ガール』という書籍を通して学べる内容の一部を、スローガンとしてお届けしました。

《例示は理解の試金石》
《構造を見抜く》
《わからなくなる最前線》

『数学ガール』の登場人物たちは、これらのスローガンを駆使して、
数学の問題に取り組みます。彼女たちの姿を通して読者は、

理解するとは、どういうことか
把握するとは、どういうことか
表現するとは、どういうことか

を体験的に学ぶことができるのです。

結城が現在出題している「マヨイドーロ問題」の正解者には、
私の最新刊『数学ガールの秘密ノート/ベクトルの真実』(サイン本)が抽選で当たりますので、
ぜひご応募ください。

これからも『数学ガール』と、
CodeIQでの結城浩の問題を応援してくださいね。

それではまた!

CodeIQの問題に挑戦しよう!(結城浩のWebサイト)

なお、結城はメールマガジンも発行しています。よろしければご購読ください!

結城メルマガ(結城浩のWebサイト)

CodeIQ運営事務局より

結城さん、ありがとうございました!
本文にもあったように、現在、結城さんの最新問題が出題中です。
ぜひ挑戦してみてくださいね!

ITエンジニアに読んでほしい!技術書・ビジネス書 大賞2016

翔泳社「ITエンジニア本大賞」とのコラボ問題。正解者の中から抽選で人気の技術本をプレゼント!

2016年1月17日23時59分までに挑戦していただいた正解者の中から、抽選で1名様に「ITエンジニアに読んでほしい!技術書・ビジネス書 大賞2016」で選ばれたプレゼン大会参加本(技術書部門)をすべてプレゼントします。

プレゼン大会参加本(技術書部門)は2016年2月上旬頃に発表予定
ITエンジニアに読んでほしい!技術書・ビジネス書 大賞とはこちら

☆☆☆☆挑戦は、こちらから!☆☆☆☆

カテゴリー : デジタル・IT タグ :
CodeIQ MAGAZINEの記事一覧をみる ▶
  • 誤字を発見した方はこちらからご連絡ください。
  • ガジェット通信編集部への情報提供はこちらから
  • 記事内の筆者見解は明示のない限りガジェット通信を代表するものではありません。