Do you believe C# copied most of the features of Java and became an improved language?
We had a discussion at my workplace. So, I thought to ask developers here what they think. My question is :
Is C# an improved Java?
3.4K+ developers have started their personal blogs on Hashnode in the last one month.
Write in Markdown · Publish articles on custom domain · Gain readership on day zero · Automatic GitHub backup and more
C# certainly copied a lot from Java and improved in many cases as well as innovated in terms of Lambda support which Java only got in Java8, operator overloading which I wish Java would add, but also mucked up things like Enums. Java's concurrency is also still far superior to C#. So C# has done a decent job at building a better Java in many aspects, but still falls short in many areas - so both are great languages, both have rivalling features that are better than the other.
If I wanted to build a desktop application in Windows, I'd certainly choose C# over Java, anything enterprise that needs to run on servers, I'd still choose Java simply due to the bigger availability of options, it having much better cross-platform support and simply due to maturity.
C# could have done so much better for itself if it had Linux support or cross-platform support from day one, but Steve Balmer proclaimed that Linux is a cancer and effectively limited C#'s scope to Windows servers - now C# will forever be branded as that language that only runs on Windows.
Here's an in depth comparison from somebody who's used both, it's from 2007 though, so somewhat outdated: https://goo.gl/CKGmQP
MS is open sourcing the next iterations of .net and making them cross-platform out of the box. The next few years will be very interesting. Have a look at http://dotnet.github.io and http://www.omnisharp.net/. Also, what Mono and Xamarin have done for c# and .net is pretty cool as well. I work with both c# and ruby, so I'm not pushing c# here ;-).
Mono never got full support from MS until very late in the game, they merely tolerated it; personally I would not use an environment that could be shut down by patent litigation at any time. The fact that they're open-sourcing now may be a little too late, but nevertheless a step in the right direction.
That being said, most of the newer and innovative features of C# today such as anonymous functions, Linq, async/await and expression bodied members are features that I'm sure many Java devs would love to have. I agree with @JanVladimirMostert. The Java ecosystem leads in many regards, particularly in cross-platform productivity. However, that has more to do with the sdks and tooling versus actual language features. Cross platform .NET/C# is needed, is long over due and has some catching up to do.
Copying already available features from a language and implementing every single idiocy from the programming language research doesn't make a good language. By contrast, having a more limited set of features, doesn't make a language "worse". We live in a world where programming languages must be powerful enough to accomplish every day tasks, but still be manageable by a single individual. And hey, Java is a big language when you start from scratch, still maintains some simplicity when dealing with complex tasks. Take Scala, for example. It has a rich syntax with tons of features, 2 full paradigms (OO and functional). Learnign Scala as a first language is not that easy compared to other languages. Even experienced developers may find it to be steep, at times. Despite the fact C# may be a good language, I consider it to be highly inconvenient compared to Java. The enteprise market has been (and still is) predated by Java. And for obvious reasons. The language evolves without trying to "implement the whole world". Only proven (by the industry) language features are implemented. If some features will be considered useful to have, they will be implemented eventually.