How do I make the leap from Newb to Experienced Game/Software Dev?

What was your first original Project you came up with yourself, How did it go?

Depends on where I want to draw the line. Around age 16, I created what was essentially a CMS with PHP (and HTML, CSS, JS, and SQL). I made it because I was creating a website that was somewhat of a guide for a game I enjoyed. It started out as a static site and went through several revisions over a long period of time (I never initially intended to become a programmer, so starting out was slow).

It wasn't well made and got spammed to death. But it was a project and it worked. It served some useful purpose and I learned a lot about how to handle web development.

I didn't have any major projects for a while after that, until I created what's essentially an offline Dropbox for a university class. It monitored a folder and could back it up to a particular location. It stored diffs in a database and had a GUI for recovering files and viewing history. It was also my first group project, working with 4 others. It went well, but I had to pick up a lot of extra work due to incompetent group members (I have no idea how some of these people make it so far in the CS program).

What is important to learn to do these?

For early projects, don't spend too much time planning. Learning how to effectively plan software projects is something that is best learned through experience, anyway. So dive in and learn from mistakes.

I'm assuming that these early projects are not a big deal. Stuff you're not depending on for an income. If so, take risks. Try different libraries, frameworks, and languages. If something turns out to be a bad choice, you'll at least learn from it. I learn a great deal from mistakes. In fact, I find that I often can't even figure out the best way to do something until I first do it wrong.

Group projects are a real hit-or-miss. You might end up working with someone who you can learn a lot from and can provide you useful experience. Or you might end up having to hand-hold someone who's completely incompetent.

Google a lot. Even if you have a good idea of how to do something, google it anyway. There's a good chance you'll be able to find discussion or questions related to what you're trying to do and this may yield alternative approaches or make clear some possible issues that you hadn't considered. Learn to identify the general idea behind what you're doing. That is, you'll often have some very specific problem you're trying to solve. You often can't easily google that. So either break it up into smaller, more general purpose ideas or abstract on the overarching idea.

Reinventing the wheel can be useful for learning, but most of the time, it's not worth it because you'll waste too much time that could have been better spent working on new things. Not to say that it's not worth reinventing the wheel for the learning purpose, but some people I've seen go way too far here, recreating even basic data structures for every project you have. Unless you're in a first year CS class and just getting started, you should never have to reinvent the simple list, for example. In fact, I'd argue that by the time you're ready to undertake a major project, you should have a solid foundation on how such data structures work and have no need to reinvent them.

/r/learnprogramming Thread