Ask HN: Is there a future in .NET? Should I invest in learning it?

11 points by gamechangr ↗ HN
I'm a new grad....I considering putting some serious time into .NET, but I can't quite see what is happening here.

I am wondering if MS is abandoning the project or if it's the exact opposite and they are wanting to give it a fighting chance now that nobody pays for software?

Is this an attempt to bring in OS X/Android developers?

Is this aimed at being an alternative to JVM? Seems like that might be promising in certain scenarios.

Anyone who is a .NET developer now, how to you think it stacks up against other frameworks like Ruby on Rails or MEAN stack?

(no flame wars please, I'm just going to make a career decision and would love some feedback) Thanks!

24 comments

[ 2.6 ms ] story [ 67.3 ms ] thread
I want to stress the point that there's no tool that suits every problem; there are just different tools for different problems. If you only know how to use a hammer, then everything will look like a nail.

That been said:

I've developed in .net for a long time and, even if I totally respect what they've been doing lately with open-sourcing the framework and more recently msbuild, I honestly think their approach isn't up to date for most scenarios you'd want to address nowadays.

If I'd have to choose specific languages for specific scenarios, I'd say that today, IMHO, a reasonable approach would be:

Web/desktop consumer-facing apps: MEAN stack is probably the smartest choice because it favors development speed and UX iteration. I can't stress how beneficial is for teams to be able to write any part of the app using the same language. Especially for startups where teams are usually small: having everyone being able to develop any aspect of the application (frontend, backend, DB acces, etc.) is a pro I'd favor above many others. On top of that, the community is thriving and most stuff you'd need has probably already been developed or there's a framework for that.

Backend-only/APIs/devops: Go seems to be picking up quite the hype in this space. Even if I haven't tried it a lot myself, the fact that something as powerful and solid as Docker relies entirely on Go can say a lot about its benefits. Other possible choices would definetely be among Ruby or Scala+Play. I feel Java and .Net have become a bit cumbersome for this.

Micro-controllers/drivers/hardware-specific: so if you're doing drone-related software or stuff for IoT or robotics (Arduino, Beacon, Raspberry Pi, etc.) a very valid choice will be plain C. Of course we're talking about a universe of problems that come with unmanaged code, but when you go deep down to perfomance needs, it's pretty hard to beat well-developed C software. I do know stuff has been made with Javascript and Node on the robotics front, but I don't know a lot about it.

I'm the OP and I've built maybe 45 apps with Ruby on Rails. I've played with Angular and Nodes.Js.

When I look at jobs boards though, .net is everywhere!

Thanks for the feedback - upvoted

I've done some stuff in .net. One of the advantages is the learning curve is pretty fast. So it's not a huge investment.

The flip side is it seems a lot of .net jobs are sausage making. Not very much in the way of cutting edge or exciting stuff gets done in .net. Though too cutting edge often is crash and burn, where run of the mill projects can last years and years. (Don't knock a steady paycheck)

I know it's hard to say, but how fast is "the learning curve is pretty fast"? Would two months straight be enough to have a reasonable command (I get that it would be entry level at best)
I would say two months straight of serious study and practice would be more than enough to solidly know your way around the language, .net libraries and tools.

Buy a good book.

I don't actually do client side (or server side stuff) as primary work. However .net is very useful for kicking out simple GUI based tools. If you want to do that, .net has the fastest learning curve end of story.

Thanks "Gibbon1" for avoiding the usual "10,000 hours" response. Upvoted!

I know it's hard to quantify. I have a friend who has offered to do a "8 week internal training program with me" if I commit to working with his company for one year.

I just wanted to hear someone objectively tell me that they thought that's doable first.

.NET is alive and well in corporate environments. For web development I'd never choose it, however for Windows apps it's my goto. Visual Studio is great.
Do you enjoy developing in .net or it is slow and cumbersome?
I'm not a full time software developer so I'm probably just slow and cumbersome in general. I mainly program in vb.net for any kind of windows app I'm going to distribute for others to use. I also use python a lot for any kind of web scraping, back end automation type stuff. I enjoy working in Visual Studio, seems real good to me. Easy to find help if I need it.
I've heard many times that it easier to trouble shoot error codes.
It's not slow. Lambda expressions are especially awesome. The only thing I find slightly annoying is sometimes you're forced to define a class for an object. However, it can be helpful to define classes in terms of code maintainability with a large code base.
C# is a beautiful language. I had to learn it for the job I took out of college, and I was resentful at first because I'm a hard 'nix guy, but eventually I came around to it.
Languages never really die. Microsoft frameworks tend to live well beyond what Microsoft wants (look at MFC). Enterprise in particular is invested in .NET (and Java and others) and won't be motivated to change quickly. However, also don't expect things to move in any one direction and there will continue to be lots of competing technologies.

That said, what is it that you want to do?

Video games, high performance, and real time applications, and emerging technologies tied to hardware (e.g. VR, wearables), you'll be better served going into lower level languages and having a much deeper understanding of how hardware works.

The web is dominated by JavaScript. Anything client side in the browser, and you are going to be better served there.

Application client side programing, every vendor has their own thing and if you want to do well, you'll want to learn the native stuff to some extent. (Apple/Cocoa, Android, Microsoft might be .NET but they keep changing what they push like C++CX/WinRT).

Server backends are harder to predict. Lots of competition here. Lots of trade offs from a electricity and heat and hardware cost standpoint, to being able to pull high level frameworks off the shelf to put something together easily, to social engineering challenges of what people in your organization want to do (e.g. standardize on one language for everything).

But ultimately from a career decision, true understanding of how things work and being able to solve new problems is more important than learning a framework. Being able to intelligently pick the best tools/tradeoffs and knowing when they are inappropriate will set you apart, otherwise you are just another religious zealot blindly pushing the same technology for everything no matter how appropriate or inappropriate.

OP here - Thanks "dottrap" - upvoted!

I appreciate your insight. Any thoughts specifically related to .net and future or lack there of?

My prediction: Server side, I expect .NET to look very much like today in say 10 years...still around with lots of people using it, but shrinking marketshare just because the market continues to grow larger (not necessarily because people are abandoning it) and new 'sexier' technologies will continue to emerge and compete in the space (e.g. look at Go and Rust) diluting percentages even more.

I don't expect cross-platform desktop client side .NET to significantly grow. Mono has tried this for 10 years. Sun Java tried this 10 years before that. Particularly where both are odd-men out on the 2 dominant platforms, iOS and Android (Android frameworks are very different than classic Java frameworks), I don't see them gaining much more penetration. And at least Apple has shown they aren't sitting still and they are actively trying to woo developers, hence the introduction of Swift. (And then ironically, Microsoft who invented .NET is currently all over the map about what developers should be using to develop for their platforms.)

Video games - Unity 3d though? C++ is for low level engines.
If you want a serious career in video game programming, AAA developers/managers will generally prefer candidates that know C/C++ and understand low level details and hardware (like explain why cache locality is the number one challenge in hitting your target framerate and what you can do about it).

Generally, in my experience, somebody with only C#/Unity experience will not be taken seriously for this kind of position unless they show they understand all the other stuff (which tends to be rare).

Somebody going for level and content designer jobs may get a job if they have Unity experience, however it is not because they know Unity, but simply that they show they can put something together. Most studios have their own custom in-house tools that they will need to train new hires on. (And historically, any direct scripting not in the custom tools is done in Lua.)

I think for casual games, MonoGame (XNA but for platforms besides Windows) is a very attractive proposition, since it's pretty easy to release a multiplatform game with.
Video games - Unity 3d though? C++ is for low level engines.
There was never a better time.
That's exactly what I'm thinking through.

I know I could get a junior dev job in Ruby on Rails (which I do enjoy) and am not too far away from being able to in MEAN stacks.

I just don't know much about .net, but like to try my hand at as many things as possible.

I can tell that NOW IS THE TIME.

All I can say is that with market how it currently is, if you know .NET you are guaranteed at least a well-paying, boring enterprise job.
The .Net platform is a well engineered development stack and learning it would only become an issue with regards to opportunity costs. Time spent learning .Net is at the expense of learning something else. Only you can judge whether or not that's a worthwhile investment of time.

Now, to answer your question more directly. The .Net stack is excellent platform for building any type of application that can execute the runtime. The platform is mature, runs many large websites, enterprise applications and cloud applications. It can do anything the MEAN, LAMP and Java stacks can do. The differences in these platforms exist in a somewhat narrow range of features that these stacks were focused on (ie, performance/async vs rapid app. dev vs. mobile dev vs maintainability).

In addition to this, the CLR and core framework has been open-sourced by Microsoft. A Linux runtime and implementation of ASP.NET are all planned to officially release sometime this year. I personally feel this will give .Net a big shot in the arm, so to speak, with regards to adoption outside of its more traditional domain (enterprise development).