

Why are all the 'cool' jobs no longer using .NET? - rustc
http://www.reddit.com/r/dotnet/comments/1rlamp/why_are_all_the_cool_jobs_no_longer_using_net/

======
drharris
I'm an unapologetic .NET lover, and the comments on the subreddit largely hold
true. In the end, culture is the biggest differentiator. MS has excellent
tooling and support, but nobody knows about it. They have Bizspark, which is
one of the best startup-focused programs I've seen (literally tons of free
stuff for your runway), but once again nobody knows about it. Azure is
probably the most innovative, stable, clearly-priced cloud platform in the
industry, but nobody knows about it. If you want to write Javascript/Node with
full IDE support, Microsoft has you covered, but nobody knows about it. F# is
probably the best FP language in existence, but nobody... well, the point is
made.

The only people that know about the new things MS comes out with are the few
of us .NET developers also with a foothold in the Startup scene, and old
enterprise companies who bought into the stack back in VB5/C++/MVC days.

The other uphill battle is young people's view on technology. Most of them
would rather platform-hop in the same way people change churches (and for much
the same reasons). New = better, and Microsoft = old, so no need to even see
what they have to offer. Young people with ample free time have always driven
the software industry, and young people want to use things built by startuppy
or nonsensical names. "Microsoft? They actually have software in the name? No
thanks!"

Finally, it's an issue of evangelism and online/community presence. Because
enterprise is the bread and butter of MS, MS tends to target those kind of
people more. It's not that they don't try to capture new minds, but when you
attend an event where you're the lone startup guy among 50 enterprise people,
how do you think presentations are going to be focused? When your community
seems to be centralized on your corporate domain, are you really going to
attract someone who isn't willing to type in "microsoft"? New platforms get
popular not because they're actually better, but because they're cooler.
Either cooler sounding, there's a new type of tutorial (to-dos and 5-minute-
blogs are played out, people), or it's got a guy with weird hair promoting it,
using Jobs-esque language like "beautiful" or "elegant". Of course it's
elegant at version 0.9 before it really does anything. Look at Rails now that
it actually does stuff.

Anyway, mini-rant over. I think MS deserves more attention than they get, but
ultimately they dig their own grave by not investing more in capturing that
next generation.

~~~
drzaiusapelord
I know about it, but licensing for 50 servers running IIS on Windows 2008 vs
50 servers running LAMP is a big price difference to even a medium-sized
company, let alone a startup. I also wouldn't bet my company's success on
whether mono is working correctly this version.

Oh and if you start building on that infrastructure using AD, Exchange, etc
you're in CAL licensing hell. Next thing you know you've spend the wages of
two really good engineers on just MS licensing. How is that cost efficient?
I'd rather have a 5 man team running linux than a 3 man team running MS.

Not to mention, if I'm recruiting young talent, how many of them will have MS
enterprise experience vs linux-based experience?

~~~
dev360
Not only that, its a pain in the ass to maintain Microsoft boxes compared to
*nix. I dont understand how anybody has patience dealing with guis that just
get in your way of getting shit done.

~~~
drharris
> patience dealing with _command lines_ that just get in your way of getting
> shit done.

------
kohanz
_I spent too much time with .NET I don 't want to learn ruby!_

It always pains me to hear such cries from someone who claims to be a software
developer/engineer. I've used .NET (among several other) technologies for some
years and had a few co-workers who would openly fret about Microsoft's
direction and what horrible things they might have to endure if .NET went out
of favor. Gosh, you mean you might actually have to learn a new technology?
What a truly awful experience. I could never relate to that and I legitimately
felt sorry for them. I hope to never become afraid or resistant to learning
and am always ready to admit how little I really know.

The language/framework is but a means to an end. Each with strengths and
weaknesses, but all of them suitable for a wide variety of uses. If you feel
that your knowledge as a software developer is so language specific that you
fear having to move away from it, you're doing it wrong.

~~~
computerslol
It's less about learning a new language, and more about learning a new
framework.

As of .net 3.5, the .net framework contained 98 Assemblies, 309 namespaces,
and 11,417 types. The framework is gigantic, and after you've spent long
enough in .net, your domain specific knowledge of the framework itself is
gigantic as well.

As someone who has been building applications on .net since beta, I have no
fear at all in learning a new language (bring it on!). I have a fear of losing
over a decade of experience with the thousands of classes provided in the .net
framework that I use, and rely on, on a daily basis. I know exactly what I'm
looking for, how it works, and what the performance ramifications are of each
component I choose to use. I know what needs to be replaced with something
custom to scale. I know what's doing extra work I don't need. I know the
ASP.net page and control life-cycle (intimately), how the view engine works
(and how to add features to it), how to replace critical components for custom
functionality and how to build custom controls. I know the WPF layout system.
I know the quirks in windows forms and GDI+. I know programmatic drawing in
both frameworks. I have done machine learning in .net. I have done massive
file IO in .net. I know the .net multi-threading model. I know how to do code
generation in .net. I know how to use raw sockets in .net. I know how to bend
this massive framework to my will, and get all of the performance and power I
want out of it. I have built reliable, predictable, massive scale applications
in .net. Over my entire career I’ve invited product managers to give me their
crazy ideas, and I have never had to push back.

