Do Androids Dream of Modal :Sheep?
- Tuesday, May 04, 2010
I don't know how I got on this weird tangent - but I'll warn you now: it's weird. It has something to do with Gary Bernhardt, my brother, and Vim - but I can tell you this much: I'm a changed guy and I'm kind of hooked on Vim.
You Need To Understand This First...
My brother John is a freak. He moved out of our house when he was 16 - declared himself an emancipated minor - and went to college a good 2 years before he should have. He is the oldest of 5 kids and I think, during his time with our family, stripped us of any notion of "cool resolve" that we pretended to have. He currently lives in Eugene, Oregon, is a professor in the Computer Sciences department, and declined a Rhodes Scholarship because he thought the Fulbright would be more fun - he could live in Ireland and drink more Guinness.
Let's get this out of the way too: yes, I live with a shadow that's impossible to come out from under, and yes there's every kind of little-brother issue involved that you could imagine. That doesn't change what I'm about to tell you. Something that he stuck in my head... rudely, coldly, in his "I know a lot more than you" kind of way.
And that asshole was right. Again.
"Sure, That's Cute"
It was a late July afternoon in Eugene - up in the forested hills above the town, right on the border of Springfield. The house is tucked happily into the green, mossy hillsides under the radio towers and the air smells like fresh pine and grass. We're outside, Macs open, and I'm showing him some of the stuff I'm working on with Microsoft (I still worked there at the time).
I open up Visual Studio and kick up the application I'd been working on - chiding him endlessly about his addiction to Lisp and Smalltalk - showing him "where the industry has progressed" and "isn't this amazing". Everything loads up nicely, I show him jQuery and some other stuff and he's duly impressed in the only way a condescending older brother can be impressed:
Sure - that's cute. I like the colors.
I refused to become deflated. Without getting into Freudian needs to match up to the alpha male in my family - let's just say that I realized the best bet for me was to not engage. He was being a prick.
Yet I was curious... "cute?". Part of me really wanted to know if he was, truly, completely unfazed by what he just saw. I wrote tests, I ran them - kicked up a really compelling UI and... well other "neato" stuff - but he just sat there with his big-brother "that's cute" look on his face.
So I just came out with it. Screw it - screw the games - WTF:
OK you smug prick - what the hell? I think this is some pretty good stuff - what's with the "I got a beard and coded in the 70s" treatment?
He laughed for a bit - he knew he was getting to me (as older brothers always seem to know). The conversation that followed has sat inside me like a raw meatball for the last year - and only now am I beginning to understand what he was getting at.
This is a long setup - but it's important you understand who you're dealing with here. My brother might be my older brother (and therefore subject to your scrutiny as to my motive) - but he was also one of the pre-eminent computer science minds of his day. As much as I'd love to write off his "old skool" bend - he's a living Information Age Fossil and I treat him in the same way I'd treat Ben Franklin if he was my older bro. OK... enough of that... onward.
It's Just Text Dumbass
That's what he said to me as he kicked up Emacs. Yes, Emacs.... but WAIT! No - I'm not going on an "Old Skool" tirade here. Just hear me out.
When he said this to me, I rolled my eyes and said "that's your problem with the stuff I've shown you? That I'm using an IDE? Dude, welcome to the millenium...". This made him laugh and he sort of smirked and said "whatever you need I spose."
He saw my look and said "here's what I mean" and kicked up Emacs - archaic, blinkey 16-bit Emacs GUI ugliness. I hate Emacs. It insults every aesthetic sensibility I've ever had (which aren't many) - I used it in college and was furious about it. I know I'll get flamed for this - but I don't care. Emacs is a wart.
Yet, my brother was a wizard with it. It was PERL that he was writing - which I chided him about (making some jokes about his beard) and he laughed and said "OK smartass - let's see if you recognize this". In a couple deft strokes he was cranking out Ruby - context menus flying, Rails commands generating files before my eyes.
Seriously - if you've ever watched someone who knows their tool operate - it's really quite astounding. I turned my brother on to Rails/Ruby back in 2004 and he learned it while he was here, and uses it to teach his intro CIS course. He knows it quite well - and I'm watching the amount of code that he's able to write - and I'm just blown away.
It's just text dumbass! There's no secret here - you just like the idea of a tool doing something for you when in reality it gets in your way - a lot.
He then offered to show me how to use Emacs - and I told him he was a fossil and then went and grabbed another Inversion IPA from his fridge... the raw Emacs meatball landing squarely in the pit of my stomach.
Fast-forward a year and I'm sitting here on my Mac, checking out MacVim and going through the various "katas" out there as I know that TextMate is really cool and groovalicious, but Vim is the tool to use to get work done. I keep thinking about my brother - his snarky condescencion - and I keep wondering if it was just my wounded pride that wouldn't let me see the obvious: I move quite slowly when I code.
I love TextMate - it's what I've been using for Rails. It's quite fast and once you master some of the keystrokes you don't miss intellisense and some of the other "crutches" that carry you, slowly, throughout your coding day.
And then Scott Koon turned me onto a video of Gary Bernhardt doing a code Kata with Python, using nothing but Vim and some other tools. To say that I was envious/amazed/freaked out is ... well it's just a bit of an understatement. The sad part is that Gary, in this video, actually slows down so that the mortals watching him can keep up...
Just an hour before watching this video I had suffered through a string of VS2010 crashes that made me reboot my machine (which somehow fixed it) - I had also been trying to figure out why my screen flickers constantly when coding (really annoying). Add that to the other various cranky thoughts I've had about Visual Studio over the years and... well let's just say that the video landed quite hard.
And here was this guy - a Python master - just shredding the code with a tool that's as old as glaciers (read: it works), deftly, effortlessly testing as he goes - in nothing but Vim.
I want a tool like that. I want to be able to use navigation schemes and text commands that have been around for years and transcend the framework I'm currently using...
And that raw meatball began to roll around a bit..."It's just text, dumbass"
OK so I'm not really conveying my dream - so let's get it out. Here it is:
- Writing code with gVim/mVim/Emacs or whatever I want
- Loading Vim up with all the awesome snippets, intellisense, and other groovy plugins that would make the text editing approximate that of VS
- Hooking the compiler to Vim's "make" command - so my editor can just compile my stuff for me
- Ditching NUnit, XUnit, and other .NET testing tools for Ruby-based tools like RSpec, Context, or Cuke wired in through the DLR
- Ditching SLN/CSPROJ files and using HAML or Builder to create my MSBuild files
- Using Rake to build the project - like Derek Bailey's Albacore
- Putting all of this together into a ".NET Config for VM" repo so people could just download it and go...
What's The Point of All of This?
I know what you're thinking: "Dude you're burning something really sweet - just use VS! Who cares?!?!" - and that's a really good question. Why would I bother using Vim - an archaic, bearded-geek tool from the Comp. Sci. Stone Ages when there's this slick, sexxy IDE that does this (and more)?
There's a bit of philosophy to this answer, and a bit of common sense. Let's start with philosophy:
Why do I need an IDE?
Honestly - it is just code, after all. More than that - every rev of the .NET framework has brought a new IDE with the same problems, memory issues, and crashing problems. It is, after all, a very GLAM text editor - and that's what you're doing mostly: writing text.
Memory slow-downs, sub-par navigation and command interop, COM-adherence, maddening dialog boxxes (see: Add Reference) - for what? Editing Text
Now I know IDEs are more than this - so let's move on to the next thought: a bit of common sense:
Why do we need a new IDE for a new rev of our framework?
The short answer is because that IDE is built to "embrace and abstract" the framework - all at the same time. The framework (.NET) is pretty damn powerful - so much so that it's highly unlikely that most devs will take the time to actually learn what it is they're writing - they'll just use the tooling.
Let that roll around in your head a bit. I know some people will say that they "have better things to do" etc - and sure I can buy that. But what's that telling you about the thing you choose to work with? The fact that you need to have something write the code for you because it's too complicated for you to take the time to understand.
Is .NET an F-117 Framework? Something so complicated it will fall out of the sky without complex tooling to "fly the code for you"?
I know people probably haven't read this far - probably thinking I'm smoking crack for wanting to use something other than Visual Studio when it does so much (and yes, I've lauded the VS2010 team for some really good work - they've done a lot of things right and good for them).
The point isn't that I want to use a different tool other than VS - it's that I can't.
What if you could just code away with your favorite text editor - hacking it with plugins and extensions that enable you to work in ANY language you like? What if you could transition from one language to another (Ruby, C#, VB, Lisp, COBOL) using the same tool - using whatever version of whatever framework you chose?
I think back to my brother flipping effortlessly between languages in Emacs - his snippets and shortcuts all in place, based on the type of file he was working on. It could have been any language really - and his coding tool remained the constant in this process, as it should be.
What if working with a new version of .NET meant knowing a new API, not a new IDE?
That's where I'm going with all of this - and I'm happy to say that there are others out there who feel the same as I do. Keven Berridge has already started the ball rolling with a ton of posts on how to setup Vim for C# work. He's setup a repo with default Vim settings that you can use to start writing C# code today (read his blog first).
He, like me, loves the power of Vim for writing text and doesn't take advantage of the "finer things" that Visual Studio brings to the table. And again - it's not about "hating on" Visual Studio - it's a good tool for what it does. It's about alternatives - there aren't any.