この記事をお読みの方の大部分は,現在SEやプログラマ,その他IT分野の高度な頭脳労働をされている方々だと思います。

 しかしながら,現役のITエンジニアの方々で実際に数学を専攻してきている人は,諸外国に比べて少ないように思えます。これは,数学が「学問的に難解であるにもかかわらず仕事につながりにくく,お金にもなりにくい」ように見えるからなのかもしれません。

 私自身はもともと,大学で数学を専攻していたのですが,現在はプロジェクトマネジメントやシステム構築の提案,時には技術的トラブル発生時のトラブルシューティングなどを行っています。

 その際に,普段何気なく使っている技術とその技術のもととなっている数学の理論(というほど大げさではないことも多いですが)の両方を意識して仕事をすることも多く,「数学的な知識があるほうが有利だな」と感じることも多々あります。今回,たまたま縁があり,数学をもともと専攻していた者として,そういったことを思いつくままに書かせていただければと思っています。

 この連載のターゲット読者(前提条件)としては,SEやプログラマなど,高校までは数学をきちんとやってきたが,それ以降,数学にあまり触れていない人を考えています。そして,この連載が,日頃激務のITエンジニアの方々のちょっとした気分転換になるとともに,業務にも役立ち知っていて得する情報も提供できたら,と考えています。結果として,数学を学ぼうという人口が増加すれば,こんなにうれしいことはありません(実は私自身の気分転換のために仕事以外のことを考える,という裏の目標もありますが)。

 例えば,次のようなお話を考えています。

数学的視点の例1:自動掃除機

 最近,自動的に床に掃除機をかけてくれる掃除機が売られています。日本で手に入りやすいのは,壁に当たると別の方向に向きを変えて進んでいくというものです。壁に当たるのは嫌という向きには,超音波で壁を検知して壁に当たりそうになると向きを変えるというものもあります(この掃除機は,残念ながら現在日本では販売中止になってしまいました)。

 さて,ここでこの掃除機を開発する立場になったと仮定しましょう。当然のことながら,掃除機には何らかの「進み方」のロジックが組み込まれていて,できるだけ効率よく床を掃除できるようにプログラムされているべきでしょう。では自分がSEやプログラマだったとして,どういうロジックを組むのがいいのでしょうか?

  • 「反射」させる(入射角と反射角は等しくなるようにする)(図1
  • 当たったところから90度回す(図2
  • 当たったところから,適当に(ランダムに)回す(図3

反射
図1●反射させる
90度回転
図2●90度回す
ランダム
図3●ランダム

 こんなことはどうでもいいように思う方もいらっしゃるかもしれませんが,いかに短時間で効率よく掃除をするかは全自動掃除機の最も基本的な性能の1つで,競合他社が多数いる場合,このロジックが致命的になる可能性さえあります。そしてこのロジックはまさに「数学」そのものです。

数学的視点の例2:コンピュータでのカードゲーム

 ブラックジャックなどのカードゲームのプログラムを書く場合,まず第一に「トランプをシャッフルする」ということをプログラムでシミュレートしなければなりません。言うまでもなく,プログラムを開始するたびに「同じ並び順に」シャッフルされるようなプログラムでは,正しいゲームは行えません。

 一番簡単なのは,乱数発生機能を使うことだと思いますが,では,乱数発生というプログラム言語に備わったブラックボックスがどういう「癖」を持っているか分からないまま,乱数発生機能を使ってもいいものなのでしょうか。この場合,まず最初に「数学的にシャッフルされた状態とは何か」をきちんと定義することが必要です。

数学的視点の例3:メモリーチップは何でNANDばかりなんだろう

 最近,巷ではさまざまなメモリーカードが売られています。こういうメモリーカードの説明を見ると 「国産NAND回路を使用」とか書いてあることもあります。NAND(否定論理積)とは論理演算の一種で,NANDのみですべての論理演算を表現できます。これも,数学そのものです。

 連載では,上に挙げた話も含めて,思いつくままに面白そうな話を取り上げられたらと思っていますので,どうぞよろしくお願いいたします。