A Philosophy of Software Design | John Ousterhout | Talks at Google
Talks at GoogleYouTube ↗
Further reading 2
What does a module promise its callers? →Try replacing a module whose callers rely on its incidental return order. Start with what the interface says, then trace the decisions it hides and the behaviors people have learned to expect.This video helps answer · How much can a small interface hide?Does splitting code actually split its dependencies? →Start with a rule that sends an email. Separate deciding from doing, then inspect layers, objects and abstractions: which parts must still change together when the rule changes?This video helps answer · Is removing duplication worth another abstraction?
Caption notes
A deep module hides substantial complexity behind a small interface. Ousterhout argues for investing in simpler semantics rather than merely finishing the next feature.
Original passages · 6
everything someone has to have in their mind in order to use that class.redefine the semantics, so that unset makes a variable not exist.It's hundreds or thousands of mistakes made by many people over a period of time.You have to use a somewhat iterative approach.very simple interface with a very large amount of functionality underneath itthe number of places where people have to deal with exceptions