I want to learn C# because... It seems to be a pretty marketable language these days. More than C, not so much as PHP/MySQL in my area, but I'd rather be a software developer than a web developer. Anyways, I'm running linux, and I have no hope of working on a windows platform until I buy a new computer. So, are there any drawbacks to learning C# under linux? If so, are there any good lessons online for doing such a thing? Any good tutorials online for learning C# in general?
update
so what I'm getting is that the main drawback is that although the full C# language spec is implemented in mono, the full .Net framework isn't. But, until I can get a new system and run windows, I guess lacking the full framework will have to do.
The language spec is fully implemented but the framework itself is not. So learning C# the language will be no different (ignoring the benefits of using visual studio as your IDE). Writing against the framework will be a bit different.
edit> It also depends on what kind of programming you intend to do. Much of the parts of mono that aren't complete are also often edge cases for beginners that you aren't likely to run into. So if you're just learning C#, there's a very good chance that you won't come across the parts of the framework that haven't been implemented yet (and I mean yet, they are very fast at updating mono from what I've seen so far, so by the time you're ready to really explore the framework and all that it entails, there's a good chance that it might be completed by then)
learning C# on linux may actually be good, when you start doing it on windows, you will know both. The IDE will not be as modern, but I'll bet there are not many people that can do it on both.
You'll be able to concentrate on the actual C# language and you can learn the microsoft IDE when you get to use C# on windows.
The major drawbacks that I see are:
The latest .NET versions are not supported
Different tools between Mono and Visual Studio
In spite of that, I think you can learn a lot about C# on Mono.
Any good tutorials online for learning C# in general?
Here's a tutorial I wrote:
http://www.csharp-station.com/Tutorial.aspx
Feedback has indicated that all of the code in the tutorial runs fine on Mono.
Joe
Learning the language should not hurt, I would not depend on it to land you a job. However, keep in mind that many of the runtime services that are accessed via C# may not be available. Knowledge of those services is perhaps just as, if not more, important the language itself.
The main problem with C# on Linux is that your development system will not be as good, in most people's estimation. But you may get really good at vi(1)...
On MonoDevelop you won't have all the newest features of the .NET framework, it's somewhere between 2.0 and 3.5.
It supports C#3.0 though.
Mono is gaining traction very, very quickly. I've heard rumblings that MS is silently supporting Mono (see their approach with getting SL to run on Linux). In some cases, mono actually outperforms .net on a windows based server.
The downside would be the IDE and features, as many have already mentioned. Visual Studio is by far the best IDE out there.
It does support Asp.Net MVC IIRC though.
Mono overcomes the single biggest drawback to using .NET from Microsoft for many developers, the requirement to run on the Windows platform. By bringing the shared source release of the .NET Framework to multiple platforms and then building an open source project around extending it, The Mono Project has made the strengths of .NET available to a wide range of developers. The ability to develop using a variety of languages, all using a common interface and deployable on a number of platforms is a very compelling development strategy.
As far as the web services aspects of Mono are concerned, nearly all of the Framework is complete meaning a developer can begin developing web services today using Mono. Mono features nearly complete implementations of ASP.NET, ADO.NET and Web Forms, along with almost all of the SYSTEM namespace. For more a detailed visit mono's official site,mono-project.com check out these articles on Cool Solutions for Developers:
Well there is nothing wrong if we learn something & probably we might end up improving it which will be more useful to the future users.Probably that is the power of open source.I think all developers will agree to this point :)
Related
Coming from a Microsoft development backgroup I am a bit confused as to what development languages/environments are available on an Mac. Are there any C# like languages to develop with on the Mac other than Java that I should also consider? What do MS to OSX converts prefer and why? I am after a business level programming strategy and not gaming or graphics so application performance is not the overall driver for my choice of platform.
Objective-C with the Cocoa API is the way to go. Once you have those down, there's also bridges between Ruby and Python to the Cocoa API. I'd highly recommend initially learning the Cocoa API with Objective-C first, though.
I also just bought a Mac and come from a .NET development background. I tried a bunch of different languages and environments. If you're going to write OS X desktop software, you're going to need to use Cocoa and Interface Builder. IB doesn't have a Windows counterpart because it's so heavily tied into Cocoa. This means you're going to need to learn Cocoa simultaneously, and it's not easy to do by looking at code.
Objective-C is the native language of the Mac and it's not as refined as C#. It takes a while before you can read it fluently because calling functions looks different. Using Python or Ruby instead of Objective-C only adds a layer of complexity until you learn Cocoa, but it seems quite viable after that. C# via Mono works fine, but I don't think the whole Cocoa# bridge is implemented. The C# tools are a lot lower quality than Visual Studio, and MonoDevelop is extremely ugly on the Mac. I decided that if I want to go this route then I need to learn Objective-C, but went a different direction.
If you're writing a web site then you have a lot more flexibility. The entire Python and Ruby cultures are available, although there are some hiccups with installing some Python libraries. This is the route I took because I had some basic Python experience and the skills are almost 100% compatible with Linux. iTerm is a better client than Terminal. I didn't like most of the code editors I tried, and started with Smultron which isn't much more than a very competent text editor with syntax highlighting. There are definitely tons of options.
No matter how you approach it, you're going to spend a lot of time learning. I have constantly stumbled over Python syntax but I'm finally getting good at it. The SQLAlchemy (Python ORM) docs almost always have an open browser window. I also bit the bullet and started using Vim (MacVim specifically), which is actually a fun thing to learn because there always seems to be another command that does exactly what you want. (For example, I got tired of going to a line, hitting $ to go to the end, hitting a to append, then hit enter to start a new line so I Googled and found out I can just hit o.)
Have a look at the Mono project
Quote from wikipedia
Mono is a project led by Novell (formerly by Ximian) to create an Ecma standard compliant, .NET-compatible set of tools, including among others a C# compiler and a Common Language Runtime. Mono can be run on Linux, BSD, UNIX, Mac OS X, Solaris and Windows operating systems.
But I really recommend go the Cocoa route and get Aaron Hillegass book "Cocoa Programming for Mac OS X"
Objective-C, C, C++, Java, Ruby, Python, Php, ... There are lots of choices of languages/development environments to use, including C# via Mono as #epatel says. I would say that the choice of language depends more on what you are developing than on what platform you are coming from.
Objective-C and Cocoa is the way to go for sure. Quite often devs will make the misconception that Objective-c isn't "as detailed", or "as fine tuned". But I can assure you, it's the power house behind some of the best apps in the business. There is a noticeable learning curve.
On a related note,
Silverlight is a web-based "flash-like" technology supported on Windows and Mac and you can code in most .net languages.
C# is available for OS X, as long as you're willing to use Mono. For non-UI and web stuff it ought to work just fine.
For desktop app development, I use REALbasic. It's syntax and object model are very similar to Visual Basic.
For business-level programming, I'm not sure if Cocoa/Objective-C will be the most productive thing to start with; it's quite different than .NET and/or Java.
I would forget mono, it doesn't work very well. Slow, buggy and system.drawing/forms don't work properly when you distribute.
With c# I would go with monomac. You access all the mac apis but in c#. It's like a half way house. Instead of Forms you use NSWindow and instead of controls you use NSView. Instead of drawing you use graphics context. The downside is the documentation is a bit thin and it costs.
I love programming with .NET, especially C# 3.0, .NET 3.5 and WPF. But what I especially like is that with Mono .NET is really platform-independent.
Now I heard about the Olive Project in Mono. I couldn't find some kind of Beta.
Does it already work? Have any of you made any experiences with it?
Edit: I know about Moonlight. But I want a standalone WPF application. And because of Moonlight I hope WPF on Linux will become true.
You'll have better luck working with Moonlight, which targets the Silverlight API, which is a subset of full WPF.
edit: Sure, Silverlight isn't "intended" for the desktop, but there's no reason why you can't embed a silverlight engine in your application. It's been done before, such as for the Mac NY Times Reader
more edit: see Miguel's post on Standalone Silverlight Applications
Update: Since people keep upvoting this, I want to point out it is long since out of date. Mono got acquired by MS years ago, and their posture regarding open-source has changed, so consider this post obsolete. (As obsolete as the WPF framework itself, heh).
Mono is in a bit of an uncomfortable position when it comes to Microsoft APIs such as Winforms and WPF. A subset of the .Net technology is an ECMA standard, but free implementations of these APIs are probably on shakier legal ground. I believe this was a large factor in the covenant between Novell and Microsoft, which is good for Novell customers. But people who use Mono that aren't customers of Novell aren't protected. For this reason a lot of people in the F/OSS community look askance at Mono despite its technical merits.
For this reason, Gtk# will always be preferred, since it is truly Free. Many people consider it to be superior to Winforms anyway. As far as WPF is concerned, it will almost certainly be a low priority for Novell. They may implement it eventually, but I would expect Moonlight to be the closest you could get for the forseeable future.
Since posting this, Microsoft has extended their covenant to anybody who implements the ECMA 334 & 335 standards.
From the mono website
At this point, the Mono project does
not have plans to implement Windows
Presentation Foundation APIs as
part of the project.
Moonlight is an implementation of silverlight, which is a browser based flash like technology based on a subset of WPF.
In my opinion the choice to not implement WPF is monos biggest mistake. As WPF is fast becoming the default choice for new .net user interfaces. See this blog for more.
There is a library called Silverform SDK that aims to provide cross-platform WPF and Silverlight implementation.
The library is implemented in managed code and currently works with OpenTK and Unity3D as render backends. Major functionality, such as binding, layout, main controls and primitives, has already been implemented (check Unity web player demos here). Initially it has been focused on Unity3d render, while support for standalone Mono applications will be added as a separate build in the future.
Disclaimer: I am one of the developers of the library.
If you check Known bugs of this link(also includes steps needed to install .NET onto Ubuntu)or this you may find that some(may be buggy) version of WPF works on Wine as for now. I did not find any definite test done as for now, but worth to try to run WPF "Hello world".
UPDATE2:
I have run latest IlSpy on latest Wine for Ubuntu 16.04. With 32 bit version of dotnet45 and corefonts installed via winetricks with windows 7 compatibility.
For this time no crashes and all things work fine. Fonts look really good.
IlSpy is shown via WPF and for person who loves programming with .NET is essential tool - the decompiler.
I downloaded latest portable SharpDevelop(build using WPF) with no extra. It started. Failed to create WPF project. Created WinForms. After opening some cs files and evidencing some glitches, tried to type - and it crashed.
UPDATE
I followed steps and got latest ILSpy.exe running on Ubuntu 14.4.
Next items to note:
wine stated that dotnet40 is not supported by 64 configuration, changed to 32 bit
fonts are ugly, but readable
basic functional works fine - I can see decompiled code - which is good enough for some development, but View -> Search and View -> Options -> Display crash.
Conclusion:
WPF on Linux is possible. But need some way to tackle issues.
From the Olive home page:
Olive is unsupported, should be
considered as experimental software,
and since it implements a shifting API
there are no guarantees of any kind
about the stability of the API.
I doubt anyone would have used it in a real project.
Yes, it is possible using NoesisGUI a real-time multi-platform XAML implementation. There are a few games already released using this technology in Linux, like VoidExpanse
Disclosure: I am one of the developers of this product.
I heard a podcast interviewing miguel de icaza (the mono lead) maybe a few weeks ago, so that would have been maybe mid-december 2008, and he said that they had no WPF support at all yet.
Theoretically, a stripped version of WPF COULD be compiled against WinPR or LibWine to run on Linux.
Currently there is no such setup, so someone would need to make one. Hopefully this might change soon.
As of running against or in a full Wine environment, I think that is seriously overkill and will result in too much bloat to be worth making a very small number of additional programs work.
What are my options? I tried MonoDevelop over a year ago but it was extremely buggy. Is the latest version a stable development environment?
MonoDevelop 2.0 has been released, it now has a decent GUI Debugger, code completion, Intellisense C# 3.0 support (including linq), and a decent GTK# Visual Designer.
In short, since the 2.0 release I have started using Mono Develop again and am very happy with it so far.
Check out the MonoDevelop website for more info.
Microsoft has released Visual Studio Code for Linux, which has good C# support, naturally.
Monodevelop
There are 2 versions around:
1.0: the currently stable version. It is indeed stable, but somewhat limited in its capabilities. It's very good for smallish projects. I got it via the ubuntu hardy repos.
2.0RC (aka 1.9.x) you can get it via SVN and compiling. The process is quite straightforward, and you can run it without installing (via make run). It's somewhat less stable than 1.0, but it depends on which build you get (it's a development snapshot). Regarding capabilities, it is great. It has refactoring, profiling, tons of plugins, etc.
I would recommend X-develop from Omnicore. It is a very good IDE, but is only free to use for 30 days.
There is a C# binding for Eclipse, though I haven't tried it personally, so I can't vouch for it. I use MonoDevelop, which isn't perfect, but works reasonably well for the most part. The version included in Ubuntu 8.04 (Hardy Heron) is much more stable than the Gutsy Gibbon version.
I've been using JetBrains Rider for quite a while and I quite like it.
It has all the ReSharper goodness and is a joy to use on OS/X or Linux. Beware that it is still in Early Access Program, so it has a few rough edges there and there, but most of the times it works well enough for day-to-day usage.
You can get it here:
https://www.jetbrains.com/rider/download/
P.S. I mostly use it for .NET Core development needs, but have used it for traditional .NET coding as well.
I used MonoDevelop a while ago, and it was fine. It's not anywhere near as good as Eclipse or NetBeans are for Java development, but those are really in a class of their own. And I think the only real alternative is using emacs or vim...
It's fairly polished. Stability really wasn't an issue. Simple code-completion is there, as is jumping to to declaration, super-class and the extremely useful find references. Debugging isn't there, though, which is a fairly glaring omission. I actually spent a couple of minutes trying to set up a breakpoint until it dawned on me that there isn't even a way to "Debug..." instead of "Run..."
Have you looked at SlickEdit? I thought it was pretty good several years ago when I was developing C++ apps on Linux. It says it supports C#, but I cannot comment as to how well. I was happy to use it for my C++ development, though.
Is the latest version stable a stable development environment?
Probably ... it hit 1.0 this past spring.
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 3 years ago.
Improve this question
In looking at the use of C# in a ISV setting, I'm wondering what prominent C# based desktop apps are out there? I can think of only Paint .NET.
Is C# a good idea for an ISV, or should one stick to more native environments like Delphi or even QT?
Of course any experienced based advise or feedback would be appreciated.
Yes, C# can be used quite effectivly to build applications. In regards what applciations are out there, what are you looking for? Big apps, little apps?
I know of a big app that is built on the .NET framework (unsure if C# or VB) and that is Quickbooks.
Developing a Desktop applications in C# is great. Its not just for Web Apps.
WinForms are going to save you huge amounts of time. It really is a first class citizen when it comes to desktop windows development. If interop is a problem you can always use P/Invoke and COM object wrapping that VS does for you.
Done right, it will be a breeze to maintain and update when the client changes their mind on what they want.
Yes, the framework needs to be on the machine, But this shouldn't be a problem if they have ever used windows update. Nowadays what language doesn't come with a run time library. In VS you can create simple installers that include the runtime.
Of course if your gonna deploy to Linux and mono, your mileage may very.
PlasticSCM
If you can control the system requirements for your application, C# is fine. Some end users still (even though we're nearly in 2009 now) object to a 40MB runtime for some reason, so if you're looking to deploy an application commercially, that may be an issue for you. In a corporate setting, though, where there is some standardization of software on users' computers, this is probably not a problem.
Delphi and QT specifically are both problems. Delphi is effectively a dead language. Companies that are using it these days are, for the most part, porting their code away from it as fast as they can (job boards seem to be full of Delphi-to-C# migration jobs these days). You may like QT, but that moves almost as slowly as Delphi in the Windows world, so I would never consider it to be a real option.
More:
Business Plan Pro
Rescue Time client
Sony Vegas
Sql Management Studio
VS 2010 (much more so than VS 200x)
NASA's World Wind
BabySmash
Windows Live Writer
Microsoft Office Accounting
Fiddler 2
Windows Mobile Device Center
AdiIRC
Jetbrains dotTrace
Lots of Lenovo utilities
Planbook
These are just the ones installed on my PC...
I think that Microsoft Expression Blend/Studio is written in C#
Anything done for Robotics Studio, any XNA game (quite a few commerical ones are coming out now)
I don't see why you would not use C# as an ISV. The problem is ensuring that your target market has the .NET framework. If you are using 3.5, you can build a mini version into your distribution though this increases the file sizes for downloads of course.
Some supplemental information to think about:
One of the typical points against doing desktop applications the distribution model is a lot more difficult to manage. With web apps, if you have a large user base, you can do an update and instantly have your entire user base running on the latest version.
With traditional desktop apps, you'd have to send out an .msi or build something yourself.
However, with ClickOnce and the Updater Application Block (http://msdn.microsoft.com/en-us/library/ms978574.aspx), it's so easy to build intelligent updating into your application that it might play very nicely into an ISV plan.
Even though VS 2008/WPF is shrinking the gap, it's typically much faster to develop client applications in the WinForms space that on the web, so I think it's a very viable approach.
I believe TimeSnapper is written in C#
I have worked for an ISV before that used Delphi and it was excellent for their needs. It still produces great native applications and although dieing it is certainly not dead (yet). Until recently I would have recommened Delphi over c# for desktop applications as I had performance and footprint consderations but as .net can now be considered ubiquitous and that the platform is now maturing my opinoin would probably go with c# (over Delphi).
If you need to consider employees, you will find that there are fewer Delphi developers around that c# ones. So you may struggle to entice good devleopers in as you are using that.
That said Delphi is looking exciting again with the Delphi prism VS plugin.
Just as an aside did you know that the c# compiler is written in c++? Delphi was written in Delphi from v1.0
Windows Media Centre is powered by .NET.
I believe that MS use C# to build many of their apps both Windows and Web. At this time, C# is a great language to go with because of the flexibility of the language/framework.
The zune software (v2 and up) is written in c#. Oh, and Sage Timberline Office is written in .net (mostly).
Although it's a developer tool, the excellent open source IDE SharpDevelop was built in C#. I've also worked on another which (despite being semi-commercially-available) I'm not at liberty to divulge. (Very vertical market.)
I'm a huge fan of the C#/WinForms combination, and can't see why you wouldn't go that route if your developers are already familiar with C# and you want to get into the desktop space.
A very prominent example for a commercialy successful application would be Microsoft Visual Studio 2005 itself.
If you are looking into building a client or server application for the Windows ecosystem .Net with C# is an absolut valid choice. You'll get a very rich framework, a great third-party-app ecosystem and a huge community.
If you need a minimal memory footprint for your application or are very hardware centric then C++ maybe an option.
If you want to target the UNIX/LINUX or Apple platforms you should be looking in frameworks more native for the respective platform, though you can get a certain degree of interoperability with the Mono project (But I am not up to date on how complete their implementation of .Net currently is).
I believe the matrox graphics card configuration utilities are using the .net-framework.
I'm still just a student, but for what it's worth (and from other answers preceding mine), there seem to be quite a few apps in C#.
I'd advise working through the book Head First C# (Amazon link). This book will give you a pretty solid idea of what you can do with the language.
=-MDP-=
Creative Docs .NET is a very nice example of C# application.
Microsoft's World Wide Telescope software is written in c#
Who are your target users? Their needs will dictate your choice of language. C# and VB.NET are good general purpose langs, but if you are targeting Mac or *nix, you may want something like C++.
If you're looking for a way to get started quickly, I recently published DesktopBootstrap, which is my attempt to factor out the elements you'll need to get started.
Hope that helps!
I have an app that I've written in C#/WinForms (my little app). To make it cross-platform, I'm thinking of redoing it in Adobe AIR. Are there any arguments in favor of WinForms as a cross-platform app? Is there a cross-platform future for Winforms (e.g., Mono, etc.)? Suggestions for cross-platform UI development?
By cross-platform I mean, currently, Mac OSX, Windows and Linux.
This question was asked again and answered with better success.
As far as my experience in Flex/AIR/Flash actionscripting goes, Adobe AIR development environment and coding/debugging toolsets are far inferior to the Visual Studio and .NET SDK as of the moment. The UI toolsets are superior though.
But as you already have a working C# code, porting it to ActionScript might requires a redesign due to ActionScript having a different way of thinking/programming, they use different primitive data types, for example, they use just a Number instead of int float double etc. and the debugging tools are quiet lacking compared to VS IMO.
And I heard that Mono's GtkSharp is quiet a decent platform.
But if you don't mind the coding/debugging tooling problems, then AIR is a great platform. I like how Adobe integrates the Flash experience into it e.g. you can start an installation of AIR application via a button click in a flash movieclip, that kind of integration.
I'm thinking of redoing it in Adobe AIR
Not having spent much time with AIR, my personal opinion is that it is best for bringing a webapp to the desktop and provide a shell to it or run your existing flash/flex project on the desktop.
Btw, if you don't know ActionScript, I mean its details, quirks, etc, don't forget to factor in the time it will take googling for answers.
Are there any arguments in favor of WinForms as a cross-platform app?
Is there a cross-platform future for Winforms (e.g., Mono, etc.)?
It's always hard to predict what will happen, but there is at least one project (Plastic SCM) I know of which uses Mono Winforms on Win, Mac and Linux, so it is certainly doable. However, they say they built most of their controls from the ground up (and claim they want to release them as open source, but not sure if or when), so you will need to put in some work to make things look "pretty".
I played with Winforms on non-windows platforms and unfortunately, it isn't exactly "mature" (especially on Mac). So what you get out of the box may or may not be sufficient for your needs.
If you decide a desktop app is not the best way to provide a cross-platform solution, you can always take your business logic written in C# and create either a full-blown webapp with ASP.NET or go with Silverlight, so many other options exist with C#.
WinForms are fully supported by Mono, so they are cross-platform.
Why would you go with Air?
Use GTK#, and you have a cross platform forms engine and you get to keep your C# code.
Well I think the only way to for cross-platform reliably with C# is Microsoft Silverlight, but is not really WinForms, and browser-based. Other than that, yes Mono is a chance.
If you want to use the .net Framework, Microsoft Silverlight is a good (the only?) choice. The browser does a good job as a shell, but you could also write your own application shell for it. For example, Scott Handelman mentions the NY Times Reader written in Silverlight and hostet on Cocoa on a Mac.
I don't think there is a future for WinForms at all. Since it appears to have been a stop-gap solution even in MSFT world ( a very thin wrapper around Win32). And virtually no changes seem to have been made to System.Windows.Forms in both .NET 3.0 and 3.5
</speculation>
I would use Java or Air.
I think that as long as you make sure that the business logic code you write is cross-platform (i.e. using backslashes in paths only works on Windows - forward slashes works on all OS's), then Mono shouldn't have major problems running an unmodified WinForms program. Just make sure you test for graphical glitches.
I asked a similar question last week. I've been using Mono all along, and have had no issues running the applications I compile to IL to run on SuSE linux (I usually run KDE) or windows, however, I've not gone out and got a mac yet to test it on. I will be soon, though, probably with in a couple weeks. But all and all development in Mono has been very good at creating application that will run on multiple platforms.