This is the first in a series of posts that walks through the experience of what it was like to go from being a veteran .NET developer with no awareness of the world beyond the borders of the CLR to exploring the mysteries of the Scala/Akka/Spray stack on the JVM.
In the Beginning, There Was .NET
I came to the .NET Framework in with its initial release in the early 2000s. At the time I was a junior developer working on a Navy base just outside of Washington, DC. I’d started out working on simple office automation projects using Excel and Access with a bit of VBA to hold it all together.
When I was introduced to .NET 1.0 and Visual Studio .NET I was instantly hooked. Everything I needed to create desktop applications and utilities was right there at my fingertips and I spend my time learning the ins and outs of object-oriented programming instead of trying to get my head around the relationship between code files, compilers, linkers, and command-line executables. For someone just starting out without a formal background in software development this was like a miracle.
I never looked back. As time and projects moved on I grew up with the .NET Framework. By .NET 1.1 I’d made the switch from VB.NET to C# and was exploring what it meant to do formal software engineering. Needless to say, it was an exciting time and, by the time .NET 2.0 was released, I felt like I’d really become a proper software developer.
Eventually, I moved into projects like payment processing systems, web applications, audio content delivery systems, and SQL Server databases in .NET 3.0, 3.5, 4.0, and 4.5. My career was in full swing and Visual Studio marked the boundaries of my world. It was a comfortable place to be.
Changing Things Up
By 2014 though it was time for a change. I’d lived in the DC area for 15 years, bought a house, and started a family. I was there, I’d arrived as it were and found myself looking around thinking, “Is this it?” After all the time and effort it was… boring. This period always makes me think of something Scott Hanselman says. He talks about living your life by default. If you do well in school, get a good job, and keep up with expectations, you’ll probably be all right. You’ll be comfortable and the years will just kind of roll by. I could feel it happening. The excitement I’d felt when everything was new and possibilities seemed endless was just gone. Instead of looking forward to solving a problem, it was just another day. More requirements, more code, clock-in, clock-out.
It had become miserable.
So my family and I switched off the default. We sold our four-bedroom house, got rid of most of our stuff, and moved across the country to Seattle. We were starting over and living intentionally instead of by default.
I’d arrived in Seattle first with a new job and a couple of suitcases. I was living out of a spare room at a friend’s house, sleeping on the floor, and desperately trying to learn a new job in a new city with colleagues that I didn’t know. It was total, wonderful, chaos and I loved it. Things were exciting again. I woke up each morning genuinely wondering what was going to happen next.
Into the Wilderness
As a .NET developer, I knew about Java. It was a programming language that other people used. We used to joke that Java stood for Just Another Vague Acronym and didn’t give it another thought. So getting involved with a Java project seemed like the perfect leap of the cliff of the known into the unknown. At the bottom of that leap though, I found Scala. Not Java.
If Java represented the unknown then Scala was completely off the map. However, like any experienced software engineer, I knew I could figure it out. Like Korben Dallas taught us, every weapon has a manual. So, with a copy of Programming in Scala by Odersky, Spoon, and Venners in one hand and a cup of coffee in the other, I set to learning the tools.