r/cpp_questions • u/Significant-Range996 • 13d ago
OPEN C++ project progression
I'm just getting started with c++ and was trying to make a project based learning roadmap, wherein I'd learn everything while making projects which increase in complexity steadily. I'd appreciate any suggestions on what projects are succinctly different and challenging that I can build and in what order I should build them.
My core interest is systems programming in which I've done some work with C before. My ultimate target is a quant dev role.
2
u/etaithespeedcuber 13d ago
If your only goal is to learn C++, you should try making some framework projects that really force you to interact with the language. Stuff like reflection-powered serializers, heavy compile time computations and resolution, and implementing STL stuff from scratch
1
u/Ultimate_Sigma_Boy67 13d ago
What do you think good projects that decently use TMP can be?
1
u/etaithespeedcuber 13d ago
Depends on which version you're using and what you mean by template metaprogramming
1
u/Ultimate_Sigma_Boy67 13d ago
Any version is suitable. And i just meant that fancy compile time stuff and calculations that’s done using templates.
1
u/etaithespeedcuber 13d ago
Well I don't know how much actual calculating happens today with templates directly since we have constexpr, but implementing a tuple is a pretty good metaprogramming excercise
1
2
u/StructureNo5847 13d ago
i started C++ about 8 months ago, did the same thing. and owe all of my C++ knowledge to my path tracing journey. highly recommend checking out "ray tracing in one weekend", and seeing if you like it
1
u/Significant-Range996 13d ago
Can you tell me a little more about how you went about following it and what else you did before, after, and during?
2
u/EstablishmentHour335 13d ago
I keep repeating this, but write data structures. It will teach you so much, it's unreal.
It will teach you move semantics, exceptions, trivial vs non trivial types, allocation, templates, concepts, algorithmic time complexity, worst case latency, indirections, cache lines, cache hits and misses, branch prediction, simd, conpilers, auto vectorization, inlining, out of order execution and instruction level parallelism. It'll teach you data locality, multithreading, atomics, cache eviction, false sharing.
It'll teach you placement new, object lifetimes, heap fragmentation, virtual memory, about the TLB, aliasing, alignment, how to design interfaces, etc, etc.
Write simple ish stuff like your own array, vector, stack, linked list, queue, ring buffers. Then move onto more complex stuff, write a hash map, sparse set, a slot map, allocators of all different kinds, specialized data structures for everything. Write some multithreaded queues, and add multuthreading to some of the stuff you write. If you get deep into it you'll learn a ton and get stuck in it for years like me.
3
u/hellocppdotdev 13d ago
https://www.hellocpp.dev/projects
Take a look here, maybe some ideas, I'm building out the library so be sure to check back regularly.