プログラミングに数学の素養が必須と思った話
最近、久しぶりにプログラムを書いております。主に会社のイベントで使うためのウェブアプリをゴリゴリ書いているだけなのですが、そもそも何か人に使ってもらうためのサービスを作るのが久しぶりなので日夜隙間時間を見つけて、ゴリゴリと書いております。
そんな中で「プログラミングと数学の素養」について考える機会がありました。
最短距離で欲しい情報を手にする能力
プログラムを書くときに「正しく動くこと」以外に僕が意識していることは2つです。
- ユーザにストレスない速度で動くこと
- 想定されるデータ量の時に負荷に耐えられること
そして、これって高校の時にひたすら解いていた数学の問題に似ているなと思ったのです。
例えば、数学1Aの時に以下のような問題があったかと思います。
超難問
2個のサイコロを振ったときに2回とも6が出ない確率を求めよ!
ここで、全パターン書き出して答えを導き出すこともできますが、これは「時間もかかりますし」「サイコロの数が増えた時に負荷も高くなります」。
なので、全パターンから2回とも6が出ないパターンを引き算する解法を習ったかと思います。ある種の数学IQを試すような問題でもあるのです。
楽する(≒Hackする)のが大事
楽な解法を知っていれば、それを応用できますし、その先の話で「何故そのロジックが必要なのか」考えることができます。
例えば先ほどのサイコロの問題を例にとると、
- 次は3回6が出ない計算をする可能性があるのか
- それとも5が2回連続で出ない確率を計算する可能性があるのか
- 6が2回連続で出ない確率を計算する可能性があるのか
今後どのようにプログラムを拡張していく可能性があるのか将来予測ができることが大事なのです。
ただ、全パターン書き出して対象の条件のデータを探す方法しか知らないと、先読みができてもそれをプログラムに反映できませんし、何故そのロジックが必要なのか考える以前に考えるロジックがない状態になってしまいます。
プログラミングを仕事にした人へ
楽をすること、将来予測を予測すること、が大切だと思います。
将来プログラマになりたい人は、中学生や高校生のうちから「楽に問題を解くこと」と「次の問題に活かすことを前提とした解法」に拘って数学に取り組んで欲しいなと思います。
僕は数学をしっかりとやっていなかったので(いわゆる全パターン書き出してしまうような残念な数学センスだった)、社会人になってから数1Aから学び直して苦労しました…。
最後まで読んでいただきありがとうございます。もしこの記事を気に入って頂けたようであればシェアをお願い致します。非常に励みになります。