Having said that, I also don't want to learn Ruby. I don't think it's mature
enough to get my attention. I don't see how it is in any way better (that's
not to say that it isn't, I just don't see it). Is it easier to learn? Maybe,
but I've already crossed that hurdle; just like OP on reddit has. Is it a
faster platform to blast out a simple website? Likely not for me. Is it a
better platform for building and scaling massive applications? I doubt it.

Your language/framework defines the outer capabilities of your application,
the performance of your application (read: scale), as well as what parts of
your application can be reused from parts made available by others. They are
things to be mastered. .Net takes a long time to master. The "jack of all
trades master of none" attitude is what pains me. Show me that ruby is better
for me in an area that .net is lacking and I'll learn it. Show me that it's
better in all of the areas I care about and I'll master it. That will be a
hard sell. .Net is a fantastic platform; well organized, discoverable,
consistent in quality, exhaustive in scale, performant, and still growing.

Will .net last forever? I don't know. Older Microsoft technologies are still
around and .net is still in active development. I don't see Microsoft giving
up the massive investment they have made in .net any time soon. Whether or not
Microsoft stays relevant in web programming is up to them, and up to those of
us using it.

As to startups using .net, I've worked for two. One provided a product that
allowed you to order print ads made for your franchise. It accepted photoshop
PSD files from designers, took them apart and allowed the ordering party to
swap layers and text to fit their business, all with a WYSIWYG live-previewing
interface. I wrote the original system myself in 2004 and the company is still
operating today. The second was an online ad distribution company. The system
I helped build was capable of targeting, serving, and tracking over 500
million ads per second at peak (a major accomplishment in 2008). The company
is still operating today. I was not told what the companies did until after
the interviews and pay negotiation. There was no way to know before I accepted
the jobs whether or not they were "cool" jobs. Before starting my own business
I was invited to work on a high frequency trading system built in .net. I
turned it down, but they are doing very well. I've worked more for large
businesses and mega-corps who also wouldn't tell me the nature of the job they
were hiring me for until I was hired. How do you know ahead of time if a .net
job is cool when all you hear about it is “Senior .net developer needed”?

Is there a lack of marketing from MS extolling the values and virtues of .net
on the server (especially for start-ups)? Yes. But that's always the case with
Microsoft. They are terrible at marketing. They will always be terrible at
marketing. Should you be using .net at your start-up? That’s up to you. I’m
using it for mine.

~~~
kohanz
Thanks for such a well thought-out response. To be clear, I'm most comfortable
working in the .NET framework (~5 years experience), but while I can see where
you're coming from, I still disagree with the overall perspective.

 _The "jack of all trades master of none"_

To me, the trade in question is software development/engineering. If we are
tradesmen, then .NET is one of the toolboxes available to us. Yes, it's a very
advanced and developed toolkit, but I don't view it as an occupation. Now if
you constrain yourself and simply call yourself a .NET developer and not a
software developer, I suppose that would be an exception.

 _Will .net last forever? I don 't know. Older Microsoft technologies are
still around and .net is still in active development. I don't see Microsoft
giving up the massive investment they have made in .net any time soon._

My experience is mostly on the desktop side (application dev for medical
devices) and it has been the opposite. Look at technologies like WPF and
Silverlight for example. I don't think you can honestly say that Microsoft
developed these to maturity and didn't to some extent abandon them.

 _Your language /framework defines the outer capabilities of your application,
the performance of your application (read: scale), as well as what parts of
your application can be reused from parts made available by others. They are
things to be mastered. .Net takes a long time to master. The "jack of all
trades master of none" attitude is what pains me. Show me that ruby is better
for me in an area that .net is lacking and I'll learn it. Show me that it's
better in all of the areas I care about and I'll master it. That will be a
hard sell. .Net is a fantastic platform; well organized, discoverable,
consistent in quality, exhaustive in scale, performant, and still growing._

I think it's a bit contradictory to say that you need to master a language to
understand it's capabilities, yet you won't explore other languages unless
it's proven to you that they have capabilities that .NET lacks. That said, I
think your viewpoint is mostly valid _if_ you have full control over what
technologies you work with (e.g. starting a startup, or only applying to .NET
companies). However, that is true for very few developers and this is where
the whole idea of fretting over the future of .NET comes from.

