·
どっちかというと統計とか確率、組み合わせや場合の数、集合論とかフェルミ推計的な数の感覚についてが重要
できますがちょっと辛いかもしれません
プログラミングは数学に近い職種ですが使用する数学の知識はごくごく一部です。下の図の中でおそらく必要になるのは初歩の統計、ベクトル、微積、幾何学くらいです。
が、数学の知識を使うかどうかと高校の数学レベルが苦手な人がプログラミングに向いているかどうかは別です。
現在主流のオブジェクト指向プログラミングで使われている「クラス」という概念は集合論をヒントにした用語と言われています。実用上も、プログラミングの対象となる問題を解くための公理を定義することが重要になります。
例えば写真編集のプログラミングに欠かせない機能としてアフィン変換があります。アフィン変換はある点を別の点に変換することで四角形を歪めたり回転することができます。難しそうですが結局は拡大縮小・回転くらいができればいいことになります。
ある点を別の点に移動するには次のようなプログラミングをします
- x += 3
- y += 2
何を隠そう私も最初はこのコードを書きました。これは1ピクセルを移動するためのプログラムですが全てのピクセル分この操作をすればいいわけです。ちょっとプログラムを知っていればfor文を使って効率化するかもしれません。もちろん拡大と回転は違う操作なので別のプログラムを書きました。
しかし実際には行列を使って実装されます。行列という数学で使われているクラスがそのままプログラミングでも利用できるというわけです。
上の例は写真の編集でしたが、実際の問題は
・請求書と領収書を同じリストで扱う
・ネットワークの負荷に応じてリクエストの上限を決める
・PayPayとLINE Payを統合する
というような応用的な内容になります。こうした問題に対して既存の数学をそのまま使うことはほぼありません。代わりにプログラマ自身が自分で新しい数学(のようなもの)=クラスを作る必要があります。
つまりプログラムのクラスと数学の公理はとても似ていてもし高校数学がわからないとするとプログラムを理解できない可能性が高いです。
だからといってプログラミングを諦める必要はなく、プログラミングをしていく中でクラスや公理系の概念を理解できるようになることもあります。なのでやってみることが大切です。
プログラミングをしてうんうん唸りながらクラスを設計していると数学の素晴らしさ、ベクトルや複素数の強力さに気づくことができます。
0 コメント:
コメントを投稿