This is the second 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.
It’s All A Mystery
There are a lot of things that are taken for granted working with the .NET Framework in Visual Studio. When I wanted to create a new application, I’d simply fire up Visual Studio, create a new solution or project, specify a few defaults, and Visual Studio takes care of the rest. I don’t have to worry about the file structure, compilation steps, or language syntax correctness. It’s all built-in and it just works. Moving to Scala, however, was a total mystery. Everything had to be re-examined right down to the operating system.
A Mac Isn’t a Kind of Fruit
The first puzzle I had to solve was finding my way around a MacBook Pro. If the .NET Framework was my world then Windows was my universe. When I was issued my Mac laptop I felt like I’d stepped into a parallel universe – everything looked the same but… wasn’t. Thankfully the OS designers at Apple have done a fantastic job of making an OS that you can get up to speed with fairly quickly. Really, the only thing that really tripped me up was the keyboard shortcuts. On a Windows machine I could fly through screens without thinking about it. Punching those same shortcuts on a Mac will yield some… interesting… results and none of them were what I expected.
Getting to know OSX wasn’t as bad as I thought and, now that I’ve been working with for a while, there are a number of features that I kind of wish were in Windows. Not the least of which is the capability to have multiple desktops. It really helps to be able to keep groups of open applications organized by desktop and, once you get used to it, you really start to wonder how you got by without it.
The Temple of St. Goldberg
The second thing to come to terms with is the idea of doing everything manually. With Visual Studio on Windows, everything is handled for you. You don’t realize just how much the term ‘everything’ encompasses until that support is gone. Getting started with Scala development on a Mac is an entirely different experience.
First, there was no IDE. Actually, there are several IDEs that work with Scala (the best, in my opinion, being IDEA by JetBrains) but, for the purposes of the project I had just joined, all the work is done from a Terminal window (the command line) and a plain Jane text editor (I use TextMate). In order to actually do my work I needed to install a bucket-load of incongruously named applications and utilities. For example, there’s a system similar to Nuget called Homebrew that allows you handle installing and updating components and SDKs. Then, once you’ve got Homebrew in place you can pull down Git to handle your source control, SBT (Scala Build Tool) to execute builds and unit tests, the Java SDKs, the Scala SDKs, and the Akka SDKs. And then you can go ahead and configure everything to work together.
By comparison to simply installing and starting Visual Studio the process of getting started on a Mac feels like you’re building a Rube Goldberg machine. Each package has dependencies on other packages that may or may not need configuration tweaks to get them working. Homebrew handles most of this but you’ll likely have a lot of false starts before you’ve got a stable platform.
The payoff, though, is that once you’re done, you’ll have a very powerful development platform that you can control in the most minute and precise ways. It’s painful at first but totally worth the effort.