My learning plan for Q1 2017 – Staying current as a developer

As a developer it’s important to stay current and up to date for the profession and area you’ve chosen. I’ve always weighed up the value of learning X based on these questions.

  1. Does it enhance an existing skill-set?
  2. Is it an essential skill?
  3. Will it advance my career?
  4. Can I learn something else in the process?
  5. What are my goals?

Answering No to any of these questions doesn’t necessarily rule it out, there has to be some room for fun, and learning something which is completely unrelated. Are you a front-end developer who spends a full 8+ hours a day in the browser? Perhaps learning Elastic Search and distributed computing concepts would get you out of your comfort zone.

Before I rattle off my list for Q1 and my plan, I thought I’d expand on my reasoning in the hope that it helps someone else as I think about how to best use time efficiently quite a lot.

Does it enhance an existing skill-set?

Are you a master at what you do? I’m not talking about scraping by either. If you’ve learnt how to build things by copy/pasting code from Stackoverflow and “learning as you go”, there’s a good chance you haven’t mastered whatever it is you’re using. “Knowing” JavaScript, as an example, to me means you have mastered the language, know all of the language features and pitfalls (including the new ECMA standard) and rarely, if ever, do you need to Google how to do something. My problems should be focused on the business’s problem domain.

Whatever technology you’re using, if you Google frequently to find answers or you’re writing code knowing there’s a better way or using hacks to get around what you don’t know then it might be a good indication that you need to dive deeper. It’s about being better at what you do and most of all, saving time. You’ll create better solutions and be in a position to take on more technically challenging roles.

Is it an essential skill?

SQL isn’t something I enjoy writing but I know I need to get better. Almost every job, solution or problem space I’ve worked in involved working with relational data. In my line of work it is essential.

It doesn’t have to be SQL though, you might be a game developer and SQL isn’t a concern but it can be something else you rely on to do your job. Perhaps it’s an API or a library you work with frequently, it might be the command line or something else.

Will it advance my career?

For me this isn’t about getting promoted (although it might be for you), it’s about having a skill-set which makes me more valuable. As an example, I am currently employed as a back-end developer, rarely touching the browser. If I learnt React, I’d be more valuable to keep around (should my contact expire) and be able to deliver work faster instead of waiting for a front end developer to become available.

Advancing a career might also mean changing responsibility. You could, for example, decide that you no longer want to be a developer who slings code all day long, but instead would like to focus on infastructure and cloud based services. Where I am currently employed we have developers whose main focus is infastructure and all things AWS and Azure. It’s a skill-set on it’s own and like anything, needs practice to master.

The area I’ve chosen as a career path is web application developer, and unfortunately it’s a bit of an overloaded term. Does that include the browser stack? Depends who you ask. I am focused on writing server side code which expose functionality through HTTP endpoints. That might mean accepting a request from any HTTP client, placing a message in a queue, generating a PDF, or any number of tasks a server might process depending on a request. Server side code architecture, scalability and automated tests are what interest me.

What else can I learn?

It might not be possible, but I’d like to have at least one goal which includes another possibility to learn something.

The Raspberry Pi presents the perfect opportunity for me to learn about IoT, electronic circuits and at the same time, learn the basics of Linux. The Arduino is the same, I can learn about digital circuits and also learn C. Learning how to use Elastic Search will also give me the ability to learn Linux (if I choose to run it there), and also scratch the surface on distributed computing concepts. I might even run Elastic Search in Docker!

I need to learn at most, one skill, which will allow me to learn another topic. This is so I don’t spread myself thin and I get to touch on other areas which might take me somewhere else.

What are my goals?

Whatever I choose to learn, there has to be a goal or good reason. If I choose to learn Angular2, there might not be a long term goal but it will give me more employment opportunities and be more marketable…a safe bet that I’ll have a job in maintaining legacy Angular2 apps 5 – 10 years from now 🙂

Whether or not you enjoy maintaining software (I do) is another discussion. My point is that not everything has to have a long term goal. If you enjoy the latest and greatest frameworks, then a short term goal might be to learn Angular2 and then jump ship as soon as Angular3 or the next popular front end framework comes along.

My list for Q1

I’m trying to be realistic with this list and is the reason there’s only three items. Filling it up and not completing any of it is not a good strategy. Three goals per quarter is really just 1 topic per month, which for me equates to 40 hours.

ASP.NET MVC/Web API

Essential to my job and something which needs more in-depth look. It’s a stack I use at work and at home when I’m freelancing. Many versions have gone by since version 3 and it’s time I dig deep and work with more advanced features found in newer versions.

Debugging .NET applications with WinDbg

Many a time have bugs come to me with no real way to debug them or bugs which only happen in production. What happens in those cases is we add more logging and deploy a build. If we still aren’t getting the information we need, we repeat the process and add more logs. What this amounts to is messy logging code scattered everywhere and most probably some more effort to remove the logs when the bug has been found. And what about memory leaks? Adding more logs is not always a good approach.

I can debug .NET apps using Visual Studio and also remote debugging and looking at log files to find the cause of bugs, but sometimes that’s not enough. WinDbg allows you to attach to a running process or open up a memory dump of a crashed process and perform analysis. It’s a much more powerful way to see what’s going on in a running application and a skill which will last me a lifetime.

IoT with Particle Photon

What’s the point of all that work if there’s no time for play? I’ve chosen to combine my love of gardening and an IoT product called the Particle Photon. This is not just some Arduino clone, it’s a low power, 3.3V IoT device which has a full network stack with WiFi and can be programmed from a web browser. Not only that, it can be remotely flashed so when this device is in my garden collecting data or watering plants, I can upload a new firmware without leaving my seat.

Learning this answers “No” to the first three questions in my list, but it does allow me to play around with electronics and learn C++ in the process. The goal for me here is to become more involved in programming and developing for embedded devices so I can “bring my code to life”.

Finding the time

I have a wife, two kids and a full time job. The only time I get to contribute to my growth is at night time. Provided my kids are asleep by 8:30pm, and by cutting out TV from my life, I typically get 2 – 3 hours per night. If we average that to 2.5 hours I get a total of 17 hours a week for myself. If I take some time out to see friends or I don’t study on weekends, I still get about 10 hours a week.

Although everyone’s schedules are different, I think if you make your growth a priority then you’ll find the time you need and make adjustments.

Good luck!