In my last post, I mentioned that I’m implementing my current project with some new (to me) technologies, namely Python and Django. I do often seem to find myself doing each new project while simultaneously learning some new language or framework. There’s something very appealing about learning new things. All technology stacks have faults and idiosyncracies and you come to know these as you become familar with them. Unknown tools have the promise (never actually fulfilled) of being perfect. Perhaps there’s also a bit of self-protection involved. If this is “just a learning project” then it doesn’t matter how good it turns out to be. If you’re using technology you already know well, you have to face up to how good your work actually is. Using new tools can also make the experience more challenging and varied. Grunt work is less boring if you’ve never done that particular type of grunt work before.
While Python and Django aren’t really new technologies (they’ve been around for a few years), genuinely new things have additional appeal. Technology is constantly changing, new things are being invented, and it can often feel like you need to keep up with it all or risk being left behind. There’s also the tantalising possibility that some new piece of technology will come along to make everything much easier, and that you’re doing unnecessary work by sticking with the old thing.
However, I do think there are several benefits to sticking with the same technology stack for several projects. To start with, the first project you do inevitably involves a lot of time spent looking things up in documentation and figuring out the best way to do things. Subsequent projects using the same tools should be quicker to develop. It takes time to learn the best ways to do things and real expertise comes from knowing a few things deeply, rather than many things in a shallow way. There’s also the benefit of code re-use. Implementing multiple projects should give you a decent library of reusable snippets of code for future projects, and even drop-in components if you package up your code that way. As a developer, it’s also helpful to be able to specialise in one or two core technologies when looking for work.
So I do intend to stick with Python and Django for a while as my main tools for making web applications. I’m certainly enjoying using them so far.