For technologists and especially software engineers and engineering managers, cultivating the art of continuous learning is critical now more than ever in order to stay relevant.
Originally published on Medium on March 25, 2024
The constant and unyielding march of technological innovation knows no bounds, while the workforce is a diverse set of talents that span the globe. With the advent of entirely new job categories driven by technological transformation, globalization, and AI — countries, companies, and individuals are engaged in a frantic race to maintain their competitive edge.
It’s widely acknowledged that embracing lifelong learning is imperative for any worker aspiring to remain relevant in this rapidly evolving landscape.
For technologists and especially software engineers and engineering managers, cultivating the art of continuous learning is critical now more than ever in order to stay relevant.
Lifelong learning is imperative for any worker aspiring to remain relevant today.
The Art of Continuous Learning
Or perhaps the Science? Whilst the heading “The Art of Continuous Learning” emphasizes the creative and intuitive aspects of lifelong education, we should also acknowledge the scientific foundations of effective learning strategies. Scientific research into understanding, memory, and learning psychology provides valuable insights into how individuals can acquire and retain knowledge over time.
Adopt the Growth Mindset
The growth mindset, a concept which was popularized by psychologist Carol Dweck, refers to the belief that one’s abilities and intelligence can be developed through dedication, effort, and perseverance. Expressed simply:
People with a fixed mindset — those who believe that abilities are fixed — are less likely to flourish than those with a growth mindset — those who believe that abilities can be developed.
Individuals with a growth mindset see challenges, setbacks, and failures as opportunities for learning and growth rather than as indicators of fixed traits or limitations. This is both true for individuals cultivating a mindset for themselves and for managers developing high-performing teams trying to maximize the potential of every team member.
A growth mindset is characterized by positive views of challenges, obstacles, effort, criticism, and the successes of others — all of which contribute to continuous learning, improvement, and personal development:
- Challenges: Embracing challenges rather than avoiding them. Individuals with a growth mindset view challenges as opportunities for growth and learning. Instead of shying away from difficult tasks or situations, they actively seek them out, knowing that overcoming challenges can lead to personal development and improvement. They understand that facing challenges head-on helps them expand their skills, knowledge, and capabilities.
- Obstacles: Persisting in the face of setbacks rather than being tempted to give up easily. People with a growth mindset understand that setbacks and failures are not indicative of their or others abilities but rather opportunities to learn and grow. Rather than giving up at the first sign of difficulty, they demonstrate resilience and perseverance. They see setbacks as temporary roadblocks and are willing to adapt, iterate, and try alternative approaches until they achieve success. Each setback is seen as a valuable learning experience that contributes to their overall development.
- Effort: Seeing effort as the path to mastery rather than seeing it as fruitless. Individuals with a growth mindset recognize that mastery and success require consistent effort and dedication over time. They believe that their abilities can be developed through hard work, practice, and perseverance. Instead of viewing challenges as insurmountable obstacles, they approach them with a willingness to exert effort and invest time and energy into improving their skills. They understand that progress may be gradual and that each effort contributes to their overall growth and development.
- Criticism: Learning from criticism rather than ignoring useful negative feedback. Those with a growth mindset value constructive criticism as an opportunity for self-improvement. They understand that feedback, even when negative, provides valuable insights into areas where they can grow and develop. Rather than taking criticism personally or becoming defensive, they approach it with an open mind and a willingness to learn. They actively seek out feedback from others and use it to identify areas for improvement, refine their skills, and enhance their performance.
- Success of Others: Finding lessons and inspiration from the success of others rather than feeling threatened by their success. People with a growth mindset celebrate the achievements of others and see them as sources of inspiration and learning. They recognize that the success of others does not diminish their own potential but rather serves as evidence of what is possible with effort and dedication. Instead of feeling envious or threatened by the success of their peers, they seek to understand the strategies and techniques that led to their success. They view successful individuals as role models and mentors, from whom they can learn valuable lessons and insights to further their own growth and development.
Adopt Learning Strategies
Admittedly, it can be difficult to find the time to manage adding yet another item to the list of things on your todo list as an engineer. After all, other responsibilities and interests as well as the feeling of burnout and time management challenges can often play a part in feeling overwhelmed.
Setting goals, practicing self care, taking breaks, taking time for reflection, and other workload management techniques are all complementary to continuous learning.
Why not adopt some common learning strategies:
- Spaced Repetition: Spaced repetition is like giving your brain gentle reminders about what you’ve learned, but spaced out over time. Instead of cramming everything in one go, spaced repetition lets you review information at intervals that are just right for your memory. It’s like watering a plant regularly to help it grow strong roots. By spacing out your review sessions, you reinforce your memory and make sure the knowledge sticks around for the long haul. Perhaps take 15 minutes at the start of the day, or 30 during lunch.
- Active Recall: Active recall is all about flexing your memory muscles. Instead of just staring at your notes, you actively test yourself to see what you remember. It’s like trying to recall a friend’s name without looking it up on your phone. By forcing your brain to retrieve information, you strengthen your memory and deepen your understanding of the material. It’s like a mental workout that makes your brain stronger and more resilient. For engineers actively engaging with code, working on small projects and working through problems will do more for your learning than note-taking alone.
- Interleaved Practice: Interleaved practice is like mixing up your favorite playlist instead of listening to the same song on repeat. Instead of focusing on one topic at a time, you switch between different subjects or skills during your study session. It’s like doing a little bit of math, then some science, and then maybe a bit of history. This approach challenges your brain to make connections between different ideas, which helps you learn more effectively. Plus, it keeps things dynamic and engaging keeping you motivated to keep learning.
The Role of Books
As the attention spans of individuals has seemingly diminished over time technology for serving up knowledge has transformed to match or perhaps, again, the technology itself is the reason behind the change. With the emergence of so much in the way of short-form content: micro-blogs, micro-learning platforms, podcasts, Reels and Tik-Toks, and automated summaries it might seem like reading a book is a bit old school or just for academics.
However, reading through something that is more often than not, a cohesive thought end-to-end will help you to find lessons and shortcuts from the experiences, failures, and successes of others that will likely leave a more lasting impression on your mind. Certainly, there is room for both books and micro-learning, personally I take advantage of both. Interleaving both up-to-the-minute short-form content, books, long-form blogs and white papers, and online learning courses like Udemy, Pluralsight, Coursera or even YouTube is a great way to ensure your learning is effective and your motivation stays high.
Today many books that are not purely teaching a new programming language or paradigm — where you would benefit from reading code directly — can be listened to using audiobook platforms and can replace your session of lofi hip hop beats to study to or your regular engineering playlist for a few days.
Books can be a great source of knowledge and inspiration for software engineers.
Seek out different types of books beneficial for professional development, including technical manuals, industry insights, and personal growth literature. Explore beyond your comfort zones and discover new perspectives through diverse reading selections. Often software engineers are high IQ and can bristle at the thought of prioritizing EQ (emotional intelligence) but both are necessary for your success.
As an aside, great engineering managers are usually high in EQ. So if you’re sat there thinking what has my manager ever done for me? Then either you don’t have a ‘great’ manager or you’ve failed to take advantage of the one you do have. Adopt the growth mindset, seek out mentorship and guidance even if it means you have to find it outside your immediate leadership chain.
Great managers are not born, they’re made — all the skills needed to become an effective engineering manager and leader can be learned.
Back to the books. I have a few (non-exhaustive) personal recommendations of my own after just over two decades navigating the software industry:
Engineering Skills
- The Pragmatic Programmer by Andy Hunt and David Thomas — The Pragmatic Programmer is a great book about owning your engineering / development career and focusing on regularly making small changes for continuous improvement. It is aimed at software developers who want to write better code and avoid common pitfalls. The writers were also involved in the creation of the agile manifesto.
“Don’t be a slave to history. Don’t let existing code dictate future code. All code can be replaced if it is no longer appropriate. Even within one program, don’t let what you’ve already done constrain what you do next — be ready to refactor… This decision may impact the project schedule. The assumption is that the impact will be less than the cost of /not/ making the change.”
“You Can’t Write Perfect Software. Did that hurt? It shouldn’t. Accept it as an axiom of life. Embrace it. Celebrate it. Because perfect software doesn’t exist. No one in the brief history of computing has ever written a piece of perfect software. It’s unlikely that you’ll be the first. And unless you accept this as a fact, you’ll end up wasting time and energy chasing an impossible dream.”
“All software you write will be tested — if not by you and your team, then by the eventual users — so you might as well plan on testing it thoroughly.”
“”Kaizen” is a Japanese term that captures the concept of continuously making many small improvements.”
“Your ability to learn new things is your most important strategic asset.”
- Clean Code by ‘Uncle’ Bob Martin — As someone who was a self-taught programmer this was the first time I read a book (and watched a set of eccentric videos) that pulled me out of the mindset of “my code is excellent, it never breaks, so I don’t need to write tests for it and I love to write the complex code to try new things”, to making functional code that works for the reader and not just the writer. Highly recommend understanding clean code concepts and SOLID software engineering. As with everything in life, take the parts that work best for you and our team. NB: Java-centric.
“Truth can only be found in one place: the code.”
“So if you want to go fast, if you want to get done quickly, if you want your code to be easy to write, make it easy to read.”
“One difference between a smart programmer and a professional programmer is that the professional understands that clarity is king. Professionals use their powers for good and write code that others can understand.”
“First Law You may not write production code until you have written a failing unit test. Second Law You may not write more of a unit test than is sufficient to fail, and not compiling is failing. Third Law You may not write more production code than is sufficient to pass the currently failing test.”
Engineering Patterns and Algorithms
- Design Patterns: Elements of Reusable Object-Oriented Software — Design patterns are a general reusable solution to common problems in software design. A lot of modern languages have first class (or standard library) support for some software design patterns these days but if you have to build them yourself, select the best one for a job, or have a common ‘language’ for system design features with colleagues, then this book is a good place to start. Don’t reinvent the wheel.
“Design patterns should not be applied indiscriminately. Often they achieve flexibility and variability by introducing additional levels of indirection, and that can complicate a design and/or cost you some performance. A design pattern should only be applied when the flexibility it affords is actually needed.”
- Data Structures and Algorithms by Michael T Goodrich — Books on data structures and algorithms — your basic recipes and building blocks for solving software engineering problems. Many data structures these are first class in modern languages but when you understand them in a more abstract way then you’ll make the right decisions about which to use and when. He has versions of this book in multiple languages including Java, Python, C++, etc.
Architectural Skills
- Build Microservices — by Sam Newman by provides you with a firm grounding in the concepts while diving into current solutions for modeling, integrating, testing, deploying, and monitoring your own autonomous services microservices, whilst recognizing microservces are not the solution to everything.
- Designing Data-Intensive Applications by Martin Kleppmann — Perhaps not for the early engineer as it could perhaps be intimidating but I definitely wish I had this book when I was having to consider the concepts building large distributed systems and selecting databases/messaging systems - it has validated and confirmed a lot of choices found through empiricism. Designing Data-Intensive Applications is a book about building scalable, reliable, and maintainable systems. It is aimed at software architects, developers, and system administrators who want to understand how to build scalable, reliable, and maintainable systems. Great for deep, foundational, and internals knowledge and a recommended read for any engineer.
“Data outlives code.”
”Pretending that replication is synchronous when in fact it is asynchronous is a recipe for problems down the line."
"Working with distributed systems is fundamentally different from writing software on a single computer—and the main difference is that there are lots of new and exciting ways for things to go wrong”
“Consensus is one of the most important and fundamental problems in distributed computing. On the surface, it seems simple: informally, the goal is simply to get several nodes to agree on something.”
”Violations of timeliness are “eventual consistency,” whereas violations of integrity are “perpetual inconsistency”
Soft Skills
- Atomic Habits by James Clear — Speaking of “Kaizen”, its meaning is change for the better or continuous improvement, an awesome career in engineering is basically an unwritten agreement to continuously learn. Atomic Habits shows how small improvements (e.g. read two pages of a book/article daily) can compound over time and lead to large rewards. It’s worth applying that to your learning process — pairs well with the advice in “The Pragmatic Programmer”
“Every action you take is a vote for the type of person you wish to become. No single instance will transform your beliefs, but as the votes build up, so does the evidence of your new identity.”
“The only way to become excellent is to be endlessly fascinated by doing the same thing over and over. You have to fall in love with boredom.”
- Emotional Intelligence 2.0 by Travis Bradberry & Jean Greaves — Your IQ will only get you so far in this industry. Relationships count. Emotional intelligence is the ability to understand and manage your own and others’ emotions.
“Emotional intelligence is your ability to recognize and understand emotions in yourself and others, and your ability to use this awareness to manage your behavior and relationships.”
“The secret to winning this culture game is to treat others how they want to be treated, not how you would want to be treated.”
“Some of the most challenging and stressful situations people face are at work. Conflicts at work tend to fester when people passively avoid problems, because people lack the skills needed to initiate a direct, yet constructive conversation. Conflicts at work tend to explode when people don’t manage their anger or frustration, and choose to take it out on other people. Relationship management gives you the skills you need to avoid both scenarios, and make the most out of every interaction you have with another person.”
There are many more that could have made this list and I’m sure you have some of your own — feel free to engage in the comments.
In Conclusion
- Lifelong learning is essential for workers to stay relevant in today’s rapidly evolving technological landscape.
- Continuous learning is particularly critical for technologists, including software engineers and engineering managers.
- Key aspects of continuous learning include adopting a growth mindset, embracing challenges, persisting through setbacks, and seeing effort as essential for mastery.
- Learning strategies such as spaced repetition, active recall, and interleaved practice can enhance learning outcomes.
- Despite the prevalence of short-form content, books remain valuable for gaining in-depth knowledge and diverse perspectives.
- Exploring technical manuals, industry insights, personal growth literature, and EQ development can benefit software engineers and managers.
- Seeking mentorship and guidance, even outside immediate leadership, is crucial for professional growth.
Embrace learning as a lifelong journey and leverage the gamut of resources available to you to enhance your skills and advance your career. Curiosity and learning is the lifeblood of the livelong software engineer!
Next Steps
- Share your own favorite learning resources or book recommendations in the comments section.
- Follow my blog (and others) for future updates on my engineering exploits and professional / personal development tips.
- Connect on social media channels