CEO Friday: Why we don’t hire .NET programmers
blog.expensify.com
blog.expensify.com
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.
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.
And what's this about .NET being a language? He acts like this entire system is similar to what? Javascript? .NET is a platform which runs dozens of languages with hundreds of thousands of easily pluggable libraries. If you're coding C++ in .NET writing unmanaged code you're doing something completely different from some guy dragging and dropping controls on a web page in VB.NET
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 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.
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.
An array is a (simple) data structure.
.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.
"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.
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.
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.
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.
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?
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 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."
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.
another funny thing from applying is in the coding test they show you how to connect to their api using javascript, but it would never work because of cross domain restrictions. they probably have only tried it over localhost ;p
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.
Kind of the whole point of frameworks. Including jQuery which they're using.
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.
See, experience is cheap. All it takes is time. Skill is harder, but really only requires hard work — a lot of people can get that. But attitude. You either have it, or you don’t.
So, what he's saying is, experience is cheap, hard work is cheap (seriously???), but attitude, now that's worth something? I think I see the point about his programmers beating up everyone else's.
I say, let him have all the attitude he can choke on. I'll settle for the hard work and experience, thankuveddymuch!
Troll, troll, troll...
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.
Exactly what that contributes to programming or expense reports is anyone's guess.
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.
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 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.
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.
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.
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.
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.
Some startup here should take him up on the developer vs developer challenge.
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."
Feeding
The
Troll
"Even worse, every day spent learning a Microsoft kitchen takes TWO days to unlearn, meaning once you get a reasonable way down the .NET career path, there is almost no going back."
That's not true in my experience.
I work at small, profitable company using Linux / Python / Amazon Web Services, we have some fantastic developers who came from a pure .NET background - some worked at Microsoft.
They transitioned successfully because of their attitude. If you commit yourself to learning the tools and not fighting them, you can make the transition in a couple months - no problem.
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.
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?
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..
Skills shouldn't be rated by the IDE developer use.
Not everbody wants to be that kind of geek, that's hacking into a console all day long, rather than using an good IDE.
Rate people by their abilitity to handle those programming languages (e.g. readability, cleanness, layout, speed and so on).
If you don't need C# developers fine, but don't say people should be aware of C# programmers.
By the way, I worked with really good developers, which also programmed in C#, many of them were real experts and absolutly passionated.
--------------------
Got to love how he extrapolates his own little idiosyncrasy to every startup.
Any hacker with half a brain would stay far, far away from this company.
this stuff honestly makes me sad for this industry. There are probably 100's of programmers that will now never get to work in the start up world because they list c#/.net etc on there resumes.
*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
Why I don't listen to CEOs.
.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.
The guy is a total muppet.
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.