Skip to content
0:00 / 0:00

#johnousterhout#aphilosophyofsoftwaredesign#softwaredesign

Can Great Programmers Be Taught? - John Ousterhout - Agile LnL

Agile LnL (Agile Lunch & Learn)

2.1K subscribers • 1 video on Hallway

YouTube
  • Recommended by 2 people: 2 in engineering communities.
  • A classic. People kept recommending it from 2023 to 2026.
  • Presented by John Ousterhout, Professor of Computer Science at Stanford University
  • An opinion. It argues one side of a question engineers disagree on.

Intermediate. Assumes working knowledge.

104K views4 years ago2 recommendations

Software designTools and practiceDesign patternsSoftware architectureSimplicity and complexity

John Ousterhout discusses software design principles from his book, explaining how to design deep modules and define errors out of existence.

People have been programming computers for more than 80 years, but there is little agreement on how to design software or even what a good design looks like. As a community, we talk a lot about tools and processes, but hardly at all about design. In this talk I will describe my recent work to identify and communicate a set of software design principles, including a new software design course at Stanford that is taught more like an English writing seminar than a traditional programming class, and a book on software design, which is based on the concepts from the class. I will also present a few of the design principles, such as "classes should be deep" and "define errors out of existence."

Why it's here

2 people recommend this

What people say. Recommended as a great summary of John Ousterhout's software design philosophy and his book on the subject.

Moments people linked to

u/loup-vaillantin r/programming • Recommends

On “Performance Excuses Debunked”

If you judge him or anyone for that matter by that one achievement you're being… Well, just know that he did other stuff, not just that one thing you don't like. (For the record I hate stringly typed languages, and won't touch Tcl with a 10 foot pole either.) Anyway to save you time and money here's the gist of his thinking on youtube.

u/Think-nothing-210in r/programming • Recommends

On “Microservices are organizational debt disguised as architecture.”

A module is about hiding a complex decision behind a small API. It is a larger-scale abstraction than a function or class. Think of it more like a library where you put a difficult design decision behind a stable interface. (**Highly recommend you read A Philosophy of Software Design by John Ousterhout for more info**; This video is a good summary of it) The consumer should not need to understand all the complexity inside the module. They should get a simple and generalised API with sensible defaults. This keeps the public surface area small and means you have fewer things to maintain or change. In that sense a module is almost like a microservice. The difference is that you still have a…
1View on Reddit