I want to start off that way as I think that's the most important part of this review: when I opened up MonoStudio 2015 (the renamed fictional successor to MonoDevelop) that's what I saw NOTHING.
No crazy menus, no buttons, no configuration options, no popups. It was zentastic,beautifulnothingness with the most inviting textures - it just drew me in.
It's something that grates on me whenever I open an IDE - especially one like Visual Studio (or Aptana, RubyMine, whatever): they have these damn BUTTONS and weird icons and menus... it's almost like the app stopped by the digital beauty parlor and was convinced "with a shade of drop down menu here... some ridiculous button menus stacked up over here...
YES you look like you're worth whatever people are paying for you.
Honest question: why do we need Cut, Copy, and Paste Buttons?
Visual Studio 2010
The old MonoDevelop
My theory: It's what they think we want. They think we're mouth-breathing button-clickers...
Imagine you're working on an app in whatever company you work at and a coworker pulls you into their cubicle and says "can you help me with a Thing" and you say "sure" and they sit down and show you a bit of a bug. Then they use their mouse to highlight some text, go up to the menu and click the scissors, and the click on a different file in the file tree, and click in a file somewhere, hit return a few times, and then click on the clipboard button to paste whatever they just cut.
This one of those moments where you look at your shoes, then the ceiling... then the exit. Wondering "why did I take this job again?"...
Now I understand that many of you will tell me right here and now "I know someone like that" and I say "YES! SO DO I!" and it's a Very Exciting Thing - you know why? You, my friend, get to emancipate their mousiness and get to be the one to help out your Clickity-Cutty-Pastey Cubicle buddy, and they'll always remember this day!
OK I know - a little embellishment and hyperbole and Rob's being a snotty prick. Truthfully and honestly: wouldn't be put off just a tad if you saw a fellow coder using those buttons? Just a smidge?
Finally, a SKU I Can Sink My Teeth Into
The edition of MonoStudio that I received from the Xamarin team is called MonoStudio Professional 2015 and costs $20, as opposed to the regular MonoStudio 2015 which is free. The extra $20 is because they added some "smarts" to the sku - knowing how "Professional" developers might use it and you get an autographed picture of Miguel deIcaza with his leaf blower (it's actually a remarkably moving picture).
Straight off: this is an area of high opinion and arm-waving, and it can also cause a bit of division in the developer base - buts let's have a look at the features before we pop a cork.
Miguel and team have taken time up-front to recognize the way a "Professional" might engage an IDE - that is to say by getting rid of all the extra shit that comes with it, out of the box (which is what most "pros" that I know do: move menus, change the theme, etc).
Ahh yes. Quiet. There was nothing on the screen save for a singular dialog asking what I wanted to work on - or if I wanted to create something new.
(I'd love to insert an image here of that gorgeous, gray-lit, letterpress IDE surface by my Photoshop skills suck. Trust me, this fictional IDE is utterly LICKABLE
I click on the dialog, open a folder and BOOM - there are my files. Most IDEs are sluggish due to the processing that goes on when all the plugins are active and the "helpers" they add are trying to "help" by slowing everything down and making it crashy. It's amazing how fast the IDE can be if you just turn that crap off! At least in the beginning.
And this is where my mind was blown, entirely.
Intelligent Source Control
MonoStudio knows immediately that I'm working with Git - it can see the .git repository right in the root of my application. I see on the right side a small information pane open up and tell me about my current branch and how many commits ahead I am from Master.
And it's Red
I can't figure out why until I try to start changing the file (I want to see the groovy code-completion that's happening) - and as I start to type a small, tasteful dialog pops right next to my mouse:
Working in the Master Branch is typically not a good thing to do (click here for more). Do you want to create a feature branch or switch to a different branch
Yes yes! LOVE IT - this is what an IDE is supposed to do: Enhance my damn environment and make me more productive!
Note to nitpickers: MonoStudio Pro also supports Mercurial, SVN and a host of other SCMs, but will insist you use Visual Basic with VS 1999 if you want TFS integration.
So I quickly create a new branch and the Head's Up display on the right side (that's what it's called - the HUD) shows the new branch and information about my current commits, which are 0 initially. I proceed to edit the file a few times, make a few commits and see what happens.
This also flipped me out: as I typed and saved my work, the branch name in the HUD
" to change
It went from green to orange, then to red and stayed there after about 45 minutes to an hour of work. There was an info icon next to the branch name that appeared with the color change - so I clicked it:
You've been working for a while without committing any changes - this can cause problems when trying to revert your work, and also when you go to merge your changes later on. Consider working in smaller increments and committing your changes in shorter intervals.
Double-wow. This fictional IDE is trying to protect me from a nightmare merge/rollback scenario. Unbelievable. I looked into the other Source Protection features and they are incredibly interesting:
- It will watch the Master branch and recommend you pull if your current branch and Master get too out of sync (by more than 4 commits or so)
- It will automatically put your code under source for you (defaulting to Git - which you can change in the settings). If you remove source control it will call you an idiot and tell you to use Visual Studio.
- It walks you through merge conflicts and suggests ways to avoid them in the future. The diff mechanism is amazing and intuitive - and it makes you comment on each conflict so it's clear in the repo history
There are other features that I could expound on, but these are the biggest. I was impressed that it didn't get in my way - but happily helped me out as I wrote my code. I should also mention that each setting comes with a "Shut up and leave me alone" switch that's per project or global... which is great.
The thing I love about this, straight up front: the testing framework is tucked away and you never see it nor do you get to mess with it. Normally I would think this is a bad thing, but the more I thought about it, the more I realized just how often I get stuck in the machinations of the testing framework - trying to figure out various assert mechanisms, where initlializers should go (and tear-downs)... it's not like it's hard, but it's distracting.
This is where MonoStudio fictionally shines. The HUD has a tab next to it that, initially, is a big question mark. It wants you to click it - begs you to click it - so I did and what I saw next was hysterical.
Confused? So am I... fix this?
That's what my IDE said to me. So I clicked "fix this" and the editor surface was replaced with a singular dialog that simply said "What are we doing? One paragraph please that describes what you're building and why". An Elevator Pitch. My IDE wants an Elevator Pitch... OK I'll play along but this is a bit much.
Note: this is also what you see when you click on "new" in the opening screen.
Rather then mess with my current project, I decided to create a new one and, like I imagined, this dialog was the first thing on the screen. I wrote my Elevator Pitch again, and then I was asked to describe the behavioral feature I was working on today. Simple stuff all in all and it was clear that the IDE was using Behavior-driven Design as its process (you can change this in the settings).
Before I knew it I had a few Contexts and Specifications laid out in rather plain English describing a simple Customer and what that Customer can do in the app. This is where things got interesting.
At the bottom of my new, slick specification list there was a "Next" button which took me to a rather strange screen. It asked me what language and framework I wanted to use to build out my application. Which is weird - I hadn't thought of that yet...
The neat thing about Mono is, aside from it's kinship with .NET - [the Xamarin guys are heavily involved]("http://tirania.org/blog/archive/2010/Oct-22.html")
I like Ruby a lot - but there are some things I'm working on where C# and LINQ will come in handy - so I choose C# 5 (cause I gotta have that async dynamic love!), tell MonoStudio I want it to be a simple Console app and off we go.
The solution opens up and I see my test project in there with some test files - and there, in my Console app is my Customer class! I open it up and take a look - and it's blank. So I switch over to the test surface and I fill out the first Specification - and BOOM. The HUD changes and begins to churn... Pending, Pending, Pending.
All my specs are pending except for the one I'm working on, which is all kinds of Red. It's "Has Full Name which is Last, First" and I've added the code to the Assert Pane:
customer.FullName == "Last, First"
In the Before box the default is to have a single customer (since the name of the class is Customer) - and I've filled out the default values for email, first, last etc.
The "FullName" property is a cherry red color with a nice pencil icon next to it, which I click - this generates the method for me and splits the window into two files: my test surface and my code editor. This makes me drool...
I fill in the logic for FullName and BOOM - the HUD changes but now it's showing GREEEEENNNNN ... oh the joy! It turns out that the IDE watches all your code files which have tests and when you change them - everything gets run in the background. This is just like Autotest for Ruby/Rails (or Guard) and damn is it making me happy.
If you try to create a code file without a set of tests you will be taunted mercilessly until you click a button that turns all your code to VB - so be careful with this feature.
I'll end my review on this feature here, as it utterly blew my mind. I've known about [SignalR]("https://github.com/SignalR/SignalR") for a while - it's a really neatasynchronousnotification library written by some members of the ASP.NET team and, it turns out, is built right into MonoStudio Pro. Here's how it works:
You and a team mate decide to build out a Thing, and you want to pair code. Just like a multi-player video game you turn on Collaboration and open up a session. Your team mate does the same except they try to "Find a session" and ultimately find you. They ask to be let in, you let them in and boom - up the project comes in both environments (using Source Control and the current branch).
Now, you both can start editing files. Your team mate updates the specs while you write the code to make those specs pass - the HUD is going off for both of you as SignalR keeps the files in sync.
Really - that's it. It's one of the most amazing collaborative experiences I've ever seen and can support up to 8 people working on a project together at once... which is actually quite hysterical to see. But, if you can herd your developers into creating explicit bits of a class file... wow...
I've always wondered when Xamarin's vision of C# and .NET in general would start to fragment - and with thisreleaseof the purely fictional, delusional arm-waving silliness that is MonoStudio 2015 Professional - I have to tell you that I think the day is coming nigh. Or not - who knows.
Well worth the $20 in my mind...