Ask Slashdot: Is an Open Source .NET Up To the Job?
Rob Y. writes:
The discussion on Slashdot about Microsoft's move to open source .NET core has centered on:
1. whether this means Microsoft is no longer the enemy of the open source movement
2. if not, then does it mean Microsoft has so lost in the web server arena that it's resorting to desperate moves.
3. or nah — it's standard Microsoft operating procedure. Embrace, extend, extinguish.
What I'd like to ask is whether anybody that's not currently a .NET fan actually wants to use it? Open source or not. What is the competition? Java? PHP? Ruby? Node.js? All of the above? Anything but Microsoft? Because as an OSS advocate, I see only one serious reason to even consider using it — standardization. Any of those competing platforms could be as good or better, but the problem is: how to get a job in this industry when there are so many massively complex platforms out there. I'm still coding in C, and at 62, will probably live out my working days doing that. But I can still remember when learning a new programming language was no big deal. Even C required learning a fairly large library to make it useful, but it's nothing compared to what's out there today. And worse, jobs (and technologies) don't last like they used to. Odds are, in a few years, you'll be starting over in yet another job where they use something else.
Employers love standardization. Choosing a standard means you can't be blamed for your choice. Choosing a standard means you can recruit young, cheap developers and actually get some output from them before they move on. Or you can outsource with some hope of success (because that's what outsourcing firms do — recruit young, cheap devs and rotate them around). To me, those are red flags — not pluses at all. But they're undeniable pluses to greedy employers. Of course, there's much more to being an effective developer than knowing the platform so you can be easily slotted in to a project. But try telling that to the private equity guys running too much of the show these days.
So, assuming Microsoft is sincere about this open source move,
1. Is .NET up to the job?
2. Is there an open source choice today that's popular enough to be considered the standard that employers would like?
3. If the answer to 1 is yes and 2 is no, make the argument for avoiding .NET.
1. whether this means Microsoft is no longer the enemy of the open source movement
2. if not, then does it mean Microsoft has so lost in the web server arena that it's resorting to desperate moves.
3. or nah — it's standard Microsoft operating procedure. Embrace, extend, extinguish.
What I'd like to ask is whether anybody that's not currently a .NET fan actually wants to use it? Open source or not. What is the competition? Java? PHP? Ruby? Node.js? All of the above? Anything but Microsoft? Because as an OSS advocate, I see only one serious reason to even consider using it — standardization. Any of those competing platforms could be as good or better, but the problem is: how to get a job in this industry when there are so many massively complex platforms out there. I'm still coding in C, and at 62, will probably live out my working days doing that. But I can still remember when learning a new programming language was no big deal. Even C required learning a fairly large library to make it useful, but it's nothing compared to what's out there today. And worse, jobs (and technologies) don't last like they used to. Odds are, in a few years, you'll be starting over in yet another job where they use something else.
Employers love standardization. Choosing a standard means you can't be blamed for your choice. Choosing a standard means you can recruit young, cheap developers and actually get some output from them before they move on. Or you can outsource with some hope of success (because that's what outsourcing firms do — recruit young, cheap devs and rotate them around). To me, those are red flags — not pluses at all. But they're undeniable pluses to greedy employers. Of course, there's much more to being an effective developer than knowing the platform so you can be easily slotted in to a project. But try telling that to the private equity guys running too much of the show these days.
So, assuming Microsoft is sincere about this open source move,
1. Is .NET up to the job?
2. Is there an open source choice today that's popular enough to be considered the standard that employers would like?
3. If the answer to 1 is yes and 2 is no, make the argument for avoiding .NET.
Which is probably more important than anything else. The benefit of open sourcing .net core is that mono will get better. So if you have a lot of existing .net code and want to get away from ms licensing, at least ms will keep the dev tool revenue.
I've been a cross-platform coder for about a decade now. I liked the ideas of Java and .NET when they came out, but they were lacking in execution. If you look at everything powering technology today: Big Data, Node.js, Android/iOS, cloud remember (Hotmail was bought by MS, originally on BSD servers) Microsoft hasn't done squat. Meanwhile MS has delivered a lot of failed tech: WinForms, Zune, Windows Phone. (I've only ever seen two people with a Windows Phone) Only the Xbox and .NET have succeeded. I would be very concerned hitching my trailer to MS. They don't do innovation anymore, they don't even do copying (embrace and extend) well.
A big .NET friend of mine has recently taken to web development. He develops on OSX, deploys to Linux (AWS). He loves how he can take one thing and just run it on another. He doesn't have to worry about putting IIS on Linux, Node works everywhere. The code he develops isn't tied to any specific OS platform. Angular is node dependent, but Knockout isn't.
And there in I think the real danger is realized. If you use .NET you are locked into MS stagnant mono-culture, and their failing culture of innovation. If you want bleeding edge, OS agnosticism, MS isn't going to deliver it. Their goal will always be to lock you into their vertical to protect their verticals.
With the very good developments in Linux and the Apple premium is gone, only organizations with legacy applications need consider any Microsoft technology.
PS. I use Qt for everything on Mobile and desktop, Node for server and Knockout/Angular for web client. There is a slight possibility that Qt's QML will work on the web. Python for anything else. This is crossplatform, and not one drop of MS. It is my speculation that MS is a wounded animal, realizing they are like Cadillac. Cadillac realized the average age of their customers were getting older, and over 60 and that market would be no longer driving in a few years. There's an exodus from MS platforms. Their new focus aims to fix this. Buyer beware. Where is the money in it for them?
Slashdot's rate-of-post filter: Preventing you from posting too many great ideas at once.
I work at a funded startup in the Seattle area and we've had several .NET (C#) developer positions open for several months now. We rarely even get applicants and the ones we get rarely pass a basic phone screen.
No way would we discriminate on age. The talent pool from what we've seen is crap.
How come "Ask Slashdot" posts always boil down to "give me some ammunition for an argument with my boss" ?
Sheesh, evil *and* a jerk. -- Jade
I think Microsoft is adapting to being one of several vendors instead of being a dominant force. They have to play better with others because they don't have the market power they had 10 years ago.
As for .Net, I used it briefly some years ago and wasn't impressed. Compared to Java, they decided that exceptions don't need to be declared, so you have to look up in the documentation which exceptions you have to handle. However, the documentation doesn't list all exceptions that can be thrown. So I have no idea how one would do proper error handling in .Net.
Another thing that bothered me is that the documentation consists mostly of examples. However, if I read documentation I don't want a code fragment to copy-paste, I want to read the specification for a particular method. In particular, how it handles edge cases. That information was usually missing. Of course you can test the behavior, but there is no guarantee the next release will have the same behavior if the behavior was never documented. All in all, it didn't feel like a good platform for writing reliable applications.
The old gray beards today might say the same with IBM or Digital but once market forces correct a monopoly the company either whithers or adapts.
Doesn't mean MS is no different than any other corporation even if that opinion is unpopular here on slashdot. Timewarner/AT&T/Comcast are far more evil and God forbid what Jobs would have in store if Apple won the Pc wars in the 1980s and achieved 90% marketshare! MS would be tame in comparison.
Under a free market people play nice or loose out.
Today I like Microsoft even though I hated them hence my name 13 years ago. Here are the facts in late 2014 .NET and lots of frameworks
1. IE is not a bad browser anymore. It used to be both feared and loathed in the old days as it was a threat to win32 applications. Today they no longer will ever have the control they did in 2004 when you needed to go to a library to use IE 6 if you used a mac or linux to fill out job apps. Yes I remember doing that. Monster.com was optimized for IE 6 quirks back then.IE 11 is modern and has great debugging tools and behaves like a real browser behaves and has the best security with sandboxing. IE 12 will even have an add-on framework ala Chrome/Firefox. I use adblock on IE today
2. Visual Studio 2015 supports Android and Linux Xiarmin development?? No I am lying. Go google it as emulators are included including CLANG support.
3. Office is available for Android and IOS. Full suite is coming soon
4. MS more liberal with pricing for non corporations. Google VS Community edition. It is pro and free!
5. MS is opening sourcing
6. Azure supports non win32 operating systems.
7. MS is putting more effort in security and stabilizing and fixing bugs now that competition exists.
Am I a fanboy? No. I am agnostic this day but I find MS getting much better and if it were not for Metro I would be a fan even of their desktop products. Windows 7 is a very stable desktop oriented OS. It is not and I repeat not the POS slashdotters who have not run Windows in 15 years remember.
MS woke up and realized oh shoot. IOS and Android are eating our lunch! Eclipse will eat our lunch! Amazon will eat our lunch! Firefox and now I should say Chrome has eating our lunch! Ms has so much competition today on so many fronts it can't go back and use leverage of a monopoly in one area for another. Blocking Android on Windows? Who cares about Windows blah. Block W3C standards iwth IE? Fine I will use another browser etc.
This was unthinkable in 1999. So Linux did not win the desktop wars like we hoped but open source software did win everything else. Browsers are competitive. Mobile operating systems competitive. Development environments are competitive. Clouds and virtual services for legacy win32 apps scare the crap out of them so soon if mega corps want to leave they can.
MS is done. I welcome the new MS. As some (I did not say all folks) products are fairly decent and play well with others.
http://saveie6.com/
Agree with AC. I've done a number of different languages, and used a few different IDEs (including Eclipse, Netbeans, and whatever WebObjects used), and VS is the best of those, hands down. I still have to argue with C guys at the office that for application development (not bit slinging) that automatically memory managed languages like C# are superior for productivity to C/C++. I am thrilled that developing in visual studio and deploying to Linux (without limitation) is a realistic option in a couple years.
Lol, are you serious about that? That's not true at all! I work at a fortune 500 company and it's the exact opposite: it's Java that everyone is trying to weed out. There are several reasons for this, but they include these three things: Java's performance is slower than .Net, Java's IDEs are not as good as .Net's (Visual Studio is probably the best IDE ever built), and most importantly, the constant daily updates of Java to fix security flaws are driving everyone crazy and causing support nightmares. When haven't you recently turned on your computer only to have Java say an update is ready to install, and then pop up it's really slow installer to do it (that tries to install Ask.com as your homepage to boot)?
And one other thing about Java and another reason enterprises are trying to weed it out... the various Java application servers sprawling all over the place are seriously annoying and make supporting Java well a massive undertaking of training and manpower. In my organization, we have purchased Java applications from vendors that are based on all of these: Oracle Weblogic, IBM Websphere, Apache Tomcat, Redhat JBoss, and Apache Geronimo, and we have to figure out how to admin and support them all. And worse, none of these are as good as .Net/IIS, which is what we've chosen for all custom development that we do in house.
Plus, there are other things about .Net that make it better than many alternatives. For one thing, it's not a language, it's a runtime. There are all variety of languages you can use, which means you can use .Net whether your programmers come from a C syntax background or a Visual Basic type of background. And when it comes to web technologies, MVC and other .Net contributions are excellent: much better than the Java equivalents. And IIS is a fantastic web servers these days. True, it got off to a rocky, buggy start and trailed Apache for years, up through the IIS 6 days, but with IIS 7 and above it's actually much better than Apache, both in ease of administration and more importantly, in performance (why is Apache still spawning processes for every request that comes in... don't they realize the overhead of that??). A lot of the performance reasons that are behind people switching from Apache to Nginx are also capabilities that IIS has.
So I really don't understand where this bashing of .Net comes from, but I'm guessing a lot of it is from open source fanboys that love to hate Microsoft and have never taken time to use the recent (last 3-5 years) iterations of it's products. I totally get that a lot of people up to now have certainly preferred open source because it is free, but with .Net going that way a lot of you should try it. Having used Java and .Net both, I'd never in a million years pick Java over .Net. And I'd never pick PHP over .Net either, because that technology is pretty much the equivalent of what Microsoft's classic ASP was a decade ago, and .Net is far ahead of it now.
Beware of bugs in the above code; I have only proved it correct, not tried it.
You ask why switch... but that is not the only option.
I have enough experience in Java to know how to write Java style, with Java conventions. And the problems it can cause. I have enough experience with Java developers writing .NET code to know which questions you have to ask to see if someone can code by copying Stackoverflow or Codeproject examples, or really knows their business.
If you have a .NET focused person who also claims Java experience, how do you know what questions to ask if you don't know .NET?
My focus is in hiring or interviewing. At a tech lead level you might have to decide whom to trust when deadlines matter and skillsets are a mystery. As a sole developer, you may have interview questions on both languages if you put them down, so they can decide where you are most needed.
Ca read .NET and write Java? What if they need someone who can read/maintain Java and write .NET?
I've always said that learning a competing language shows you the faults in your own. If there are no faults, you can defend that statement.
You say why bother, I say why not?
1. Is .NET up to the job? .NET are open source at the moment. Platforms other than Windows may not be supported, and the CLR is not yet open. Your requirements determine if it is up to the job. I'm guessing that for most people, the closed Windows implementation may be, but the open source part might not be.
As I understand it, only parts of
2. Is there an open source choice today that's popular enough to be considered the standard that employers would like?
Java, but it is hardly a standard requirement. I'm answering no to this one.
3. If the answer to 1 is yes and 2 is no, make the argument for avoiding .NET.
Answer #1 has already made that argument for you. I'm guessing you didn't understand what is or is not open source now.
In particular, some of .NET CLR is a managed wrapper of the Windows API, much like MFC was an object-oriented wrapper. I don't see those bits being valuable cross-platform without an abstraction layer like WINE in between, and then the utility to people who use GTK or wxWidgets will be marginal. Why use it if you already know another windowing library?
"Why not learn it?" of course, but since we're talking about OS-level internals now, and things that are not supported by the current state of the .NET release, it's fair to say that the argument to avoid it is obvious.
Disclaimer: I get paid to do .NET, but I don't get paid to convince you to do the same.
Uhh... .NET usage has been falling for many years now, that's why they made it open source to try and recover from that trend. I'm confused as to why you are asking for citation when the whole discussion is sort of based on this issue. Also note that headhunters looking for .NET devs could be the result of devs *leaving* .NET causing a lack of hands and thusly an increased need.
If you want a more detailed answer: .NET was generally used in these huge systems where end to end would be built with the same framework. The thing is .NET is not always the "right tool for the job" and increasingly it is rarely the framework devs want to work with. Because of this the general trend is to have more modular systems where each component is built separately and just connected with an API or some cross-component communication protocol (EG Rails server app with API and native mobile clients).
Of course there are a variety of mertis and demeris, cost issues, etc. to consider so I'm not going to tell you to get off .NET but it would probably be a good idea to keep an open mind and to at least try out some other frameworks (and languages) in your spare time. That "gradual increase" you are preceiving in .NET could end and it would be good to have a fallback; not to mention you can reverse-import some tricks from other frameworks into .NET once you know them (or bring some tricks from .NET into other langauges or frameworks).
Monster:
Dice
So, ONLY on Dice and ONLY in Redmond, WA--Microsoft's home--are there more .NET jobs than Java. Everywhere else Java kills .NET.
.Net also does dynamic and re-usable runtime optimizations. You can also instruct it to inline certain methods, load certain resources in the background that you expect to use but the runtime will do the same thing, just maybe not as intelligently. "Code Complete 2" has some code execution speed examples in it and most of them show C# running faster than Java; The author was comparing simple ops like method calls, conditionals, dictionaries, arrays, etc.
Think globally but act within local variable scope.
Uhh... .NET usage has been falling for many years now, that's why they made it open source to try and recover from that trend. I'm confused as to why you are asking for citation when the whole discussion is sort of based on this issue. Also note that headhunters looking for .NET devs could be the result of devs *leaving* .NET causing a lack of hands and thusly an increased need.
As far as I can see the premise of the original question is that 'my employees like .NET but I'm happy in C and about to retire, should I bother learning it'? Nothing about that implies that .NET is fading. In fact it seems to imply the exact opposite to me. In the hypothetical situation that it did imply that .NET is fading though, that still wouldn't make it a fact. Is there actual evidence that .NET is failing? All I can see on this Slashdot thread is mis-matched anecdotes.
Perf of JVM vs CLR is a complicated topic. Generally speaking, JVM (HotSpot, specifically) has an edge when it comes to optimizing code, but CLR has an edge in that some of the language semantics generate more efficient code to begin with. User-defined value types (structs) and non-type-erased generics thereof make a big difference there.
HotSpot is better at optimization because it can afford to be slower - it can interpret the bytecode for rare code paths, and only kick in the full-fledged optimizer after it figures out that something is worth optimizing. CLR doesn't have a bytecode interpreter at all, it always JIT-compiles on first call - which means that the compiler has to be fast enough, and that in turn means shedding slow but effective optimizations.
Of late, .NET Native is an interesting piece of tech that precompiles .NET apps using VC++ compiler backend. So you get all optimizations in your .NET code that C++ normally gets. Of course, it's still slower due to the more deterministic but less memory-friendly sequencing and memory model, and all the extra runtime checks, but it's still faster than JIT (and, I strongly suspect, HotSpot, though I don't think anyone has profiled them yet).
And the primary argument against .NET is that it is a Microsoft product
Which is a stupid argument. Judge the product by the product, not its maker.
being concerned about "ms product" is not stupid. the ultimate purpose of .net is to sell windows licenses. if you are ok with using windows / cashing out for licenses, be my guest. if you are not then .net simply isn't an option (there's mono but it always was more a marketing stunt than a real option). java is nowadays an "oracle product", and that sucks too, but you can safely ignore the full stack of expensive bloat oracle offers, except for the jvm which is free as in beer, and will run almost everywhere. for now.
regarding technical merits ... you can't really judgde such complex and large products by merely reading an abstract on them. you have to put them to use and the use cases vary wildly, and deploying a whole stack of solutions takes years. both can work, but it depends on many more choices you will make along the road. it's not something you "test". you choose and live with it.
then, the java ecosystem has been evolving for years with an unmatched community contributing an impressive stack of open source middleware and tools, and this is one of the main reasons java is so prevalent in enterprise. the paradigm "everything around the java language, in any os" turned out to be much stronger than "everything around windows os, in any language". no surprise, we already knew that before ballmer's "developers" dance.
if you ask me, it's irrelevant. i've been proficent in java-world for decades but it's now boring like hell, and i would not touch .net with a stick. fuck java, fuck .net, javascript is the new toy! :D