1

So I'm a programmer who works in telecom. I'm currently in school as well and I'm also an avid gamer (shocker). I said this to form my question: Take a big game title such as DotA 2 - how do you know when you're ready to work on a system that complicated?

I work on web applications at work, but they aren't all that complicated. From my perspective, the little errors I make in web dev would never fly in a company like Valve when their game reaches 11 million people monthly. This could apply to any large company with products whose code must hold up at all times. After all, big errors in the code could mean a loss of big dollars.

What I'm asking is, how does one get confident enough to know that code I'm writing is robust enough to not have an insane error show up, while working on a huge system like an online game? How does one approach coding in the midst of incredibly complex systems while producing minimal to no errors?

Mmm Donuts
  • 121
  • 4
  • Those sort of super robust systems likely aren't as complicated as you think. – Telastyn Apr 17 '15 at 18:48
  • I don't know anything about the backend code that runs Steam or DotA 2, but I can't imagine it being all that simple... Are you saying modularity is the key? Keep things small and isolated, then use those to build larger systems - like blocks of lego? – Mmm Donuts Apr 17 '15 at 18:50
  • Well, that's important, but the key to making systems robust is often _simplicity_. – Telastyn Apr 17 '15 at 19:01
  • I would suggest to participate to some *big* free software project. But it might be hard. – Basile Starynkevitch Apr 17 '15 at 19:01

1 Answers1

5

Two things:

  • Split software into manageable pieces, each of which is simple and intuitive on its own. Most software that actually works is already like this to some degree, and usually you only need to work in one part at a time, so it's a lot more doable than it might seem at first. When something really is too hard to understand, that doesn't mean you suck, it means the code needs refactoring.

  • Get in all the cliche good software development habits. Write automated tests. Use a bug/issue tracker. Automate build/deployment stuff as much as possible. Document your public interfaces. Design things before hacking away at the code. Follow YAGNI and SOLID to the degree that they make sense. Even if you're the only one working on a project, all these things help you in the long run, and when you start seeing those long-term benefits kick in, that's a massive confidence boost.

Ixrec
  • 27,621
  • 15
  • 80
  • 87
  • This completely answered my question. I'll form a solid foundation and work up from there (both as a programmer as well as in software). Thanks for taking the time to write that out. cheers – Mmm Donuts Apr 17 '15 at 19:26