

Ask HN: how can I learn about real-world software/system design? - brosephius

I've been coding professionally for a few years now, with solo responsibility for quite a bit of code. As the systems I work on have gotten bigger, I've realized how lacking my skillset is. I have a CS degree, but never had any formal practical software engineering training. I don't really have any sort of mentor here, so I've mostly just figured stuff out on my own. the problem is, I'm sure I'm missing quite a bit.<p>for example, I routinely find myself wondering how to design something, jumping from idea to idea until I accept that I really don't know and just pick the path of least resistance. other things that regularly come up are database scheme issues, how to properly set up a test environment, proper logging/error handling practices, writing fault-tolerant network code, and more. things I never saw in coursework. I can bang out code for sure, but I know I can do better.<p>I've tried looking at a couple books (code complete, design patterns) but couldn't get much from them. I've tried looking at open source code, but that's missing the back-and-forth dialogue I'm looking for. assuming I don't have access to any experienced developers, what can I do at this point, save for posting non-stop questions to stack overflow?
======
rosariom
Hi,

I think this is a hard one without working on a big project with senior
people. I struggled with this for years and still do but have gotten a little
better thanks to senior developers guiding me. I think besides reading books
and attending lectures or listening in on talks online, I think you need to
find a problem sizable enough and build it from scratch. My work with senior
guys has shown me that designing on paper and the white board is essential to
tackling the problem for understanding and eventually building it. The
patterns will reveal themselves as you go through this exercise if any
patterns are needed at all, and I think this is something you definitely will
not learn overnight but overtime by getting your hands dirty. If you have not
visited this site infoq.com, please do so. It has tons of experts speaking on
it. I have been able to incorporate some of what I have learned from here to
the job. A quick link to how YouTube was built:
[http://www.youtube.com/watch?v=ZW5_eEKEC28&feature=youtu...](http://www.youtube.com/watch?v=ZW5_eEKEC28&feature=youtube_gdata_player)

Really good talk with lots of jewels. Another good book for you:
[http://www.amazon.com/Scalable-Internet-Architectures-
Theo-S...](http://www.amazon.com/Scalable-Internet-Architectures-Theo-
Schlossnagle/dp/067232699X/ref=sr_1_1?ie=UTF8&qid=1294329526&sr=8-1)

Hope this helps.

------
znt
I advise you to check out a couple of frameworks if you have doubts about
software architecture. I'm a fan of PureMVC because it's language agnostic,
has an active community and has plenty of tutorials with good documentation.

------
nihar
Personally, I've learned a lot by attending user groups and conferences. There
is no substitute for hands-on learning but interacting with people who have
the skills that you're looking for is as close as you can get.

