For the past 20 years I have been writing server based and application software on the Microsoft stack. First in C/C++ leveraging the Win32 API and then in C# when .Net first was released. Over the past few months I have realized that trying to build scalable code on the Microsoft stack is becoming impossible. Why, Technology and Cost!!
Let’s start with the licensing. Luckily I was accepted into the Bizspark program. If I didn’t have that I would be looking at thousands of dollars to just get access to the tooling I need. Real world applications require a database. If you want to use SQL Server Standard the licensing model is not only convoluted but outrageously expensive once you figure all that out. If I am building something for a client and they need something more than SQL Express I am doing them an injustice. Even using SQL Server in the cloud is no picnic on pricing. Then you have CPU and Memory requirements. I am sorry but trying to run a SQL Server and IIS on anything less than 4 Gig is impossible. Lastly, take this cost for one machine and try to build a scalable architecture around it and your costs are through the roof.
I don’t think it is an accident that Facebook, Twitter and the like are running on linux based technologies. The linux based technologies are cheaper, faster and require much less metal. You can build larger systems and architectures for fractions of the cost. These are proven technologies that are driving the biggest websites today.
I have already moved away from SQL Server to MongoDB. MongoDB has been a real win in terms of development, devops and cost. It has been around since 2009, has a huge community of people supporting it and there are drivers for just about every programming language. In fact, I have been able to do more with MongoDB than I could with SQL Server. Oh yea, no cost !!
For web development I am now using Ruby on Rails. This was an easy transition from .Net MVC and I use RubyMine as my IDE. RubyMine is a great tool and it only costs $100. If you are building just web services then using Padrino is a great way to go.
Now the rub, building application servers on the linux stack. I didn’t want to use C/C++, I was done with that. Someone suggested Ruby but I have never felt it was a great language for server development. I looked at Erlang but that wasn’t right. So I continued to use my C# based Windows service I called the TaskServer.
My TaskServer is really cool. It is a Windows service framework that can load and unload DLL based packages at runtime. Each Plugin is loaded into its own application domain. I added facilities to abstract threading, internal and external plugin communication, trace logging and anything I could do to make Plugin development fast and easy. The TaskServer has served me well but it runs on the Microsoft stack. For my Ruby web apps to talk with it I use RabbitMQ. Eventually I was going to build a Gem that implemented the Socket protocol so I could talk to the server directly.
Then someone told me to look at Go Programming. After reading and watching a few videos I was blown away. This is what I have been searching for. A programming language tailored to server development that would run on the linux stack. I have been able to take all of my C/C++/C# experience and quickly learn the language. Obviously the goroutine/channel construct is quite different but once you get your head wrapped around it you realize how much easier it makes concurrent programming.
As with any new language my first step is to port my utility classes and I have already begun that work. I have finished my ThreadPool package and now I am working on my TraceLog package. Once that is done I am moving to MongoDB and then will begin to build a server that will manage large amounts of data imports for a project I am working on, Details soon to come.
This is the beginning of my journey in Go Programming and never looking back at the Microsoft stack again. Sorry VMWare but I hope I never need to upgrade you again.