Talking about Low-Level concepts, Most people find learning them not practical, challenging, or complex to learn, but, for me, I really like learning Low-Level concepts, and see how my software is actually working, seeing how I can fix some of the performance issues, reducing memory allocation, and most importantly showing off your Low-Level skills to your friends, by the way, I don't have any programmer friends, so, I do show off in Twitter like this
What are "Low-Level" concepts?
Why you should learn "Low-Level" Programming?
Knowing the architecture of computing is what I would call a generally applicable skill. What I mean is that, regardless of the programming language you use, eventually, all that nice-looking code breaks down into Assembly which is then broken down into bits. It's never a bad thing to know how your code will look in Assembly. Gives you an idea of how your compiler works.
You can use your knowledge of Assembly to your advantage. If you decide to pry one a
.asm file and look through it and realize a portion of the machine code could be optimized, you could do it! No harm no foul. Your programs could be much faster as a result.
How to learn Low-Level Programming?
Learning languages like C++
I don't know about you, but, I love C++ . It is one of the greatest programming languages ever made. It is maybe hard to learn, but once you learned it, it would make you feel like you are the greatest programmer of all time. And as I said you can also show off your C++ skills to your friends but I don't have any programmer friends, so, I go to Twitter.
Decoding your Code
You can use different tools to decode your code to see what's going on in your code after you compiled it, Eg. for C#, I use the SharpLab to decode my code in C# Decoded, IL, or JIT ASM as it's shown below.
C# To IL
C# To Decoded C#
C# To JIT ASM
Looking into the Memory
Another way to learn about your Software is by looking into the memory by using a Hex Editor. It's a tool to display, decode and analyze binary data to reverse engineer their format and extract information or patch values in them.
ImHex is the Hex Editor that I use. What makes ImHex special is that it has many advanced features that can often only be found in paid applications. Such features are a completely custom binary template and pattern language to decode and highlight structures in the data, a graphical node-based data processor to pre-process values before they're displayed, a disassembler, diffing support, bookmarks, and much much more. At the same time, ImHex is completely free and open source under the GPLv2 language.
In the end, I wanna say that it depends on you, if you really enjoy learning them, then learn, if you don't, don't learn. But as for me I really enjoy learning "Low-Level" concepts and also teaching them to others by writing articles here on ProgrammingFire. You can read more of these articles. If you find these articles valuable please consider sponsoring me, also please make sure to follow me on Twitter