It’s a new year and time for declare a resolution. Mine is to pick a stack and become an expert in it. Why would I need to do this after more than a decade of industry experience? Shouldn’t I already have my go to programming language that I’ve already mastered? Probably.

I don’t know how pervasive it is among other developers but I work for a major government contractor. How that tends to work is the company generally maintains the same total number of developers but contracts will spin up and down usually in 2-3 year spurts. Each of these contracts can have wildly different tech stacks. I’ve done a few programs in C++, others in Java, NodeJs, Go and even Matlab which is an awesome experience to get to try so many different technologies. However, that also means I’ve never spent more than a couple years using any one programming language and I could spend just as much time not using a particular. I probably worked with C++ for about five years but it was the first five years of my career and haven’t really used it since. I’m sure it would come back to me pretty quick but it would take a minute.

Obviously there’s more to software engineering than just memorizing a languages syntax but the lack of comfort in a language can be demoralizing. I sometimes feel like three juniors in a trench coat rather than a senior.

To rectify this I have a simple 4 step plan:

  1. Pick a language
  2. Use it exclusively for all personal projects
  3. Slip it into the codebase at work whenever possible for tools and helper utilities
  4. Profit

First things first, I need to pick a language. Right now there’s tons of languages choose from, like C/C++, Java, Go, Rust, JavaScript, Python and a ton more. I’m going to have to narrow it down. So I came up with some requirements:

  1. Statically typed and compiled - I’m not a fan of creating large complicated projects in dynamic interpreted languages
  2. Powerful standard library - I don’t want to have to import a ton of libraries in order do anything meaningful
  3. Simple build process - I don’t want to spend more time making sure the build config and links are working than I do coding
  4. Can lead to a job - I’m not actively looking but the point is to make my self more marketable

Right off the bat, these rule out some of the more niche and smaller languages. I’ve heard cool things about the various functional languages like OCaml, Roc and Elixir but there just aren’t many jobs using the language. This is an exercise in career development after all. I’ll circle back around to them some other time.

Rust also sounds really cool and powerful. There’s even been some talk about using it in at work but the market (from what I can tell) is still very small right now. Besides I don’t really feel like dying my hair blue.

Python is ruled out because of it’s dynamic typing and interpreted nature. I like Python a lot but I just love the satisfaction you get from a successful compile.

I decided against C/C++. I’ve worked a lot in the language and I know you can basically do and make anything with them but I feel like they’re used more for hardware programming now a days. I’m just not interested in that at the moment. Maybe that will change but for now it’s not what I’m looking for.

Java was a hard one to rule out. It was the first language I learned to program with. It’s one of the most used languages with the most job opportunities. Its verbosity never bothered me. Honestly it came down to not feeling like dealing with Gradle and Maven.

In the end, I’m left with Go. I love Go’s philosophy: simple, powerful defaults. The built process is lightning fast and produces a single executable binary that can easily be installed anywhere. Built in styles keeps the code standardized without needing any additional tools. The standard library is powerful with a lot of capabilities without the need to import libraries. When libraries are required Go Modules are super easy to add and manage. The only thing I really hate about Go is that the variable types are declared after the variable name. I have no idea why it’s designed that way. While it isn’t as widely used as something like Python or Java, it is growing and there are a lot of job opportunities out there.

Needless to say, I’m excited. There have been a lot of changes in my life these last couple years. Some amazing, like moving and meeting the woman I’m going to marry. And some not so amazing, like several job prospects falling through or not panning out like I hoped. Honestly, I’ve kinda fallen out of love with tech. I’m hoping with this new challenge, I’ll rediscover it.