
Ask HN: How did you learn proper system design? - pbjorklund
Im constantly thinking about what layout of classes and their dependancies/interactions will work best for a new project. Doing some iPhone development right now has the "benefit" of forcing you to use things like the mvc pattern and having to rely heavily on delegates and target/actions but still there is always sub-organizing that takes place. The problem is that I never feel like a working solution is the best way of doing something. Studying design patterns only seems to be part of the equation, I guess im looking for new google keywords or amazon searches...<p>Question could probably be: How did you go from goto and general pasta to well designed beautiful code that made people write articles in your honor?<p>Books? Articles? Down-and-dirty coding? Finding a mentor? Doing open-source? Slaving away as a PhD student in applied mathematics and system design?
======
phugoid
Having to maintain my own software and keep adding features. I have redesigned
my largest project several times, and am still not entirely satisfied.

You need to suffer.

------
rbxbx
For me personally, finding a mentor was a huge eye-opener, but that was mostly
because I didn't realize that I was(and likely still am) doing it wrong.

The fact that you're self-aware and seeking out the information to further
your craft bodes well :)

------
lanceusa
Sounds like you're doing it. You are looking for a way to make yourself a
better developer and this never ends. I found eventually, that no one every
really knew a good design. It seems like we always invented that along the
way. Yeah, we all knew patterns etc, and were bound to certain ways of doing
things, but somehow we seemed to always get lucky on most designs. It quite
possibly may have been that the problems solved themselves eventually. And
after we saw the code we wrote we looked at it made it better on the last few
days creating, in most cases, an elegant design. The designs were more
apparent after the project was done which were never consistent from project
to project.

One way to learn good software design is to look at other peoples code who are
good at what they do. For me those people are John Resig, Douglas Crockford,
etc.

------
dmaclay
Working on large projects where you experience the consequences of bad
judgment calls made years earlier, and trying to figure out how things could
have gone better.

Probably the nastiest way to learn, but still the best.

