>>10690181>>10690738There’s way more out there in the world of theory, and this list doesn’t even talk about geometry, topology, their algebraic subfields, and their use in the theory of computation. However, I’m trying to give a good survey of what was classically useful. I think I should focus on some systems and other topics now. Oh, for advanced algorithms, the later chapters of CLRS, notes by demaine and farach Colton, and flajolet/sedgewick’s analysis of algorithms is good.
The CMU computer systems textbook and Berkeley computer architecture course should provide ample amounts of good experience for the subject. Focus on numerical representation, hardware algorithms like multiplication, basics of DLD, some basic semiconductor physics (good to know for embedded work, crossover with EE in systems happens a lot), switching theory like flip flops, assembly (start in mips, but write a restricted x86 emulator in C for understanding), control flow, kmaps, pipelining, and caching. Get comfortable with Unix terminals.
The same book is good for systems level programming. Focus on threads, processes, and sockets. It should be a natural continuation of architecture, starting with the model fo a process and spending the most time on asynchronous design. OCW, Stanford, and Berkeley have good projects and lectures for this.
OS is the synthesis of architecture and systems topics. It’s as close to EE or systems CS as you want it to be, since there’s a lot of crossover (RAID schemes, bus policy and cache obliviousness, parallelization, etc.). At the very least, write a baby OS. Use this free textbook which goes through the history, motivation, and design principles driving OS as a topic.
http://pages.cs.wisc.edu/~remzi/OSTEP/And use the pintOS specification from the associated Stanford OS class. Write the four major components of an OS: the scheduler with asynchronity, the protected memory model, disk policy, and a kernel