.Net Developer Shortage
techcrunch.com
techcrunch.com
I see so many companies that want something for nothing. They want the automation and savings from the systems that developers are building, they're just not willing to pay for it. But then ask them if they'd rather go back to the manual business process they were doing before (that doesn't require paying developer salaries) and they look at you like you're crazy.
Folks that like to program, usually don't like to write back office apps.
Developers with a good head on their shoulders can get 6 figures easy doing SharePoint... but who in God's name would want to?
There is something about building things outside the box instead of being part of an assembly line at corporate shops. The lack of politics and endless meetings is a bonus too. It's not always about the money.
I think he was saying that the typical Enterprise jobs are uncool, not that .Net is necessarily so.
It's still hard to get an Enterprise job as a Ruby developer.
Hence the stereotype.
Then the hiring manager bitched to me that all of the programmers they hired quit when they found out the job actually involved Sharepoint!
It's always funny when you hear someone complain that "everyone I've worked with in field X is an asshole" or "All the clients I have are assholes", etc. Pretty soon it's likely that you, not your clients, are the asshole.
I'd take 6 figures of SP and develop WebParts (and will sell them).
It's a very good niche business. Just like what Wordpress used to be (or Drupal).
I kinda like my job right now but for a million bucks I'd kinda like your Sharepoint installation, too.
"Why the shortage? ....NET developers earn around $83,000 per year, but Java developers typically make more than $91,000."
Java, and it's ecosystem, are a little more difficult to use and master than C#, and IMO, warrant the extra average pay.
Also, let's be honest: the Java ecosystem is a mess in a lot of ways. One of the biggest pluses to the .NET world is that things tend to Just Work a lot more than in the Java world. Not that this is a huge deal (I work in Java, and handle it fine), but considerably more knowledge of the entire Java stack is often necessary than on .NET.
Oh, and Scala naturally lends itself to writing maintainable and bug-free code.
This does not match my experience in the slightest. MSDN is leaps and bounds better than the Java documentation and the available resources at places like Stack Overflow tend, in my experience, to be of higher quality and quantity. In this I find that C#'s lack of favor as a pedagogical language works in the C# developer's favor: there's much more signal to much less noise.
> I've also found that you can't understand the entire stack in .NET because that information is often just not available.
This is simply not true. There is very, very little information that is not available about .NET (largely derived from either reading the specs or inspecting the IL) and essentially nothing unavailable about the .NET libraries thanks to Rotor (for legally safe inspection of certain libraries) and Reflector (which poisons you for Mono contribution, but is a fairly accepted practice).
> When they do, it's nice to be able to peel the abstractions away.
You can, trivially. It is an indictment of the largely ASP.NET-focused developers mentioned previously that they do not, but it is not a difficult task.
> Oh, and Scala naturally lends itself to writing maintainable and bug-free code.
After some confusion from this statement I entertained, if unwillingly, the thought that you are serious. Scala is no Perl with regard to its distaste for readable code, but it lends itself to ambiguous or stupid syntax (the inanity about "using what you like" for parens versus braces comes to mind as a minor quibble, the flinging of underscores throughout "idiomatic" code being a much greater one). To complicate matters, Scala's IDE support (even in IDEA, the best of a sorry lot) is horrifyingly bad. To what Scala lends itself, I have not yet been able to ascertain, but "maintainable" has surely not been an adjective I'd use. Partial credit for "bug-free" due to its tendency to encourage immutability, for which I am very thankful, but...only partial. I still have to read the byte-vomit.
The best compliment that I can pay to Scala is that it is better than Java--damning with very, very faint praise. I'm praying that Ceylon or Kotlin comes along and deals with this insanity in an adequate manner.
I am not however, inexperienced with Scala or with programming languages in general. I was very serious about Scala. There is nothing ambiguous or hard-to-understand about Scala's syntax. If a couple of underscores or inferred parenthesis throw you off then I seriously doubt your ability to read source code effectively.
I mean, really. Interchangeability of "()" and "{}" bothers you? Making them interchangeable, along with currying, lets you invoke higher order functions in a way that is much more natural looking than what you can do in C#. The Scala code often looks identical to Ruby's blocks, which, as a second witness, most people also find to be a far more pleasant syntax than the equivalent Python code..
Can you really not, when you see "call(_,_)", parse it in your head as its more verbose C#-like equivalent, "(a,b) => call(a,b)"? If you can read the C# version, there is no reason you can't just as easily read the Scala one.
Is it so hard for you to see that "list filter pred sum" is equivalent to list.filter(pred).sum()? Scala is actually simplifying and unifying the language with this rule. Whereas most languages handle arithmetic operators specially, Scala can treat 1 + 2 + 3 literally as 1.+(2).+(3), which means that + is just a normal method!. In this sense, Scala is simpler and easier to grok than almost any other mainstream language!
And, Scala's IDE support, which is supposed to be fairly good at this point, has no bearing on the topic of conversation. Finally, There is nothing exciting to hope for in Ceylon or Kotlin compared to Scala. It looks like, in terms of language advocacy, we are direct enemies!
There are probably more books teaching how to write better code in Java than in C#. Even if the number of books in C# that taught better ways to code is approaching the Java counterpart, they are more likely to be newer books and not necessary preached by Microsoft.
As much as people don't like (or abusing) Spring and Dependency Injection concept, more Java projects are using it (with probably some amount of unit-testing) as opposed to C#.
When you look at Continuous Integration landscape, most of them came from Java.
Edit: There are of course exceptions to this, but I have seen it too many times to not see believe it is the norm.
I have to take exception to that -- or at least the specific phrasing.
It's certainly true that most MS-platform guys don't grok other platforms. But I strongly disagree that they cannot do so, given a brief period to learn.
My experience is these people typically transition over later in their careers.
Having said that, I agree that Java ecosystem is more difficult to learn.
Many students during my college time prefer .NET because VS.NET Express makes a lot of things easier compare to Eclipse, Java, Ant, classpath, etc (forget Maven).
Programmers are interesting animals - the good ones work for fun. As long as their bills are getting paid and work is interesting, they stay. Give them a brain-dead job, like anything Sharepoint-related, and they leave.
I disgaree. They do work on interesting stuff, but getting bills paid isn't sufficient. There's no shortage of interesting work. If you can't find an interesting job at pay you find compelling then there's a problem.
I'm not expecting "fuck you" money, but something that pays enough to compel me to be in a car for 2-3 hours per day commuting, or something interesting enough to compel me to move states.
We probably have different numbers for "compelling" pay.
LOL. Only the idiots. The others find places where they get to do stuff they love and where they get paid well.
That's a valid concern, in my opinion. I don't know why, but even talented Microsoft developers I've spoken to have been woefully unaware of developments outside of the .Net/ASP sphere. It's almost as if innovations don't exist until they've been incorporated into the CLR. I've seen similar attitudes in Java developers, but it appears to be far worse in the .Net community.
That was, in fact, one of the reasons I chose to keep practicing other programming languages while I was employed by a .Net shop. I didn't want to end up "stuck" knowing only .Net like so many of my co-workers.
That was years ago though... and since then I've happily moved on to being self-employed and using OSS.
Eventually I got tired of it and went back to primarily Win32 development for customer-installed apps and Linux for everything else. I feel like I can focus on quality rather than quantity much better now.
It's that which is mystifying, not the zealotry.
If you had to choose one of two faults: Nothing But Microsoft OR Anything But Microsoft -- you're going to be better off as an ABMer since (theoretically) your ecosystem of options is MUCH larger. Rejecting Microsoft still leaves you with several other marketable options. Rejecting everything that isn't Microsoft leaves you completely at the mercy of a single platform that you have no control over (and if you did have control over it, it still wouldn't be ideal)
So on one hand you're dealing with a fanatic that only sees black and white, and the other you're dealing with apathy. Not exactly good options.
The reception to ASP.Net MVC, though, confirmed my original point about the .Net community. I heard lots of talk treating the MVC pattern as revolutionary, when, in fact it was something that was rather common outside of the .Net community.
But it takes the Microsoft stamp to get a lot of these people excited.
(As noted in a sibling comment, it's also very common to see people turn their brains off rather than entertain .NET as a sometimes-appropriate tool.)
I'm in the same boat. It's a shame too, in my mind at least, because I really do enjoy working with the better parts of the platform (MVC, WCF, C# 4, VS 2010, etc).
I'm currently working in a .Net shop and the work is not terrible by any means (it's a fairly large scale web application used by school districts), but I'm starting to fall out of love with the MS lock-in and general attitude of the folks I've worked with so far. I'm pretty sure 95%+ of my current and past co-workers have no idea what hacker news is (or even /r/programming for that matter). The general reaction when telling someone about my side projects learning Scala/node/rails/etc on my (gasp) Mac at home is along the lines of "huh?".
Yes, there were other "Rails for .NET" frameworks out there. But, you are correct: the vast majority of .NET developers are waiting for the official Microsoft seal of approval before adopting anything. It's part of the culture that comes with choosing Microsoft for your stack: you want support, or at least somebody to sue when it goes wrong.
However it does seem like devs for every technology are in high demand and low supply. It could just be as simple as that.
Even with a moderately easy tech-screening process we could only realistically do second interviews with around 1.5% of the applicants we got. For as good as .net is, I think it's doomed to be relegated to accounting apps for the foreseeable future.
I'm lucky enough to work for one of the few .NET shops where I'm not just stuck pumping out commodity CRUD apps but the market looks pretty bleak.
That said, we're starting to look for another developer, and it's a nightmare. So many resumes of people that (without wanting to sound rude) belong in a .NET shop- I interviewed one guy that didn't even know SQL, because all he'd ever done was use prebuild factory methods for database access. He had a Masters.
These are the very type of people who are bailing on the platform.
This also led to them working in bringing the code to the lowest common denominator level and was a frustrating nightmare. I was a lone wolf and when I mentioned that I had implemented a couple systems using MVC and jQuery on the front end it blew some of the developer's minds. It's a shame because the framework is capable of a lot, it's just the enterprise shops are terrible of taking advantage of it.
Needless to say, I'm not a .NET developer anymore.
Wikipedia tells me that .NET 1.0 was released in February 2002, 8.5 years ago. Good to see recruitment companies and HR depts have such realistic requirements. (Still, at least they aren't asking for anyone with 10+ years experience)
http://seeker.dice.com/jobsearch/servlet/JobSearch?op=302...
I rarely take a .NET contract. But what I can say is 1) They always pay my highest rates. 2) Generally it's a bad / scary experience in comparison to python or Clojure (where I do the majority of my work and contracting).
They could be looking for developers with 8-10 years of experience as developers but who also know .NET.
I was brought in to work on a project. They'd installed a PHP-on-Windows setup for me because I was introduced as a "PHP guy" (which I mostly am, but I do other stuff as well). I indicated I could do the project in ASP.Net, but it would take me a bit longer because it's not my main platform. No... they needed it done ASAP, and were prepared to be a mixed shop. They were already running another PHP app on Windows already, so this was a natural progression. They were already having trouble finding .net people in the area - freelance or otherwise, so it seemed a concession they were willing to make. Find available talent, get job done faster, move on.
Project was done in July and August, then went up the approval chain. I was expecting to come back at end of Sept with a list of changes to make.
"Well.. our developer ported it to .net because that's what he's more comfortable maintaining."
So... rather than spending some time getting comfortable with PHP, they spent time reworking something in to ASP.Net, negating my work, and meaning there was a couple of weeks of other internal .net work not getting done either.
What does this have to do with .net developer shortage? Maybe nothing, or maybe those companies could be more productive by having staff that could work with mixed tech stacks more effectively. I'm stereotyping a bit - we've all met developer X who only knew one technology, and every problem had to fit within that one tech worldview. I've found it with zealots of all stripes, but perhaps it hurts a bit more at the enterprise level?
Fortunately, there seems to be a renaissance going on at MS. They realise they no one likes working with their shit tools. Sure MS technology may "run the world", but all the cool/fun stuff is being done in the OSS stack. When was the last time you heard of a hot startup using .NET? MS wants in on the party and a lot of their new stuff has a deliberate non-enterprise angle with a focus on developer enjoyment.
Does Stack Exchange qualify?
I typically ask candidates to implement a function that calculates the nth element of the Fibonacci sequence, write a program that prints the values in a binary tree in ascending order and finally to implement an algorithm that finds the value of the element in the middle of a linked list. These are just "introductory" questions, but very very few candidates make past this stage so I very rarely get to ask serious / deep programming questions to candidates.
And believe me, I'm very forgiving on interviews and try to take into consideration that the candidate is probably very nervous, especially when they are fresh off the school, but what can I do with a candidate who can't figure out how to get the number of elements in a bloody linked list, even after carefully explaining how a linked list works? Or the ones who get the idea that they should be counting all elements but have no idea how? How could I discuss the finer details of type covariance or ask them how they would go on about implementing a face detection algorithm if they can't even come up with the naive solution to the Fibonacci "problem"?
I'm struggling to think of the last time I had to use a linked list for anything. I'd be tempted to give the troll answer: put the elements into a List<T> already, divide list.Count by 2....
Sure if it's doubly linked then you can walk it from both ends and meet in the middle, then think about how to handle the case where there are an even number of elements, but do you really want a serious answer about linked lists in .Net?
Additionally, my view and experience is that unless we're trying to hire a specialist in a niche, domain knowledge (in this case, .NET) is considerably less important than general programming skills and abilities; a good developer with limited .NET skills would still write excellent .NET code, a developer who's very familiar with the .NET Framework but who's poor programming skills would be a liability for the company.
We don't manipulate them indirectly either; .Net or Java lists aren't implemented like that.
From a recruiting point of view, this kind of questions are indicators. They are easy to verify and they are correlated with some other, more relevant skills.
First, knowing your 101 Data structures is correlated to your Computer Science general knowledge. What relevance does it have? It depends on the job description. There are jobs that merely require churning out bland CRUD application code, and it does not make much of a difference if you know this stuff. But, in general, for anything that has strong performance requirements, it might be a concern.
By example, if you let me feed the troll, your solution shows a mix of cleverness, (potential) ignorance and unawareness of the high level goal.. that I might be concerned you would produce something like...
class SortedList extends List{ //... add(E element){ parent.add(element); qsort(this); } //... }
On the other hand, Linked lists also give you a hint of the ability of the candidate to manipulate pointers/references. This may or may not be relevant, again, depending on how often do expect to use this skill in your code base. A trivial solution would let you at least know that the person pays attention to detail and does not leave a mess behind. A more sophisticated approach gives you more information about actual expertise (like, if you know about cycle detection, this is a piece of cake).
I can't quite shake the idea that what you're really testing is if the applicant has been to the same kind of school as yourself.
> There are jobs that merely require churning out bland CRUD application code, and it does not make much of a difference if you know this stuff
I've seen some really interesting (and performance-constrained) code done in .Net that didn't use pointers or linked lists in any way. It's not either "bland crud" or pointers, that's a false dichotomy.
Of course, concepts like parse trees, A-B pruning or Hungarian method of optimization are things that are worth having a hold on. But "how often you expect to use the skill" of linked lists with pointers in many modern languages, Java and C# included, is effectively never.
No idea where the crap java code for a sorted list came from, hope you're not trying to put those words in my mouth!
In the .Net world, good companies do try to look out for "broader" developers who are aware of useful open-source software toolkits, and want to practice things like Dependency Injection, TDD, Continuous Integration etc. They generally make better coders.
At the end of day, you seem to miss my point altogether. Testing for the skill is not useful in itself. It is just an heuristic.
The industry is choke full with people that seem fairly competent and accomplished, who is able to produce code that fulfills the specification, but who also come with a collection of vices, bad practices, and simply cannot make trade-offs intelligently.
People like me wants to believe that, because CS foundations are not strictly needed for the task at hand, these people tend to ignore it for the same reason that they ignore other, more important, stuff that also is not strictly needed to complete the task at hand (but that will have a direct impact on the quality of your solution).
I am fully aware that there are great developers that do not come from a CS background. I am also painfully aware that there's people who excels at the CS 101 questions but cannot perform in a real world environment. At the end of day, this does not provide a final go or no go answer. It is just an indicator of whom you want to bring in for a deeper, longer interview.
> hope you're not trying to put those words in my mouth!
Not at all. I was just going on with the troll thing. Hope I did not offend you.
I see the point, I just disagree with it. There's some validity to using CS101 knowledge as a heuristic, but as you have admitted, it's not perfect. We just disagree on how imperfect it is.
Last time my manager asked me to come up with a simple test for interviews I added a question with code and asked what it was: a bubble sort in C#. No one got it right, not even a "it sorts the array".
I've been working full time as a .NET dev and doing my degree part time for the last 5 years, graduating next month hopefully around the top of my class. I enjoy .NET, particularly ASP.NET MVC, and my current job has let me have full control over the development workflow, I use TDD,Git,MVC,Jquery etc. Looking at what I should do next if I was to change jobs it kind of feels like russian roulette trying to find a company here in Brisbane, Australia that hires good devs to do interesting .NET (or any development work) while paying well and without being a sweat shop.
My question is, where should I branch to if not in .NET? Java seems like the other big area around here but its all enterprise stuff as well. I've done some mobile development in my own time, got a couple of apps on the iOS app store and some Android on the way. One of which uses a NodeJS/MongoDB back end, but I'm not sure there's that many jobs around here for that (iOS/Android development may be a good option, though I do like web dev). I'll be looking to relocate in a few years, but for now, does anyone have any suggestions for what framework/language I should learn next?
To all the people here who said they moved away from .NET due to the kinds of employers and fellow developers that use it, where did you move into and how did that work out for you?
I'm hiring at the moment, and it's definitely in the "great gigs" category. Bonus, as part of this gig I occasionally get paid to ski and climb. Not that this has helped me find good candidates yet.
If the marketplace really wants to know what is in demand, contact the people actually doing the work.