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.
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.
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.
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.
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.
.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.
I'm really not sure where to begin with my criticism of this article. Perhaps the McDonalds kitchen straw man. Or maybe the outright fabrications like:
"Big things, like obscuring the networking stack under so many countless layers of abstraction that it’s virtually impossible to even imagine what bytes are actually going over the wire."
The only actual examples of "incompatibilities" that weren't lies were trivialities -- who cares if DirectX is left handed or right handed? Flipping your Z axis is trivial.
As someone who has extensively used both .NET and other platforms (C++, Java, etc.), this article strikes me as the naive views of someone who hasn't learned enough .NET to form a cogent opinion.
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..
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#.
I agree with previous posts, I don't know any programmer who can 'choose' the language. Usually it's the boss who selects the language the whole team uses.
And then it's a job to pay bills and maybe child support.
But, clearly it's just his opinion, as he makes references to backslashes or forward slashes. It's an uninformed opinion?
In certain circles, we call this trolling. He knows what kind of response he will get. He's attacking .NET programmers. Let's see how they respond, etc.
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.
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.
"keeping the programmer far away from the details such that they’re wholly and utterly dependent on Microsoft’s truly amazing suite of programming tools to do all the thinking for them."
Kind of the whole point of frameworks. Including jQuery which they're using.
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.
Just because he managed to attain the title of CEO, doesn't mean all he speaks would be gospel. Having a closed mindset is, more often than not, detrimental to one's ventures.
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 article probably does more to hurt expensify than it says anything about .NET development. I'd seriously hope that any CEO I work with would come talk to a dev before writing something like this.
I was pretty much a 100% .NET guy before joining Amazon in January. Without reading a book, I was immediately able to start writing Java at Amazon because of how similar it is to C#.
> 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.
Moreover, if you did need 1.7oz burgers (Jesus, what a horrendous analogy), the only thing potentially standing in your way would be your own ignorance of the framework.
Sort of like what's standing between this company and some very talented developers.
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.
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.
78 comments
[ 2.6 ms ] story [ 159 ms ] threadI 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.
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.
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.
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.
Anyways, </soapbox>
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.
"Before Clojure, [Rich Hickey] developed dotLisp, a similar project based on the .NET platform."
Thus it looks like Rich Hickey was in fact a .NET developer at some point, and so Clojure did, in a way, emerge from the .NET community.
Exactly what that contributes to programming or expense reports is anyone's guess.
"Big things, like obscuring the networking stack under so many countless layers of abstraction that it’s virtually impossible to even imagine what bytes are actually going over the wire."
The only actual examples of "incompatibilities" that weren't lies were trivialities -- who cares if DirectX is left handed or right handed? Flipping your Z axis is trivial.
As someone who has extensively used both .NET and other platforms (C++, Java, etc.), this article strikes me as the naive views of someone who hasn't learned enough .NET to form a cogent opinion.
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..
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#.
And then it's a job to pay bills and maybe child support.
But, clearly it's just his opinion, as he makes references to backslashes or forward slashes. It's an uninformed opinion?
In certain circles, we call this trolling. He knows what kind of response he will get. He's attacking .NET programmers. Let's see how they respond, etc.
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.
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.
I think that they are bad because they use PHP.
Kind of the whole point of frameworks. Including jQuery which they're using.
.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.
Feeding
The
Troll
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?
Because in certain pockets of the country 90%+ of the jobs are in .NET.
"See, Microsoft very intentionally (and very successfully) created .NET to be as different as possible from everything else out there"
? It's almost exactly like java.
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.
Sort of like what's standing between this company and some very talented developers.
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.
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 started programming out with MSC 5.1-> Borland C++ 5.0-> MS C++-> MS C# and have never looked back.
It's elegant, powerful and gets out of your way when you need to deep dive.
I would suggest you take another look at it and don't confuse all .NET developers with VBA script kiddies.