I hope this is the right section of stackexchange to ask.

I've been coding for not too long, I've gotten as far as iterators/containers/templates/sorting/lists. I'm guessing it's basic stuff. I was wondering what my next step should be? I've had a few things I wanted to do, although they're time consuming so I'd rather ask here what's more advantageous for a novice:

1) Writing a simple game like "break the bricks" to learn to write events/audio/gui/etc., then getting into RPG development with SFML (or writing android app, although C++ is probably not preferable)

2) Studying a C++ github project

3) Reading through an entire C++ book, and writing random code with snippets explaining what each does (to memorize/have for the future)

4) Take free online courses, and do the online assignments (albeit without knowing if I coded properly)

I'm stuck because writing small programs doesn't help me learn new things, I just use the things I already know to write whatever simple program it is. Plus I'm not sure what small projects I should do, I'd rather have one long one

There are a lot of posts saying "just keep coding", but using the same concepts without learning anything new doesn't seem as useful as learning something completely new to me (aside from maybe thinking of more efficient code).

  • 2
    well what's the relation of software rec. in the question?? I ain't flagging unless i don't get a reason, try asking on Stack Overflow Jun 17 '15 at 11:11
  • There is, IMO, no S.E site where this question would be welcomed. Definitely not on S.O; similar questions get downvoted, held, deleted, daily on programmers; it's not really a candidate for workplace (maybe comp-sci?. However, it is a question which is asked regularly on all of those sites. I didn't expect it to last 5 minutes here, but I did do my best to help. Good luck, Joe Jun 18 '15 at 7:24

If you want to be good at C++ you'll have to go through #3 - you need to be comfy with the other concepts you don't yet know about. I wouldn't say memorize, but rather understand/get familiar with/know that there is something like that out there that you can come back to and study in depth if/when you actually need. Without knowing that a concept exists you can't search for it.

If you don't want to be good at it - what's the point in learning it? Find some other language and get good at that - but you'll have to go through the equivalent of #3 for that one.

And yes - code, code, code - but not using the same concepts over and over - challenge yourself to try new ones (which you find out from #3). If you feel the snippets are too simple/boring - try to find and code solutions to other problems which you don't know how to address from the get go, thus forcing yourself to think/investigate/study/etc - just scanning through Software Recommendations Q&As you'll find plenty of self-assignment ideas :) Or go for #1.

Studying other people's code (#2) or related Q&As (C++ on Stack Overflow for example) are great ways to learn coding tricks/strategies/style and improve your coding expertise. With it you can also actively work on correcting/improving/optimizing your own code. This is continuing education, it can be done anytime.

I'm not a big fan of #4 for learning the first programming language mainly because most of the ones I saw focus on specifics, not on the basic programming concepts which are essential IMHO regardless of the language. Depends on each person, tho, YMMV. Once you have a good handle on one language and you want to learn another one they can be a great learning tool. They're also good for quick references and refreshing concepts you haven't use in a while.

  • 1
    I would like to add to the above Learn the difference between fast highly optimised code and fast enough clear maintainable code. You could also look online for an open source project that both interests you and is looking for additional maintainers. Jun 17 '15 at 4:53
  • I upvoted you, for agood answer, although I personally also like #4 - I recommend both codecademy.com and coursera.org Jun 17 '15 at 9:50
  • 1
    @Mawg: I edited the answer, it came out quite wrong, indeed, thanks for challenging it :) Jun 17 '15 at 13:11
  • Thanks for the answers, I still can't upvote yet. A lot of people though recommend against solely using a book/book exercises, but rather doing some project and applying the concepts you learn to it. How would combining #1 + #3 simultaneously be? Although I'd have to be following 2 books then
    – Joe Defill
    Jun 17 '15 at 14:26
  • 1
    Don't forget - their is a world of difference between programming and software engineering. So, while learning the language, also learn language independent skills such as design, unit testing and debugging. You could even have your own version control system and even a bug tracker if you want too. That's a lot on your plate, but it's best to learn good practise from the start. Jun 17 '15 at 15:12

My vote is for 3, 4, 1, 2. That seems to make the most sense to me. Even after decades of professional development, I am not too sure of the value of #2 (also, one of life's little peeves is struggling to understand someone else's code)

  1. Reading through an entire C++ book

Start learning the language (and do the coding exercises in the book).

  1. Take free online courses, and do the online assignments (albeit without knowing if I coded properly)

"without knowing if I coded properly"? The assignments are graded. Also, you will, or should, learn to test. That will tell you if coded properly - does the code do what it is supposed to?

  1. Writing a simple game like "break the bricks" to learn to write events/audio/gui/etc.

I think that you will find this to be much less simple than you think ,-) But, yes, start coding. Code early, code often.

  1. Studying a C++ github project

How do you know that it is good code? Also, it is difficult to understand other people's code (even your own a few months later).

Since you mentioned coding an RPG, you might want to lurk on https://gamedev.stackexchange.com/

and also to look at

Not the answer you're looking for? Browse other questions tagged or ask your own question.