snuffkinの遊び場

IT関係、スポーツ、数学等に関することを、気が向いたときに書いてます。

数学的ソフトウェア観

学生時代、数学を専攻したことは自分自身のソフトウェア観に大きく影響しています。
大学で学ぶ数学は、高校までの数学とは大きく異なります。高校までの数学はどちらかと言うと「計算方法」について学ぶ印象が強いです。一方、大学で学ぶ現代数学は「理論」を扱います。
どう違うかちょっと極端に言うと、高校までの数学は「A+Bはいくつ?」「f(x)を微分するといくつ?」というような、問題同士がつながっていないような、散発的な事柄を扱うことが多いです。それに対して、大学での数学は「整数全体の集合が持つ性質」のような適用範囲がある程度広いものを扱います。理論の抽象度が上がるため難易度は高まりますが、適用範囲の広さは非常に強力です。
大学で数学を学び、その強力さや楽しさを目の当たりにしたことで、「散発的な問題より、適用範囲の広い理論の方が面白い」と考えるようになってきました。
また、理論の中にも善し悪しがあるのですが、その基準には「美しさ」「シンプルさ」など、審美眼を使って判断する要素が含まれています。例えば x^n+y^n=z^n なんてのは、美しさやシンプルさを持っている式です。

そんな価値観を持ってソフトウェア業界に入ってみると、この業界には「フレームワーク」という考え方があることを知りました。まさに「抽象度は上がるが、適用範囲が広くて強力」な考え方です。「○○と××って△△な所が似ているよね」と感じると、△△に注目して抽象化し、同じような性質をもつものをまとめ上げたくなります(「汎化」ですね)。数学的な考え方に慣れていると、「物事を汎化してフレームワークを作る」というのは自然な発想だと感じます。
ただ、実際のところフレームワークだけではシステムは出来上がらないため、「フレームワーク上に何を構築するのか」「どれだけ構築しやすくできるのか」など、現実に即した落とし所を考える必要があります。

こういう考えをベースとしたソフトウェア観が形成されたため、「美しくシンプルなものが良い」「適用範囲が広く、現実的に適用できるフレームワークが良い」などの価値観を持つようになりました。細かな部分は変わっても、こういう価値観は一生持ち続けるんだろうな、と思います。