From ALT.NET to NOT.NETJun 23 2010
For a long time now I’ve been known as “joeyDotNet”. Of course I’ll never make the mistake tying my name to a particular technology like that again. Especially given some of the recent changes I’ve made in my career. For the past 10 years I’ve been primarily a web developer using Microsoft-based technologies. In the latter years I started to grow pretty frustrated with both the Microsoft development stacks as well as their operating systems. The ALT.NET “movement” helped a little, but for me, the bloat of the development tools and ceremony required in the languages overshadowed the well-intentioned ALT.NET efforts. Of course this is merely my own personal opinion.
A couple months ago I made a pretty big change by leaving .NET completely to start focusing on learning and building software using tools and frameworks that I enjoy and involve less friction. But instead of hearing me whine about my specific issues with .NET development, I thought maybe I would give a glimpse into my experience so far as I’ve become part of the NOT.NET crowd.
Perhaps I’m a glutton for punishment, but I find that in order to really learn something, I have to throw myself into the lake and basically sink or swim. That’s pretty much what I’ve done by leaving .NET into the world of Ruby. Today marks exactly 2 months that I’ve been working exclusively with Ruby/Rails and I have to say it has been a very enjoyable experience so far (and frustrating at a few times). I’ve dabbled with the Ruby language and with Rails a bit over the past couple years, so I had an idea of what I was getting into. Doing it 100% day in/out is a completely different story though. But at this point, I’m not looking back a bit.
Operating systems are cool again
One of things I’ve very much enjoyed is being able to completely ditch Windows as an operating system in favor of using my MacBook Pro with OSX for everything. It’s no secret that I’m a pretty big Apple fan, and I think, for good reason. The simplicity of the OS and the top notch software that is available for OSX makes the actual usage of the various design and development tools fun and productive again.
Simple tools, less friction
Since I’m a huge fan of Vim, I’m naturally using MacVim as my main editor, along with a few Terminal windows and a browser. That’s it. No fancy IDEs or designers to get in my way. Just code. I am using a couple Vim plugins to allow better navigation around the code. NERDTree and Command-T which I would highly recommend. I’ve also jumped head first into Git as my primary source control and I continue to be very happy with that decision. All those years wasted on Subversion, which incidentally performs subversive acts on the instituion of actually getting things done!
Doing more with less
One of the common themes I’ve found so far in working with Ruby in general and Rails in particular is how much work you can actually get done with so little code/effort. In 2 months time I’ve been able to build a fairly sizable greenfield Rails app from the ground up and almost ready for the first production deployment next week. All while I do a TON of learning in the process. I have no clue how long this would’ve taken me in .NET, but I’m certain it would have been significantly longer. Once you don’t have to deal with IDEs, solutions, project files, unnecessarily complex build scripts, high-ceremony languages or even compilation, you really start to realize how much overhead all of that stuff adds, preventing you from getting real work done, fast!
Buh-bye IoC containers
In my experience with C# over the years, it became apparent to me that in order to be productive in building flexible software in .NET that the use of an IoC container to handle dependency resolution was pretty much required. And I totally bought into it, using them heavily for many years. And for the most part, I think it was a good idea. However I will freely admit that a lot of my usage of them was to enable mocking and easier testing. I think if a lot of developers were honest about it, they’d say the same thing. That’s not to say that’s the only reason of course. IoC has its place in doing some crazy stuff with decorators/proxies and all kinds of other useful jazz. Contrast that with Ruby and I can honestly say I have not missed IoC containers one bit. Being able to work in a much more open language has been a joy. Composition over Inheritance is the real deal in Ruby and it’s being demonstrated more and more in frameworks like Rails 3 and Mongoid. Being able to open up and extend any class in Ruby is also extremely powerful (and dangerous!).
Feeling the love
Perhaps one of the more feel-good things about working with open technologies like Ruby is the community. I honestly have never experienced a community who is more willing to help out with anything like I’ve seen in the Ruby community so far. I’ve made a great many friends so far and hope that I can start contributing back to the community once I get my head above water. Open source in the .NET world has grown a bit over the years, but it still seems light years away from the Ruby and related communities. And I’m not sure why, but I can’t help but think it has something to do with a certain corporate entity behind .NET.
Making dreams come true
For quite a few years now I’ve had an increasing urge to go “out on my own” and be “independent”. More specifically I’ve dreamed for a long time now about making a living by building my own software. A Microprenuer, if you will. But the whole time I pretty much knew there is absolutely NO way I would build my own software products using Microsoft technology. In my opinion technologies like Rails, Node.js and MongoDB are much better suited to building next generation web applications than anything on the Microsoft stack right now. I’m sure many will differ with that opinion, but that’s just how I see it. So in order to move closer to my dreams and goals, I knew I would have to move away from the Microsoft world at some point. I’ll always wish I had done it sooner, but with Rails 3 getting ready to “ship” it seems like a great time to be focusing my efforts there.
Becoming one with the *nix
I admit it. Early on, it has been tough to get up to speed on the nix tools and setting up Linux servers, etc. I’ve always been a pretty big command line junkie. But I’ve learned that being a *Windows command line dude is a whole lot different than sitting down at a Bash shell for the Linux slice you just bought and now need to get setup with a full Rails stack. Nevertheless, I’ve forced my way through it thanks to the interwebs and honestly in great part due to the great articles over on Slicehost. I still have a lot more to learn, but I’m starting to realize that those crazy bearded Linux heads are onto something. :)
Living on the edge
In accordance with my sink or swim style, I decided to jump on the edge of quite a few things including Rails 3 beta and all of the associated “pre” gems for testing, persistence and others. That has been painful at times. Sometimes it takes you a little bit to troubleshoot a huge stack trace of errors to find an issue with an incompatible gem. Lots of times it was fixed by just updating the gem or actually applying specific patches. All in all, it hasn’t been too bad though and it has forced me to dig into the actual code of the frameworks I’m using which has only increased my learning of the Ruby language and certain patterns used in the language.
Well about the only thing ugly so far is probably some of my Ruby code. I’ve hit a few roadblocks here and there because of my lack of some of the advanced capabilities of Ruby as a language. And sometimes I’ve had to just get it working and move on until I get more proficient with Ruby. Often times I just “know” that there is a better way to do a particular thing, even if I don’t know exactly what that way is. Like anything else, I’m sure I’ll come back a month later, a year later and throw up a little in my mouth when I see some of the Ruby I’m writing. But I’m down with the continuous improvement lifestyle, so I’ll just keeping moving forward. :)
Well this was basically a stream of consciousness post, but perhaps it will give some insight into the life of a fellow geek that is striving to reinvent his career.