一般化と抽象化

一般化と抽象化は、普段ごちゃまぜに使われがちだけど、このふたつの単語はちゃんと使いわけたほうがいいと思っている。

英語でも、GeneralizationとAbstractionといったようにちゃんと違う単語になってるわけだし。

この二つには、似ているけれども同化することができない大きな境界線がある気がする。

例えば、

「3 * x + 5」や「7 * x + 2」を、「a * x + b」と表現するのは一般化だけど、これを抽象化とは呼べない気がする。

または、「人間」や「犬」を、「哺乳類」と表現するのは抽象化だけど、一般化とは呼べない気がする。

んじゃ、一般化と抽象化を使いわけると、どんないいことがあるのか?

...がわからない。

なんかある気がするのだが。

朧ろげなイメージとしては、「とにかく一般化していく。」というのはすぐに限界に達するけど、「とにかく抽象化していく。」というのは結構際限なくできそう、とか。

うーん、アバウト。また思いついたら、追記します。

追記:
もう一つ思いついた。プログラミングにおいて「一般化」を推し進めるとコードが理解しにくく、「抽象化」を推し進めるとコードを理解しやすくなる気がする。