I’ve been writting code regularly for quite a while, but have only limited myself to high levels of abstraction and didn’t go deep on understanding what’s happening beneath my code.
Learning from first principles is a bold statement in computer science. You can naively start from C and dig all the way down to the NAND gate —after that point it’s merely physics— but the idea is to understand how complex systems are so elegantly stacked on top of each other, how each layer simplifies the one underneath. If you are a backend engineer, you probably have a good understanding of HTTP and know how to design REST APIs, but how is your TCP game? Do you understand what’s beneath IP?
I don’t, but I recently thought that it could be very useful to boil down a system to its most fundamental level and reason up from there to come up with fresh ideas.
I will dedicate a lot of my time to exploring topics like networking, computer architecture, compilers and operating systems. Here are some resources I’ve been pointed to:
- Operating Systems: Three Easy Pieces
- Computer Networking: A Top-Down Approach
After reading some theory, a challenging side-project would be to write something like a compiler from scratch, or implement a protocol like SMTP only by looking at its specification.
Take a historical note of the textile and steel industries: Do you want to build machines and tools, or do you want to operate those machines?