I’m currently reading the book Effective Programming: More Than Writing Code by Jeff Atwood and I’ve recently found this really nice text there: Sharpening the Saw. It basically talks about how we, as software developers, should be improving our skills to perform better in our jobs.
Sometimes we are so busy and involved in our daily work that we don’t dedicate any time to learn new things and improve our skills by our own. But it turns out that improving your skills will make you a better programmer and probably make you much more productive in your daily job, just like the story of the lumberjack that didn’t sharp his saw because he was too busy and spending too much time trying to cut trees with a dull saw.
My idea with this post is to talk about ways to sharpen your saw and how can you become a better programmer by dedicating some of your time to competence development and then performing better in your daily work.
One nice way that is quick and effective is to make some kind of coding kata every day. It can involve problem solving techniques, using some different programming language or anything that will make your brain work and learn something new every day, even if it’s a minimal syntax quirk of a language.
Problem solving is always fun, and there are some sites where you can go and find cool problems. Some of those are huge database of problems that you can pick randomly like:
While there’s also some that already have the “problem of the day” where there’s not really a validation process but people can share their solutions and learn from the others, like:
Or you can also participate in competitions:
*happen just once a year
Another way to grab new knowledge is to attend some of the amazing online courses from Coursera. I’ve attended the Algorithms Part I from Stanford and I’m currently oh the Functional Programming Principles in Scala by the University of Lausanne where the professor is the creator of Scala and it’s being really nice to learn new things and remember the things that were rusty and dusty in my mind since the university.
There are courses for all different levels in programming there, and I’m pretty sure you’ll find at least one that will interest you: https://www.coursera.org/category/cs-programming.
Another way to sharpen your saw is more old-school, but still very efficient, and it is: READING!
There are so many amazing books about software development out there that wouldn’t fit in this blog nor in my bookshelf, but I’ll mention some of my favourites:
- Programming Pearls - Probably my favourite book about programming, it covers some different topics in a nice and compact way and IMHO it’s a must-read for any coder
- The Algorithm design manual - If you like algorithms you’ll probably like this book, it’s not so dense but it can still give you a nice background for problem solving without making you dizzy :)
- Programming Collective Intelligence - Also a really accessible approach to the resolution of some problems that in theory can be complex
And you? How do you sharpen your saw? Is there any other thing that you would add to this list? Feel free to add as a comment!