This strikes me as the rantings of a CEO who doesn't have any touch with the reality of development. Thanks for the offer, but I wouldn't want to work for you anyway ;)
In all seriousness, I just don't buy that .NET is an amateur language that prevents you from doing certain things. C# is a great, rapidly evolving language with a lot of functional programming features built in. On the other hand (as a developer who used C# for almost 4 years), I felt it gave me more freedom than most other environments. You can even drop down to pointer manipulation in performance critical areas when needed...
And with all the support for asynchronous programming, it makes it easy to write truly scalable web applications with a similar paradigm to Node.js.
And ASP.Net MVC is really nice... if I weren't developing on a Mac and in love with Heroku, I'd probably be using it over Ruby on Rails.
tl;dr; - your rant is only applicable if you are only talking about VBA developers. Modern C# on .NET with ASP.NET MVC is a pretty nice environment.
.NET is a pretty good implementation of a Better Java. It doesn't even suffer from some of the cultural problems of Java. (FooDelegatorHandleFactorySingleton...)
It is a thoroughly corporate ecosystem, though. The vast majority of .NET programmers are work-a-day IT department developers. There is a lot of deference to MS on tools, language features, and libraries. MS developers will tend to wait for MS to incorporate something into the official platform rather than creating open-source projects to fill the same need. (eg. ASP.NET MVC) Even Java is better in this regard. It's hard to imagine something like Clojure emerging from the .NET community.
A lot of .NET hate these last couple days. I consider myself a polyglot, but most of the work I do these days is in .NET. I agree, there's no limitation on what you can do with the languages -- its the frameworks that limit you. Isn't that true with Rails, Django, Struts, and just about any other framework?
As far as languages being a red flag on resumes? I'd argue the more you see, the better. You don't want to see 30 years of C/C++ and nothing else, nor do you want to see someone with 1 year of each language. You want to see passion, dedication, and a genuine desire to learn.
I think the real issue is how much you can make as a .NET developer. Enterprise clients buy things that come in boxes. Rails doesn't come in a box, and it doesn't come with a support contract or a lifecycle agreement. There's something to be said for easy migration from version to version, tested hotfixes, and a fully integrated stack from app code to db server.
As I think about this more, the point may be that .NET is most rewarding for developers at either end of the experience spectrum.
As a very experienced developer, it's easy to get into the low-level framework type features like remoting (and building RealProxies), unsafe code (pointer manipulation), asynchronous programming with io completion ports, etc. All of these features allow experienced developers to create from scratch very powerful abstractions.
In turn, inexperienced developers can easily take advantage of these abstractions to build something quickly. It is this group that the author is referring to (and probably belongs to). Once a member of this group needs to do something outside of the realm of existing re-usable components, it takes a more experienced developer to help.
I think a great first place for him, or anyone, who actually cares about this, would be to make sure to understand the difference between .NET the framework and the .NET languages. The framework has features at many levels of abstractions, and yes, the higher up you get, the less likely you are to see eye to eye with the developers, but there's always a lower level, and at the bottom, you absolutely can fiddle with the bits on a network connection or whatever else he mentions.
Great assertions. How about some evidence or examples?
.NET was created to be as different as possible from everything else out there? Show me at least one example. Further, show that it was deliberately done in order to be different.
Backslashes in path names? What does this have to do with .NET?
Left-handed coordinate system in DirectX? What does this have to do with .NET?
A dozen complex files before you even write a line of code? When I start a new .NET project (desktop), I get an XML and a basically-XML file that are so straight-forward that I regularly modify them in a plain text editor, and I've never even read the documentation on them.
Allergic to open-source licensing? I use at least a half dozen open source .NET projects on a daily basis.
Every day with .NET takes two days to unlearn? The author is just throwing out random numbers and ideas at this point.
The author comes across as having nothing but preconceived notions of .NET. I'm with the others. I wouldn't want to work for you... or even with you.
Wow I hope this guy is just trolling. I haven't done much C# programming myself but the best coder I know built a HFT platform on .NET that made millions of dollars.
If this CEO wouldn't hire that guy because he's a ".NET programmer" then he has more important issues to deal with than his technology stack.
Also, his definition of a .NET programmer is hopelessly out of of date:
Programming with .NET is like cooking in a McDonalds kitchen. It is full of amazing tools that automate absolutely everything. Just press the right button and follow the beeping lights, and you can churn out flawless 1.6 oz burgers faster than anybody else on the planet.
Ummmm no. You're not describing the .NET platform. What you're describing is the old VB6 winforms-style or MS-ACCESS-style coding that was popular 5-10 years ago. The .NET platform has moved much much further than that in a short period of time.
I probably wouldn't want to work for such a narrow-minded person and I am not a .NET coder (may I never write Enterprisey code again!)
I realize he's probably just trying to use an imperfect filter to narrow the field of candidates but a lot of his criticisms extend to any framework, whether we're talking about Swing or RoR. Every tool you choose will limit you in some way. Oh well.
Wow, this is the most personally insulting article I've ever read on HN. I've been programming since I was 8, worked at a successful startup (that used .NET exclusively), and do most of my pet projects on the MS stack.
I can't agree with him on any of his examples on why .NET is a bad platform. Backslashes and coordinates systems are trivial. I can't imagine any point for any startup where it's necessary to know the bytes going over the wire when dealing with networking. Code generation is an incredible time saver, and can easily be deleted if the generated code is unnecessary. Expensive servers have nothing to do with quality of code. I've never heard of a .NET developer allergic to open source, not to mention that also has very little bearing on quality of code.
I would propose that the platform is a tool, and a developer who can only use that one tool is limited. But it's totally ridiculous to discriminate against someone for knowing how to use the tool and having experience with it.
While the McDonalds kitchen analogy is kinda applicable, the theory of malicious lock-in is just plain silly.
Did it ever occur to you that just maybe Microsoft's customers are big corporations that routinely employ the programmer equivalent of french fry managers? And maybe, just maybe, Microsoft's products are highly successful at achieving the benevolent goal of engineering a product for their target audience?
As a former hard-core .NET developer and Microsoft employee -- who hasn't run a Windows box at home since nearly two years before quitting Microsoft -- I agree that most .NET developers are kinda lost in a Microsoft-crafted echo-chamber la-la land. But I don't agree that it's got anything to do with nefarious intentions, rather it's got to do with social dynamics and product/market fit.
This article deserves to be slammed, and it's been well slammed, but there's a nugget of wisdom inside it:
Once you've exhausted your friend-of-a-friend type referral hiring, you need some way of turning thousands of resumes into tens of resumes for interviewing.
And no matter what filter you use, there are lots of examples of good candidates who fail it. The canonical example is GPA. The ratio of good programmers to poor programmers is higher in those with high GPA's (IMO), but there are tons of good programmers who flunked out of college.
There are lots of crappy .NET programmers out there, so filtering out .NET programmers will discard a lot of chaff. There'll still be wheat in the chaff, but you've got to get a shortlist somehow.
An even better filter might be to filter out anybody who calls .NET a language. Would that mean they have to fire the CEO too?
> They write everything from assembly to jQuery, on PCs to mobile phones, doing hard core computer graphics to high level social networking. They’ve tried everything. Everything, that is, but .NET.
I've written everything from assembly to jQuery and written software in C++ for mobile phones. I'm not a fan of either computer graphics or social networking but I've written a ray-tracer and built a few popular websites. When I'm not working in other technologies (which is much of my day job) I also dabble in .Net. Why? Because it's an absolutely fantastic platform for getting stuff done in Windows.
I'm working on a little hobby project right now in .Net that interfaces with a piece of embedded hardware. .Net has been crazy effective for it: low-level bit twiddling is a breeze without the programmer overhead of C/C++ (don't even bother trying it in Java). I even made sure it's possible to port it to Mono for Linux users. And those tools that "make 1.6oz burgers"; I'm using those. The project also requires a whole bunch of boring CRUD work and I auto-generated at least half that work away. Sometimes you don't need 1.7oz burgers so why waste a lot of time and effort replicating that capability for nothing?
I think you'd be remiss to hire someone who only knows a single technology, whether that be .Net, Java, or PHP. But I don't think .Net is some kind of poison for the mind.
I honestly would never work for this guy. I have a C, Python, Java, Ruby background (as in what I've used in past jobs), and I'm working with .Net currently even though I'm a Ruby fan. I find C# and ASP MVC, pretty freaking good, even though I'm a Windows hater. Close minded people like this dude don't deserve good programming talent at all.
I might not be one of the best programers ever (I'm probably not!), but even if I was I'd send the same message to this guy: "I play almost every stringed instrument from the violin to the piano. I can juggle up to 5 objects with ease. I know a quite a few magic tricks. I'm freaking special and I will never work for a narrow minded person such as yourself. Even if you pay me a quadrillion nigerian dollars."
i applied for a job with expensify about 3 months ago. the interviewer asked in what language i wrote a web app from my portfolio. i said c#. he said, and i quote "you can make websites in c#?" he literally had never heard of asp.net. yet is ragging on .net in this blog post.
their office was just 1 room, with 3 guys sitting at a single table. they kept offering me a beer. i guess it was to seem hip, seeing there's no real reason to have a beer during a job interview.
i wound up not getting the job because i used the kohana mvc framework in the coding test and they 'couldnt understand my code.' i think in all i wrote less than 150 lines of clear, commented code, but they dismissed it outright because i used these things called classes. im sort of glad i didnt get the job, because i got a job paying literally double their offering salary the next day.
I'm going to keep my response brief: 1) .NET is not a language, and calling it such is just silly. 2) I've built everything from insanely high-performance emulators (IronBabel) to kernels (Renraku) to computer vision applications (not announced yet) using .NET; all of these are "1.7oz burgers", and all of them were performant, flexible, and easy to build.
This should be a giant red flag to anyone who is considering working at Expensify (as long as this CEO is around). I see this "we're hiring the best developers in the world" mentality from time to time at small startups and honestly it borders on delusional. You write software which makes expense reports and you've made some money. You aren't working on anything that would interest one of the best developers in the world and I seriously doubt you're prepared to pay what it takes to employ one.
We all know that working in .Net means about as much as a carpenter using a saw. Drawing conclusions from it is just another example of very poor reasoning skills.
In the end this is just linkbait and I hope the CEO apologizes publicly for making a poor decision in publishing it.
I have a hard time taking this seriously beyond the ".NET is a language" statements. I don't think most of his statements really apply to C#, but they certainly don't apply to F#.
This is cargo cult management at its finest. The author is clearly one step above knowing absolutely nothing about this at all. It reads like he got burned by a bad hire and now everyone who shares traits in common with that person is also a bad hire.
The Author of this article obviously has some misconceptions about .NET, and has probably had some bad experiences with enterprise developers. I've worked at two very successful startups that have used .NET for high traffic web development (and no, I'm not talking about MySpace). Some sites dealing with 5million + page views a day, and some of our .NET services would handle 5billion+ requests a month. It is great for large teams, the CLR is well optimized, and C# is a beautiful language in itself (although the platform supports many scripting and functional languages). I believe what the Author really means, is stay away from seasoned Asp.net web form developers who have never strayed from .NET and have no experience in an agile environment... if you are looking to hire for your startup. I've been hiring quite a few developers recently for the once startup I'm currently working at, and when recruiting I make sure to never start discriminating based on the language that an engineer develops in. I've hired programmers who were mainly developing in C++, Java, Python, PHP, and many other languages. If they are Jr, you just need to be super smart problem solver with decent programming skills. If you are Sr./Lead, you need high traffic experience, along with being well skilled with a strongly typed language, among other requirements. These kind of candidates have done extremely well, and enjoy the .NET platform that we mainly develop in. And me personally, I prefer .NET, but if the team and product is great, I would be happy to work with Ruby, Python, .NET, Java, etc... I think my PHP days are over though=)
I feel like he is both right and wrong, and for all the wrong reasons.
His hunch is that for the most part .Net developers are bad, and by and large I agree with that. Because .Net is used in a lot of Enterprisey places, and it's so easy to get a job in it right out of school you find a lot of just horrible code, and broken mindsets about programming in general. All of the idiocy I find in .Net is usually just someone who wouldn't know how to solve their problem in any other programming language either.
But he's wrong that that is a direct result of .Net in general. I feel you could swap out .Net for Rails: "oh all you know is how to run `rails g scaffold` therefore you're not worth my time". That is wrong. Like Rails, .Net provides abstractions over mechanics, but you will be a happier, more confident programmer when you can understand the intent of those abstractions, and maybe even take a theoretical stab at how you would implement it. That goes for any platform you develop on.
Personally I think I've grown a lot as a developer in general over the past few years using .Net professionally. Despite the stigma I've met a lot of smart developers, and C# has helped me hone how I like to think about and solve problems in general. I'm sure it helps that I do a healthy amount of other hacking outside of it all to give me perspective, but I certainly don't feel stupider for being exposed to things like LINQ, which helped my grok Monads and embrace more Composition style programming in a fuller way.
I wish the author of this piece the very best with his squirrel restaurant franchise.
Seriously, what the hell is this guy going on about? The fact that large companies that create huge ecosystems also create cookie-cutter ways of doing things? And this is bad?
I've coded in just about everything out there except Haskell and Lisp. I've worked with heavy web-centric systems, distributed systems, P2P systems, and so on. I've written drivers, shell extensions, and rules-based database applications. And yes, it's true, I'm moving more to linux and F# on mono lately. But that's because of licensing and scaling issues, not because the .NET stack is somehow defective. In fact, if .NET were a liability, I would very quickly jump into something else. But it's not.
It's also true that there are a LOT of .NET developers who understand the cookie-cutter approach and can't go outside a very small comfort zone. But that's a product of being the world-wide standard, not a product of something gone wrong. When you own the game, hundreds of thousands of folks are going to go through 6-week "learn .NET!" courses and come out the other end button-pushers. If anything, those guys are a sign of a mature market, which is a good thing.
This article shows the worst thing about all of us as programmers: we tend to run on assuming that we are experts in areas where we have the slimmest idea of what the hell we are actually talking about.
In fact, I feel this article is so bad that it has to be a joke: a poke with a sharp stick just to incite a lot of invective comments, like this one. Fricking linkbait. Bah.
I don't think its a joke, I think the CEO was genuinely trying to share that he had seen a lot of correlation between folks who programmed in .NET and people who weren't a good fit for his company.
I get similar negative vibe when I talk to people who don't use data structures (seriously I interviewed a guy who wrote a frickin' file system that was linear arrays, all the way down)
But it doesn't mean there aren't jobs that aren't a great fit for those folks, and this is where I think a lot of these discussions go off the rails (if you will forgive the pun).
If I am a programmer who loves .NET, and I read this, I can choose to take it in a couple of ways, I can be offended that this guy has just hugely disrespected me and all my .NET lovin' friends, or I can be glad to know that I don't need to bother myself talking to any of his recruiters that are scouring the globe. As I tried early and often to drill into my kids, you can't control what people say but you can control how you choose to feel about it.
"This article shows the worst thing about all of us as programmers: we tend to run on assuming that we are experts in areas where we have the slimmest idea of what the hell we are actually talking about." -- I think what you were trying to say here (but don't let me put words in your mouth) is that it is a mistake for programmer's to take what they know about themselves and to generalize it to everyone else indiscriminately. I would be happy to interview .NET programmers if they were willing to try other methodologies and languages. However I will relate that I have met people who have found God's Own Language (and it varies from person to person which one it is) and refuse to try any other language, or any other development methodology. If that isn't compatible with mine then we both should know that it won't work well.
The author gives a good description of the kind of people he would like to work with, that is valuable because in reading it you can get a feel for whether or not you would like to work with him. So its a win - win.
In your reply, I think you touch on an interesting aspect of this: why did it push so many buttons?
I really think it has very little to do with .NET -- I can take .NET or leave it, depending on the nature of my needs.
I think it has much more to do with the smart-ass feeling you get reading it, combined with the fact that, if you're any good at all in the .NET universe, you know better.
That made me think of all the times I've spoken to developers when they just knew that such-and-such was true. And it wasn't. That same snarky attitude, that same over-generalizing, that same use of silliness to try to mask the predjudice.
I wouldn't throw out working with this clown. Who knows? Might be fun. But the attitude is worthy of comment, and, since I have been known to be this way myself, I feel like I can honestly jump in.
But really, who this guy wants or doesn't want, or what his opinions are don't matter that much. The interesting question would be how he deals with realizing he doesn't know so much. That's true for anybody.
I work on a .Net app now. It has tons of complexity that any other app has, if anything more complexity because of the requirements put around you.
Perl and Python are like poetry. You can do whatever you want.
.Net is like a haiku. You have limitations, but often times those very limitations are what allow you to focus on the true meaning of the code, and what it should be doing.
I think there is some level of truth to the article, but it's overstating it, which is clear.
"Why we don't hire .Net programmers" turns into ".NET on your resume isn’t an instant showstopper. " turns into "If you are a startup looking to hire really excellent people, take notice of .NET on a resume, and ask why it’s there."
So ask why it's there. Just like ask why Python is there, or ask why Perl is there.
So really, what you're saying is, it's important to ask why they programmer in the particular languages they choose, and use that information to determine why they do what they do. Prefer people who do it like a hobby as opposed to those that do it as a job.
Great. But what does that have to do with .Net? Oh yeah, you just don't like it.
That's fine, I don't either but I don't immediately think a programmer is bad because they use .Net.
Apparently, this guy skipped "Intro to the Theory of Computation" class on the day they covered the concept of Turing completeness. The notion that there is any program that can be written in any other Turing complete language that cannot also be written in one of the Turing complete .NET languages is provably wrong. End of story.
That's fine I guess but you will miss out on good people even though you don't think you will. The reasoning here suggests that .Net doesn't require you to do anything outside of controls and drag and drop which isn't in my experience very true at all. I've been able to some the occasional control for what I do but it's never anything fancy at all.
What platform are you using that doesn't abstract the networking stack? Network programming in C isn't that that different than in C#. The same basic concept of I/O is there and the APIs basically work the same way.
Also .Net isn't a language. I guess you are referring to C#.
Wow. Circa 1980's "Micro$oft" rant from a 2011 CEO. No wonder they're having a hard time hiring.
I think the real moral of this story is: (1) avoid technology religion and it's practitioners, (2) if you're cooking steaks on a gas grill and you see your CTO warming up a dead squirrel over a book of matches, find another job.
Ok I am going to defend the guy somewhat. He clealy can't be talking about C# or any other CLR languages themselves, that would be just plain dumb and I'm going to give him the benefit of the doubt.
I guess he is talking about the various Microsoft supplied frameworks. Within say, Silverlight, it is easy to dip your toe in, get to something like databinding, and go off the rails, trying to bend silverlight to your will to do something that should be easy, and coming away with the impression that what you are doing is totally impossible within silverlight. Then you spend 20 minutes actually thinking instead of in a Microsoft hate fugue state and you see that it actually is easy if you don't fight the framework. So you are like "fuck you .net I want to do it my way!"
But that is the nature of frameworks, not endemic to .net.
I am a .NET developer, and I am trying to hire excellent, well-rounded .NET developers (hint), and I can tell you that it is non-trivial, specifically because many .NET developers are not particularly well-rounded, nor have the vast majority of them much experience outside the .NET ecosystem, nor more than a basic understanding of the technologies which underly the very powerful abstractions MS has built on top of them.
So I can certainly sympathize that someone who is building something that requires more fundamental knowledge might find .NET to be an effective bunny-filter.
I did stop reading the article when I got to "I'm sure .NET is a dandy language."
I've read much bullshit over the years, but this tops it all. I personally have wrote code in more than a dozen languages and would still prefer .net any-day. You can write almost anything with any language. You can develop web.apps in assembly language if you insist, but it'll take 10 times more time and money than doing it with .net, php, ror or other modern languages and you'll have 10 times more bugs to deal with. This attitude is plain stupid arrogance. If it were a company doing embedded systems for the defense industry I'd understand, but from a company that deals with invoices... they must be kidding!
I think this is just a rant by some CEO who hasn't had much real world experience. Sadly, it doesn't give any examples of why .NET is worse.
I would question why he REALLY doesn't like .NET. This article to me it like a person stuck inside a box with only peep hole towards the java stack. When he realizes that there is more to life and academics than just java or objective C, then maybe we will talk.
Can we please not keep up voting this rant that I didn't learn anything from except for the comments posted here on HN?
Most of us may not agree with his philosophy, and have questions about his basic technical and leadership competencies. But right or wrong, he's being very transparent about their hiring and development philosophies.
This is a good thing. It helps his company attract the kind of person that will work well in that environment, and gives clear warning to the rest of us that this is not the place for us, and that we are better of not wasting our time seeking a career there.
Although I also dislike .NET, it seems the primary complaint here about .NET is that it abstracts programmers too much away from the bare metal. But doesn't that apply equally to non-MS languages like Python and Ruby? In fact, isn't abstraction in general a good thing?
The author also bewails .NET's lack of configurability. But what is it about C# that instantly defiles any programmer who touches it, that doesn't also apply to, say, Java?
This is a really bad take on Microsoft technology lol.
I've wrapped a lot of my stuff around .NET technology and is very happy with it. You can definitely save a lot of time and launch your product fast to draw attracting with .NET. In a B2C business, you need to bring your product to the market as fast as possible before you can present, the end user doesn't care what you are built based on. Just take a look at match.com..
it's like saying real singers, the ones with true talent, the ones that have sung since they were young and not just voice trained year after year are rare. Except opera singers - they are truly hacks without the range or talent to do anything else but belt out high pitched drivel in god awful costumes.
Actually, you shouldn't. I was getting fumed by the end of his first paragraph where he bragged about his decent programmers being able to fence and do knife play. If he's looking for mercenaries* who can code I should email him! Anyway, I read on and he made several contradictions to his own points. I can't take him seriously now.
*not a mercenary but I'm a runner who flies planes and is a good shot with a Glock, but I sure as hell wouldn't put that on my resume
.Net as a framework is designed to get stuff done so you can go home and play with your kids, not pander to the whims of a CEO with his head up his behind.
According to him, I shall have to "unlearn" all those ever so bad practices and technologies such as ORM/DDD (NHibernate), DI (Autofac), SoC (MVC), SOLID, Messaging (NServiceBus), SOA (WCF)...
I will give him one thing; at least 75%+ of the "developers" on the market in the UK couldn't put a web page together without the ASP.Net webforms designer but the same is true with all technologies otherwise we wouldn't have dreamweaver and the likes.
Fuck this guy, and everything about him. I can program in Assembly, C, C++, Java, and Lisp fairly competently, but frankly I like C# because I can see results almost as fast as I can imagine them. It has an amazing tool set. Does it really make those other programmers better than me because they prefer needless complexity?
If I need a 1.7oz hamburger, I'll use one of those other tools. But 99% of the time 1.6oz is just fine.