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

8 points by brosephius ↗ HN
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.

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.

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?

3 comments

[ 3.7 ms ] story [ 17.8 ms ] thread
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.
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...

Really good talk with lots of jewels. Another good book for you: http://www.amazon.com/Scalable-Internet-Architectures-Theo-S...

Hope this helps.

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.