国語も数学も得意なら、情報科学にいらっしゃい

国語といえば文系の代表、数学といえば理系の代表的な教科というイメージがありますね。
でも、国語と数学それぞれの性質をよく考えてみると、実はある大きな違いがあるほかは根本的に同じものを扱う教科なんです。で、これらを両方とも自由に扱える人におすすめする分野がコンピュータ科学なのです。



国語と数学の根本的な意義を言ってしまいましょう。

  • 国語は、記号の意味を論理的に扱うことが目的の教科
  • 数学は、記号を、意味から離れて厳密に扱うことが目的の教科

なんです。
はい、ここで記号シンボルという言葉が出てきました。記号というのは、ここでは「%#&*@」みたいな記号文字のことではなく、組み合わせることで表現を作り出せるモノのことです。国語の世界では文字や語句、数学の世界では数字や変数、演算記号なんかが記号に当たります。
国語の、意味を論理的に扱うというのは理解しやすいですね。「『それ』が指している内容を答えなさい」とか「筆者の主張と合致する記述を選びなさい」とか聞かれたら、文章から意味を読み取って考えないと解けません。単なる文字【記号】の羅列から意味を読み出して、それをもとに筋が通った【論理的な】理解や思考をする、ということです。
さて問題は数学。「意味から離れて」ってどういうことか。
例えばこういうこと。「5+3」という式があるとします。国語的に意味を考えようとすると「5に3を足したもの」と理解できます。ところが、実は数学は違う。「+」が足し算という意味を持っている必要はないんです*1

  • a+b = b+a
  • a+0 = a
  • a+(b+c) = (a+b)+c
  • +b = <(a+b)の次>

などといったルールが適用できる、単なる記号の列。「5+3」はあくまで「5+3」でしかないのです(ルールに従って変形して「8と等価である」と導き出すことはできる)。
意味を捨て去って何がうれしいのか。うれしいんです。
例えばこんな問題、中学でやりましたよね。「50円切手と80円切手を会わせて10枚使って560円の封筒を送りました。それぞれ何枚使いましたか?」
二元連立方程式です。50円切手の枚数をx、80円切手の枚数をyとおくと

  • 50x+80y=560
  • x+y=10

と式が立ちます。さて式を立てたらどうするか。式変形のルールはもう知っています。だからルールだけに従って方程式を解けばいい。xが50円切手の枚数だという意味なんか忘れてもx=8, y=2と答えが出てしまうのです。式の解を見てから、「ああ、50円切手は8枚使ったのか」と意味を思い出せばいいのです。
このように意味を離れて記号を扱うことを形式的に扱うといいます。数学は、記号を形式的に扱う教科なんです。はじめて連立方程式を習ったとき、その威力に感動しませんでしたか? 数字を考えただけでは解けない問題を式変形だけで解いてしまう魔法のようでした。この魔法こそ、記号を形式的に扱うことの威力だったんです。



国語も算数も得意な人は意味と無意味を自在に使い分けて記号を操る能力を持った人だということになります。この能力は、コンピュータをプログラミングするのに必須の能力。現実の解決したい問題をモデル化し、そのモデルを命令の組み合わせで表現する。意味から記号への変換です。そして、同じ結果を求めるにももっと効率的に解決するアルゴリズムを構成する。記号から記号の変換です。意味と形式、フル活用ですね。
数学で文章題がいちばん得意だったという人、あなたはプログラミングに向いています。文章から意味を読み取り、数式に変換して形式的に解くというのは、実は紙上のプログラミングに他ならないのです。

*1:中学に上がると「+」「=」を「たす」「は」と読まず「プラス」「イコール」と読ませますね。足す、等しい、といった意味から離れようという含みもあってのことだと推測しています