== Abstractions are logarithms === But often lead to larger codebases. Go figure.
Say you have some piece of software that reads PNG files from disk and displays them on the screen with X11. It was a pain to get it working properly, but it’s finished. But now you want to support Win32 and Cocoa and JPEGs and GIFs! Pretty soon you have 9 pieces of code for displaying images:
Of course, you could have also abstracted away the file and operating system specifics. We could write our software in such a way that it always converts images to a common simple file format, like RGB8. Then the appropriate operating system specific code reads from that common buffer in its own specific way.
With this, there are only 6 piece of code:
Abstractions turn multiplications (3 * 3 = 9
) into additions (3 + 3 = 6
). Abstractions are logarithms.