A Philosophy of Software Design

Category: Computer Science
Author: John Ousterhout
This Month Reddit 3


by bch   2020-02-02
You’re right re: it’s early internals, and we probably both know people who still (mistakenly) complain about that. Conceptually the “everything is a string”(EIAS) model still holds though, even though it’s supported by dual-ported “objects” w native representation, and the running is often byte-compiled instead of string parsing. We’ve got early smart fans who saw the vision and possibilities like Karl Lehenbauer, Don Libes, Richard Hipp, and the current core team like Kevin Kenny, Don Porter, Donal Fellows, etc who deeply understand What Tcl Is, and strictly maintain it, even while pushing it ahead (TclObj, finally an in-core blessed object system, native database framework, Miguel Sopher’s(RIP) work on the stackless non-recursive engine (NRE) and coroutines that fell out of that work...

Back to Ousterhout though, you might dig his “Philosophy of Software Design”[0] book, or talks associated with it[1].

Lots to like in this space...

[0] https://www.amazon.com/Philosophy-Software-Design-John-Ouste...

[1] https://youtu.be/bmSAYlu0NcY

by sonorangoose   2019-11-17

These books are the usual suspects that show up :) I'm not a fan of TDD but if you are, Growing Object Oriented Software Guided by Tests is pretty good.

I wanted to add A Philosophy of Software Design to this list. Its pretty modern and concise, I'd read it before Code Complete.

Another good newcomer is Java by Comparison

by PM_me_goat_gifs   2019-11-17

This is a really solid list. Specific resources to look at:

  • A good free intro to python if you’re just starting out programming: https://greenteapress.com/wp/think-python-2e/

  • A good free intro to SQL. Do this before doing sqlalthemy or cx_oracle. Skip xml but not linear algebra: https://lagunita.stanford.edu/courses/DB/SQL/SelfPaced/about

  • A good free intro to backend web programming and to unit testing in python: https://www.obeythetestinggoat.com/

  • A really good guide to thinking about code structure design, not specific to python: https://www.amazon.co.uk/Philosophy-Software-Design-John-Ousterhout/dp/1732102201

For learning about kubernetes, the book Kubernetes Up and Running is well written and concise. Kelsey Hightower is excellent.

by PM_me_goat_gifs   2019-11-17

I wouldn’t worry about AWS to start out with. It is a bonus. I would focus on finding a well-written tutorial for one backend app framework and work through that to start out. Be sure the tutorial includes help with setting up automated testing. Working through the django tutorial is a good idea.

Next, get good at working with the data store. This SQL course is great. Skip the xml bit but not relational algebra. https://lagunita.stanford.edu/courses/DB/SQL/SelfPaced/about

A lot of what a skilled backend developer does is model business logic well in a way that is extensible. There is a great book about this here: https://www.amazon.co.uk/Philosophy-Software-Design-John-Ousterhout/dp/1732102201

by xxxpupugo   2019-06-27
Highly recommended this book:

A Philosophy of Software Engineering:


This is mentioned as one of the symptoms/appearance of bad code: Shallow/Passthrough methods, which results deep call chains, adding up cognitive overload. The author in this book recommends deep module over shallow module, which tends to end up with more cohesive code.

by achou   2019-06-24
I think the best single observation about cognitive load is in Ousterhout's book A Philosophy of Software Design[1]. In the book he promotes the idea that classes should be "deep", such that their top-level surface API is small relative to the complexity they hide underneath.

This applies to the microservice/monolith debate as well. And it basically boils down to the observation that having lots of shallow services doesn't really reduce complexity. Each service may be simple unto itself, but the proliferation of many such services creates complexity at the next level of abstraction. Having well designed services with a simple API, but hide large amounts of complexity beneath, really reduces cognitive load for the system as a whole. And by "simple API" I think it's important to realize that this includes capturing as much of the complexity of error handling and exceptional cases as much as possible, so the user of the services has less to worry about when calling it.

[1]: https://www.amazon.com/Philosophy-Software-Design-John-Ouste...

by TeMPOraL   2019-04-16
From the link, about comments:

  Use as explanation of intent.
  Use as clarification of code.
  Use as warning of consequences.
Here's a link to a well-known recent book, half of which is pretty much about why those points are a real and frequent thing, and why code should be much more thoroughly commented than it's recommended by the usual philosophies.


by auslegung   2018-12-05
1. The Problem of Pain by CS Lewis 2. A Philosophy of Software Design https://www.amazon.com/dp/1732102201/ref=cm_sw_r_cp_api_i_EK... 3. Haskell from First Principles http://haskellbook.com 4. Les Miserables 5. Continuous Delivery https://continuousdelivery.com
by sitkack   2018-11-10
For the Tcl internals, was this John Ousterhout's code or some other codebase? Have you read his new (ish) book on Software Design? [1]

[1] https://www.amazon.com/Philosophy-Software-Design-John-Ouste...

by fdsvnsmvas   2018-09-13
Thanks everyone, the comments are much appreciated. Here's a list of books and other media resources recommended so far in the thread:

Robert C. Martin, Clean code: https://www.amazon.com/Clean-Code-Handbook-Software-Craftsma...

Vaughn Vernon, various: https://www.amazon.com/Code-Complete-Practical-Handbook-Cons... 2

Clean coder: https://www.amazon.com/Pragmatic-Programmer-Journeyman-Maste...

Hitchhiker's Guide to Python: https://www.amazon.com/Art-Readable-Code-Practical-Technique...

John Ousterhout, A Philosophy of Software Design: https://www.amazon.com/Philosophy-Software-Design-John-Ouste... This one looks particularly interesting, thanks AlexCoventry!

Kent Beck, Test Driven Development: https://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/...

Dan Bader, Python Tricks: The Book: https://www.amazon.com/Software-Engineering-10th-Ian-Sommerv...

Svilen Dobrev, various: http://www.svilendobrev.com/rabota/

by lboasso   2018-09-02
Another excellent resource is "A Philosophy of Software Design" [0], from John Ousterhout (known for Tcl/Tk, Raft, RAMCloud, Log-Structured File System). Like Niklaus Wirth, he is striving for designs that fight complexities and yield simple and powerful abstractions. This book is so much better than overrated books like "Code Complete" and "Clean Code" for a fraction of the page count.

[0] https://www.amazon.com/Philosophy-Software-Design-John-Ouste...

by chubot   2018-08-20
Link: https://www.amazon.com/Philosophy-Software-Design-John-Ouste...

Looks like it was just released!