January 16, 2019
I chose to study computer science engineering in college with absolute intent to become a computer engineer. I was interested in programming much before that, so it was a natural choice for me. While I was very interested in programming, I was not really a person who was into reading books and following course work. As a result, I sucked at college coursework. I ended up with average grades and at times borderline passing grades.
I didn’t expect this before joining college because I thought that the college course work would contain subjects which I like. While the subjects included networking, operating systems, digital signals, etc all of which held my interest, I didn’t really enjoy studying them as much I thought I would. Luckily, I found interest in a few things which I did, and eventually became a software engineer. It’s going to be 5 years since I graduated, and having worked on a bunch of projects in the industry, I’ve seen some of those subjects applied in real life. Some of the subjects which I almost flunked. If not through directly working on projects which involved those subjects, reading the applied aspects of the theory really made me think that studying those subjects should have been much more fun earlier in college..
Over time I’ve discovered books which if I had known earlier would have built my interest into those subjects better. These books are about computer architecture, modern web technologies and nitty-gritties of building a database application.
One of these books is the Black Book of Gaming Engine: Wolf 3D edition. This book talks about how difficult it was in the early days of personal computing to build a game as advanced as wolf 3d. Challenges around enough memory allocation by MS-DOS, exploiting framebuffer for faster rendering, playing sound, etc. This book touches the metal really well.
This book really got me interested to read about computer organization.
Designing Data Intensive applications by Martin Kleppmann is a great read about all the concepts of building scalable and performance database applications. Aspects being touched in this book are -
High Performance Browser Networking by Illya Grigorik: Front-end engineering is a huge field. There are so many tools, frameworks and now actually a bunch of languages that frontend engineers can get better at. Given so much diversity and variation, there are a few fundamentals that a good web developer should know about. This book covers the basics of browser networking, rendering and script execution stack really well. This that a web engineer should know in order to keep it performance and scalable. Moreover it also covers theory behind mobile networks, specifically parts which apply to how web works on cellular languages.
And finally - Soul of a New Machine by Tracy Kidder - https://en.wikipedia.org/wiki/The_Soul_of_a_New_Machine which talks about how a team of highly motivated engineers worked really hard to release a new 32-bit computer in the 70s competing against big rivals of their time. This book is not related to any specific subject, but a really well written story that involves discussions about low-level computer architecture (which might definitely build reader’s interest in that area) and endless struggle of a relatively young and under-resourced team who won’t give up on their dream to release something big out in the market and create a huge impact. A story that many engineers who are inclined towards working with startups might relate with.