漏れのある抽象化の法則
抽象化によって利用者は細かいことを知らずにそれを扱うことができるが、 その抽象化が不完全で漏れがあった場合、利用者はその特別の事例に対応するコードを書かないといけない
今までは仕組みを知らずに使えていたのに、そこで仕組みを理解するコストが発生してしまう
抽象化は、作業する時間を省略してくれるが、学ぶ時間を省略するわけではない
なので、仕組みもちゃんと学ぼう
GPT-4.icon
漏れのある抽象化の法則(Law of Leaky Abstractions)は、ソフトウェア工学における概念で、どんなに洗練された抽象化でも、下層の複雑さが時折表面に現れることを示しています。この法則は、ジョエル・スポルスキーによって提唱されました。
抽象化は、複雑なシステムやプロセスを単純化し、扱いやすくするために使用されます。例えば、プログラミング言語は、機械語の複雑さを隠すための抽象化の一形態です。しかし、この法則によると、どんな抽象化も完璧ではなく、基本となるシステムの複雑さや制限が時には抽象化を通して露見するということです。
例えば、高レベルのプログラミング言語を使っていても、パフォーマンスの問題や下位システムのエラーなどが発生することがあります。これらの問題は、抽象化が基本となるシステムのすべての側面を完全に隠蔽することはできないために起こります。
この法則は、技術者がシステムを設計する際に、抽象化の限界を理解し、それらを考慮に入れることの重要性を強調しています。
とはいえ、内部を知らないといけない「抽象化」は何かが間違っていると思うmrsekut.icon
抽象化の方向性がおかしかったり、
単にインターフェースの表現がおかしかったり
例えば、その抽象化の口が2つしかないなら、その2つが許容する値のどんな組み合わせにも正常に動作すべき
内部を知らなければいけないのであれば、その部分をインタフェースとして表現すべき
どっちのこと?
⭕エンジニアたるもの、抽象化に甘えずにちゃんと勉強して仕組みを知ろうな
こっち
❌漏れのある抽象化はクソだ、そんな抽象化はやらない方がいい
参考