1. Code in low level language
if we know how to code right now using languages like python, js and ruby. we need to learn a language that gives access to the memory like C language
Coding in C focus u into learn effective memory management and how to write code that is bulletproof because if u dont the code will just inherently be unsafe. they are lot of things to do in C to not leak memory to not give your code access to hackers and crashes.
This will give you a better understanding of how your code is going to behave and how the CPU works
TRY TO DEVELOP A HTTP SERVER
2. Learn Assembly Variant
knowing assembly variant and knowing how the CPU works at instruction level give u understanding of how your code is going to behave and also if u can look at blob of c and figure out how it gonna happen under the hood in CPU Architecture, it give u a superpower in choosing what code u make and deciding how to design your code.
The best way you can learn assembly rn is by taking this C code and compile that in C then object dumb this piece of code and go to the main function and reverse engineer how it works. You will learn basic 101 of CPU architecture.
3. Learning Basics of Reverse Engineering
Learn the basics of reverse engineering will touch u not only the how things works it will teach you how they are engineered and what the final output of the compiler wud be.
http://crackmes.one is a site where u can download reverse engineering challengers and practice.
Bonus Part
another way to be good at low level stuff is pick up a board to learn and write C (arduino, esp32 like stuff). if you can learn c and then learn assembly architecture if u can then get that code to run on a specific architecture of microcontroller , it will give u ability to read a data sheet, understand how to interpret that data sheet and how to crossport your code to a board.