Want to discuss this? find me on twitter
Update: for the record, I might not have made myself clear enough. I think the .NET community itself is not to blame(only partly) for these feelings. there are many OSS projects in .NET. The problem is with the MS frame of mind, and how it tries to actively fight the community of such talented, smart people, to conform to its POV. MS does not deserve the people who are working so hard to make OSS work on its platform, because it actively discourages them from continuing to do so, and they, in turn, encourage MS to continue to act this way, by staying in this community.
Update 2: When I said MS doesn’t deserve great developers because it doesn’t want great developers, I meant things like this (among many others, such unit test code generation, not fixing bugs relating to the unit testing framework etc)
I’m a Microsoft born and raised developer. in Israel, you are basically ‘indoctrinated’ into a Microsoft development universe early on – if you start programming in the military, you’ll find that .NET is pretty ubiquitous, and PCs are everywhere. If you want to find a job, most listings will want a .net developer, although there is some pretty nice demand for Java too. There are many more places consulting and teaching .NET than Java, as far as I could see, and Microsoft throwing a ‘TechEd’ conference usually makes the news here.
I decided, half a year ago now, to switch and try to move out of Microsoft for at least a year. the OS, the dev tools. everything. It was a cold hard blow to my ego and self esteem, to re-learn things I once knew,now just baby-stepping through the simplest of things(ok, vim is NOT simple). I went through Ubuntu for four months, and mac in the last two. I work in Ruby now, on a real project, and am learning on the job, and during the night, from books and real world code and coders doing ruby and non windows technologies daily.
The things I’ve noticed during the past few months were nothing less than astonishing to me, coming from a Microsoft background (assume that nothing is perfect and glitches exist in many things I saw, but the overall feeling was the following) :
- I saw what happens to a community that is passionate about a technology, taking free reign. I was going to write “given free reign” but there is no one here to ‘give’ the reigns to anyone else. you either take the reigns yourself or you don’t. there is no master overlord that dictates what you will or won’t work with. instead there is the proliferation of many beautiful and unique forks, branches, patches and contributions to an ever growing jungle full of weird and exotic plants, each one built to serve one specific purpose. each one living the life it was meant to live – to get better and better until it flourishes in the community, or to wither and die if it wasn’t right, or it wasn’t built right, or it wasn’t up to par with the community’s standards.
The outcomes are amazing. I can say (as someone who wrote a book about unit testing in .NET) that a good TDDer in .NET who switches to ruby will be at an apprentice level here. Not because they do not know TDD, but because the differences in the tooling and attitude are immense. the thinking has evolved way beyond that in the .NET world (sometimes to the point where it even seems like it regressed back to older concepts, but it’s been done after going all the way forward).
Think of the difference i see like tokyo vs. US in terms of internet and online growth. Things that have dawned on me in the past couple of years in the .NET world have been addressed in multiple ways by the community of Ruby more than a couple of years ago. in multiple ways. For example – database related testing. I remember coming up with the idea of using rollback transactions in .NET to rollback DB related changes made by integration tests. Then I looked at things like Rspec in ruby and realized that rollbacks have been built in with such thinking for a few years, in a seamless manner, so that people just don’t need to reinvent that in ruby. they get ‘out of the box’ for their tests. I didn’t even realize why my data wasn’t “staying” in the db, until someone dryly told me, as if it’s the most boring thing in the world. In a world where DB testing solutions are boring, where things like factory_girl exist (smart factories for tests) in multiple versions for a couple or more years now – that’s the world that .NET was supposed to be in as well. but it can’t.
It’s like we were all reinventing wheels and barrels in .NET land in the past 5 years, when just on the other side of the island, people were beginning to wonder what is the best material to pave a highway with. No, they don’t have intellisense (although that is changing), but they have pretty much gone through most paths that in .NET I still struggle to teach people about where to start.
It’s like the Ruby community lives 3x faster than the .NET community, and has been for the past 5 years.
For example, I’m learning about migrations in rails, and every time I read about a feature, and think “hmm well that could even be better by just doing X”, I find out a minute later that someone had already come up with X, and after than someone realized that X is bullshit, and Y is better, and then a few months later someone combined X and Y and created a whole new DSL so that you don’t give a crap about even needing X anymore. and all that happened two friggin years ago, so it’s boring to even mention it now, unless you’re a total newbie. It’s as boring (or needless) as explaining to a child how this blog physically appears on the screen, in terms of CPU registers. it’s a fascinating learning experience, but we’re all way beyond that now.
Rubygems are a great engine for simplifying things for your dev environment. in the .NET world a few employees from MS had to “take over” a community related project so that it can finally get into the visual studio tooling strategy. that seems to be working well. My feeling is that in a year that project will be in trouble.
Razor is a view engine from MS(there’s also spark, by the community, that MS is pretty much ignoring), outed in the past few months. HAML and others like it have been out for a long while in the ruby world. The ruby community is just so far ahead of the curve, that it’s in a different curve. because there are no limits to changing, and playing and tweaking and publishing and forking and beautifying and polishing and churning on the tools and technology. It’s fucking beautiful.
Now, it may looks like I’m a MS hater, and that maybe a bit true, but not for these reasons. the reasons for that will be detailed somewhere else (I’ve been a MS MVP and teched speaker for a few years before switching).
But Mostly, I just feel betrayed right now, by the lack of drive that has been instilled by MS in most .NET developers. no, actually I remember multiple instances where MS chose to drive sales instead of helping its community. That I had to fight so hard just to learn (and teach!) about things like unit testing, and that the .NET community still gives MS props by *staying* in the MS community – that’s sad to me. MS don’t deserve .NET developers who want to get better, because MS aims at developers who *don’t* want to get better. just developers who want to *stay where they are and have a job until they die*. They can fill their lives with the wonders of a new technology every month, just like solving soduku puzzles for a living. it’s not about bulilding great software, it’s about keeping your job.
know sharepoint? how about sharepoint 2013? oh yeah? how about the new CTP with async features? or yeah? how about running it in azure? oh yeah? how about exposing it with WCF and RIA services? oh, and talking to windows phone? know silverlight? how about HTML 5 for windows 8? ever had to create a TFS server proxy for caching source control for distributed teams? oh, but we will use the 2003 version. oh yeah baby!
each of the puzzles is usually incredibly hard to solve, but they are supposed to be, so that you don’t get bored. and behold, 10 years have gone by, and although you were mostly working on crappy projects, you had a lot of fun solving all those weird problems, right? or maybe now you’re the only guy in your organization who knows sharepoint on WCF ria services running from azure – job security here I come!
So I decided to look elsewhere and see how others deliver software. I tried to be a web dev on the MS platform, but things were just too convoluted. in rails I see simplicity, and lack of “stoppage” . its concepts advance in the speed of its community’s thinking. I’m able to fucking build a website that does something, and I don’t feel dirty in the morning.
Now, the ruby community in israel is not there yet. But I’ helping making it a bit stronger by creating some meetups. The python community seems to be doing a bit better, but overall, open source in Israel is still a very small flame. I am actively working on changing that.
- I saw healthy discussions and changes in the technology
Rubygems is screwed up? Hey, slimgems to the rescue!. or, maybe rspec isn’t that great after all? maybe it’s too complex? maybe we shold all go back to TestUnit? questions that strike at the heart of the community seem to be open for challenge. no holy cows. Don’t like rails? how about sinatra? screw it, use node.js (yeah, that’s part of the ruby community, it seems, even though it’s not ruby related in many ways.
ORM? pretty much solved. in multiple ways of course. because there are no limits to what the community has the power to accomplish when there is no “grand master” that controls all the strings.
at MS land, the most you could do is write a few angry blog posts. if you were a high enough profile blogger, you might also be contacted by a real MS program manager of some sort telling you thanks for the feedback. you could raise as many chairs and broken as many rulers as you liked, but the MS ship would not budge, and even if it did, it’s not up to you. It’s a helpless community, that has most of it’s semi successful ‘open source’ projects ending up ‘eaten’ or competed against by MS itself. like a beaten wife who convices herself that next time it will be different, I see people in the MS community (and remember myself as well) endlessly pursuing another fata-morgana , another tell tale that things will be better next time. just wait a couple-years-boy and you’ll see.
so, I’m still learning about community. I’m trying hard not to become a “fanboy” , but to see things for what they are, and there are definitely some celebrities here. but the nice thing is that anyone can challenge anyone and not be afraid to do it. or at least so it seems. we’ll see in the next year!