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.
If you're already using something that works (and who isn't), what's the motivation to change?
"Transparent" is a shit show that trades on every stereotype going. A man in drag is NOT a transsexual.
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.
.NET is a runtime environment, not a language. You won't get worthwhile answers because your questions are broken.
The .NET "ecosystem" includes many components, including C#, which is a language.
The question is fine, but your response is pedantic.
If you want news from today, you have to come back tomorrow.
i think you'll find you're wrong about the C standard library being "nothing compared to what's out there". If it seems that way, you probably haven't learned enough about the C standard library. The C standard library provides an API to all your system resources. You can take full control of the hardware with the library. Things you never thought to ask if you could do. Most programmers, in my experience, never get much past the system("rm ...") stage. I've been doing maintenance programming for 25 years now and every fucking C program I've ever had to maintain has had one of those somewhere in the code. It makes me wish I could reach back in time through my monitor to slap someone.
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
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.
It pretty much is one language, you just have to pick you prefered syntax.
There are a few minor differences but almost any statement in any of the 3 support languages has a functional equlivlent in the other 2.
Of course if for some deluded reason you chose the C++ frontend you can also mix in superior regular C++. Anyone who uses C++/CLI for anything other than compadiblity reasons should be isolated and forced to exculsively program in it untill they see the error of their thinking.
There are dozens of languages that compile to the .NET CLI, including BASIC, C++, Ruby, PHP, Java, JavaScript, Python, Lisp, Pascal, Perl, Scheme, etc. C# is the most popular language to compile to the CLI, yes, but almost any other common language out there can be used too.
I don't see much advantage to switching languages if the existing one works. .NET is by far the easiest of those listed to be productive in, but it requires buying into the MS server platform: the cost of that is pretty much the only advantage the others all have, other than religious feelings about free software. There are enough web developers and Linux sysadmins available that there is no real reason to pay for Windows licenses except to develop a little faster, not the sort of thing the business types notice.
An open source .NET has obvious advantages for everyone, especially Mono, and I'm very happy about it. I don't see it changing anything quickly, but their market share will undoubtedly rise.
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/
Every person that has owned or owns a Zune loves it. They had pretty good reviews as well. Bleeding edge is not a good thing BTW.
Only the State obtains its revenue by coercion. - Murray Rothbard
So I like C# as a language, even though I continue to work in Java. It feels a little more modern than Java and offers some interesting features. Sometimes I read about something in C# and think 'that's a nice, elegant approach,' but the language isn't the only piece. In my case I use Spring quite a bit, and although there's a Spring for .NET, I haven't really dabbled with it but looking at it, it seems less developed than Spring for Java/Groovy. I could learn the .NET framework libraries, but not everything will truly be cross platform. I did some COM and C++ programming on Win 32, so I realize there are some APIs which Microsoft uses which may not have a portable equivalent, so I don't expect .NET to be 100% cross platform on all APIs.
I'm pretty handy with Java and Spring and I'm able to deliver with that stack. Having done some C#, I feel they are largely equivalent in terms of expressive power. It seems like some things (the workflow API for example) that are better integrated than equivalent Java solutions, but I feel like I'd be swapping one platform for a largely equivalent platform. It would take me a good deal of work and time to become as proficient in C# as I am in Java, but I don't think I'd necessarily be more effective as a developer. (Switching from a mid-sized Honda sedan to a mid-sized Toyota sedan probably won't get you anywhere faster).
I would say 80% of my clients have a Unix/Linux flavor to their infrastructure. While I can write Java apps and deploy them on Windows, the same isn't really true for .NET. In addition, even if .NET were 100% cross platform, most of the customers I work with want supported software. They often buy gold or platinum level support with their infrastructure products so any Linux .NET platform would have to either be covered by their existing OS support contracts or through a third party willing to sell support. Even they would probably insist that .NET apps are deployed on Windows because that's what they know and can support.
I think it's great that Microsoft is open-sourcing their .NET code and I hope it make life better/easier/more interesting for other devs out there, but from my stand point I don't see any great benefit in making the switch.
There are dozens of languages that compile to the .NET CLI, including BASIC, C++, Ruby, PHP, Java, JavaScript, Python, Lisp, Pascal, Perl, Scheme, etc. C# is the most popular language to compile to the CLI, yes, but almost any other common language out there can be used too.
Yeah but really who uses them?
95% of .NET is in c#. All the VB jobs are still for legacy 5.x and 6.x code that I see. Take it back 85% c# and 10% c++. Just because it can be done COBOL doesn't mean people use it other than to see if they can write a hello world program.
In essence it is a c# based environment.
http://saveie6.com/
Not even that, Visual C++ .NET is a broken aberration that I have not seen used anywhere ever (it's not the same as Visual C++, which is straight up C++). .NET is effectively C#.
firefox bloat? please explain.
And, increasingly, F#. I haven't done the leap myself but will soon have to out of necessity, but I haven't seen a single C# -> F# developer want to go back.
> 2. Is there an open source choice today that's popular enough to be considered the standard that employers would like?
I think this poster is really asking the wrong questions. There are lots of different choices that are all popular, depending on what you want to do. Web development? Java, PHP, and Node are all fairly popular. Android development? That means Java. iOS? It's Objective C and/or Swift. Windows? It's C#. Cross platform game engines? C++. There are good reasons for those differences. You really don't want to try writing web applications in C++, or game engines in PHP. But in every case, there are existing options that are "up to the job" and, in most cases, open source.
Until now, C# and .NET were basically Windows-only technologies, and that held them back. (Yes there was Mono, but it was never more than the unloved step child.) With that changing, it now becomes plausible to use it for more things. Whether it's "up to the job" in those other fields has to be decided on technical grounds. Whether it will manage to take "market share" away from other technologies is partly a technical question, but more a political one.
> Choosing a standard means you can recruit young, cheap developers and actually get some output from them before they move on.
It also means you can recruit experienced developers who already know the technology. Standardization isn't just about being able to exploit people!
"I'm too busy to research this and form an educated opinion, but I do have time to tell everyone my uninformed opinion."
Rob like someone mention earlier, C# along with the whole (or many of the) Microsoft products portfolio is heavily used on the Enterprise. There are a couple of exceptions like many ISP which use Open Source alternatives to reduce operational costs, like thousands of Outlook licenses for example.
And when a company operates on Microsoft systems, then is very common that they look to non Microsoft products with a little doubt. Because those smaller companies have sometimes gone bankrupt, or products get discontinued and unsupported. Also there is a more common belief that under Windows MS products will be more stable and will endure the test of time better than non MS software. And maybe is true, considering examples like Visual Basic 6 that still works these days. Outdated, but gets the job done.
Only companies that work with mixed environments will actually have a need to look for other multi platform solutions like PHP, Python, Lua, Ruby, etc.
Consumer products have moved to Android and for a couple of reasons. Beginning with the bad history of old Windows Phones crashing around, and the reject of the tile system. But that's on personal devices. Still companies use computers, and computers are either Windows (about just everyone), Macs (artists), and Linux (Developers, and IT). Since Android (1) is not self hosting, and (2) do not run efficiently and good enough on computers, there is nowhere there to be found. Like I said in another thread, while Android requires another OS to develop, those legacy OS are going nowhere. They will lose market in consumer products, yes, but became extinct no. If they do, then also the Android market will stale, because there will be nothing to develop Android OS or apps with. Also haven't seen any Android Server edition, so in the enterprise Android will have only 2 roles... a digital notepad & remote email.
For C# to be a serious multi platform alternative Microsoft needs to make serious changes like:
Doubt any of them will happen, and that's why C# along with .Net is destined to fail as a standard.
But standard or no standard, at the end it depends on what OS platform the company you get contracted uses. But there is a very big change that if they use Microsoft products, you will end using either Visual Basic, C#, or both (or even Windows shell or VB scripts) to develop.
From what I understand about .NET is they only open sourced the server side parts. Not the stuff desktop apps would use. Obviously this is because Microsoft is most challenged for market share on servers so has less to lose by doing this, it hopes to cut into the share of other platforms. Microsoft is not giving up much and doing little or nothing to advance cross platform application support on the desktop, mostly maintaining the Windows vendor lockin where it has its monopoly, on desktops.
Not even that, Visual C++ .NET is a broken aberration that I have not seen used anywhere ever
.Net stuff.
C++/CLI gets used plenty, but mostly in places where straight C++ has to interact with other managed code. It works, but C# is a *lot* easier to deal with if you're staying completely within the managed environment. If you don't have the need to mix them, you likely won't see it. In my case, I've had to use it both at my current job and the one previous when integrating legacy C++ code with newer
Please stand clear of the doors, por favor mantenganse alejado de las puertas
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.
Anyone who tries to argue that "X is easier than Y"....especially when "easier" isn't measurable...that's a bad thing.
Look, Java was going down the tubes 3 years ago. I had serious doubts about it and was looking closely as Scala and other. Oracle is finally turning the development cycle of Java around. (How long was 1.6 around? Yikes!)
Security. Rolling eyes. Yeah, Java security on the client sucks and everyone is turning it off. Security on the server...whole different story.
Now: that said, there are STILL reasons to avoid Java. If you're doing web development, there's no reason (imo) to use Java anymore. (And that's why you'd have Apache Tomcat, Jetty (you missed that one) JBoss, Websphere, Weblogic or Glassfish.) Java is heavier weight than a node / php / or even ruby server (imo). .NET is better than Java for web development...but not better than node/php/etc. (Check out angular and ember)
That leaves backend processing. Frankly javascript is getting better here as well...java is still solid here. How good is .NET with anything other than SQLServer? (No idea...but I wouldn't bet on it.) And that's before we start talking about Spring and other libraries.
And then there's the fact that .NET requires Windows architecture. Frankly I run Linux for enterprise servers....and Mono doesn't cut it. That leaves Java or node/php/ruby.
Such extraordinary claims require only a little ordinary proof.
What people don't get is this. Microsoft is totally being left out of the cloud.
.Net takes off we will see it begin to become another offering by cloud providers and as part of popular PaaS platforms.
The fact is that no cloud provider wants to keep track of licenses, so all cloud platforms, all the new and exciting PaaS platforms etc. are based on ALL OPEN SOURCE. And there is a reason for this.
When you are offering a system that can fire up nodes and destroy them dynamically and on-demand, its just not worth it to have to keep track of some piece of that being commercially licensed and all the restrictions you end up with on your freedom to fire up new nodes on demand etc..
Microsoft has been totally shut out of the cloud offerings and PaaS developments out there because licensed software slows you down and restricts all the freedoms to be dynamic in a cloud world that makes it attractive in the first place.
Maybe if open source
-- Given enough time and money, Microsoft will eventualy invent UNIX.
There's no doubt C# is a nicer language to work in that Java but so is just about everything. Java is simply dated. However, there's nothing stopping you from using other JVM languages (like Groovy which is extremely easy to learn for a Java dev).
Are agnostics skeptical of unicorns too?
1. Is .NET up to the job?
Which job? The question needs better defined. If it is replacing every single other programming technology then the answer is simply No.
2. Is there an open source choice today that's popular enough to be considered the standard that employers would like?
Java is almost a drop in replacement for .Net. and has better cross platform support. Depsite being very popular, it has never gained universal acceptance. Often (for example) something like python, or C is a better choice depending on what you want to do and where you want to do it. I don't see .Net being any different.
3. If the answer to 1 is yes and 2 is no, make the argument for avoiding .NET.
You say 'avoiding' as if .Net is somehow automatically going to get rolled out everywhere like a steamroller. This is nonsense. Change is expensive and problematic, if you want people to start using .Net in areas where it is not currently dominant, you need a very compelling reason. If there is no 'standout' reasons, people will just stay with the status quo.
.Net is one of the best things to come out of microsoft (along with Excel and games), But it is firmly positioned as a windows application development tool, often tightly integrating with other windows components (such as Visual Studio, IIS), which means it is far less paletable when targetting non windows environments (for development OR deployment), or if you have a pre-existing architecture it has to integrate with. Being 'open source' doesn't magically fix interoperability issues.
.Net development work is actually asp.net for be-spoke apps), the server application code technology is decreasing in importance. JQuery and other client side technology is where all the progress is being made, the server code is often just a glorified access layer to a database.
I should say the c# is an excellent language and
Also in terms of web applications (most business
With the open sourcing of .NET, I wonder how far they've gone. Is it the exact same runtime used on Windows, now fully open sourced like the JVM?
Yes
Was the entire .NET platform open sourced, or just a subset?
The entire *server* stack - i.e. everything you need to run a .NET server application. They have even created a small-footprint webserver Kestrel for Linux based on libuv. The reason for libuv actually touches on a very important aspect/advantage of modern .NET (and to some extent, Windows Server) . More on that below.
Doesn't .NET require IIS to run web apps?
No. You have *always* been able to just self-host the ASP.NET bits. However, MS have taken it a step further and completely separated out the bits of the pipeline so that you can pick and choose. For a long time there have been plugins for Apache httpd and others that would allow you to run Mono. Those will work fine regardless of whether ASP.NET is provided by Mono or MS. Kremel mentioned above, but you can use any other way. ASP.NET vNext is "pluggable".
How will you run a .NET web app on Linux?
curl -sSL https://raw.githubusercontent.... | sh && source ~/.kre/kvm/kvm.sh
In the Java world, the entire platform and runtimes are open source.
In the .NET world, the entire platform and runtimes are open source, and the platform specification is governed by international standards organizations (ECMA and ISO).
Microsoft grants patent licenses for anyone who wants to create implementations of the specifications, and Microsoft *specifically* does not require paid testing suites and they do NOT assert that using the APIs constitutes copyright infringement.
And now for some reflections on the differences: Microsofts stack - especially with the latest .NET and Windows Runtime - have grown to become completely focused on asynchronous programming. Windows (the NT line) with the "overlapped IO" available from the initial version always had a very high-performing "completion" oriented async model for all types of IO. While this model could yield much better scalability, to leverage it you had to program in a "callback" style that were often at odds on how you think about a problem (sequentially) as well as poor match for constructs such as exception handling, looping/branching etc.
With C# 5.0 (and the equivalent VB.NET) async became an integrated feature of the language. This is not about smart synchronization primitives, multithreading or similar "low level" concepts. This is aboy having a language that effortlessly allows a programmer to express a sequential problem in a way that allow asynchronous processing all the way down to the system level where overlapped IO will be used. Without invading the way the solution is expressed.
This is huge. I am aware of only one other ecosystem that does something similar: node.js. Python has the capability, but there's no ecosystem built around it where the capability is the default way to design libraries and APIs.
In terms of enabling and supporting async programming style, C#, .NET (and F#) is the most mature option out there, along with the "new" kid node.js.
Java only recently acquired the ability to process web requests asynchronously (yielding the thread to process other requests) - but the language and APIs make it exceedingly hard to leverage this capability for anything useful. If you look up articles for how to do async in Java you will notice a strange t
Reading slashdot one-liner: (irm http://rss.slashdot.org/Slashdot/slashdot).rdf.item | fl title,desc*
If you offer enough even the most ardent C# opponent will apply. What is the price of a soul nowadays anyway?
Time is what keeps everything from happening all at once.
To me, .NET === Resource-Hog
At my place of employment, we implemented a number of .NET apps that were mostly just a wrapper-frontend to our websocket based main app. We can pretty much do the same thing using Chrome, but it was thought this would be easier for our clients to use. Unfortunately, we also run a resource heavy data-generating simulator on the PC along with the app. So we couldn't help notice that when we used the .NET app, the simulator would get starved out. On the other hand, when using a browser, there was no such problem. (BTW: I find this a little ironic as browsers were the original 800lb gorrila.)
So this leads one to wonder if one goal of .NET for MS wasn't to nudge up the number of server licenses, along with licenses for other MS products (IIS,SQL Server, ...)
1) the JVM itself is extremely battle tested now. There are even viable alternative JVMs. In terms of troubleshooting, reliability and management, the JVM is a non-issue. It's like the sun rising in the morning. .NET. Further, it seems that with the exception of a few guys like Brian Beckman, the smartest people in the world have made their choice: they do their work on top of the JVM. If you want to do massive streaming and/or parallel computing, you're going to turn to one or more top level Apache projects running on the JVM. .NET runtime and C#). Same deal with Windows Phone (answer to iOS), Silverlight (answer to Flash), and on and on. Here's the kicker: Microsoft's track record in keeping their promises is not good. If you tied your fortunes to MS tech initiatives in the last 15 years, you've lost a lot of time invested. Whereas with the JVM ecosystem, similar to the *nix ecosystem, everything you learn retains value. And the JVM ecosystem just evolves around problems and grows even more--whole branches don't go extinct as with the Microsoft / .NET ecosystem.
2) The knowledge base of solved problems, libraries, projects and skills for the JVM world dwarfs
3) Interestingly, the world of Java.next languages such as Groovy, Scala, Clojure is really getting traction. This is closely tied to #2, the smartest people in the world work in the JVM space. Clojure in particular is very nice, and you can deploy Clojure apps as Java jars, so in a stodgy big company setting, you can actually deliver.
4) Finally, a problem I've seen since with Microsoft over the years (still a problem) is that MS solutions tend to address a problem facing *Microsoft the company* but do not address problems facing *developers and customers*. MS is reactive. When Java began to shake up the scene, MS rushed to market with a "me too" version (the
TL;DR: Development is moving client side. Java/.NET are primarily backend, or will be soon and as such won't be as relevant, that's why .NET has been on the decline not Java. Get friendly with Javascript and : AngularJS or Backbone or Knockout and HTML/CSS.
.NET apps, but have had to aid with the development of middleware in Java. I've also released an iOS/Android app or two. So I've been around the block and don't have a preference really. The geographical area that I'm in right now is in heavy demand for .NET... so that's what I do for the most part because I'm greedy and like money, if you pay me more to write Java ... then I'll be singing its praises.
.NET vs Java vs. all as pretty much pointless, both platforms will cost you just as much since your cost is development/maintenance, both have advantages and disadvantages. The fact is that most development is moving client side. This methodology has several advantages, the most notable in my opinion is the distribution of load. So... take something like ASP.NET MVC or RoR, if your app generates a giant HTML response server side and mails that back via XHR you have just crapped on yourself and your client. First, you had to pay the cost of generating said payload, and second, the client has to wait for that bastard to be downloaded/displayed. ( All of this does not matter if you can't write an efficient query to save your life or spend a ton of time waiting on disk I/O or some vendor service call ) <- This is where NodeJS really shines...
... I've written far more JS than C# ... which is weird... lol
.NET a "back-end" platform, and even those two giants can be replaced by PHP, Ruby, NodeJS, etc. I would argue that its Google handing Microsoft their ass on a platter and not Oracle.... I suggest you concentrate on front end stuffs like Javascript and whatever frameworks are out there for that. Sharpen your UX/UI and people skills so you communicate with designers and BAs. I could code back-end stuff blindfolded, there's only so many ways to architect middleware, but making something that is usable and user friendly is an effing challenge. I've grown to have more respect for UX/UI folks than most, because a good designer is worth her/his weight in gold.
Here's my thoughts... for what it's worth. I've written apps in pretty much everything. I created a fairly large site in PHP, have been writing primarily
I see these discussions of
Anyway, it would be much more ideal to just mail back a model and allow the client side to worry about binding/display, etc. This is why you're seeing frameworks like AngularJS, Knockout, Backbone, etc. take off. They provide a better experience for the user and they have the added benefit of relieving some of the processing that takes place server side. The downside being that not all JS engines are created equal Chrome V8 > whatever the hell IE has. ( yes I know you have to consider user device, etc. and not reveal business logic/secrets in the front end, validate server side, bla bla bla ) I don't think that there is much argument that most development is moving to mobile/web... there are still inhouse apps for giant corporations and you could make a living at that... but a majority of the industry is moving away from that model. Even the inhouse apps are starting to be primarily webby. The project I'm on currently
SO! That being said... You can safely consider Java or
VS only got the ability to edit code in the debugger in 64bit mode this year!
Exception handling isn't that different.
Java unchecked exceptions operate basically the same was as C#/.Net extensions. You catch them where you want in the call stack or it bubbles all the top.
People don't like checked exceptions because your code is filled with documentation about the types of problems it can have. Of course the alternative is you end up with catch Exception(e) code at boundaries which has its own problems.
There are dozens of languages that compile to the .NET CLI, including BASIC, C++, Ruby, PHP, Java, JavaScript, Python, Lisp, Pascal, Perl, Scheme, etc. C# is the most popular language to compile to the CLI, yes, but almost any other common language out there can be used too.
C# is really the only popular .Net language. Microsoft .Net spent time on C# while the Java / JVM crowd spent time building new languages.
.NET is a marketing vessel.
Not even that, Visual C++ .NET is a broken aberration that I have not seen used anywhere ever
I don't think that anyone should ever write a full on application with it, but C++ .Net does work as a small .dll for C#/C++ interop, when your doing something really tricky and P/Invoke isn't quite cutting it.
10 years ago Java and .NET were welcome solutions to solve the "DLL Hell" issues using COM/COM+ objects.
.NET can shift to Ruby/Python/JavaScript
.NET since Classic ASP days, I am so happy to see a shift in programming culture away from these "head in the cloud" frameworks.
.NET and Java is a barrier to maintainability and velocity of updates. .NET devs use Entity Framework? Because ADO.NET was sooo hard? *eye rolls*
But, they have grown into 100 tentacled beasts.
Way too many cooks in the kitchen.
Today, the only reason you would architect a new solution with these behemoth frameworks is because you were given no better choice (ergo, your team is entirely leftovers at an Enterprise who no longer have the drive to update their skillset: ergo --> you're working at a crappy non-IT organization.
Java can shift to Scala.
Having worked in
*nix philosophy had it right: build things that do 1 thing really well. Node.js follows this model and has had a huge success because of it.
Beyond that, writing a compiler is not something we have to rely on MS/Oracle to give us. There's literally no magic behind these curtains.
Lastly, the LoC measure, simple code footprint of
Why do
Just another solution where there wasn't a real problem.
Well, there's this old news.
lmgtfy
Then there is the XAML used for development now. Along that vein there is WPF, which is released in tandem with .Net, but is not actually .Net.
It may be they are not planning some new Next Big Thing, that will launch a whole new series of catch-up games like when they came out with .Net. However, I've been writing Windows applications since before the Windows 3.1 days, and have done my own share of following along as my code becomes obsolete as MS comes out with new development tools, and portation tools that simply don't work, requiring massive rewrites or writing new tools to do rewrites. Either way is a costly process. So, yes, I'm skeptical when Microsoft comes bringing Trojan Horse gifts.
It still is somewhat amazing to me, that time after time after time people fall for Microsoft promises and deals, only to find out too late, it was yet another Sun-Tzu Art of War trick. /.ers used to be smarter than this.
So, assuming Microsoft is sincere
That's a pretty fuckin' big assumption there, guy.
>BMO goes back to read the Halloween documents
The Easter Bunny, Santa Claus, A Sincere Microsoft Board Member, and a Rabbi (a Rabbi is required in every joke) come to a 4-way stop/intersection at the same time.
Who goes first?
The Rabbi, because the others don't fuckin' exist.
--
BMO
That is the only reason you would adopt an "open source" .Net/Fuck ...but forgive me for the rude interruption ... look at IE, look at MS-js,(and in case u r a geek) look at the wchar_t implementation of MS= NOTHING to do with standards (standards is 2 byte, for some $U&KING reason MS decided: Nah...screw them, 4 is good), look at MSRPC (rip off from onc/sun rpc, but naahhhh, we dont want msrpc to talk to sun rpc)
Honestly, thats exactly where i stopped reading
Microsofy does NOT standardize
what fucking standardization are you talking about!
You would be an idiot to believe they want to "integrate" with other techs...
rant over and out!
P.S. I haven't commented in /. for years, but you just pissed me off!
The lunatic is in my head
That's interesting information, and useful for anyone serving hundreds of thousands of requests per second.
For the 99.9% of sites that serve single to hundreds of requests per second, it might pay to keep in mind that your sedan is not designed to run on jet fuel. What someone going a thousand times as fast does isn't necessarily relevant.
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!
Here's the thing. I work in a Microsoft based shop. I've had businesses in the past that we predominantly used open source tools such as the LAMP model. But, through my 17+ years of working in the IT industry, both as a developer and as an admin, I would say that the predominance depends on application. If you're doing web-related development, then you're probably using PHP/Java type stuff. If you're writing desktop applications (as we do here, although I'm not currently a developer...I'm an admin) then you're probably using C#/VB.NET. If you're writing core-systems or interfaces for physical tools, you're probably using C/C++. Hell, you might even be working on legacy systems and using RPG/COBOL. It all depends on your application...I don't think we will ever get to a point where there is just one programming language that is ideal for everything. That said, in my experience, businesses tend to go with major company's products...aka, MS/IBM/Oracle. My impression is that executives, who are typically not very computer savvy, tend to want the security blanket of thinking the have support from those vendors. I personally feel that I get better support from the open-source community and it is usually free. I think MS support sucks (as demonstrated during my 9 hour $500 call to them a couple weeks ago.) If I could transition my company to more of a LAMP type infrastructure I definitely would, but I will never be allowed to do that. Why? Well, mostly because the software used by my highly specialiized manufacturing company, much of which is extremely expensive, is Windows based. The transition would be enormously costly, if possible at all. I think a lot of companies face this problem, and therefore .NET will live on. Is it the only solution? No. But at least in our case, we're married to it, and the divorce would cost us a lot of money.
The correct answer is 42.
Excellent point, thanks.
...No.