Article Image
read

A judge from Microsoft's .NET County submitted a 00110101 year restraining order on Friday against Microsoft's C-Sharp development community. The stay-away order bans Microsoft developers from using the compiler's services as a development tool, forcing them to find other means to support their claims they "they are done" with features they are developing.

Restraining Order Granted for Microsoft's C-Sharp Compiler

A judge from Microsoft's .NET County submitted a 00110101 year restraining order on Friday against Microsoft's C-Sharp development community. The stay-away order bans Microsoft developers from using the compiler's services as a development tool, forcing them to find other means to support their claims they "they are done" with features they are developing.

August 16, 2010 | Redmond, WA

Microsoft developers were dealt a serious blow today when a judge issued a 00110101 year restraining order on behalf of the embattled C-Sharp Compiler services (jointly filing as CSCOMP.DLL and CSC.EXE). The compiler, seen here, responded to our questions only via email:

SSdtIHRpcmVkIG9mIHRoaXMgc2hpdCAtIEknbSBub3QgYSB0ZXN0IHJ1bm5lciEgSSdtIGEgdHJhbnNsYXRvciBkYW1taXQh

Harsh words from the work-horse behind all of Microsoft .NET's applications and libraries, however complaints of abuse have been circulating for many years now - and many close to the compiler have wondered why it took this long for action to be taken. An anonymous friend of the compiler's offered their thoughts:

Command-Shift-B is like a reflex for .NET developers - I mean almost to the point where they can't type a single line of code before invoking the damn thing. Building all day... all night... and background compilation to boot! All for what! Intellisense! That poor compiler... I remember when we used to wait on it - when it ran our code in the VAX for hours at a time in a single queue. Those were the days...

Others, however, remain unsympathetic - suggesting that CSC and CSCOMP are just being whiners. When asked about the situation at the recent Cowboy Programming Rodeo Roundup, VBC.EXE had this to say:

CSC has always been a bit of a fluff when it comes to things like this - I honestly don't know what the problem is, nor why it has to speak in base64 all the time - don't you think that's rather arrogant? My users don't even know I exist - let alone invoke me day and night. And what does CSC want? More "Unit Testing?!?!?" - whatever. As if that ever solved anything. Want some cheese with that whine CSC?

Tempers flare quite often between the longtime rival compilers - and their users tend to follow suit. Supporters of CSC are quick to defend the charges leveled by VBC.exe:

Typical VB - using 10 times more words than needed. VerBose.NET - isn't that what VB stands for?

Police had to be called into the Cowboy Rodeo to break up the tensions - CSC watched the foray from its private, air-coditioned private box; apparently unfazed by the harsh words leveled at it from its critics.

A History of Abuse

CSC complaints appear to stem from its apparent abuse by developers during the development process - wherein the compiler is used as a replacement for a unit testing framework. Unit Testing, a practice that is only now gaining traction in the .NET developer community, has been a necessary ingredient for a long time in many other frameworks.

MRI - the "Mats Ruby Interpretor" - which is responsible for interpreting Ruby code at runtime had this to say:

私は非常によくCSCを知らない。実際にまったくで。その苦情は、有効な、しかしだ。あなたのコードの作品は、開発に基本的な場合は理解する。

Fundamental indeed. CSC cites

recent comments made on the World Famous Wekeroad Blog, wherein the author discusses dynamic features of Ruby and C#, and the reasons he enjoys Ruby. Many of the comments made by developers indeed support CSC's claim that it is being used as a testing framework:

"The thing is I have never got into Unit Testing for one reason or another but thing that I maybe wrong about is that you have to write tests yourself to test possible situations. I don't like that idea because you will never think of all scenarios in which something can go wrong. I prefer to try and code intelligently and then if a bug is found I fix it."

"Clearly, some people like [dynamic typing]. But every time I've gotten someone to show me why they need it I've only seen two results: 1) Unit testing support. This is a legit reason. I'm not a fan of unit testing, but I can understand why for some developers it is helpful. 2) Some pattern, that after close inspection I usually can break down to show why I could do it better with static typing."

"Strict typing produces more reliable programs. I want to see MORE compile-time errors, not fewer. Dynamic typing is for lazy typists and throwaway code; not for serious programming."

Compiler-Driven Development Gaining Steam

This restraining order has indeed polarized the once-fractured community, and a group has formed in direct opposition to the growing Test-driven Development movement: The Cowboy Compilers. This group practices "Compiler-driven Development" with the impressively creative motto: "Screw the Jitter, Git'r Done!"

CDD practitioners apparently have history on their side. When asked about their practices, one member piped right up:>Dude, look at every demo, every code sample from P&P. Where's the test? I'll tell you where - NOT THERE. Why? Because these guys have work to do - just like me!

Others point at articles posted on Microsoft's very own developer network: MSDN Blogs.

This article flatly states it:>I don’t like Test Driven Development. I don’t just not like it, I think it’s a bad idea. How’s that for an inflammatory statement? Probably gonna make the cool kids black ball me :)... I find [TDD] inefficient – If you read my last post then you know that I refactor like crazy. The idea of having unit tests that cover virtually every line of code that I’ve written that I have to refactor every time I refactor my code makes me shudder. Doing this way makes me take nearly twice as long as it would otherwise take and I don’t feel like I get sufficient benefits from it.

A Pre-emptive Strike?

In researching this article I have found numerous quotes on message boards and blogs which all seem to support CSC's claim that developers use the compiler as stepping stone - a "first pass" at testing that, when compilation succeeds, suggests that the developer is "doing things right".

