Live data from Hacker News

Ask HN: How best to learn software design principles?

news.ycombinator.com

11–20 of 100 posts

Re: Ask HN: How best to learn software design principles?

#11
The #1 book is "Design Patterns: Elements of Reusable Object-Oriented Software" by Gamma/ Helm / Johnson / Vlissides. It's about imperative programming though, functional/hybrid languages have other design patterns(but "Design Patterns" is #1 anyway).

+ Free Book "The Architecture of Open Source Applications" : http://hackershelf.com/book/54/the-architecture-of-open-sour...

Re: Ask HN: How best to learn software design principles?

#12

http://www.aosabook.org/en/ "Architects look at thousands of buildings during their training, and study critiques of those buildings written by masters. In contrast, most software developers only ever get to know a handful of large programs well—usually programs they wrote themselves—and never study the great programs of history. As a result, they repeat one another's mistakes rather than building on one another's su…

This is a great suggestion. Make sure to buy all 3 books. Then, next time you come across an article about any of the techs in the book, spend the time reading how it was built. You'll learn loads.

Re: Ask HN: How best to learn software design principles?

#13

http://www.aosabook.org/en/ "Architects look at thousands of buildings during their training, and study critiques of those buildings written by masters. In contrast, most software developers only ever get to know a handful of large programs well—usually programs they wrote themselves—and never study the great programs of history. As a result, they repeat one another's mistakes rather than building on one another's su…

^ This

I was going to reply about experience (and code review) being the best teacher, but this is better. Critics from your peers are good, but critics from the experts are even better.

Re: Ask HN: How best to learn software design principles?

#14
* The C++ Programming Language 3rd edition, Part IV of the book.

* Large-Scale C++ Software Design

* The Practice of Programming

* Code Complete

These are a good start but in the end it's experience. It takes a lot of practice to build a good intuition when making software design decisions.

Re: Ask HN: How best to learn software design principles?

#16
post #2

http://cleancoders.com/ See them all. The best investment you can make into yourself.

While I don't disagree that Bob Martin presents useful information in those videos, his presentation style is... bizarre to say the least.

You'll find as you watch them that the signal-to-noise ratio drops with each episode. In the last few, there's about ten minutes of useful information mixed in with about 50 minutes of cosmology lessons, tours of his house and neighbourhood, and babble amongst his various alter egos (Data, Sherlock, Spock, Minecraft guy, Ruby guy, Microsoft fanboy, and so on).

Everyone has their own threshold for how much of that they can tolerate. For me, it crossed that about five episodes ago.

Re: Ask HN: How best to learn software design principles?

#17
The book that inspired software patterns. I found it more interesting than GoF's "Design Patterns", and it feels less dated these days: The Timeless Way of Building by Christopher Alexander http://en.wikipedia.org/wiki/The_Timeless_Way_of_Building

The C2 wiki has interesting entries on software patterns and related ideas: http://c2.com/cgi/wiki?WikiPagesAboutWhatArePatterns

Stanford CS 240 has a great list of papers on system design: http://web.stanford.edu/class/cs240/

One paper that's no longer on that list, but I remember from when I took the class: End-to-end arguments in system design http://web.mit.edu/Saltzer/www/publications/endtoend/endtoen...

Re: Ask HN: How best to learn software design principles?

#18
Don't feel too bad; the pop culture side of programming (a lot of HN) is profoundly anti-design of any type. This is likely a reaction to perceived overdesign of years past, such as in Enterprise Java. Thus, you don't see as many articles about the topic. (I also sense a bit of nerd-indignation over the fact that this is a squishy subject and nobody's completely right).

Read the AOSA book, read Design Patterns, and read something like Domain-Driven Design. Realize that no-architecture is frequently chosen due to ignorance ('pragmatism'). Know SOLID back and forth. Understand why people strive to isolate things when doing TDD. Recognize and know how to decrease coupling, and what the costs of that are. You can practice these concepts every day, and you should, if only to develop the necessary element of taste.

You'll go through a phase where you adhere to these ideas religiously, then eventually assimilate the knowledge so that it becomes almost unconscious.

Best of luck.

Re: Ask HN: How best to learn software design principles?

#20
post #14

* The C++ Programming Language 3rd edition, Part IV of the book. * Large-Scale C++ Software Design * The Practice of Programming * Code Complete These are a good start but in the end it's experience. It takes a lot of practice to build a good intuition when making software design decisions.

Large Scale C++ Software Design is a real gem.
Post reply on HN