I am a huge linux fan and have been ignoring .net, C#, and visual basic due to their relationship with Microsoft. Am I foredooming them just for their relationship?
Is there any advantage to learning them, when you are mainly a linux user?
Software Engineering Stack Exchange is a question and answer site for professionals, academics, and students working within the systems development life cycle. It only takes a minute to sign up.Sign up to join this community
They are fully deployable to Linux environments using the Mono framework which is not controlled by Microsoft. I'd say ignoring them because you like Linux would be a mistake. If you don't like the languages for other reasons like syntax or memory overhead or whatever, then fine but I'd not write them off because they are based on work done at Microsoft and partially supported by Microsoft.
As far as advantages to use, they have a rich ecosystem behind them even through Mono so it all just depends on what you want to do. I mean if all you do is web apps then RoR or PoD would probably suit you fine. If you want to dabble with an enterprise level language that lets you use functional programming and let's you combine freely with an even more functional language that integrates fully with it then Mono becomes an interesting alternative to the JVM or doing a C++ hydra. .NET and Mono were designed to use the Common Language Interface which was designed from the beginning with language inter-operation in mind. The JVM might have an edge in terms of running all over the place (even Smart Cards) but it's interoperability has been less "designed-in". Mostly it's going to be a matter of taste or enforced use.
Yes. Learn them.
Languages are to programmers as hammers are to carpenters.
The overwhelming majority of my professional experience has been LAMP dev, yet my degree focuses on VB.NET - half because I figured if I'm paying for it anyway, I might as well learn something new, and half because the alternative was Java. ;)
Learning these languages for me was like learning to run backwards. It changed the way I conceptualize programmatic problems (and programmatic solutions): context, abstraction, patterns. At the very least, skills (even ones you rarely use) always confer the value of experience gained from adding them.
There are a few reasons you may want to learn .NET:
C# is a great language.
C# is actively maintained. More actively than Java. It has some pretty features, which help a lot to be productive.
There are other languages which you may learn by curiosity, like F#.
There are also frameworks (Windows Workflow for example) or external libraries (Reactive Extensions for example) which have interesting approaches. If you're curious, just see what are they about and try to extract from them something you can use in your more familiar environment, programming languages, etc.
but also a few reasons to not learning it in your case:
There are already languages heavily used by Linux developers. The issues with those languages are known, documented and probably solved. Even with Mono, .NET languages are not very used on Linux platform, so be ready to encounter soon or later problems nobody else encountered before (or encountered, but never solved or documented).
If you're searching for a job as a PHP LAMP developer for example, I'm pretty sure the companies would simply ignore your experience in C#. It's one of the most stupid things to do when hiring a developer, but, alas, one of the most frequent as well.
I suppose you will not use Windows. This means that you will not use Visual Studio. Using the latest and the greatest version of Visual Studio is a large advantage: not only you are using a very well done IDE, but you also have an easy access to a huge amount of tools which make you more productive: code contracts, static code analysis, code metrics, etc. Missing all this makes C# a bit more "just another programming language".
I suppose there are slight differences between C# code running on Windows and a similar code running on Mono. If so, practically every piece of code available on the internet is targeting Windows, so it will hurt your productivity to constantly find that the code you find don't work on your machine.
Having a familiarity with C# can't hurt you. Exposure with other technologies will allow you to make better decisions in the future about what you are good at and what tool is best suited for the job. If you decide they are not for you, that is fine if you are making an educated decision.
As an aside, if you know Java, then you will have a good feel for the basics of C#. Though, there are things that have been added in .Net 3.0/4.0 that will be different like LINQ and lambda expression that set it apart.
If you prefer Linux to Microsoft, then getting into .Net isn't really a good idea. .Net is fundamentally tied to Microsoft.
C# is a nice enough language and it's true that you can use Mono on Linux. However it's not exactly a comfortable place to be - Mono isn't 100% compatible with Microsoft .Net and probably never will be. This is because of patent threats, various Windows-specific features and the fact that even if C# itself is standardised by ECMA, most of the rest of the .Net platform isn't. Furthermore the Mono ecosystem on it's own is small compared to other open source languages.
I think you'd be much better of looking at the new JVM languages (Scala, Clojure, JRuby, Groovy are probably the most promising). Reasons:
vb.net is on the way out:
Bob Tabor: "While I began with VB, I haven't seen a lot of docs / videos / articles / books using VB for Win8 or other recent technologies. Increasingly, it feels to me personally like C# would be a good investment."
C# is the way to go. But you can always use mono for c# on Linux.