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…
Ask HN: How best to learn software design principles?
71–80 of 100 posts
Re: Ask HN: How best to learn software design principles?
#72http://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…
There's certainly great value in reading application source code, but it has nothing to do with physical Architecture. I do wish people would let go of this tired and completely wrong metaphor.
Re: Ask HN: How best to learn software design principles?
#73Don'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 r…
Don't feel too bad; the pop culture side of programming (a lot of HN) is profoundly anti-design of any type. I think that's a surprising characterization; it doesn't jive with my own perception (as subjective as that may be). I think the past decade has (rightly or wrongly) seen a reaction in our industry against enterprise-style "architecture astronauts" but that doesn't equate to being "anti-design". (I'm thinking…
I agree fully. I feel that the shift has come about because there has been an unconscious recognition that restricting your tools to one particular problem domain is a valid constraint to make on a design. Enterprise scale, "architecture astronauts" and the like were trying to build tools with which you could build anything, for anyone. And it's clear from the results that this is just a vector for complexity to creep in. Focused tools, from libs to frameworks unashamedly limit themselves to one particular problem domain, or at least used to.
I've certainly noticed a shift in that these hard learnt lessons are being ignored in order to add features to frameworks etc; which increase their applicable scope, with the increase in complexity that arises. The primary driver of which appears to be the younger generations desire to use the same tools for different purposes rather than learn a new set of applicable tools for a different problem domain. A good example is the shift from v1 Zend Framework to Zend Framework 2 which just appears to be so heavily "Java/Enterprise" influenced I simply refuse to use it; its far far too complex a framework for what is essentially a framework for building web sites. Building web sites is simple. These modern frameworks make it massively more complex than it needs to be.
Re: Ask HN: How best to learn software design principles?
#74http://cleancoders.com/ See them all. The best investment you can make into yourself.
Geez! That guy on the thumbnail for the first video (Clean Code - The Last Programming Language) looks really angry. I don't think I want to learn anything from that.
It gets so weird you'll soon forget that first thumbnail.
Re: Ask HN: How best to learn software design principles?
#75Earlier quoted context omitted.
I hate to sound stingy but at $445 is there a cheaper alternative? Like a book, or maybe shorter series? What videos would prioritize over the others?
Well $445 is nothing in contrast to what you can make if all this knowledge is put into effect. I would definitely recommend SOLID principles above others.
Re: Ask HN: How best to learn software design principles?
#76Earlier quoted context omitted.
Well $445 is nothing in contrast to what you can make if all this knowledge is put into effect. I would definitely recommend SOLID principles above others.
It depends heavily on your place of living. In my country $445 is about or over the monthly salary for vast majority of people.
Re: Ask HN: How best to learn software design principles?
#77There are several other books that have tried to explain the GoF's Design Patterns in either an easier to approach manner, or in the context of a specific language they have tried to explain where new design patterns have emerged or the original patterns had mutated.
A couple of those worth checking out are
"Head First Design Patterns"
http://www.amazon.com/Head-First-Design-Patterns-Freeman/dp/...
"Design Patterns In Ruby"
http://www.amazon.com/Design-Patterns-Ruby-Russ-Olsen/dp/032...
"Learning JavaScript Design Patterns"
http://www.amazon.com/Learning-JavaScript-Design-Patterns-Os...
Re: Ask HN: How best to learn software design principles?
#78I feel the best way to get into the mindset of good design, or design principals - even if it isnt "examples of good design" as the AOSA book - is to get immersed into an architecture formed from a design based mindset different than what you are used to.
Learn something engineered with design principles heavily visible in mind. What is the design principle of a modern GNU/Linux system? Its mosthly philosophical, you wont find the answer in several books, its spread out far and wide and requires that you actually use GNU/Linux for years, to have taken part in its history.
I suggest you pick up and learn JSF (Java Server Faces). Start reading JSF books, Java Enterprise things, start coding it, doing it. One good book is JSF in Action from Manning I believe.
When you begin reading about or trying to make a hello world site in JSF - youll be like "wtf is this, fuck" - thats right - thats you being exposed to a different design principles based mindset. Its not bad, its in fact very good (JSF and the experience).
Only once youve finished say a "community website, friends can befriend each other, send messages, write on wall, share pictures." in JSF, even though it looks as ugly as can be - then youve advanced more in passing those interviews with regards to design principles - than reading any of the books mentioned so far in this thread. But reading the other books wont dis-help you.
EDIT: From experience, the books flaunted around here, Code Complete, AOSA, Design Patterns here there and everywhere, are just bullshit for this task. What your interviewers were asking for is not if you can count and use Design Patterns. Or if you agree or dont agree on which method in a class should be refactored out and what it should be named. Dive deeper out of your comfort zone - go for JSF.
Re: Ask HN: How best to learn software design principles?
#79Learn a functional programming language. This has had the most impact on the way I think about systems by far. The biggest impact was realizing all of the time I've spent trying to master all of the OOP acronyms hasn't paid off. I've also realized that OOP might be meant for a type of programming that I don't do (video game logic? device drivers?), where as FP seems to fit great for Web applications that are just wra…
The difference is subtle but important. You need to master imperative programming for the exposure to functional to produce a evolution. You can probably get the same effect in the reverse path (functional first, imperative next) but it's quite uncommon as a learning path.
The same reasoning leads me to advise exposure to logic languages (prolog and the like), to compiler design (a complex state machine) and to a complete algebraic abstraction (relational algebra is probably the best candidate). Each will bring into your toolbox an important top level tool, no matter which paradigm you use at any moment in your life.
Re: Ask HN: How best to learn software design principles?
#80The 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…