Hello, I am just a student with some experience in Python, some Lisp dialects, nowadays using mainly C++.
As I wish to pursue career in programming, I feel like it is important for me to get good with low level programming so that I can understand what is running underneath, write performant code, and also reduce time learning new technology.
The thing is I'm not sure where to start...Do I start learning systems programming? Or compilers? Probably C and ASM?
If anyone can propose a good way to learn low level computing, it would be greatly appreciated.
Thanks
I'm definitely far from the best source here. But I have the same objective (just went into a CS program because of that) so collected some resources along the way. I can share them with you but plz consult a professional before taking action.
1 - CMU has an introductory course about computer architecture CS61A. The book website is: http://csapp.cs.cmu.edu/ which contains a batch of introductory but non-trivial system programming labs. That book (CSAPP) also fits what you want. For example it has one chapter dedicated to code optimization. IMO it serves as a "staging area" that you can explore many aspects of system programming and computer architecture.
2 - Which internal to learn depends on your daily usage. For rexample if you use Python then reading "Fluent Python" as well as the CPython internals helps a lot. It breaks dow to programming language theory, compiler theory and a bunch of other topics.
3 - Checkout Awesome C projects for something to work on. The compiler/lexing & parsing/memory management/profiling parts should be useful. I'm definitely not an expert of those so I'd suggest start from something simple.
Second is an assembly language. Fro EASY to learn assembly I recommend finding an emulator for either PDP-11 or Motorola 68000 (they look surprisingly similar). Do a couple of small projects to become familiar with the syntax.
Then with the C language, compile to assembly. Either PDP or M68000. Examine the output. You should be able to, with enough practice, know what the C was, from the assembly. Play with pointers, pointers to functions, enums, recursion, etc.
Now the hard part comes, switch to a modern assembly. The old ones are so clean by comparison. But the old ones are only useful to get your brain to gonk what is needed. Choose one where you have the C and a debugger. Write the C, but step through the assembly code.
In theory you might be able to get a similar experience using Java byte code or MS MSIL, but that not what I was inflicted with.
The thing is I'm not sure where to start...Do I start learning systems programming? Or compilers? Probably C and ASM? If anyone can propose a good way to learn low level computing, it would be greatly appreciated. Thanks