In my field (medical imaging and devices), I have used plenty of .NET, but I
could never rely on it entirely. The foremost medical image processing and
visualization frameworks and libraries still reside in C++ and although there
are .NET wrappers, they are almost always limited, several releases behind,
and with a much smaller community (there are a few exceptions).

To be clear, I love .NET and even moreso Visual Studio. However, if I'm asked
to propose a technology for a product, I'm going to do my research and pick
the one that I feel is best-suited for it and not let my .NET experience be a
guiding force in that decision (unless this is an extremely time-sensitive
project and I represent a significant amount of the developing team, then of
course it needs to be considered).

~~~
computerslol
Thank you for a well thought out response. One of your up-votes is me.

I understand where you're coming from and I don't see your viewpoint as wrong.
Mine is different. I see programming as part of an art, the way applying paint
is part of creating a painting. It is by-far not the only part.

I totally agree that a good programmer should branch out and gain a better
understanding of the world, but I believe the branching out should happen in a
different direction.

To call someone that writes books a writer is an oversimplification of their
job. Writers, like programmers, specialize. One writer might write non-fiction
books in English in the murder mystery genre for an adult audience. This
writer has had to develop a solid experience in and handle of the English
language. They have had to research and understand murderers, the law and
police. They need a solid handle on psychology to be any good. They need to
understand the implements of murder. They need to understand the standard plot
points of their genre, and how far they can be bent (to interest readers)
before they break (and turn readers away). They need to understand pacing, and
how to capture an audience's attention consistently. How to keep their
material accessible to expand their audience as much as possible, or how to
narrow their focus to be a must read for a certain niche. They must know how
to get published and avoid getting swindled. Putting words on paper is only a
very small part of their job.

If our hypothetical writer is going to branch out into new areas, he's more
likely to gain success writing a sci-fi novel (where he can reuse most of his
skill) or starting his own publishing company than he is in learning French to
write books for the French audience.

Learning basic French is not hard, but it is very hard to know French like a
native French speaker (an expectation of your French readers). If he is
thinking in English and writing in French, his efficacy is already
compromised. If you are writing for the French audience, you will have to take
French customs and the French psyche into account. French readers are likely
very different from the ones he’s used to, so he needs to understand the
psychology and mind-set of his audience and his characters. Publishing a book
in France is also likely completely different, with different ways to lose
money in a book deal. Learning basic French will only help our writer when he
needs to integrate a French character into one of his books.

It would be a little silly to tell a writer that he needs to identify as an
English writer if he doesn't know French.

I make consumer products. I am a .net platform developer. I started my career
as a designer 14 years ago; and soon realized that there is too much
compromise in just graphic design. Every design I submitted at the company I
worked for had to be changed (often dramatically) to fit within technical
limitations. My designs were created to appeal to my audience, and due to
technical limitations, that appeal was compromised. I had already been
programming at home for a few years, and decided it was time to become a
professional. The second month at my design job I asked to be put on the
programming team as well. At the time, we were writing in legacy ASP. I never
had a design compromised by technical limitation ever again. When .net was
made available, I jumped on it immediately. I loved the ideas behind it and I
couldn't wait to be a part of it.

A year or so later, I started realizing that the database design for a new
product I was building was hampering my ability to write clean software (also
due to “technical limitations”). I asked to be added to the Database team as
well. I became a DBA. I was still a designer and developer. A year later, I
became a PM as well, and so on.

At this point I have held the titles of senior .net architect, .net team lead,
senior .net developer, senior MSSQL database architect, senior product
manager, creative director, senior graphic designer, business analyst, and
research scientist. I am always a .net developer, but in every job I've had at
least two other titles as well. Each of these roles interface with the others,
and knowing the others makes doing each of them much easier.

My job is to make quality consumer software. My job is to appeal to an
audience. I learn whatever I need to in order to better appeal to that
audience. As a whole my audience doesn't care what the software is written in.
They care about whether or not it’s easy and pleasurable to use, whether or
not it’s fast, intuitive, and solves their needs efficiently.

Now I have my own software company.

\-----------------------

WPF works, has a number of great features and tricks, and it’s fast if you’re
using it right. I assume the developers on WPF moved to the Metro dev team
when that ramped up; I don’t know. Maybe they’ll be back. My only issue with
WPF is its half-hearted 3D support. Silverlight was an experiment, and it
showed. It’s still possible to write great stuff on Silverlight, but the
limited audience keeps it from being a solid solution unless you’re doing
something that can’t be done as well using something different (DRM video for
example) or you are creating an intranet application and have control over all
of the machines that will be using your application. It’s a shame, but that
future was easily foretold when it was announced.

\-----------------------

