

.Net Developer Shortage - lapost1979
http://techcrunch.com/2011/10/04/tech-job-site-dice-reports-shortage-of-net-developers/

======
patio11
This article is a fairly valueless press release for Dice, but be that as it
may: there are no shortages for developers, there are only shortages for
developers at the wages employers are willing to pay.

~~~
blacksmythe
This seems to sum up the article (and your response) pretty well:

"Why the shortage? ....NET developers earn around $83,000 per year, but Java
developers typically make more than $91,000."

~~~
euroclydon
It's not the eight thousand dollars. Trust me. Most schools teach OO in Java.
HR departments and often times hiring managers just play keyword bingo. A good
developer who knows Java will pick up C# just fine.

Java, and it's ecosystem, are a little more difficult to use and master than
C#, and IMO, warrant the extra average pay.

~~~
dos1
I believe it's the other way around. C# is much more difficult to master than
Java in my opinion. You have reified generics in C#, there's true lambda
expressions, the dynamic keyword, named arguments, p/invoke etc. Many of these
things make the language more expressive and powerful in my opinion, but also
give it a much steeper learning curve to truly master.

~~~
eropple
Java is a little more difficult to practically use _because_ it lacks most of
that. Writing clean, maintainable code in Java is a lot harder (for me, at
least) than the same in C# (or even in Scala, and Scala seems to lend itself
naturally to writing a mess).

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.

~~~
sreque
I think Java is much easier to learn because the online documentation and
community is superior to C#'s. I've also found that you can't understand the
entire stack in .NET because that information is often just not available. You
could argue that this makes .NET simpler, but we all know that software
abstractions leak. When they do, it's nice to be able to peel the abstractions
away.

Oh, and Scala naturally lends itself to writing maintainable and bug-free
code.

~~~
eropple
> I think Java is much easier to learn because the online documentation and
> community is superior to C#'s.

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.

~~~
sreque
I guess you and I have opposite experiences with Java vs .NET, but I am
relatively inexperienced in the .NET arena and am willing to concede the point
here.

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!

------
quanticle
_Dice believes that developers are worrying that if they specialize in .NET
development, they won’t be able to branch out to other platforms._

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.

~~~
acabal
I worked in .Net shops for a few years, back in the days before .Net MVC. Part
of the reason people ended up (and maybe still end up) stuck in .Net might be
because back then, as soon as you tried stepping outside of the .Net webforms
box (i.e. tried to do anything remotely interesting) things because
exponentially complex. Keeping all of the .Net classes and foibles in my brain
during my day job was enough for me not to want to learn the intricacies of a
different system in my off time.

That was years ago though... and since then I've happily moved on to being
self-employed and using OSS.

~~~
marshray
Yeah Microsoft tends to deprecate and replace frameworks every few years.
Usually it's an improvement, but they really keep you on an API treadmill.

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.

------
nestlequ1k
This will be an interesting one to watch. I know a ton of great .NET
developers who have bailed on the platform and switched to open source. This
is anecdotal for sure, but if this is a huge trend then you're left with a
bunch of companies with huge investments in a platform, and an ever decreasing
number of developers who can actually code effectively for it. The
salariesrates should go up, but these typical corporate .NET clients are cheap
motherfuckers. I'd predict a resurgence of offshore consulting to meet demand.

However it does seem like devs for every technology are in high demand and low
supply. It could just be as simple as that.

~~~
daeken
I'm a .NET fanboy, but the likelihood of me ever working for a .NET shop is
next to nil. The work is just _not interesting_. Sure, if I just wanted to
collect a (almost decent) paycheck, I'd do it, but given that there are a
dozen other niches I can work in, I'll pick any of them over the .NET world.
The only way I'd be converted is a massive paycheck and at least _some_
interesting problems, but neither of those seem to exist in the .NET world, by
and large.

~~~
untog
Amen. I got lucky- I'm a .NET developer now working for a small startup in
NYC, but spent a long time in .NET shop hell.

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.

~~~
T-hawk
untog, if you see this, could you drop me a line? Email should be in profile.
I'm a .NET developer in NYC and may be looking to make a move. And I know SQL
:)

------
rmc
_21% were looking for .NET developers with 8-10 years experience._

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)

