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?

  • 5
    Hi Rick, this question is pretty broad: do you have a specific project or problem you're working on that has you thinking about using .NET?
    – user8
    Nov 5, 2011 at 4:49
  • 3
    I would pretend like VB does not exist... treat it like the leper it is. C# is great though. Nov 7, 2011 at 15:10
  • 1
    @Chad: (Just to clarify: by "yes I have" I assume you're referring to VB.NET, not VB6.) The only kind of "whitespace" that matters in VB is a newline. No other whitespace matters in any way. Is it just the lack of semicolons that bothers you, though, or is there something bigger that bothers you? Because Python, Ruby, shell scripts, Javascript, etc. are even more sensitive to this than VB...
    – user541686
    Feb 23, 2012 at 20:14
  • 2
    @Chad: Ok... I was hoping you would give more examples of what you don't like about it, though if you don't want to then never mind.
    – user541686
    Feb 23, 2012 at 20:22
  • 1
    So let me get this straight. You won't use them because it's a Microsoft product? My primary language is C#. I have dabbled with Objective-C, C,F#, VB.NET, PHP, Ruby and if I had to do it allover again I would still primary use C#. Am I an MS fan boy? Nope. I have an iphone and a macbook pro that I develop on. Chrome is the best browser, VS is the best IDE, and apple seems to make the best and most aesthetically pleasing to look at hardware. So there's my diversely biased opinion. May 8, 2013 at 22:57

6 Answers 6


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.

  • Besides that MONO will run on your familiar linux environment, Xamarin offers MONO for Android and iPhone as well, making it one of the few languages that run on all major mobile platforms. Definitely worth learning. Feb 23, 2012 at 12:33
  • You can also use C# do develop Android apps without Mono: www.dot42.com
    – Den
    May 9, 2013 at 11:50

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.

HTH :)


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.

  • 3
    +1 for the second-to-last point: C# without VS is very different from C# with VS.
    – user541686
    Feb 23, 2012 at 18:12

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:

  • They all benefit from running on the JVM, which is an awesome platform (whatever you think about Java itself...)
  • They are all open source, properly cross-platform and a great fit for Linux
  • The languages themselves are great and IMHO better than the .Net equivalents (Scala > C# for OOP, Clojure > F# for FP, JRuby+Rails > ASP.NET)
  • They can benefit from using all the tool and libraries in the massive Java ecosystem, which is again mostly based on open source.
  • not to mention, if you learn Java, you'll also get the opportunity to become an expert in security patching and zero-day exploits :-)
    – gbjbaanb
    May 9, 2013 at 12:34

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.

Not the answer you're looking for? Browse other questions tagged or ask your own question.