I've only ever really worked on web applications, but am feeling drawn to systems work, it's something I'd love to get deeper knowledge in.
Not quite sure how to go about it / what to learn - but I'm starting with Rust - http://rust-lang.org.
I've only ever really worked on web applications, but am feeling drawn to systems work, it's something I'd love to get deeper knowledge in.
Not quite sure how to go about it / what to learn - but I'm starting with Rust - http://rust-lang.org.
If I were you, I'd start with C (read K&R) and then move on to understanding Unix (write a few tools using libc), then try a kernel driver or maybe some embedded programming. You'll have billions of lines of C source code to learn from, there are plenty of books that teach systems programming using C (in various contexts) and it's really not that scary once you know what not to do (but it will take time).
Example projects to attempt: write a trivial kernel for an embedded device; implement paging in a toy kernel that doesn't have it; write a web server; write a C compiler for MIPS (optionally with optimizations); write a CPU emulator (8086, Z80, MIPS, ARM); write an assembler; write a malloc()/free() replacement; write an ELF loader to execute Linux binaries; write a 'tar' replacement.
The examples might sound daunting, but they don't have to be big, production-quality programs - those take years, these would take several months of part time work (if that). You will learn a lot. Also, there are online courses that teach you all of this (look at Computer Architecture, Operating System and Compiler courses), lots of textbooks (fairly expensive, but worth reading) and toy kernels/projects to use (things like Minix, Nachos, cheap ARM boards, etc).