I enjoy learning – the thrill of discovering new ideas, studying new concepts and applying them to my daily job has never worn out. This curiosity has served me well over the years and I hope to sustain it indefinitely.
Looking back though, I could have maximized my returns on time and effort by structuring my haphazard learning approach. For example, I struggled with advanced books because of my weak grasp of some fundamentals.
This post is meant to share a few things I have learned about learning; maybe it’ll enable others to avoid my mistakes.
Why do I have to keep learning?
A colleague once asked me why I was slogging through the SICP book a few years back; in his opinion, there was no use for that. However, I am glad I did not take his advice: that book deeply changed the way I viewed computing and software development.
Some of the best senior engineers I have worked with spend some time everyday learning. These engineers are open to new concepts, easily switch between the big picture and minutiae and have a solid grasp of fundamentals. These are folks you can discuss pretty much anything with at anytime: the latest new tool in town, some abstract computer science theory, engineering systems, leadership, etc.
Tips to make the most out of learning
Now that you know why you have to keep learning; here are some tips that’ll enable you to make the most out of it.
One of the keys to achieving mastery is to make learning a habit. One thing I have actively tried to do throughout my career is to spend some time learning every day. My best growth came when I kept up this learning streak; invariably I would miss a day or two but that was OK. What slowed down my learning rates was taking long breaks or studying in fits and starts; that necessitated relearning things I had studied earlier.
One thing that has worked well for me is to learn daily for a short amount of time; typically a Pomodoro but sometimes as short as 10 minutes when I am lazy. If you adopt this style, then try not to break the chain. Keep going at it day in, day out even when it is challenging. Over time, the investment in knowledge compounds and you’ll start reaping the fruits of your labour.
It might get painful and be tough to keep up but do keep at it. Make sure you end the day better than you started it.
Study Classics and Fundamentals
Those who cannot remember the past are condemned to repeat it.George Santayana
Don’t hop on the bandwagon train! It’s very easy to waste precious time hopping across different bandwagons and not getting to the destination of mastery. Why? Well, most times, engineers on a bandwagon spot even fancier new trains, hop on them and forget the true goal.
Fads come and go but the fundamentals stay evergreen. Moreover, most new fads trace their ideas to old concepts. Disagree? Here are some examples:
- Micro-services can trace their roots back to the UNIX philosophy of small tools doing one thing really well
- Document databases are really similar to the hierarchical databases of old (I mean the 70s)
- MVC? Started at Xerox in the 70s
Having a true grasp of the fundamentals equips you with a rock-solid foundation you can call on at different stages of your career. The latest fad? It’ll probably fade away in the next 5 years and be superseded by the next shiny thing. I remember working with Mootools and Scriptaculous in 2009; most folks haven’t even heard of these frameworks nowadays. Even jQuery’s popularity is slowly waning.
Rather than jumping on the bandwagon; try to study the classics – the lessons contained therein will last you a long time. Don’t repeat their mistakes, rather learn from them.
What are some of the greatest software and engineering books that have stood the test of time? What lessons abound within? What can you learn from those?
Reading is not enough
It is easy to think you know something until you try it out. I used to go through books at a frenetic pace; my subconscious goal then was to complete books rather than understand them. Consequently, I wrongly assumed I understood some tricky concepts since I completed the authoritative book on that topic. Trying to apply, teach or recall such ideas usually revealed the shallow depth of my knowledge.
A few years back though, I switched to deliberate reading wherein I reflect on ideas, conceptualize counter arguments and take notes. This approach, albeit much slower, is very enriching. It allows me to contemplate the subtle undertones and decipher the author’s true intent. Over time, it has become very easy to identify bias and potential flaws.
If you always agree with an author’s viewpoint then you might not be giving thought to the book’s ideas.
Reading is not enough, reflect deeply and apply!
It is OK to disagree with the author’s views – that means you fully understand the concept to have a viewpoint. Do not swallow everything hook, line and sinker. With careful reviews, it is easy to spot filler material, shallow explanations and lopsided views.
Finally, find ways to apply the lessons to your daily tasks. The true goal of learning is to apply knowledge and not to complete books. And the notes you take would provide excellent refresher material for the future.
If you find a great book/lesson/course, then do your very best to complete it regardless of how tough it is. Struggling with the ideas in a book is a good sign, it means you are learning something new.
Giving up half-way means you lose all the effort you put in and as the saying goes: ‘a little knowledge can be dangerous’. You can fall back on the learning habit to carry through difficult days: all you have to do on such days is complete a teeny bit of learning.
Note: not all books are meant to be completed. Some works are either outdated, poorly written or choke-full of errors. Your time is more valuable so cut your losses and drop them. Use that saved time to find better things to learn. Here are some classics you might enjoy (warning, these are books that can take months/years to read).
- Structure and Interpretation of Computer Programs
- The Art Of Unix Programming
- Designing Data Intensive Applications
- Pragmatic Programmer
- Code Complete
Know where you want to go
Have a clear roadmap for your knowledge acquisition journey. Knowing what you want to learn over time makes it easy to track progress and success. The goal of learning is to improve and not brag so having a structured learning path increases the chances of success.
Good areas to learn include leadership/teamwork, software engineering and communication. What is your 5-year goal? What knowledge do you need to get there? Then dive under and work hard at it!
Those are a few tips on increasing the ROI on learning:
- Study classics and fundamentals
- Reading is not enough
- Know where you want to go
Did I miss anything? Share your tips and suggestions for continuous learning.