I don’t think you don’t have to master a language to understand its
capabilities, but woe to he that tries to exceed them without having a solid
understanding of what’s going on under the covers.

In my experience, .net shops are .net shops. Maybe I have been lucky.

In my experience it’s pretty easy to write your own wrappers for C++.

What sort of projects (other than projects targeting non-windows machines)
have you encountered where you suggested not using .net?

------
dragonwriter
I think the biggest problem .NET has in many areas that are considered "cool"
is that Microsoft's license-oriented business model imposes lots of license-
oriented friction around .NET that don't exist with open-source technologies.
The actual _dollar cost_ of licenses is important but there is also a cost in
the friction that licensing (and the associated product segregation into
packages designed around tiers based on how to sell licenses rather than pick-
what-bits-you-need-for-what-you-are-doing-today) creates.

------
_random_
In game development .NET/Mono is becoming seriously cool now - look at Unity
and MonoGame. It's hard to walk away from C# because it's one of the best
languages combining most paradigms and both static and dynamic type systems.
If you want to hack social start-ups using languages that don't do basic
checks before run time in an editor without basic intellisense/autorefactoring
then you are welcome to switch.

------
TheCoelacanth
I feel like this might have more to do with the poster living in DC. I'm in
the DC area, and most of the job postings you see are for government
contractors, which aren't exactly "cool". That's not to say that there aren't
"cool" jobs here, but if you're looking at Dice or Monster, they aren't going
to be the ones you see.

------
stusmall
Seriously question and not trolling, but was there ever? Has there been a
change in culture or has it always been this tragically uncool?

------
kazagistar
> I share their passion about coding

> I spent too much time with .NET I don't want to learn ruby!

Um. That answers that.

------
bonemachine
_No longer?_ Were they ever?

------
badman_ting
I like .NET pretty well, but I don't like working on Windows or being bound to
it. (Maybe the Mono stuff has gotten better but when we used it at my company
we had two problems: bugs in our code _and_ bugs in the platform.)

Also, after doing lots of things in JS and Python over the last couple years,
going back to .NET just feels too "heavy" somehow. The changes in C# and .NET
over the years have been very nice so it's hard to justify this feeling. One
definite downside of the .NET ecosystem, I would say, is that they take
forever to do completely sensible things that everyone else is doing. Things
like MVC, package management, deployment tools.

BTW, I have found that in interviews my extensive past .NET experience is
viewed negatively. There are assumptions out there about .NET devs and in fact
I would say there is some basis for those assumptions. At the same time, I was
hoping that smart people would be able to see through that and acknowledge
that not everyone who works with a technology is "like that", but alas. So it
is a bit of a liability, unfortunately.

------
Zigurd
Back in the day, .NET was coherent, well-designed, well-implemented, and the
tools performed well on PCs. This was circa 2001. NETCF was in beta, and you
could literally drag-drop an object from the mobile endpoint to middleware to
back-end. Visual debugging of on-device code, emulators, understandable errors
and warnings... Brilliant!

At that time, attempting to run Linux, Eclipse, Forte, Java, etc. was
difficult, buggy, and slow - sometimes too slow to be usable. Until Sun sued
it off the market, Visual J++ was the only usable interactive Java
toolchain/runtime/base-classes with UI base classes that resulted in
applications that looked and acted polished and clean.

The big difference today is that you can take a laptop out of a box and within
two hours have a Linux-based Android development toolchain up and running
without any hitches, and have an even more coherent managed language runtime
targeted by that toolchain running clean beautiful mobile touch apps.

Open tools and OSs have been completely transformed. I don't really see the 13
years of comparable progress in VS and Windows.

~~~
tluyben2
I didn't work with .NET around 2000 much; I had it installed on a Windows
machine and played around with it, but not for anything serious as it usually
just sucked quite a bit. Anyway; we ran everything open source besides some
Windows machines for development at that time; our development server machines
first were 15 very old IBM machines we picked up for a few 100 euros installed
with Linux (no X) and after that 15 VMs running on VMware on one bigger
machine. All ran smoothly and we actually hosted clients on those machines;
everything written in 'enterprise Java'. One of those systems is still running
actually, on the same old hardware without changes to the software. No
problems with that 'Linux, Eclipse, Java, etc. was difficult, buggy, and slow'
=> it all worked fine and was fast enough to be productive, have happy clients
and make tons of money. Quite different from _any_ Windows experience I had
around that same time and after that.

This experience has not much to do with .NET per se; I really like C# and F#
and sometimes wish I could use it all the time (not a big fan of Mono yet...).
Maybe I'm just weird or set in my ways, but I don't really find the MS
toolchain to be very productive. I'll retry it again when I get my hands on a
Windows laptop (we're running only Linux and Mac OS X besides for WP8 dev and
i'm not doing that at the moment).

