プログラミングと抽象化

最強の抽象化はなにか。


なんて、酷く抽象的な問いだけれど、答えは数だと思う。


人はいろんなものを数える。数にする。


数にすると何が嬉しいか、というと、数学を適用することが出来る。
モノだろうが量だろうが、人間だろうが概念だろうが、数にしてしまえば平等だ。
足したり引いたり掛け合わせたり、同じように活用することが出来る。


また、逆に数にすることでそのモノの本質が見えてきたりもする。
点の情報を波にしたり、もう一歩進んで円にしたりできる。



2進数にしてしまえば、ONとOFFでどこまでも飛ばしたりも出来る。
いまあなたの前にこの文章があるように。



そういったことを考えていると、抽象化のチカラというものが
見えてくるような気もする。



プログラミングをするとき、僕らは抽象化を行う。
OOPの汎化とかのことではない)
実現したいことを、「結局はどういうことなのか」を考える。


そうすると何が嬉しいか、というと、デザインパターンを適用したりすることができる。


ただ一つのモノがあってほしくて、みんなでそれを使いたいんだ、
と言うときにはSingletonを組めばいいことがある。


要は状態ごとに違う振る舞いをして欲しいんだ、というときには
Stateパターンを組み入れればいい。


一つの処理の流れを共通化したいときはTemplateMethodパターンを使えばいい。



抽象化すると、考えを再利用することができる。

ニュートンが巨人の肩に乗ったように、僕らもGO4とかの肩に乗ることが出来る。


すごく乱暴なことを言ってるんだろうなぁと思うけど、そんなことを考えた。