Someone once told me somewhere, that if I am trying to learn rust, I should learn C first, so that I know how to shoot myself in the foot, learning to avoid doing so, so that the borrow checker of rust doesnt seam to unforgiving (since you somewhat know, what happens if you dont follow best practices). So thats what I did (somewhat) for the past 6 months. I wrote some stuff in C, but mainly I had quite of a deep dive into operating systems (mainly linux), working mechanics of memory and the CPU and a lot more (I will try to make a list of the stuff I learned and the ressources used below). My question to you is, if there are any additional concepts/things I should learn beforehand, to start learning rust.
The (somehwat complete) list of things learned for the past 6 months:
- Stack Behaviour (Why its so fast, what its used for,…)
- The heap (why its useful, but dangerous)
- Theoretical Concepts of threading (Concurrency vs. paralellism)
- Theory of race conditions (how and why they occur, and some tricks to avoid them)
- Concepts of Memory allocation on an OS level (Address Spaces)
- System calls and the separation between kernel and user space
- Signals
- Basics of Inter-Process-Communication
- CPU-Scheduling (CPU-/IO-Bursts, context switches, different scheduling algorithms up to ROund RObin (based on complexity))
- How loops, conditions and function calls get implemented in Assembly / how the CPU performs these
- Bitwise Operations
I probably forgot a significant part of the stuff I learned, but its quite hard turning it into a list, without writing a whole book, and trying to remeber everything.
Most of these things are mainly theory, since I havent gotten around to code that much in C. However I definitively have some experience in C. This includes on how to handle pointers, basics of handling the heap, strings (even if I absolutely hate them in C) and some system calls (I played around with sbrk for custom memory management without malloc).
The ressources I used for learning is primarily the YouTube-Channel CoreDumped (I highly recommend), LowLevel and some other ressources, but these were the most helpful ones.
So, feel free to send me down my next rabbit hole before starting rust.


Disclaimer: I am not a rust developer, but I am a professional developer with over ten years experience.
I think folks telling you things like “you should learn X language before Y language” are not giving you the best advice. I often understand their arguments. The advice is typically “don’t learn X high level language before Y low level one.” But if we need to start lower, where would that advice end? Must someone really understand transistors before writing hello world in Python? No! Absolutely not.
Learning any programming language will make you better at all programming languages. There is no perfect starting place. There is no bad starting place.
Think about it like this. Someone tells you before learning to drive a car with automatic transmission you should learn manual. They say it’ll make you appreciate the automatic transmission.ore and that it’s easier to go from manual to automatic than from automatic to manual. Well, a more relevant question is do you plan to ever drive a manual on a normal basis. If the answer is no, you don’t plan on ever using it apart from learning how to, why bother? If you ever need to learn it, you can learn it. You’ll be better at driving by then and can focus on shifting gears without having to struggle to also focus on all the rest of the driving things you do (like staying in the lane, going the right speed not hitting people, etc.)
If you only want to learn C just so you better appreciate things in other languages, don’t bother. Learn the language you want to use. If you want to use C, go for it! There’s nothing wrong with it. A lot of folks want to learn both Rust and C because they want to learn both and stick their toes in everything. That’s fine too! Just don’t feel obligated because you think it’s the best way forward.