多くのプログラミング未経験者がプログラミングを学習を始める際に懸念することとして、数学が得意でないとプログラミングを習得できないのでは?というものがある。
本記事ではプログラミングを学び始めるのに高度な数学は必要ではないことを示したい。
本記事は、
最初に必要な数学の水準を定めるために
step1. 人物像を定める
step2. その人が習得する必要のあるプログラミングの領域とレベルを設定する
step3. 定められた領域とレベルにおいて数学がどの程度必要か
という手順をとるが、まずその必要性を示す。
次にstep1~step3の手順に従って必要な数学の水準を明らかにする。
という流れですすめたい。
準備(議論の流れ)
まずは、
step1. 人物像を定める
step2. その人が習得する必要のあるプログラミングの領域とレベルを設定する
step3. 定められた領域とレベルにおいて数学がどの程度必要か
という手順をとる必要性を示したい。
まずは、数学の必要程度を決めるにはプログラミングで取り組む①領域と②レベルを決めるべき根拠を示す。(step2 → step3)
昨今、匿名掲示板やSNSで度々プログラミングに数学が必要か話題になる。数学なんて必要ないという人もいれば、数学は必要という人もいて、プログラミング未経験者にはどの意見が正しいのか判別がつかないだろう。
なぜ、数学の必要性に関して両極端の意見があるのかと言えば、両者の前提が異なるからだ。というのもプログラミングをする上でどの程度の数学の知識水準が求められるかは、①領域、②レベルによる。
①領域とは
①ITには様々な領域が存在し、実務における数学の必要性には濃淡がある。
例を挙げると、アルゴリズム、データサイエンスは必要性が高いが、データベース、ネットワークは必要性が相対的に低い。
従って、プログラミングにおいて取り組む領域を確定させなければ、プログラミングにける数学の必要性を決めることはできない。
②レベルとは
②そして、①の各領域にはレベルが存在する。各領域は突き詰めると数学的な考えに基礎づけられているが、入門レベルのプログラミングでは実装済みのライブラリを使うだけでことが済む。従って、数学を理解しなくとも問題がない。
しかし、既存のライブラリを使用するだけでは対処できない高度な問題に取り組む場合は一から自力で実装する必要がある。その際には高度な数学を理解していないと、実装はできない。
例えば、ソート処理は頻繁に使用するが、ソートアルゴリズムのような汎用的なアルゴリズムを自力で実装するケースは少なく、既存のライブラリを使用することで済ますことが多い。
高度な数学の理解が求められる例として、ページランクアルゴリズムが挙げられる。Googleは創業者はページランクというウェブページの重要度を決定するアルゴリズムを用いて、高度な検索エンジンを構築することに成功した。
今日ではページランクのライブラリを使えば、自作のWebサービスに検索の仕組みを簡単に実装できるだろう。しかし、Google創業時には当然、ライブラリはまだ存在せず、自力で実装しなければならなかった。その場合には高度な数学的知識が必要になる。
従って、プログラミングにおいて取り組むレベルを確定しなければ、プログラミングにける数学の必要性を決めることはできない。
①領域と②レベルの組み合わせ
付け加えると、領域によってどのレベルで高度な数学を求められるかには大きく差がある。データサイエンスのように入門の段階からかなりの数学的知識を求められる領域もあれば、アプリケーション開発のように上級者になるまであまり数学を必要としない領域もある。
従って、プログラミングにおいて取り組む①領域と②レベルの両方に一定の仮定を置くことで、数学の必要性を決めることができる。
人物像の設定
先程はプログラミングにおける数学の必要性を決めるには、取り組む①領域②レベルの仮定が必要であることを示した(step2 → step3)。取り組む①領域②レベルに仮定を置くには、プログラミングに取り組もうとしている人の人物像を決める必要がある(step1 → step2)ということを示す。
取り組みたい①領域②レベルが確定している方にとっては、step1 → step2の流れは不要だ。すぐにプログラミングに取り掛かるといい。
しかし、多くのプログラミング未経験者は自分が行おうとしているプログラミングで、どれほどの①領域②レベルが求められるかわからない。そこで①領域②レベルを確定する際に人物像の設定が必要になる。
人物像というのは、
- なんとなくプログラミングに興味をもち、試しに始めてみようかと考えている人
- 平凡な新人プログラマー
- ゆくゆくはIT企業で専門職や管理職に就きたいと考えている人
- 将来的にITの世界で国内、もしくは世界で有名になりたいと考えている人
というものだ。本記事はプログラミング未経験者向けなので、1と2を人物像に想定することとする。
本論
なんとなくプログラミングに興味をもち、試しに始めてみようかと考えている人
趣味で楽しむ程度にプログラミングをする場合に、数学が必要かどうかはさほど問題にならない。前述の通り、プログラミングには数学を必要としない領域がたくさんある。
自分には理解できないような、高度な数学が必要な①領域や②レベルを避けることができる。そして、それらの分野を避けたとしてもプログラミングではまだまだたくさんのことが可能だ。
例えば、数学が特に必要となる領域であるアルゴリズムやデータサイエンスの分野を避けて、アプリ開発にまずは取り組んでみるとか、あるいはアルゴリズムやデータサイエンスのように数学との関係が強いような領域でも既存のライブラリを使えば数学を使わなくとも様々なことが可能だ。
最低限の数学的知識として四則演算や乗数程度は理解できる必要がある。もちろん難しい応用問題を解ける必要はなく、教科書レベルの基本問題に回答できる程度で問題ない。
数学よりも好奇心や行動力、粘り強さが必要
思うに、趣味でプログラミングを始める場合に大切なのは数学の知識よりも好奇心や、行動力ではないか。始める前から自分にプログラミングが向いているかなどと思い悩んでいるよりも、なんとなく面白そうだからやってみた程度の軽いノリで始めることができる人の方が余程、プログラマーとしての適性がある。
そのほかには、粘り強く取り組めることも重要だ。初めてのプログラミングはうまくいかないこともたくさんあるだろうが、ネットや書籍で調べた情報をもとに辛抱強く試行錯誤することが求められる。
結果として、当初予定していたプログラムが完成しないこともあるだろうが、その過程で得られた知見は、決して無駄にはならない。プログラミングには数学的知識も必要だが取り組む姿勢も同じかそれ以上に重要だ。
平凡な新人プログラマー
次に、平凡な新人プログラマーが、IT企業で開発を十分に行えるために、どれほどの知識水準が必要か考えてゆく。平凡な新人プログラマーの解像度をあげるために、①どのような会社に入社することを想定するのか、②開発を十分に行えるとはどれくらいを想定するか、についてより細かく定義しておこう。
①どのような会社に入社することを想定するのか
まず極端な例を除くことから始めよう。入社直後から極端に高い実力を求められる会社、または、低い実力しか求められない会社は除外する。
前者の例は、GAFAのような超有名企業、メガベンチャー等が相当する。後者の例は、零細ブラックSES企業が相当する。
ほとんど頭数をそろえ、派遣するだけの会社もある。極端な例だが、ひたすら試験のエビデンスとして画面のキャプチャをスクショしてExcelに張り付けるだけの仕事をさせられるような派遣先しかないような会社。
つまり、いきなり無茶ぶりはされず、かといって、ITスキルを必要としない頭数要因としか社員を扱わないわけではない会社を想定しよう。
②開発を十分に行えるとはどれくらいを想定するか
続いて、②開発を十分に行えるとはどれくらいを想定するか考えよう。ここでは入社して最初の数カ月、下手したら半年は足を引っ張ることもあるかもしれないが、二~三年もたてば基本的な開発は自力で行える程度を想定する。
ここでいう基本的な開発のレベルとは、既存のWebサービスの機能改修、そこまで大規模ではない新機能の追加を要件定義から設計、実装、テストまで行うことはできるが、ゼロからWebサービスを立ち上げるまではできないレベルを想定する。
「IT業界未経験者でIT企業に開発職で就職しようと考えている人」の「IT企業」を①に「開発を十分に行える」を②であると想定することで、平凡な新人プログラマーという人物像がより明確になる。
平凡な新人プログラマーに求められる知識水準
では、平凡な新人プログラマーに必要が取り組む①領域②レベルをどこに設定すべき考えよう。これは基本情報技術者試験の内容を基準とするのが妥当だ。
基本情報技術者試験とは経済産業省(以下、経産省)所管の独立行政法人である情報処理推進機構(以下、IPA)が実施する国家試験である。

