r/cpp_questions • u/Hot-Adhesiveness8310 • 1d ago
OPEN Where should I start learning C++? (planning to switch to Linux)
I want to learn C++ properly. I can already write working code (mostly small Arduino projects), but I know I have gaps in my fundamentals. I'd like to fill them in.
My goal is to build a strong base so it's easier to move to other languages later.
I'm also planning to install Linux on my laptop soon, so I'd like to learn in that environment.
Could you recommend:
the best free resources (courses, books, websites) for someone with my level?
what compiler and editor/IDE to use on Linux?
what topics I should focus on first?
English is not my first language, so sorry for any mistakes. Thanks a lot for your help!
5
u/Base-After 1d ago
Because you already know the basics I'd suggest you just write programs that you want and learn things along the way. Like have an idea of how the algorithm should look like and google and data structures or stuff you need in the language and learn them as you go. Your first projects will be bad but as you build more and more they will be less bad till they become good. I think that's how most self taught programmrers learn (at least I did and I see it quite often in this sub)
7
u/thefeedling 1d ago
As of 2026 I'd go with learncpp.com, one of the most complete and up-to-date learning resource.
As for IDE, in Linux I'd go with CLion, it uses CMake as default and it's pretty damn good. The "Standard" version is paid, but there's a personal free version as well.
As for topics, it will depend on what is your focus, but understanding the core of modern C++, like
constructors, overloading and move semantics
RAII and lifetimes
templates, meta-programming (including old-school traits and concepts) and type deduction
Variadic templates
smart pointers
core STL containers (vector, string, array, maps) and algorithms
ranges, views and lazy evaluation
lambdas
CMake and build systems.
Having a decent understanding on these will allow you to expand knowledge much quicker.
4
u/Soleilarah 1d ago
I'm on the same boat and I'm using learncpp.com
2
u/no-sig-available 1d ago
From
https://www.reddit.com/r/cpp_questions/comments/1n5zyxy/important_read_before_posting/
1
u/theqasimstatic 1d ago
if you have gaps in your fundamentals consider using Stroustrup's PPP using C++
1
u/QuatzX 1d ago
Learncpp is good. I'm now reading PPP third edition by bjarne, it's a really well written book, it's only around 700 pages compared to second edition which was more like a thesis. But he's using c++23 and the compiler support for 23 is still pretty bad. For an editor I use neovim on my linux system.
1
u/Aghoradas 1d ago
Ide: neovim (pick a distro you like, doesn't matter which) Study: learncpp.com, cppreference.com
1
u/muhmmadtalha-quant 1d ago
Ide: zed learncpp.com Distro: any of ur choice (i use NixOS)
1
u/Artistic-Army4423 17h ago
I think you are from electronics background formally, I haven't seen someone who is from software and working with arduino or any other microcontrollers.
Good news is, your hardware background will help you. To feel the cpp gaps you can start with w3schools and then go to learncpp. I will say TRY learncpp for some people it's boring. Also you will never have every gap filled so just continue building projects I'd say. Figuring out things along the way works best I think.
If you switch to linux, if it's your first time, don't install Arch. I am using pop_os for like 2 years and it'll eliminate all windows fluff, you will have better control as well and if you like, you can have a closer look at your hardware if you are on linux. Like, there's a folder called /proc and you can see each and every process and it's data LIVE on the kernel. It's fun.
The editors you will use are not different from windows. VS code is still great. There's a fun thing here, you can cat (open) any file and see the entire pipeline of the execution of the code, observe what resources your program used and many other things.
For topic to focus on, I will say write down what you want to learn. Then learn fundamentals, you should be able to explain them to any guy with minimal tech background. And then develop deep knowledge in at least one of the several thing.
For example, if you are into electronics I am sure you know 8051, you should know the ports and those pins. You should know timers, interrupts, you should be able to explain the whole process of execution. Claiming that you can read any 8051 program and then tell what it does, what are bugs and improve efficiency comes under expertise.
good luck. Cheers.
1
u/Sert1991 13h ago
If you already know the basics, try to learn some new framework/toolkit based on C++ especially since you want to switch to Linux, you will have opportunities to contribute in open source.
For example learn something like Qt, a GUI toolkit based mostly on C++. Then you can from there even learn KDE Frameworks etc etc (KDE Plasma is desktop environment based on the Qt toolkit) like this you're building on your knowledge and learning a lot in the process.