Past two months I’ve been reading a few dev books, I went to Uncle Bob’s Clean Architecture course and Skillsmatters µCon. I also did coding tests and helped onboard people on my team. This made me realise two things, a) I’m learning a lot and b) I still don’t know shit. So here is my SEO optimised take on how to become a better software engineer.
Why is it important to continue to learn? I believe it will make you more interested and happier in your day to day work. It may increase your salary and get you hired. Having performed interviews myself, I think it’s important to be able to show how you are developing yourself and staying up to date with both technology and development practices.
So how do we become better
There is an old saying that 10.000 hours will make you a master of anything. Recently, this has come under scrutiny. David Epstein (see the New York Times article) talks about how this may not be the case. How generalising and doing deliberate practice is what will actually get you there.
I still believe that practice makes perfect however and what you do on your day job will only get you that far. Seldom do we get a chance to look beyond what’s absolutely necessary to do in our 9-5.
But, you may have kids, spend time with friends or have hobbies you prefer over learning python in the evenings. Fair enough, learn from others instead. There is so much literature, podcasts and videos now that can condense that knowledge for you.
Here are the things I do, aside from coding that’s possible to do during the commute or by convincing your boss that investing in you is actually investing in their business.
Many stop reading after school. The best people I’ve worked with didn’t. Speakers at conferences, thought-leaders, they recommend reading. I think it’s safe to say that books are still an awesome way to skill up. Compared to blogs or discussions, they have a lot more work gone into them. They’re higher quality and often, disputed. So if you are recommended a book, chances are, you’ll learn something from it.
These following books are some of which that have had a big impact on me as far as coding goes:
- Clean code by Robert. C. Martin on how to write good code
- Clean architecture also by Robert. C. Martin on how to write/architect/design maintainable applications
- Domain-driven Design Tackling Complexity in the Heart of Software by Eric Evans on how to break down complicated problems
There is more to software engineering than writing code though. We need to fully understand what to write, why and with whom. Therefore, I think the soft skills of engineering is just as important. These are a list of books I can warmly recommend for other practices:
- Scrum and XP from the trenches and Lean from the trenches by Hendrik Kniberg. An actual account of how Scrum and Kanban can work.
- Crossing the chasm by Geoffrey A Moore on why MVPs are so important and how building products is very different between your first and final customers.
- Chapter 2 of The Mythical Man Month by Frederick P Brooks Jr.; So you can make a case for how spinning up another parallel team won’t make development go 2x faster. The rest of the book didn’t give me as much but the chapter of the MMM is gold.
- Managing Humans: Biting and Humorous Tales of a Software Engineering Manager by Michael Lopp. Everyone should read this, it tells you both how to be an engineering manager and staff of one. It’s insightful and written in plain human language.
- Accelerate: The Science of Lean Software and Devops: Building and Scaling High Performing Technology Organizations. Aside from having a ridiculously long title, it condenses four years worth of actual research to prove how doing stuff right matters. They punch a hole into whether DevOps is the way to go and simply tells us it is, then backs it up with why
Blogs are up to date and timeless at the same time. They’re easily consumable and peer-reviewed. It can be hard to find good ones but sign up to medium or follow a few clever people on twitter (Scott Hanselman for example) and you’ll quickly start getting good tips. I use pocket when I get something I find interesting, tag it and read later. Here’s a bunch of cherry picks from my pocket list:
- The psychology of pair programming
- The anatomy of a perfect pull request
- Develop this one fundamental skill if you want to become a successful developer
- Refactoring — oops, I’ve been doing it backwards.
Watch video courses
We truly live in a time of unlimited knowledge. I do Pluralsight when I need to pick up something new. It’s cheap for 35$/month and usually, a weekend is good enough, compare it to buying a book. I used it recently for learning Angular and Machine Learning and I’ve also done Udemy when I learned Dart and Flutter. There’s loads of free video content on youtube as well. For example, check out Siraj Raval who’s got witty videos on AI. Skillsmatter has free Skillscasts (recordings of talks).
Take courses and visit conferences
I don’t think I have ever been asked by a manager to “go to that course”. It is strange really. Any other industry encourages employees to skill up and even has fixed programs you need to take to go to the next level. In our industry, we need to proactively say “I want to learn X”. This is great in a way though, you can choose where to go!
I’ve been contracting for a long time though. This means that I’m in control of my own budget and trust me, motivating paying £2000 to go on a course, including the missed three days I can’t invoice for, that’s tough. Comparing it to gaining skills that will easily allow me to up my rate another £25/day for upcoming contracts though. The ROI can’t be measured but is invaluable. Not to mention how it makes me feel more confident and humble. See Takeaways from MuCon 2019 as an example of how much you can learn from one of these events.
So get your manager to approve a course or conference. At least once yearly. For those living in London, I recommend Skillsmatter, I’ve done two courses with them. Both drastically changed the way I approach work.
Go to meetups
Again, in London Skillsmatter has lots of meetups. I’m sure there are meetups and user groups in your city too!
It might feel strange to go to one of these, maybe you don’t have anyone to go with but, just go. After the first time, you won’t feel as weird and it’s a great way to ingest new ideas. Just like conferences you put yourself in a situation where you’re forced to focus on the concept and it might not be as high quality as a conference and two out of three might not be hitting home but it’s still an awesome and cheap way to broaden your horizons.
When you read blogs and books, you only access content either through what you read or from what you already know. Listening in on other people like this gives you the knowledge you didn’t know you didn’t have.
Never stop learning
I think it was in Happy: Why More or Less Everything is Absolutely Fine by Derren Brown, that I read about the graph of skill vs challenge. Basically, we’re happy when we’re not bored or stressed. If you do something enough you’ll get bored and you’ll need to do something harder, that usually means you need to learn something new otherwise you’ll be stressed. This also helps you stay in the flow. Look at this graph here:
This is age-old advice but I really see how it works out, that’s why we change workplaces and as engineers, we want to try out new things right?
I don’t think these five things I’ve listed above is anywhere an exhaustive list, there are loads of other things you can do, brown bag sessions, lightning talks, chapters etc. Just don’t stop learning!
If you’ve got more ideas or experiences of your own, tips of books or posts you’ve read, please let me know! Thanks for reading!