Hacker News new | comments | show | ask | jobs | submit login
Ask HN: Resources for learning software design?
20 points by majewsky on July 23, 2017 | hide | past | web | favorite | 4 comments
Last week, a colleague came to me to ask for advice. He's a senior systems administrator who's now in a developer role. He's competent in writing and editing code in general, but feels like he's lacking experience in software design.

He's eager to learn about the subject, but I couldn't quite help him. I consider myself reasonably competent in designing software, but that's the result of 15 years trial-and-error-based learning, so I cannot point him to any resource. Can you recommend a book, webpage or other material (or maybe just some advice) that might help him build this skill?

Tough question. I'm not aware of any books that are substitutes for reading and writing large projects, some books I've found useful: TCP/IP Illustrated: The Implementation (goes through the implementation of the 4.4BSD-Lite network stack), Lion's Commentary on UNIX (or xv6 book), Network Algorithmics (amazing book), Linux Kernel Development by Love, Large Scale C++ Software Design, Design Patterns. A lot of people like the Architecture of Open Source Applications books. I also think learning more computer architecture as the beginning of computer systems engineering is good for everyone, but that's just me.

Lampson's classic on hints for computer system design:


Here is a previous HN post on the subject: https://news.ycombinator.com/item?id=8000811

The Clean Code author has a Clean Architecture book but I don't think it is out yet.

Just study resources on MVC and some of the patterns that get lumped together with it (Adapter, Facade, etc). There are books available, but they all tend to lack in certain areas (since software design is a super broad topic). Best just to read up on some of the patterns and work on some projects. (Yes, I know that's the usual comeback for this sort of post. But practice really does make perfect for this sort of thing.)

And, if someone recommends a book called Code Complete, quietly begin to question some of their life choices.

Why do you think Code Complete is inadequate for learning about software design?

Not the user you replied to but, according to my experience, Code Complete is useful in that, as many other well-written books, it gives advice that comes from common sense and gives it a name. Much like Martin Fowler did with Refactoring, after all: breaking down long methods into smaller, well-named ones is common sense, but calling it Extract Method gives everybody a handle to use for further research.

Saying that whoever recommends Code Complete made some wrong life choices is a bit rude and uncalled for. Books are just tools, the benefits they bring depend on whether the reader goes through them in a smart way or not.

Then again, but this is a matter of taste, I would suggest The Pragmatic Programmer as a first read. It's shorter, well-written and with laser-like focus on the topic at hand.

Lastly, since designing and writing software is as much of an art as it is science, what's really important is to avoid reading passively and blindly applying anything the knowledge one finds in a book, and instead strive to understand why, and going against the grain and see why certain practices are called "best".

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact