Before you read further, go read this post by David Gewirtz:
I guess I’m an idiot too.
About 6 months ago I made the decision to leave Microsoft after 21 years. I knew I was going to build a startup, and I knew that the developers I’d want to hire were, to say it kindly, not familiar with Windows. It seemed for me to be effective in hiring and leading them I’d need to have credible technical chops with Linux and other OSS technologies.
I was on the team that built Internet Explorer 3. I helped build IIS4 and IIS5 and the original Active Server Pages. I understand web technologies very deeply. But I come at it all from a very Microsoft and Windows-centric perspective. I knew, venturing outside the Borg, that I needed to expand my knowledge and skills and unlearn a great deal.
The way I learn is by doing. So I sat down, installed Ubuntu in a VM, and got to work. I moved my blog to WordPress running on Ubuntu and learned PHP. I re-wrote a bunch of my old ASP.NET apps in Ruby on Rails, Node.js, Python, MySQL. I learned the language of gems with names like bundler, sinatra, and foreman. I sat in awe of a language thrown together by a few guys at Netscape before my 18 year old daughter was born spewing HTTP. I deployed 100 instances on AWS behind iptables just to see how long it would take (an impressively short amount of time). I learned all about apt-get and long lost sed/awk skills came back to me. I even bought the domain names stuckinemacs.com and stuckinvi.com because I found it so funny that I couldn’t remember how to get out of either.
But I did it all and learned a lot. The only Windows thing I used was my main desktop as a VirtualBox host.
Here’s what I found:
- Linux still sucks, for me. David’s post spoke to me in a very deep way. It simply has too many, too loosely coupled parts for someone who is not born and bred on it to be productive.
- I don’t hate Linux because I worked at Microsoft. I hate Linux because it sucks, for me.
- The OSS cloud development stacks (Ruby, Node.js, Heroku, Hadoop, etc…) are shockingly productive. As long as you get them setup and configured.
Last week I finally needed to build a real web application and I had limited time to get it done. On the client side I still hadn’t gotten my head all the way around jQuery so I decided I’d commit to that.
I also decided I wanted to code it in Ruby on Heroku. Seemed like a great learning exercise. But to build for Heroku you have to develop and test somewhere else. I figured since I hated Linux so much and I knew I could be more productive on Windows, I’d install Ruby on Windows and be off to the races.
Remember, I had already committed to climbing the jQuery mountain for this project. This meant I needed to be extremely productive with the code for the server side.
This is where I learned another lesson:
- The OSS stacks running on Windows are a joke. If you think it’s hard getting Ruby working well on Linux (I do), getting it configured on Windows is even worse. Yes, I know that it worked for you the first time. That’s irrelevant because it didn’t for me. Took me days and I never really got it working right. See the first sentence of this post. The reason? They are all ported to Windows by the B-team. The A-team is focused on the originals.
Because I’m a “Windows guy” I knew I could have an instance up on AWS in minutes. Because I know ASP.NET deeply, I knew I could hack out the app quickly with a minimum of fuss. So I abandoned Ruby and went with ASP.NET MVC3 Razor.
It was the right decision. The site is done and is working great. I’m 100% confident that if I had forced myself to use Linux and/or an OSS framework like Rails or Node.js I’d still be limping along today and I wouldn’t be able to say with confidence that I know how to build jQuery apps.
The interesting thing is that this doesn’t mean we won’t use Linux and those other technologies at my new company. We’ll use what makes the team the most productive. Soon the developers and designers I’ll hire will far outnumber little ‘ole me and my productivity won’t matter for squat, so the team will get to decide on the tools and frameworks. I’ll suffer along.
[UPDATE: April 2, 2018 – I just enabled the Windows Subsystem for Linux and installed Ubuntu. I can now start an oh-my-zsh shell in ConEmu and have full access to actual-real Linux command line stuff if I ever need to. It’s pretty slick. However, in the time since I wrote this post, Windows and support for OSS dev on Windows has improved dramatically. To the point that there really is NOTHING in Linux I’ll ever need. This brings me great joy.]