.Net, C# and the Open source movement [closed] - c#

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 7 years ago.
Improve this question
I'm probably going to take some heat for this question. But I'd like to know how to address this problem. So here goes.
I program (to different levels of competence - admittedly) in various languages. I have dabbled with C#, and it seems quite a nice language (reminds me A LOT of Java and C++). The problem is that I have what can only be described as a pathological distrust of all things from the Redmond company - as a result of experiences too many to enumerate here.
I am a great believer in open source software (GPLd or otherwise) - and am an avid consumer and contributer to many Open Source projects.
My questions are the following:
.Net can ostensibly be run on Linux using mono - but is anyone actually using such a setup in production?
It seems to me that almost every (half year?) or so, a new version of the language is pushed out - (I don't know whether the new versions are backward compatable). In any event, if you take other languages e.g. C/C++, Python etc, the 'versioning' is far and few between - therefore it provides a more 'stable' environment for the developer. It seems (in my mind at least) that learning/using C# is going to be a never ending learning curve every six months - I am not sure if I have the wherewithal to commit so much to any one particular language.
To summarize, I am trying to balance the pros and cons of learning/using .Net (and C# in particular, which looks like a beautiful language), but if I do, I want to deploy on Apache/Linux (with either mySQL or PostgreSQL backend) - as opposed to IIS/Windows/SQLServer.
Is this a pipe dream (running .Net/C# on Linux), or is someone out there actually using it in production?

While C# does change periodically, it's more along the lines of 18-24 months than 6 months. Moreover, the C# team is very conscientious around making the changes as backward compatible as possible. (There will always be potential breakage when new conversions are introduced etc, but this is mostly a problem with corner cases such as overloading in the inheritance hierarchy.) You don't have to learn everything to do with the latest version... and in the case of C# 4, if you don't do COM and you don't want to use dynamic typing, there's not very much to learn anyway. The enhancements for C# 2 and 3 were much larger, of course - but then they brought much larger benefits too.
As for whether Mono is used in production - the Mono project itself has a list of companies using Mono.

There's a good list to be found at http://mono-project.com/Software and http://mono-project.com/Companies_Using_Mono one good example "Electronic Arts used it to power Sims3."
New C# versions are pushed out at a quite good pace but the underlying VM specification haven't changed since standardization, backwards compatibiltiy between language versions isn't a problem but you need to target the correct Runtime Version but that's the exact same problem you'd have with Java.
The weakest part of the .Net ecosystem is probably that open source haven't progressed as far as in the Java sphere but things seems to slowly be improving, uptake and contributions will only help that. There's much good stuff comming out of the Alt and Progressive .Net camps in that regard.

The Wikipedia page for C# shows that your feelings about frequency of new language versions are far from the truth. Certainly the MS way has always been to keep up the flow rate of new technologies - see for example Joel's old essay Fire and Motion - but there's rarely a compelling business reason to keep up with the latest shiny. But the existence of that strategy on MS's part is no reason to keep you from using what is as you say a very nice language, which is independently standard-ised.

If you really want to do web development and host it on linux, .Net / Mono ain't your best choice.
Although ASP.Net seems to run (WebForms that is), ASP.Net MVC (2) does not, at least not flawlessly, so it depends on how well you know Linux to work around bugs that will arise.
Personally, I found it easier to just learn Ruby and use Ruby on Rails than to work around awkward bugs regarding ASP.Net MVC with Mono.
For desktop clients, Mono is a viable alternative.
As for C#: In my opinion it is a nice language too and with the .Net framework it is really productive for windows clients. The changes aren't that bad and you don't have to use every shiny new feature, but you can.

Related

Please help me choosing the language and framework for my undergraduate project [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 7 years ago.
Improve this question
I am a final year computer science student from Mumbai University, India.
The topic of our undergraduate project is SOA.
Under this project we are supposed to build 3 service components and one example website that uses those components.
I am quite good with Java and have no experience whatsoever with C# or .NET.
I am having hard time deciding the language and platform for our project.
Can you please suggest what platform I should go for?
Please give me a brief comparison between Java/Java EE and C#.NET/ASP.NET in terms of complexity, ease of development, ease of deployment etc.
Edit:
The original reason why I put this question is:-
We have to do final year project in group of three. My both partners want to do this project in C# and asp.net and I want to do it in java. Since our project is more of server side, java holds some advantages like cross platform over C#
Also this point:-
What if we implement 2 parts in C#.net(which they will build) and 1 part in Java(which i will build) and then use them to build a sample website.
What level(kind) of difficulty it will accompany?
I am quite good with Java and have no experience whatsoever with C# or .NET.
Well then, do you have a particular desire to extend your knowledge into C# and .NET, or do you want to concentrate solely on the actual project.
People can make all sorts of arguments about C# vs Java, but in your case the pertinent facts are that C# will be much better at teaching you a new language, and Java will be much better at not requiring you to learn a new language.
Edit: Following the edit to the question, mixing the languages like you suggest as a possibility has the added advantage of needing you to show how to mix the use of two different languages, which might or might not be useful in itself.
Overall I would say that is is much easier to get started in Asp.NET. With Java EE, just setting a dev environment to do Hello World, can be a lot of work. In Asp.NET, you launch visual studio, create a project, and are ready to go. If you are using Netbeans and Glassfish, then Hello World is no longer a nightmare, but deployment is still a lot trickier.
Architecturally they are pretty similar, Java EE is a bit rustier, but has borrowed from many of the newer ideas of ASP.net.
Once you get up to speed in Java EE, it isn't that bad, so for a long term commercial project, it is a viable choice. For a short term student project it isn't worth the effort, and I would go with ASP.NET, but if I had a choice I wouldn't recommend either platform.
I would build my application in a dynamic language like python, ruby, or maybe groovy. The difference in productivity between static and dynamic languages is huge. Even if all 3 of your team members are new to the language I would expect you accomplish more in less time.
I would recommend looking into the following frameworks: django, pylons, rails, grails. I'm biased towards the python frameworks, but rails is also an excellent choice. Grails is a pretty cool clone of Rails written in groovy, but unless you have to have Java integration, I would stick with the other 3.
I am quite good with Java and have no experience whatsoever with C# or .NET.
If by that you mean you also have experience with building services and site, then use Java, no point in discussing it any further. The only possible reason is if You Want to learn .NET (a great reason imho though), but not at all because you should change to it.
Note that personally I prefer .NET vs. Java, but I would never / ever make a team experienced in Java change to .NET in the scenario you described.
If you do go with .NET, use ASP.NET MVC. It gets you closer to the right skills to learn regardless of the platform / HTML, CSS, JS, HTTP considerations, etc.
What if we implement 2 parts in
C#.net(which they will build) and 1
part in Java(which i will build) and
then use them to build a sample
website. What level(kind) of
difficulty it will accompany?
If the interface between these parts is a widely-accepted standard like SOAP or REST/JSON, then the language the individual components are developed in will matter very little - this is the whole point of such standards, and an important part of the SOA idea as well. I'd even consider such a heterogenous application a better example for what you're supposed to learn.
The only real downside will be that you'll have a harder time helping each other when you encounter problems.
Ill approach this idea by idea:
Platform: You are familiar with Java, I would recommend for the time being staying within Java for the time being.
J2EE do you mean Java EE? J2EE is quite old by today's standards.
There are not many, if any, fundamental differences between .NET and Java platform code. It comes down to a matter of preference and what Operating System you are primarily working on, imo. If it is only Windows development I would lean towards .NET, however if you need portability lean towards Java.
Also I wanted to point out SOA is more of a buzz word consultants use. You will see this as you gain experience in the industry. Cloud is the new SOA, this is purely opinion.
It may be worth your while to do the other components in something you don't know as having that experience could make you more marketable to industry. Look at job offers for a field you'd like to do work in. What experience are they asking for? Maybe use something they ask for as one of your components. I've never seen a job ad that asked solely for Java experience, it's usually accompanied by other technologies like scripting languages and framework experience.

What features should C# 4.0 onwards have to encourage switching from Java? [closed]

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
Java is a popular language & platform, having a huge ecosystem. Are there any features that C# 4.0 onwards and its platforms should have, to make you completely switch to C# programming?
Make it run on as many platforms as Java?
Otherwise it is completely irrelevant to us.
.
.
.
Edit: For a discussion about Mono making .NET "cross platform", see https://softwareengineering.stackexchange.com/questions/20275/mono-is-frequently-used-to-say-yes-net-is-cross-platform-how-valid-is-that
Edit 2015: Microsoft has decided to open source the backend part of .NET, which will enable community to port this to even more platforms than Java runs on. I consider this the ultimate move against the oracle approach to Java evolution.
Edit 2019: .NET Core is now available for Linux, and therefore as Docker images. Our experiences so far has been very nice. We have a mission critical application which runs nicely in Kubernetes, and we have no particular preference for writing microservices in either .NET or Java.
The general uptake of C# in the marketplace has nothing really to do with language features, which I understand are now superior to Java. Adopting C# requires a complete organizational strategic shift in the main:
You already have a gazillion Java applications and a host of Java developers. Why switch C#? You'll need new staff and suddenly all of your applications are legacy by definition. This is a huge deal! Undergoing this change puts a huge risk on your company for what may be only slight benefit: why bother?
You are used to at least the option of many large providers of operating system and middleware which support your Java ecosystem. This disappears overnight and you expose yourself to a monopoly pricing model (i.e. you are pretty much tied in to Microsoft, to all intents and purposes). Being subject to monopoly pricing is bad! Most organizations would rather have a slight technological disadvantage to avoid monopoly pricing because the pricing will almost certainly take away any extra revenues anyway.
I don't actually think that C# has anything less going on for itself than Java, except for the ecosystem like IDEs, frameworks, etc. In terms of features, it is well ahead at the moment at least.
I think .NET is great, but don't use it, because it lacks the #1 mandatory feature : portability. Yeah, there is Mono...
Another thing that really pushes Java is Eclipse (*): it is the most successful and complete free development environment to date. And, together with a huge amount of (mostly free) plugins available, the cost/benefit is unbeatable.
The pair VisualStudio C# + Reshaper can get close but it's not quite there yet...
(*): Some even say Eclipse is the main reason why Java found so widespread use.
My answer is a litle about why I think so many use Java, but want to use c# in schools:
At my university, Java is the first language we learn, and is the language that we learn most about later also. I guess this is common.. But even tho we learn some python, c, c++ and already know a lot java, most students use C#. This is because everyone is told that C# will give them a job :) The school knows this, and I know one feature that would make C# the new primary choice for the school: make it run on all platforms =)
We were taught on college that there is nothing engineerical in MS Windows. How many people can (dis)agree with that?
How can we as developers answer to questions of stability, robustness, scalability, availability, transactional isolation, concurency when building some serious software system by working on an OS which is pale of 'something' and just anywhere you can expect some nonstandard behaviour surprise and potential source of problems which you can solve only by calling MS and pray God they will find a fix for you not in a long period.
Open Source is our only salvation.. Java respects standards, invests much energy in security model, keeps WORA, and it is rather simple language.
I can think of C# having unsafe pointer, thats just enough for me to give up on doing serious business with it if there are many people working on it. ..
Come on guys, if you do real serious software and would like to have kind of multiplatform support, NET will never be the thing you need or you would want to.
It wasnt even designed to support that.
I would definitely consider using C# when Microsoft buys Novell and gives official support to Mono.
Then, the next .net release will have to run on Windows and Linux ( OSX wil still left behind - like today with Java but with Java is because they wanted that way- )
Until then, Mono is behind the latest .NET version, and is still adding to it's core some Linux specific features ( like the Mono.Linux "module" ) that obviously doesn't run on Windows.
Language features are great, but if I want something more "dynamic" to work with, I would rather use Ruby or Python
But, that's just me.

A good, recent article on the comparison between Java EE and .NET? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
I've started looking into a few larger server-app frameworks that would be able to support desktop client interfaces as well as web interfaces, and have really zero'd down on the two obvious ones: J2EE and .NET. From a language standpoint, feature standpoint, portability standpoint, etc...I am pretty comfortable with my understanding of the two products. I'll keep it simple in saying that for the most part, either would fit the need well enough based on my initial analysis.
Where things are a pain though is in finding a good comparison from engineers who have spent a better part of the decade working with one, the other, or both. The undocumented frustrations that youwont get from Sun, Microsoft or a book.
A Google search turns up plenty of results, but most are from 2002-04. Suffice to say, plenty has changed since. J2EE is suposed to have gotten a lot simpler and .NET is supposed to have gotten a lot more feature rich.
Is anyone aware of more current comparisons (in the last two years) that might be worth reading?
Have you seen these?
http://en.wikipedia.org/wiki/.NET_Framework#.NET_vs._Java_and_Java_EE
http://en.wikipedia.org/wiki/Comparison_of_the_Java_and_.NET_platforms
http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java
Since you say 'desktop' before you said 'web', i can assume that the desktop side of this application is more important. .Net has a definite advantage in making desktop apps, Java really doesn't have this as an advantage.
Having said that, i'd just go with whichever your dev team has more experience in.
Java EE has certainly changed a lot. The biggest changes that you'll want to be aware of are Spring and the new EJB3 spec.
Spring is not part of Sun's Java EE standard. It's the crystalization of Rod Johnson's consulting experience into a framework for POJO development that's gotten a lot of traction. And, just for reference, there are versions of Spring for both Java and .NET. Likewise for Hibernate, a popular ORM tool.
EJB3 has taken a great deal from Spring and Hibernate. You can use EJB3 with Glassfish or JBOSS or WebLogic.
Another idea that you'll want to keep in mind is web services. These are distributed web components that can work with any client, Java EE or .NET, desktop or browser. I think their chief benefits are the emphasis on messages and hiding the back end implementation details. If you write web services, your clients don't have to know or care whether they're written in Java or .NET.
Web services work well with rich Internet clients like Flex and Silverlight. They can help to keep your options open.
Sorry, I can't speak from personal experience about .NET.
This is a real "apples and oranges" type question.
Generally speaking I'd rather do desktop development in .Net. If I did it in Java I'd probably favour Eclipse SWT or Netbeans RCP over Java Swing.
For serverside programming you can use either. I'm not a huge fan of Windows as a server platform (over Linux) and the Java stack is essentially free, which is particularly useful in terms of start-up costs (Bizspark notwithstanding).
The biggest thing about Java server apps isn't really J2EE anymore. It's Spring. You'll probably find more Java web apps running with Tomcat and Spring than you do full J2EE stack apps (generally meaning including EJB).
EJB3 has gone POJO like Spring is.

C# popularity industry-wide or is SO atypical? [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 10 years ago.
Improve this question
I feel I'm a well rounded programmer, I'm comfortable in C# and java (several large projects with both) but I tend to use C++ for most applications when I have a choice. (and sometimes R,Python, or Perl as appropriate..)
But I am astounded to see the popularity of C# here on SO. There are 18500 C# topics, more than C, C++, and java combined. I've never felt C# as having such an impact in the companies I've worked with but the SO popularity of C# is undeniable.
My question:
Why is C# so popular on Stack Overflow? My question is not so much a SO question as a desire to understand C#'s current acceptance/growth compared to C++ and java.
Possible explanations for the popularity:
C# is truly that popular and accepted in industry, it's everywhere!
SO is not typical, it seems to have attracted a disproportionate number of C# users
C# has more questions/confusions that tend to need community help to solve
Microsoft (maybe on its forums?) encourages people to use SO for questions
The first explanation is likely the reason, but I just haven't felt that popularity in the real world!
What's your reason you discuss C# topics here?
I think the founders of SO are .Net gurus. Most of the people who follow their blogs found out about the site, and started coming here. The original user base was probably pretty .Net/C# focused.
I also think that C# is the preferred language in .Net with it's interop and ability to use old C and C++ code. Those familiar with C, C++, and Java can easily get a useful application built and working in C#, and be pretty certain it will run on any system with the proper .Net framework installed.
And, C# sounds cool.
I wrote about the popularity of C# on another thread, but to discuss why it's popular on SO, I'd say others have the right of it. C# is popular here because most of the people who first came to SO did so following Jeff Attwood's blog. That's certainly how I came here.
The thing is, SO really is language neutral, even if it's written in C#. Both Jeff and Joel have programmed in other languages and are hardly bigots when it comes to language; they just chose C# because it really is an amazing language to program in.
Comparing C# to Java and C++, the growth has been astounding. C# when it was first introduced was basically Java with a better GUI library (Win.Forms beats the ever-lovin' snot out of Swing any day, IMO, and WPF is heads-and-shoulders above both) and a few extra concepts, the biggest of which was delegates and properties as first-class citizens. Since then it's grown meteorically, constantly adding newer and better things. The entire concept of LINQ has drastically changed the way I approach iterations; couple that with WCF for contract-based inter-process/computer communications and WPF for a truly amazing way to build GUIs, and you've got a rock-solid language and library.
Hell, WCF alone makes .NET the correct enterprise/SOA choice.
By contrast, Java hasn't released a new version in, what, 5 years?
C# is innovating. Java is stagnating. C++ is... well let's call it "stable", shall we? The newest version, which is dubbed "C++0x" will soon need to be called "C++1x". The features that are planned require so many changes to the runtime that you're almost going to have Java or C# when you're done anyway so why bother?
Finally, to answer your last question, I come here to answer questions about any topic. I mostly prefer to deal with abstract problems rather than language-specific issues, but I'm always willing to help regardless of language. Just because I love C# doesn't mean it's all I know. :)
I think it's a combination of reasons 2 & 3. From what I've seen, C# is not as popular as Java, and it's probably not as popular as C++.
From where I live, most people use Java, followed by CPP, followed by C#.
Is atypical.
C# is very popular but StackOverFlow is by no means a reflect of the industry-wide.
Dup: Why is there such a large percentage of C# questions?
Related: Why does Ruby seem to have fewer projects than other programming languages?
I've mostly avoided C#, because (a) I've got a silly prejudice about that glandular freak of a program loader masquerading as an operating system — I just don't do Windows, and (b) because it's so much like Java that I have trouble keeping them apart in my head.
That said, there's a lot of C# being done, and if I weren't an old crank it'd probably be a good language.
The thing is that C++ is riding without training wheels. This makes it much better for some things — I helped build the AS/400 operating system in C++, bare metal up — but not as good for the sort of application programming most people do most of the time.
I guess that is partly due to people knowing of the site thru Jeff Atwood's blog, and Joel Spolsky's website.
Although their writings are not technology specific, it has a slant towards MS stack and hence the site is popular among developers working on MS suite of tools/languages.
Once the site becomes more popular and gets ranked high in google for questions on other tools, it will have more questions on those topic as well.
It really just depends if you plan on working with windows. If you like Linux or mac better then you probably want to use another language (although you could use Mono.NET). I just use C# because of 3 main reasons:
Easy to learn
Easy to use
Easy to deploy
But if you like a different language better then use it. Right now I'm learning C so that I can help contribute to some of my favourite open source linux apps.

What advantages are to be had by using Java+Swing over C#+WinForms/WPF? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 7 years ago.
Improve this question
There is a group here using Java, server-side and client-side, with Swing for the client UIs. I plan to suggest that they change the front end to C# and WinForms or WPF, but I want to come prepared with:
A list of benefits to be had from moving to Winforms / WPF from Swing.
A list of Swing benefits that might get thrown back at me over using WinForms / WPF (the only one I can think of off the top of my head is the ability to share more code across server and client due to being the same language - given the fact that the server side will stay Java).
I'll preface this by saying I'm a .net developer so the following might be heretical.
It sounds like your company already has a significant investment in java. People, software licenses, and code base.
If my company (or group) was primarily java and we were successful in meeting business demands, then quite frankly there would be no way I'd switch.
The only way I'd consider switching technology stacks is if the stack we were on was truly dead. Meaning that it was very difficult to find programmers for, it could no longer meet business needs, we had a high number of failed projects, and/or the language itself was no longer evolving.
Switching just because someone prefers one language over another is non-starter and ultimately wouldn't make any business sense. The very act of a change like that will mean that the company is going to lose those people who are still committed to the old stack. Replacing people is extremely expensive just in terms of knowledge lost.
Another thing, if you don't already know what the hard reasons are for switching platforms then you shouldn't even try to encourage it. Take the accountants point of view, what really would this provide?
1) Swing stinks. (Almost just kidding, but really, in my opinion, it's pretty awful.) Even if you're going to develop in Java, use SWT or some other decent looking/behaving toolkit. Moving to Windows Forms or WPF will (potentially) give you a lot more powerful user interface options on Windows, but only on Windows.
2) You're tying yourself to Windows, and losing the cross platform nature of Java+Swing. You're potentially losing some ability for shared code. You're having to redevelop in non-java, which may mean a lack of experience/training/knowledge on the part of other developers on your team.
Performace & startup time. You just can't compare Swing to Winforms/WPF in the performace/startup time aspect.
Really don't know... if you have a high qualified Java team that does not know .Net APIs, stick to Swing, otherwise, don't think twice... Use Winforms. About "the ability to share more code across server and client due to being the same language", don't bother... there is zillions of ways to make two different applications from different languages that each other.
The performance of the GUI should be faster with a .NET winform app compared to a Swing app running on Windows. It's not really a huge difference at this point for most apps though, computers these days can run Java pretty fast.
Either way you would still be talking to the Java backend code. Depending on what they've done you may be better off just sticking with the Swing front end.
If it's an option you should think about a web front end. If it can be made in XHTML/Javascript/CSS, you would retain the cross platform benefits that the Java GUI gives you.
But really, you need to think about why you want to change to Winforms instead of Java. Is there something about the existing Java app that you don't like that would be better and worth the cost of redeveloping in another language? Is it something that can be fixed without a full rewrite?
Do you have any custom components which would be a pain to migrate from Swing to .net? Do you have staff that are expert at developing custom Swing components (Java2D expertise, familiarity with Swings input subsystem etc.) who know little about WinForm custom development?
If the answer either to these questions is yes then you should probably stick with Swing.
1) It is easier to make a Winforms app feel like a Windows app. Java applications usually feel "funny" if you aren't careful.
2) Everything you are programming is using Java. Having one component that is not Java means that the project is harder to work with. Overall maintenance will also be more annoying. Currently, everyone on your project team needs to know Java only in order to be able to work with anyone else on your project team. From a recruiting and maintainability perspective, this is convenient. Personally, I be against switching the GUI unless you were getting some other benefit out of it.
You have not provided any reasons why you plan to make your proposal.
If using windows .net is the better choice because yo have:
1. Good designer in Visual studio, good documentation and examples
2. Better startup, CPU and memory usage at runtime: see http://www.codeproject.com/KB/dotnet/RuntimePerformance.aspx
If using Linux, you have Mono versus Java, but it is more complicated to make a comparison there due to the large number of distros.
The big advantage are free libraries you can use in java.Most of the nosql systems are written in java , the best of all Neo4j (only java will give you ability to run these products embedded). This is something dot net can't do, and these will give your applications ability no winforms, wpf can have.

Categories

Resources