There are only two hard things in Computer Science: cache invalidation and naming things. - Phil Karlton
The ability to break complex things down into simple pieces is a critical skill for problem solving. It's similar to Divide and Conquer in computer science, First Principle in mental models and Simplify in Feynman Technique.
I was lucky to get introduced to this idea relatively early in my career, back then when I was an intern at a company creating digital products for K-12 education. The engineering team there works side by side with school teachers to turn their teaching materials into online courses accessed by K-12 students, and it was beyond impressive for me to work with a group of highly energetic people who have strong faith in what they’re doing. And we all know it’s not that common.
Andrew is the person who introduced me to this idea via a book called The Five Elements of Effective Thinking. It is not a classical best selling book, but the amount of insights covered by it isn't any less than those popular ones. It is centered around the five elements of 1) Learn the basics well 2) Learn from mistakes 3) Learn to ask good questions 4) Follow the flow of creation 5) Engage change. In addition to being a software architect at work, Andrew is also an "unofficial" mentor to me both in and outside of work. Although I had no clue about what a programming job is at the time (still don’t know much as of today :/), he is a deep thinker who can calmly unpack any complex issue to the root. The ability to solve hard problems, other than great instincts and experiences, owes a lot to his principle of Learn the basics well . And the principle can be broken into two parts Basic tools and Basic books.
Dotfiles is the basic tools Andrew shared with me. It opens a whole new world for me. Those are the set of tools that embrace Unix Philosophies, they aren't fancy at all, as simple as plain text, but powerful and composable as hell. Those are the tools that align with the belief of Think super long term. They remind me of general lessons like
- Tools amplify your talent
- If a craftsman wants to do good work, he must first sharpen his tools
can be applied in broader aspects of life.
Below are three books Andrew recommended to me
They convinced me that software craftsmanship is an inspiring pursuit though not being valued enough in current industry. I once imagined myself to grow as a pragmatic engineer at job, but later painfully realized that I turned into an on-call operator instead. Those books also help me get into the habit of reading, which is a complete shame not doing it earlier in my life.
We haven't met each other for years, but I've always had a tremendous respect for his broad knowledge and skills. I can’t be more grateful for the mentorship he gave me, but probably what’s more important is that regardless of what I am doing, I will always carry his advice of Learn the basics well around with me.