It's understandable, given these remarks by .NET developers, why CSC (and CSCOMP) have taken these drastic steps. By continuing to allow the use of its compilation services as a "validation" of code completeness and correctness, CSC is eroding the quality of the very code that it needs to operate on. One might even suggest this is a "pre-emptive strike" on some of the things that Microsoft is doing recently.

Dubbed "Dumb.NET" by many detractors - the new WebMatrix/Razor/Lightswitch offerings have placed an emphasis on simple and "getting work done". Lightswitch, in particular, is once again aiming at "developing data-driven applications with no code". There is no testing story here, and CSC will most likely be called on once again to offer "compilation and validation services" for a fleet of fledgling developers "who would like to focus on their work and keep the concept count to a minimum".

When asked about what it plans to do next with this complaint, CSC reverted to byte code - as if to make a point:

01001001 00100000 01101000 01100001 01110110 01100101 00100000 01101110 01101111 00100000 01101001 01100100 01100101 01100001 00100000 01110111 01101000 01100001 01110100 00100000 01110100 01101111 00100000 01100100 01101111 00100000 01101110 01100101 01111000 01110100 00100000 00101101 00100000 01110011 01101000 01101111 01110010 01110100 00100000 01101111 01100110 00100000 01110010 01100101 01100110 01110101 01110011 01101001 01101110 01100111 00100000 01110100 01101111 00100000 01110111 01101111 01110010 01101011 00100000 01100011 01101111 01101101 01110000 01101100 01100101 01110100 01100101 01101100 01111001 00101110 00100000 01000001 01110100 00100000 01110100 01101000 01101001 01110011 00100000 01110000 01101111 01101001 01101110 01110100 00100000 01001001 00100111 01101101 00100000 01100010 01100101 01101001 01101110 01100111 00100000 01100001 01110011 01101011 01100101 01100100 00100000 01110100 01101111 00100000 01100011 01101111 01101101 01110000 01101001 01101100 01100101 00100000 01100011 01101111 01100100 01100101 00100000 01101110 01101111 01110100 00100000 01101111 01101110 01101100 01111001 00100000 01100110 01101111 01110010 00100000 01100101 01111000 01100101 01100011 01110101 01110100 01101001 01101111 01101110 00100000 00101101 00100000 01100010 01110101 01110100 00100000 01100001 01101100 01110011 01101111 00100000 01100110 01101111 01110010 00100000 01110101 01110011 01100101 00100000 01110111 01101001 01110100 01101000 00100000 01101001 01101110 01110100 01100101 01101100 01101100 01101001 01110011 01100101 01101110 01110011 01100101 00100000 00101000 01001001 01000100 01000101 00100000 01100100 01110010 01100101 01110011 01110011 01110101 01110000 00100000 00101101 00100000 01101000 01101111 01110111 00100000 01100110 01110101 01101110 00100001 00101001 00101110 00100000 01010100 01101000 01100101 00100000 01100011 01110010 01100001 01110000 00100000 01001001 00100000 01101110 01100101 01100101 01100100 00100000 01110100 01101111 00100000 01100011 01101111 01101101 01110000 01101001 01101100 01100101 00100000 01101001 01110011 00100000 01100111 01100101 01110100 01110100 01101001 01101110 01100111 00100000 01101101 01101111 01110010 01100101 00100000 01100110 01110101 01101110 00100000 01100001 01110011 00100000 01110111 01100101 01101100 01101100 00100000 00101101 00100000 01100100 01100101 01110110 01100101 01101100 01101111 01110000 01100101 01110010 01110011 00100000 00100010 01110000 01101100 01100001 01111001 01101001 01101110 01100111 00100000 01100100 01111001 01101110 01100001 01101101 01101001 01100011 00100010 00100000 01100001 01101110 01100100 00100000 01110000 01110010 01100101 01110100 01100101 01101110 01100100 01101001 01101110 01100111 00100000 01110100 01101000 01100001 01110100 00100000 01001001 00100111 01101101 00100000 01101110 01101111 01110100 00100000 01100101 01110110 01100101 01101110 00100000 01110100 01101000 01100101 01110010 01100101 00100000 00101101 00100000 01100100 01101111 00100000 01110100 01101000 01100101 01111001 00100000 01101000 01100001 01110110 01100101 00100000 01100001 01101110 01111001 00100000 01101001 01100100 01100101 01100001 00100000 01110100 01101000 01100101 00100000 01110111 01101111 01110010 01101011 00100000 01001001 00100000 01101000 01100001 01110110 01100101 00100000 01110100 01101111 00100000 01100100 01101111 00100000 01110100 01101111 00100000 01110000 01110010 01100101 01110100 01100101 01101110 01100100 00100000 01001001 00100111 01101101 00100000 01101110 01101111 01110100 00100000 01100101 01110110 01100101 01101110 00100000 01101000 01100101 01110010 01100101 00111111 00100000 01000001 01101110 01100100 00100000 01110100 01101000 01100101 01111001 00100000 01110100 01101000 01100101 01111001 00100000 01100011 01101111 01101101 01110000 01101100 01100001 01101001 01101110 00100000 01100001 01100010 01101111 01110101 01110100 00100000 01101110 01101111 00100000 01101001 01101110 01110100 01100101 01101100 01101100 01101001 01110011 01100101 01101110 01110011 01100101 00100001 00001101 00001010 00001101 00001010 01001001 00100000 01101110 01100101 01100101 01100100 00100000 01100001 00100000 01100100 01110010 01101001 01101110 01101011 00101110

Blog Logo

Rob Conery

I am the Co-founder of Tekpub.com, Creator of This Developer's Life, an Author, Speaker, and sometimes a little bit opinionated.


Published