I am a bit late to the party, but as it happens some top universities have made some of their systems programming courses publicly available, and if you want to get into systems programming, these free options are much deeper, comprehensive, and come with extensive coding assignments that include tests and have been crafted by talented TAs over many years, to help keep you on the straight and narrow:<p>[1] Operating Systems Engineering:
MIT 6.828 (in C and a bit of x86 assembly, 2011 has videos for all lectures, bad image but outstanding content)<p>[2] Distributed Systems Engineering: MIT 6.824 (2020, in golang)<p>[3, 4, 5] Database Engineering: MIT 6.830 from OCW (2010, Java), complement with Pavlo's youtube videos and Stonebraker TA notes.<p>[6] Security Engineering: MIT 6.858 (2020, web, python, C, assembly, etc)<p>[7, 8] Computer Networks: Stanford cs144, get videos from youtube, assignments from their website (in C/ C++)<p>[9] Compilers: Stanford, the website has all videos and assignments (in Java or C++, RISC target)<p>[10] Software Performance Engineering: MIT 6.172 (2018 in OCW, in C/C++ and a bit of x86 assembly)<p>[1] <a href="https://pdos.csail.mit.edu/6.828/2011/schedule.html" rel="nofollow">https://pdos.csail.mit.edu/6.828/2011/schedule.html</a><p>[2] <a href="https://pdos.csail.mit.edu/6.824/schedule.html" rel="nofollow">https://pdos.csail.mit.edu/6.824/schedule.html</a><p>[3] <a href="https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-830-database-systems-fall-2010/" rel="nofollow">https://ocw.mit.edu/courses/electrical-engineering-and-compu...</a><p>[4] <a href="http://marcua.net/notes/6.830/" rel="nofollow">http://marcua.net/notes/6.830/</a><p>[5] <a href="https://m.youtube.com/playlist?list=PLSE8ODhjZXja3hgmuwhf89qboV1kOxMx7" rel="nofollow">https://m.youtube.com/playlist?list=PLSE8ODhjZXja3hgmuwhf89q...</a><p>[6] <a href="https://css.csail.mit.edu/6.858/2020/" rel="nofollow">https://css.csail.mit.edu/6.858/2020/</a><p>[7] <a href="https://cs144.github.io/" rel="nofollow">https://cs144.github.io/</a><p>[8] <a href="https://m.youtube.com/playlist?list=PLvFG2xYBrYAQCyz4Wx3NPoYJOFjvU7g2Z" rel="nofollow">https://m.youtube.com/playlist?list=PLvFG2xYBrYAQCyz4Wx3NPoY...</a><p>[9] <a href="http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=Compilers" rel="nofollow">http://openclassroom.stanford.edu/MainFolder/CoursePage.php?...</a><p>[10] <a href="https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-172-performance-engineering-of-software-systems-fall-2018/" rel="nofollow">https://ocw.mit.edu/courses/electrical-engineering-and-compu...</a><p>No hip new languages or platforms, but if you are new to this I think it's better to focus first on battle tested concepts and approaches, from a curriculum that was fine tuned by top universities and professors (many of which made significant contributions to the field) over the years, then the bleeding edge stuff will be a walk in the park, because you will have learned what the tradeoffs are and where innovations are coming from.<p>As for prereqs, if you are a confident programmer, you can dive right in (6.004 is good but not essential, 6.033 is a bit of a slog on your own with all that paper reading and that brick of a book, and no programming, it is good but I found it just too hard to stay interested, skipped that part, but the videos in youtube are an excellent intro to systems design and concepts, I recommend you watch them first). But better if you know your algorithms first (do the excellent MIT 6.006), specially for 6.172 (the mantra here is to get your algos right before attempting any other kind of optimization), and maybe the database (hashes, trees and dynamic programming come in handy) and compiler courses (graph coloring for register allocation, for instance).<p>But, whatever you do, start with 6.828 operating systems, this is considered the MIT intro course to systems programming, and they explicitly avoid all but the most basic algorithms, in order not to distract from the core system concepts. More sophisticated approaches are introduced in the second half, once you've got the basics under your belt.