バグ検出ドリル(2)理系なのにプログラマーは苦手!? 数学の問題:山浦恒央の“くみこみ”な話(102)(1/3 ページ)
「バグ検出ドリル」の第2回で出題するのは数学に関係する問題。理系なので数学が得意と思われがちなプログラマーですが、実はそれほどでもなかったりするのだとか……。数学的な技術を身に付けて、よりレベルの高いエンジニアを目指そう!
1.はじめに
バグの無いソフトを作るには、日頃から自己鍛錬に励み、バグを作りこまない習慣と、バグを嗅ぎだす嗅覚を身に付けることが必要です。バグ検出能力向上問題集である今回の「バグ検出ドリル」シリーズでは、筆者がバグを埋め込んだ問題を出し、読者の方に見つけていただきます。
今回は、数学に関係する問題を2問出題します。問題文を読んで、どこにバグがあるか探してください。本コラムをきっかけにして、日頃の開発作業、特に、バグ検出の能力向上につながれば幸いです。
2.ソフトエンジニアと数学
筆者は、大学のオープンキャンパスで、高校生やその父兄と話す機会があります。その時に必ず聞かれる常連質問が数学に関することで、「うちの子は数学が苦手なのですが、プログラマーになれますか」です※1)。
結論から言うと、数学が出来なくても情報技術者になれます。理由は、「プログラミングは、『数式を駆使して航空機を設計する』ことよりも『長編小説を書く』ことに似ているため」です(これは、筆者の個人的な考えです。詳しくは、「山浦恒央の“くみこみな話”(MONOist10周年特別寄稿)」をご覧ください)。
数学が得意な情報系エンジニアはほとんどおらず、企業側もそんなエンジニアを確保できていないようです。ここ数年のバズワードである、「機械学習」の理論を知るには、行列式の演算や微分積分の数学的な知識が必要となり、「学生時代、もうちょっと数学を勉強していれば……」と溜息をついている技術者をよく見かけます。
※1)30年以上前、筆者はカリフォルニア大学に客員研究員としてバークレー校に2年間滞在していました。当時の指導教授の口癖が、「最も頭のいい理系の学生は、まず数学を志望し、次が物理学で、最後がソフトウェア科学だ。でも、金もうけができるのはその反対の順番だよ」でした。筆者も数学が大の苦手です。代数学、幾何学、解析学の知識が不要で、四則演算と簡単な集合論さえ理解していれば何とかなる情報処理を志しました。今の組み込みの制御系プログラミングでは、いろいろな機械をコントロールするためにさまざまな物理学の法則と格闘せねばならず、数学の知識は不可欠の分野が少なくありませんが、当時は「数学が嫌いな理系と、謎解きが好きな文系が情報処理技術者になる」傾向にありました。情報工学は、「理系」ですが、今の情報系専攻の学生で、「数学が好きだから情報技術者になりたい」と考える学生は10ダースの中に1人しかいません。大半は、40年前と同様、数学が嫌いだから情報工学に進むようです。中には、ゲームやアニメは大好きだけど、数学は全くダメ、数学や物理の定理や公式を覚えるより、ビデオゲームの話やアニメの声優の名前を覚えることに情熱を注ぐ学生も少なくありません。
今回は数学に関する問題を2問出題します。「私は、専門的な数学の知識が不要なプログラムを開発しているから、今回の問題はパス」と考えてはなりません。組み込み系のプログラミングが非常に多い昨今、次の仕事として、「地下鉄の速度制御」や「旅客機の空気抵抗のシミュレーター」の開発プロジェクトへ放り込まれる可能性があります。
システム開発担当部長から「今日から君には『自動車のエンジン制御プログラム』の保守を担当してもらう。まずは、このプログラムのバグを見つけてくれ」と言われたと思ってください。業務命令なので「三角関数が苦手で、sinθを見ると頭痛がして、arctanθと出会うと即死します」とか「宗教上の理由で行列式の演算はできません」と拒否できません。
各問題には、計算方法の概要を示しましたので、外見は数式だらけで難しそうですが、1ステップずつ見ると、さほどではありません。歯を食いしばって数式や頭痛と格闘してください。
Copyright © ITmedia, Inc. All Rights Reserved.