You know, the high level stuff.
When I asked him what he would love to play with, his answer was node.js. And that is worrying. It’s not that node.js is not cool. Or it’s not fast. Rather, it’s the lack of the understanding of both low-level stuff like paging and locking, which one can only learn by programming in C, and functional programming stuffs that allow building a complex system using macro and chain-up-functions. So here is what I would recommend a junior engineer to read:
To have a firm grasp of low level programming concepts. Read the redis source code and read the common unix system calls. Redis: under the hood and Redis Architecture are two excellent resources to get started. Alternatively, read nginx or varnish source code, which is reasonable well written too.
To appreciate the beauty and power of functional programming, learn yourself some clojure or erlang. Clojure is more robust as a functional programming language with excellent jvm support. Erlang, on the other hand, offers a great lesson on how to construct a robust distributed concurrent system. This lesson will still hold true even if you’re coding in C. Like the Curiosity on Mars.
(If you are a fresh graduate and you have finished any of the above book or link, drop me your CV. I’ve got a job for you. )