https://www.ipa.go.jp/shiken/syllabus/t6hhco0000004yy7-att/youkou_ver5_2.pdf 1pより抜粋
経産省が認定する国家資格には、上記の図の通り、ITパスポート試験、情報セキュリティマネジメント試験、基本情報技術者試験、応用情報技術者試験、各種高度専門資格が存在する。
これらのうち、ITパスポート試験と情報セキュリティマネジメント試験はITを利活用する者向けの資格にであって、プログラマーのような開発者向けに特化した資格ではない。その二つを除外した上で最も簡単な試験が基本情報技術者試験である。
つまり、基本情報技術者試験は①国家資格で、試験の質が担保されていて、②開発者向けの資格の中で最も簡易な資格であることから、その内容は平凡な新人プログラマーが取り組むべき①領域②レベルの設定にふさわしい。
基本情報技術者試験が求める①領域②レベル
基本情報技術者試験が求める①領域に着目しよう。ITストラテジストから情報処理安全確保支援士試験まで幅広いが、データサイエンスが含まれていないことに注目してほしい。
②レベルについては基本的なレベルだ。

https://www.ipa.go.jp/shiken/syllabus/t6hhco0000004yy7-att/youkou_ver5_2.pdf p3より抜粋
基本情報技術者試験の試験要綱の期待する技術水準を見ると、上位者の指導の下に、開発を行うことを想定している。
まとめると、平凡な新人プログラマーが求められる①領域、②レベルは、①データサイエンスを除いた幅広い領域であるが、②上位者の指導の元に開発を行える程度で十分であるということになる。
ここから、データサイエンスが流行っているとはいえ、プログラマーには必ずしもデータサイエンス(数学との関係が強い)の知識が求められるわけではないことが伺える。また、上位者の指導で開発を行う前提なので、いきなり高度な数学的知識を求められる可能性も少ないことがわかる。
基本情報技術者試験に登場する数学のレベル
それでは、基本情報技術者試験ではどの程度の数学の知識が求められるか見てゆこう。
基本情報技術者試験に登場する問題は中学から高校数学1,2年レベルだ。内容は四則演算、乗数、組み合わせ、順列、対数、集合、簡単な確率、統計などだ。それらの問題も大学入試のように凝った問題に正答できるほどの問題は出ない。一部、二進数など学校のカリキュラムから外れた問題も出題されるが、前述の出題範囲を理解できている人にとっては苦戦しない難易度だ。
実際の開発の実務においても、通常の開発において前述の内容を超える数学的知識を求められることは少ない。
上記はあくまでも開発の実務が中心だ。
中学から高校数学1,2年の基礎問題レベルの学力があればよいとしたが、その学力に達しているからといって、無勉強で基本情報技術者試験に合格できるという意味ではない。
基本情報技術者試験の数学は、少し癖があるので事前に勉強して慣れておく必要はある。また、基本情報技術者試験の午後には基本的なアルゴリズムの問題が出題されるが、ここだけは初学者には少し難しい。
まとめと、さらに気になる点
以上、プログラミングにおける数学の必要性について考察してきた。読者の中には、次のようなことが気になるかもしれない。
- 初期のキャリアにおいて必要なかったとしても、後々のキャリアでは高度な数学が必要になるのではないか。もしそうなら将来、キャリア的な困難を迎えたくはないので初めからIT企業に就職しないでおきたい。
- 直接的に数学を必要としなかったとしても、数学的思考能力のようなものが存在するのではないか。やや乱暴な表現かもしれないが、数学を習得できないような知的能力の人間、もしくは数学的センスにかけた人間はプログラミングに不向きなのではないのか。
これらの論点は、プログラミングを趣味にとどめている人はともかく、IT企業に就職しプログラマーとしてのキャリアを歩もうとしている人には死活問題であろう。別の記事で詳しく説明したいと考えているが、差し当たって私の見解を述べておく。
前者については高度な数学を必要としないキャリアパスは十分に存在している。後者については厄介だが数学的思考力やセンスはそこまで強くプログラミング能力に関係するわけではないことを、調査した論文をもとに示したい。

