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 think you missed my point, so please allow me to elaborate. For someone who wants to go from Windows to other platforms, an open-source .NET makes sense, but only if their code is already in .NET.
For people who are already using toolchains other than .NET that support their products on multiple platforms, there's no reason to switch. It's just "re-implementing the wheel" with another language.
And since the official Java implementation is open source (OpenJDK) and has been for years, why not just stick with it if you're already using it? So really, the majority of people who aren't already using .NET have no real reason to switch.
"Transparent" is a shit show that trades on every stereotype going. A man in drag is NOT a transsexual.
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/
Two words: Visual Studio. As a tool for productivity, Visual Studio is the best debugger out there and has been for 25 years. And it runs on Windows, which is the desktop OS of choice as far as corporate America is concerned. Particularly for IT managers at businesses outside the software industry, that looks mighty attractive when they're deciding on a platform for their inhouse apps. .NET is as good or better than Java for most purposes and the managers don't care about the FOSS ideology and Microsoft's past antitrust abuses, at least not when they're wearing their company hats.
.NET is slowly beeing weeded out of the enterprise though and that's a trend I don't want to see diminished by devs picking up .NET because it's now "open source". It's OK to hate .NET, open source or not.
Citation please? I've been seeing a gradual increase in .NET development, And I get called frequently by headhunters looking for .NET developers despite that software development is not my primary job function.
Any insufficiently advanced magic is indistinguishable from technology.
Java is killing it all around the United States. My company just had me rewrite a series of apps to remove the entire MS stack from .NET to SQLServer.
.NET performance isn't better, I don't know where you got that from. .NET startup is better - non-Micro-Edition versions of the Java Virtual Machine load the whole Java language standard library at startup, and it's a pretty big standard library, so it is slower and uses more memory than a .NET application at startup. But the Java Virtual Machine has the HotSpot ( https://en.wikipedia.org/wiki/... ) which does runtime alteration and optimization of code. What that means is that for long-running code - which is of course the common case for web servers - the Java Virtual Machine monitors the execution profile of methods and once a method is executed around 10,000 times it will examine it and if it can find common cases or frequently used code paths it will dynamically rewrite the method or inline it to make it faster. As far as I know, .NET has nothing similar - performance never changes.
.NET supports C#, VB.net, F#, Nemerle, and a number of other languages. The Java Virtual Machine supports Java, Ruby, Python, Groovy, Scala, Clojure, Scheme (Kawa), Lisp (ABCL), Javascript, and a number of other languages.
The Java Virtual Machine is also a runtime.
And last but most importantly, it's been more than five years since I rejected Microsoft options out of hand for technical reasons. But I still reject them for ethical ones. This is a company that intentionally modified APIs to break third party applications, lied about software releases and features to hurt competitors, made business deals that are illegal under US anti-trust law with OEMs to block competition, waged countless FUD campaigns throughout its life, and wields its intellectual property resources like a weapon of mass economic destruction to squash innovative competitors. Where would the world technology industry be today if we didn't have this trillion dollar parasite doing more work than any other factor to stifle competition?
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.
You're comparing 1990s Apache to 2013 IIS. If you care to know what your talking about, you may wish to have another look to too what has changed in the last 10-20 years. Here's one example that's not only way out of date, but also wrong even for that time period :
> why is Apache still spawning processes for every request that comes in... don't they realize the overhead of that??).
Prior to the release'of Apache 2.0 in 2000 (fourteen years ago), Apache pre-spawned a group of processes and each process would handle one request AT A TIME. It never spawned a process for each request, it had a pool of processes that were reused. Pretty much just like how modern browsers now run separate tabs in separate processes. The #1 reason for that was to allow Apache to use libraries (like GD) that weren't thread safe. If Apache were multi-thread rather than multi-process, you couldn't use those libraries.
Note also that Apache was designed for SERVER operating systems like Unix, Linux, and BSD, not for a desktop OS. On a server OS, forking a few processes at startup isn't that resource intensive- far less intensive that preloading IE and Office at startup.
Of course like everything in Apache, the multiprocessing is done by a module, so you can still use processes rather than threads if you want to. You can do that and by choosing sane settings for the number of spare processes you won't fork new ones more than a few per hour.
> A lot of the performance reasons that are behind people switching from Apache to Nginx
I tested this very thoroughly. 90% of the performance difference of Nginx, which only occurs on some systems, is that it essentially forced noatime, regardless of the administrator's selection of mount options. Back when noatime wasn't the default, less-knowledgeable admins who didn't know to use noatime would see a significant performance benefit from Nginx vs Apache. Knowledgeable admins would mount with noatime, and find that Apache and Nginx performance was almost identical. Knowledgeable admins would also comment out the 90% of available modules they don't use, like mod_speling, and set MaxClients etc appropriately. With a reasonable configuration, Apache can give better performance than Nginx, depending on which benchmark you choose. In all cases, Apache provides more PREDICTABLE performance because it actually works as documented, while Nginx has documentation copy-pasted from elsewhere, but their code isn't actually the same as server they copy-pasted documentation from.
Its not the language, its the libraries, the conventions, the external resources. I picked up Ruby and Python, Node and even dusted off my PHP chops to write some modules for a client a few months ago. It wasn't hard, but I spent 20% of my time on the language, 50% figuring out what libraries to use, and another 30% making damn sure that my novice attempts were at least idiomatic and didn't come across as novice (including having them vetted by more seasoned users).
Anyone can write a for() loop in anything. Knowing the massive standard libraries for a language well enough to leverage them (for example, in Java I still see people dragging in external Base64 implementations that haven't been needed in a decade but once were) takes far, far longer.
I want people to write clean code that will be well understood and maintainable by others 5 years from now, not someone who just figures out how to get code to compile.
You're special forces then? That's great! I just love your olympics!
In my city (Minneapolis) Java (and other JVM languages) completely dominates. I would guess most cities end up leaning one way or the other.
Are agnostics skeptical of unicorns too?
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).
The C standard library provides an API to all your system resources.
The C standard library (libC) provides a very basic API to some of your system resources. You have to include a large number of other libraries in order to obtain a feature set similar to the Java and .NET frameworks.
And in addition to the IO, thread and math limitations that the AC above touches on, there are several other major problems facing the core C libraries: wchar support, qword support, socket support and overflow safe functions. There has been significant balkanization between the BSD, GNU and Microsoft camps on these topics, making cross platform development difficult. I've written a lot of wrapper code over the years dealing with the issue.
The nice part about the Java and .NET frameworks is that they eliminate most of the problems I mentioned and several of the issues the AC brought up.
But I do still find the C libraries, Java framework and .NET framework all lacking. They're good for about 80% of all cases, but I seem to find myself thumping on the native APIs far more than I thought I should. I'm really annoyed at how often I find myself using PInovoke under C#.
My hope is that with the Core .NET moving off to the open source camp, maybe Microsoft can start focusing on adding C# bindings for the rest of WinAPI. The day I can write code without having to use a PInvoke is the day I'll stop writing C/C++ code.
Ok. Does that mean the full Visual Studio is free as well? Cost is the main hindrance for adoption of it anyway.
Yes it is free. "Visual Studio Community Edition" it's called.
Your reply is also somewhat confusing to me. I don't think you've actually looked into the issue. .NET popularity has gone downhill as more developers want to use more dynamic and developer-oriented solutions which are almost invariably open source. This is an actual trend; a real statistic, and essentially the reason why MS went ahead and open sourced .NET.
If it is a real trend and a real statistic then please link to some reference for this. I'm interested to see. Maybe I'm not very good at Google searches but I cannot find any reliable statistics to support this.
As for C and .NET you can use .NET quite easily with C. Even if your project is strictly in C#, if you know C I doubt you'd have much trouble with C# (other than maybe getting the hang of good-practices?).
I code mostly in C++ and C# and have no trouble at all with C#. It's one of my favourite languages. My post however was not about myself, I was paraphrasing the original question, as perhaps I've missed something but the statement "why you are asking for citation when the whole discussion is sort of based on this issue" is completely at odds with how I read the original question - i.e. (very much paraphrasing here) 'Should I learn C# it seems to be the way forward'
Though even if your interpretation of the original question is correct, it would still not seem unreasonable to ask for a reference to support the statement that .NET is losing popularity. The only evidence of this "fact" I can see on this thread is mis-matched anecdotes, hence my reply to your post.
I was surprised that the WPF issue has not been discussed more. Aside from C#, which is a sweet little language in most respects, and still ahead of Java IMO, WPF is the other fairly unique thing that .NET Microsoft brings to the table. It has no real parallel for the rich- or smart-client use case. (Mozilla's XUL is perhaps the most directly comparable FOSS technology.) And it is NOT being open-sourced. In fact, instead of throwing its weight behind a single WPF / XAML implementation, Microsoft allowed it to fragment between Silverlight (deprecated), WPF (supported only in the most lackluster fashion), and the client component of WinRT (Windows 8 only). This may in fact prove to be the opening needed for the modern HTML5 stack to become the preferred rich- and smart-client deployment technology even for desktop and laptop form factors. In that case it would also rapidly eat away at the very last piece of the technology business that Microsoft dominates.
Nonaggression works!