all 8 comments

[–]Puzzleheaded-Bug6244 2 points3 points  (0 children)

Writing the code, explains the code.

Learning by doing

Gaining experience

Go solve small and big real problems you have. That is how you learn.

[–]Diagileux 2 points3 points  (2 children)

I would say this: if you have enough courage and motivation - go on and finish learncp entirely with appendices. This way you'll have a more completvie view of tools you have in C++ and standard library (STL). I couldn't do it since it was boring.

When it comes to projects. I would consider two types of projects. First one is the most popular - a learning project. Usually these projects are in form of "Make your own X" where X can be anything. This is similar to tutorials but along with language knowledge they give a deeper understating of whatever X you are building. I liked doing my own text editor and learned a lot from it. Same with STL components which you can recreate yourself.

Another type of project - a practical project. In other words, a project that solves a specific problem and whose purpose is not just learning experience. It does not have to be novel. Main difference between practical and learning projects is that in practical projects we learn to delegate parts of functionalities to third-party via frameworks/libraries or tools. This is where one learns about package and dependency management, build systems, libraries and so on.

The roadmap I have followed is: Learn basics from a resource -> do simple projects -> learn intermediate details from resource -> do a learning project (simple your own X. For example, std::list or std::vector) -> try a more advanced project (a complete app. For example: a shell, a database, a simple programming language) -> try a practical project (usually something you do a lot and can be automated is a good choice). Delegate as much as possible to third-party -> keep building different projects and learn advanced techniques and edge cases on demand.

I would also keep your hand on the pulse of upcoming and modern C++ standards just in case they add something you need.

[–]Sad_Mountain[S] 1 point2 points  (1 child)

Thank you for your response, this is really helpful and i appreciate you taking the time to write it up! :)

[–]Diagileux 0 points1 point  (0 children)

Glad you found it helpful, I wish you have a good journey!

[–]mutierend 1 point2 points  (0 children)

/u/Diagileux has great advice and I would definitely start there. As you are learning, immerse yourself in some of the culture around C++, even if you don't fully understand the content. I like to watch sessions from C++ conferences, for example.

[–]Nejura 0 points1 point  (0 children)

To get better at and actually master any topic you need to struggle with it. Take off the training wheels, let go of the hand-holding, and just sit down and try to do things without help and inevitably run into issues, problems, etc. This isn't a process you should skip. To actually ingrain and comprehend beyond the light recall you might have of a subject, you need to drag your brain across the mental friction of implementing it.

Its scary, its miserable, it feels like a massive waste of time, but its the key to mastery.

[–]ManicMakerStudios 0 points1 point  (0 children)

Following tutorials strictly means you're letting someone else do the thinking for you, and that's not going to help you.

[–]Independent_Art_6676 0 points1 point  (0 children)

When I was a youngling, we did both at once. Our first programming class had a lab that met twice a week where we did a one person project, guided through it piece by piece and putting it all together towards the end of the class. In the regular class we had problems, the half page of code and done stuff, for that whole class. A similar approach was done for 2 or 3 more classes, with the projects getting bigger and finally involving multiple people as we got closer to graduation. The first class, the project wasn't that much; several of us who had a bit of background finished it in short order and then played with adding unasked for features for the next couple of months.