During my day job, there is rarely any question regarding what I’ll work on next. There may be several stories in a given sprint that haven’t been claimed yet, but my team has experienced some significant turnover over the last 18 months, so I generally just pick the most technically challenging story and move forward with that so that one of the more junior people on the team don’t get stuck with something that they aren’t ready to work yet.
Unfortunately (or fortunately, depending on how you look at things), my choice of what to do during my after hours pursuits are much more open-ended.
In theory, I could do anything. Practically speaking, there is usually a subset of options which are likely to have a higher return on the effort than other options.
In the last year, apart from learning done during work hours, I’ve completed a NodeJS course, done some consulting work, done some work on an email platform (which involved reading a large number of RFC’s in addition to the programming) and completed an Angular course.
If you’d asked me what I was going to work on when I completed my consulting engagement, I would have said that I was going to be working on my email platform for the next several years. Even a few months ago, I would have said that I was quite enjoying my work on the email platform, and that I was going to continue working on it.
That plan was sidelined by a couple of shocks at work, including a story being pulled into a sprint where it looked to me like I was going to need to create a widget from scratch, something that is heavily Angular intensive. Given that I knew very little Angular at the time, that was more than a little alarming, so I decided to take a break from my email platform and get through an Angular class so that I would be prepared the next time that we had something come down the pipe that needed Angular expertise.
Once I finished up with the Angular class, I debated between several different options. I could go back to my email solution. I could go take another class, to either learn a new framework, or even one to just improve my front-end abilities generally. I could go learn more ServiceNow-specific things, or I could spend some time pretending that I was a computer science student again.
I don’t enjoy front-end work as much as I do back-end work, but it was still tempting to sharpen my skills there. Ultimately though, at my current role I don’t do much traditional front-end work with CSS and the like. Additionally, it’s not something that I’m wanting to move into, so it didn’t feel like a great use of my time. I could easily spend a bunch of time getting better with CSS or learning another framework, and then not use what I was learning frequently enough to retain it.
ServiceNow is a great tool, but I’m already familiar with the areas where we spend most of our time at my day job, and I don’t want to spend dozens of hours learning a new module that may or may not get used at my job.
Studying the kinds of algorithms that get studied while pursuing a traditional computer science degree on the other hand feels like the sort of thing that will pay dividends for years to come.
I’m unlikely to ever write a quick sort and use it in production. Frankly, the sorting algorithms built into JavaScript as core parts of the language are more robust and optimized than anything I’m likely to write for production purposes.
The concepts that were used to solve the various problems represented by the algorithms on the other hand are things that I can use over and over again. As I’ve started working through some initial algorithms and data structures, it’s felt a little bit like sitting at the feet of some of the greatest minds of the last several decades, and learning directly from them.
I’m learning a new set of tools, new approaches to solving problems, and blowing the rust off of other tools and concepts that I’ve used in the past, but not recently.
All of which I suppose comes to the point of this post. One of the things that I really love about switching from Accounting to Software Development is the fact that it’s so much easier to make a solid investment in technical skills that make me more valuable than I was before the investment.
When deciding what skill investments to make, it can be tempting to keep chasing shiny new languages or frameworks. There is definitely some benefit to both of those things. Learning Go, which is a synchronous, blocking language help me understand NodeJS (an asynchronous, non-blocking language) at a much deeper level.
Taking an Angular class is useful because using a framework generally allows you to work more quickly than you can without one. Plus it’s something that I use from time to time at my day job.
Paste a certain point though, I think you’re better off working on core competencies. It’s important not to focus all of your time on a dying language or a shrinking platform, but I’m convinced that working on algorithms and data structures–and deepening my understanding of JavaScript/NodeJS is going to be way more valuable to me than learning a second framework or a 5th programming language.
So, when you see more data structure and algorithm type posts in coming weeks, now you know why. And maybe, if you’re just starting out, this post will help you go deeper with regards to your own studies rather than just chasing another shiny new framework or language.