Level My C++ Skills

I have been studying C++ for almost 2 years now. I have read some beginners' books and some intermediate ones including "Effective Modern C++ - Scott Meyers".

I have solved plenty of exercises, found out I love problem-solving, made 3 programs I am very proud of.
So, basically I have learned about all the fundamentals of cpp from declaring variables to working with with files, STL and templates(though the last one didn't do much exercising), and the fundamentals of OOP.

So now I find myself wndering where to go next, I am a liitle lost and in need of some guidance. What should I learn next, I know what I larned so far is just the beginning but I can't seem to find further topics to study in c++.

Any sort of guidance would be much appreciated
Thanks.
Last edited on
binary files / serialization
input validation
threading
networking / communications / interprocess comms
data structures / algorithms (trees, etc)
gui coding/development / mobile dev
use some 3rd party libraries to get something working
advanced string processing, advanced vector tricks using algorithms, lambdas, etc.
regx tools in c++
Thanks @jonnin, I really appreciate it.

One question though, what exactly do you mean by
use some 3rd party libraries to get something working
I recommend you to start working on some project, that is the best way to learn fast, because you'll always encounter new idioms and problems waiting to solve.

learning 3rd party libraries is good only to see how things are done, but you won't learn much with them, because too much time is spent on search for documentation and also in the end you'll hit the wall, because all libraries have limitations. (there no such thing as AIO library)

there are not many libraries with good documentation meaning frustration.


what to learn next, or what project to start? start implementing your library for:
GUI design
networking
cryptography
2D rendering
etc...

note that you will want to use existing platform API for implementation of any of these projects, and you'll want to take a look at other libraries first to see how they structure the project code.

beginners library is never going to be good, that's why it's important to at least partially learn other libraries first.

Surely you'll learn some great stuff with this approach.

I'm not saying you should reinvent the wheel by doing all by yourself, but this is how to learn the language beyond standard the best way, from ground up.
Last edited on
how about ncurses, draw some ascii art in different colors, get a password without showing what was typed on the screen... that is an easy to use 3rd party library to get your feet wet. Start small, you don't have to hit something giant on your first one! or a zip library, to gzip a file that you write (easy test, can a zip program undo it) ? Simple, established, free stuff to start out...

almost all professional programs use a few 3rd party libraries. Its something you do need to know how to do. And yes, even so, working with poor documentation and having to puzzle out what the truth vs the words IS to get it working is sometimes a part of it, and that is a good skill to have too :)
Last edited on
> I have learned about all the fundamentals of cpp ... What should I learn next

Useful parts of the standard library if you haven't studied them already:
for example regular expressions, thread support, filesystem, type traits.
https://en.cppreference.com/w/cpp/regex
https://en.cppreference.com/w/cpp/thread
https://en.cppreference.com/w/cpp/filesystem
https://en.cppreference.com/w/cpp/header/type_traits

Get familiar with the boost libraries. https://www.boost.org/users/

Last edited on
Thank you guys for the insight!! Really appreciate it!

After following your advices I have decided to start doing network programming and OpenCV too, and then gui programming. I will take a look at ncurses too, they seem pretty interesting.

Anyway, thanks once again.

I will wait a day or two in case someone has something to add and then mark the topic as solved.
It depends whether you are learning just for fun(to make games or some programs) or you want to get a job in the IT.C++ was the hardest language I've learned and that was my second language after C.If you've learned that much you are not far from making GUI applications that can be more interesting.
You can try with Qt https://www.qt.io/ for example.
It is good to find some projects and try to make something from the beginning like
some games like XOX,Minesweeper,Memory Game,chess(though this is a harder one)
where you can use data structures to make your programs better.Another good thing to learn is design patterns.
You could read this book to Clean Code Robert Martin
@zivojin

I am learning C++ to get a job in the IT. I want to learn as much as I can about C++ before moving on to other languages (namely Java and Python).

I have read a lot of people saying that C++ is a hard language, maybe it is just my inexperience but I don't find C++ hard at all and it is my first language I am learning or maybe I haven't yet been to test with my c++ skills so far.

I have already downloaded some QT video tutorial, I am trying to learn other interesting things in C++ and then start learning gui.

Thanks for the tip on the book, I will be sure to check it out.
I have read a lot of people saying that C++ is a hard language, maybe it is just my inexperience but I don't find C++ hard at all and it is my first language


You don't find it hard just because it's your first language, and those people are used to languages such as C# and Python, no wonder they find C++ hard.
You will understand when you start learning ie. python, when you figure out that the language offers very limited functionality comparing to C++, and there just isn't much to learn, not many concepts like in C++.
Its all in how you look at it. I found java and python harder, not because of the syntax or use, but because I keep having to go online to figure out how to do something that the language does not want you to do, eg use an unsigned integer for some bitwise logic.

C++ is "harder" because it does less for you and allows you to make mistakes like memory leaks or out of bounds access, mostly involving memory and pointers where the other languages inject unnecessary instructions to prevent these.

Java/python/etc are "harder" because they block you from doing what you want to do 'for your own good' or 'because we said so'.

Two simple examples that I encountered over the last year or so:
1) duplicate some existing logic in a new program for compatibility: generate this exact CRC32 hash.. java and python were approximately 3 and 10 times slower, respectively, and took extraordinary measures to get working due to lack of unsigned integer.

2) Hit a database with a query. This took just a few simple lines in python, a little more in java but not much, and was a royal headache and major undertaking for c++.

All the languages can do both tasks. But 1 is trivial in c++ and runs in fractions of the time the newer languages take. 2 is more challenging in c++ and trivial in the newer languages, but still much faster in c++ (but mostly the delays are networking same for all languages, so the extra speed isn't useful).
Well now I am curious to learn python or java to be able to spot these differences.
And if it is not difficult as you say, well, I think I will enjoy programming even more.
Topic archived. No new replies allowed.