Abstraction is the act of representing essential features without including background details or explanations. It's a way for us engineers to hide complexity in our systems, similar to how Facebook hides all the gnarly details behind a slick user interface.
I was going to dive into the implementation details with the new hire, but then I remembered that abstraction is key - no need to overwhelm them with all the legacy cruft we've accumulated over the years, amirite?
When the PM asked me to explain how the backend works, I just waved my hands and said "abstraction" - ain't nobody got time for that!
Martin Fowler dives into the "Branch by Abstraction" technique, which allows for incremental refactoring of legacy code without halting feature development: https://martinfowler.com/bliki/BranchByAbstraction.html
Paul Graham provides a list of resources on Lisp, a language known for its powerful abstraction capabilities that most modern languages are still trying to catch up to: https://www.paulgraham.com/resources.html
Fowler also examines Dependency Inversion, a principle that leverages abstraction to decouple high-level modules from low-level details: https://martinfowler.com/articles/dipInTheWild.html
Note: the Developer Dictionary is in Beta. Please direct feedback to skye@statsig.com.