Have you read ‘The Pragmatic Programmer’ by Andy Hunt and David Thomas? How about ‘The Passionate Programmer’ by Chad Fowler? Robert (Uncle Bob) Martin's books? If you haven't, I highly recommend that you do.
‘The Pragmatic Programmer’, considered as one of the classics, teaches you how to transition from a vanilla software developer into a master by adopting a more pragmatic approach. Written decades ago, but still very relevant in the present. ‘The Passionate Programmer’ on the other hand, is about being nothing but remarkable, how to drive yourself and take action. If you add Uncle Bob’s books into the mix, then you are now in possession of something equivalent to Batman’s utility belt — an arsenal of stuff that will help you in every software developer endeavors that you’ll ever encounter.
Don’t get me wrong — the books are all already really great, very useful and highly insightful. But let’s face it, you won’t really remember all the important information that you’ve read on a hundreds-of-pages technical books. If you don’t deliberately put an effort, you’ll most likely to remember only bits of pieces that resonates for you in that particular time of reading.
And that’s the reason why I’m writing this article. I want a different form, a more cohesive structure that will help me place all the concepts and ideas quite snugly in my brain. This won’t be a summary or book review, but more of a reference guide, that I could look back to whenever I feel stuck or even down. Like a map, chart, or a mental model of the concepts discussed on all those books combined. Like a personal bible, a personal manifesto — that’s what I’ll attempt to create in this series of articles, my first ever blog post. (Oh and yeah, I wrote this mainly for myself. I’m an amateur, sorry in advance.)
After reading the books, I classified the ideas into different blocks. There might be a more suitable mental model but this will do in this moment. I broke down the concepts and ideas from the said books into the following components shown in the image. This will be my high-level general map. (Maybe I’ll also try to make an interactive web app or some sort, some other time.) I intentionally chose to use computer-related terms as component names for better reinforcement.
This is often where you find the “buzzwords” of your programming language, like a short summary of it’s capabilities. Object-oriented, multi-paradigm, portable, platform-independent, and what not’s. In the same manner, this section will outline the general characteristics of an ideal programmer.
This component refers to the ideal programmer’s general mindset. The general ideal outlook to have on a daily basis. A maxim that you should always keep running on the background to guide you in your everyday decisions.
Refers to the techniques and ideas that you should accomplish before actually hitting that first keystroke on your mechanical keyboard to code.
This section will discuss the things that you should keep in mind while you’re deep in that keyboard-frenzy, coding trance.
Yep, just like what it said. This will contain all the general coding principles that every developer should know. These are handy tools that will help us in our day-to-day implementation tasks.
This article will not be an in-depth discussion of software design and architecture, there’s a lot of books to cover that. This will just introduce the existence of them and how they can help us.
This section is not about the debugger and how to use it, but the act of debugging itself. It’s more on how to find the problem to eventually fix it. You could be debugging code, or just any general problem. Whatever it is, don’t debug blindly, there’s a better way of doing it.
You maybe a great coder, but if you can’t express yourself in words, you won’t be very effective on a distributed team. This section is all about communication — tips and tricks, things to remember when interfacing with people throughout your job.
Lastly, this section will ponder on your software development career. How to build it, what to watch out for, and how you should generally view it.
I will go into detail in a separate post for every component and provide appropriate hyperlinks while I’m at it. For now, this main() article will serve as the overview.