~~~
dsolomon
5 years experience with SQL Server 2008

[http://seeker.dice.com/jobsearch/servlet/JobSearch?op=302...](http://seeker.dice.com/jobsearch/servlet/JobSearch?op=302&dockey=xml/1/f/1f41f0c6321a299ae013cefef6b25b7b@endecaindex&source=19&FREE_TEXT=5+years+sql+2008&rating=99)

~~~
pagekalisedown
They probably have an h1b lined up and don't want locals to interfere with
that person's labor certification.

------
mgkimsal
Perhaps off topic a bit, but here's a recent run in with a .net shop.

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?

------
vparikh
I know I'll get down voted for saying this but I just have to do it - could it
be that developers no longer want to work for boring corporate assembly-line
level "lets make yet another database front-end for yet another inventory
management system"? Could it be that people who like to code actually care
about the code and tools that they are using? Could it be that developers are
seeing the writing on the wall about Microsoft and are leaving in droves?

~~~
jinushaun
I work for a .NET based startup doing fun and interesting things, so I know
that C# and .NET can actually be fun to code in. However, most, if not all, of
the .NET job listings I see on Twitter are boring soul-killing enterprise
jobs. Or worse, Sharepoint!

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.

~~~
jackfoxy
> _When was the last time you heard of a hot startup using .NET?_

Does Stack Exchange qualify?

------
jackfoxy
I run a .NET shop where we do pretty interesting stuff, and it is sooo hard to
recruit decent .NET developers. The first step of my recruiting process is a
simple, but moderately challenging algorithm in C# to complete at the
candidate's leisure and send to me. 80% - 85% don't come close to getting it
right even though acceptance criteria are part of the very simple
instructions.

~~~
haasted
Can you reveal the algorithm you are asking them to implement? Your anecdote
is interesting in the context of the recent stories about a lot of programmers
not being able to solve the fizz-buzz problem.

~~~
DrJokepu
I'm not the parent but we're in very similar position (finding it very
difficult to find decent .NET developers, candidates can't answer even the
most basic algorithmic questions), so I'll answer your question for you.

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"?

~~~
StrawberryFrog
> implement an algorithm that finds the value of the element in the middle of
> a linked list

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?

~~~
crpatino
I am sorry, but I just cannot let that go!

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).

~~~
StrawberryFrog
> First, knowing your 101 Data structures is correlated to your Computer
> Science general knowledge.

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.

~~~
crpatino
Yes, I am aware of the CS vs street smarts debate. Everybody has its own
opinion, and I am sure neither of us is going to convince the other, so I'd
rather not go there.

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.

~~~
StrawberryFrog
> 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.

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.

------
rodh257
A lot of talk here about the types of businesses that normally do .NET work
and how they aren't very good to work for, so I figure here's a good place to
ask for some advice.

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?

~~~
dekz
If you're looking for particular non-mainstream framework/langues jobs in
Brisbane (Node.js being one of them) you should hang around in the Meetups
(MeetupJS). Good place to get noticed and job offers.

~~~
rodh257
Thanks Dekz, I've attended a few different meetups in the past (including JS)
but haven't had time this year due to a heavy uni workload, will definitely be
heading to the various ones around the place. Unfortunately the .NET one
(QMSDNUG) is more geared to hearing about new Microsoft products than
improving programming skills, but I'll definitely be getting stuck into some
meetups around the place.

------
BadassFractal
You what there's a shortage of? Proper remuneration for that kind of
experience requirements.

------
matrix
It's unfortunate that all non-software industry companies are getting tarred
with the ".NET Shop" brush, because much depends on the company culture and
who is running the development group. I've worked in some great gigs (and one
or two awful ones) in settings you might not expect to be interesting and fun.

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.

------
dsolomon
Citing Dice as a source gets about as much credibility as using a ouiji board.

~~~
john_horton
Out of curiosity, why? Wouldn't they have pretty good proxy data on the demand
for different skills?

~~~
dsolomon
Unfortunately it's an HR system, managed by HR, for HR.

If the marketplace really wants to know what is in demand, contact the people
actually doing the work.

------
wavephorm
In other news, there is an excess of agencies who aren't offering real jobs,
but are just collecting resumes to hand off to clients without even reviewing.

