Ask HN: Is there a future in .NET? Should I invest in learning it?
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 ] threadThat 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.
When I look at jobs boards though, .net is everywhere!
Thanks for the feedback - upvoted
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)
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.
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.
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.
I appreciate your insight. Any thoughts specifically related to .net and future or lack there of?
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.)
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 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.
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).