My take on the Mono/C# debate

As you might have understood if you’re reading me, if you’re easily offendable on this matter, you’d better skip this post.

So, i figured out I should shout out something. Because I am always interested in hearing skilled, readable, balanced and well-made opinions from people such as Richard or Adrian, but I’m fucking tired of hearing random people screaming out why mono is cool or not. These kind of people don’t even know what coding is about, or they just learned Java or C# at university and they’re like “oh shit, I can code!!”. STOP THAT.

This is a technical, and ethical problem that regards DEVELOPERS. Users will end up having choice. All you pro/anti-mono fanboys, what is difficult in installing or removing mono, being it provided by default or not? No matter what your position is.

After this small rant, hoping to have made some things clearer, let’s move forward.

I’d like to skip the ethics/politics part for a variety of reasons. First of all, I’m all for things that work, if they’re free, much better. That’s why I’m using closed nVidia drivers, because they work better. Secondly, everyone has freedom of choice. And this also means freedom on choosing where to be free. And I hope some false freedom advocates will revise their concept of freedoms. One should be free of being not free as well. And more than that, this is not my field, so I’ll just leave the word to someone knowledgeable (following what I said before)

That said.

I am still asking myself why on earth people should need Mono, .NET, C# or similar stuff. I am starting to think that while more and more people are starting to code, the overall coding skills are getting lower and lower. Maybe it’s just me being too strict in using almost always C/C++, but I remain extremely confident in the fact that if you don’t know how/don’t want to manage memory, you should be doing something else. I’m not saying that using python, ruby or similar stuff is bad: I do it as well, and enjoy doing it. I think being capable of using JUST python, ruby or similar stuff is bad. Also for broadening your mind and knowledge. Just my opinion anyway.

Before you start yelling at me: yes I used C#, and some friends such as Java (similarity is almost ridicolous). I wrote about that as well. There were some things I liked, but a majority of things I disliked.

Now, comparing what Java/C# has to offer (just to demonstrate that I’m not blindly bashing C# only, that I also like better than Java) with Qt, there should be a single question.

Why on earth someone should choose C# over Qt/C++?

I don’t know, really. Maybe introspection, it’s much better. Maybe serialization, it really works out. Maybe something else. But when i talk about something that should be the backbone of your program, such as event loops, threading, events, and whatever, Qt/C++ puts C#+Forms/WPF/etc to shame. Please come up with some technical reasons why C# is better. And don’t start with compilation: I don’t think it’s so relevant for a deployment.

I don’t want to spend more time talking about this: you can verify what I’m telling you is true by looking at the percentage of KDE code written in languages different from C++. And we have some great bindings.

So, what’s the conclusion? Why people can still code fast, efficiently and easily with an “old” language like C++? Probably because the toolkit/framework integrates extremely well and extends the language to fit everyone’s need. That’s what Qt does.

So this is the point, on which you are free to flame me until death: the problem is GTK. Consider the amount of programs recently written in GTK. A huge percentage of them is in Python or Mono. Let’s be clear: I don’t have anything against bindings. But try stopping your flaming ego and follow me a bit more.

We have PyQt and Qyoto. Yet they are not so widespread and planetkde is filled with new C++/Qt apps. So where is the problem? Probably people are no longer comfortable in programming with GTK/C. I did it a while ago, and it was quite a pain to me actually, and it made me want to look into python, damn my laziness. I think that this is the kind of route a lot of people take nowadays.

Now you’re expecting a sort of GTK/GNOME flaming here, right? Well, bad for you. This was not meant to be a flame, just an introspection to understand the reason why mono existed (see the introduction). And my take is that mono is just a way to “modernize” something that is NOT obsolete (and I repeat: NOT obsolete), but simply no longer fitting the 2009 attitude of “oh shit I need to create a program in 3 lines of code!!!”. To demonstrate that I’m actually not attacking GNOME and/or GTK, I’ll give you Microsoft.

If you think about it, the iter that Microsoft followed for getting more developers is not that different from the one GTK took. So, what’s the conclusion?

Mono is not the panacea. Mono is a great way of developing easily, without spending that much time. But some skilled GNOME developers already showed the world (*cough*GNote*cough*) how Mono is NOT saving time to someone who is skilled and knows how to do things the right way. To me, GNote is not a symbol of freedom, but a symbol of the fact that people can still use GTK with success with C or C++ (and by this point I hope you realized that this is not a war against GTK, more some constructive criticysm).

So, Mono is nice to have, but not required to have, and not necessary to have. And I don’t see (today) a reason why a developer should choose C#/.NET/Mono over Qt or some other great frameworks out there. And I still think it is a nicer bridge FROM Linux TO Windows, and not the other way round. You should be blind if you can’t see it, or you’ve been simply hiding in your house without looking for a job those days. People need to make money, dude.

Last line, I bored you enough: my solution to the debate is not boycotting, insulting or anything: is having easier, crossplatform toolkits, and more skilled developers.

And now come on, the flaming box is just some pixels away from you!

~ by Dario on 1 July, 2009.

68 Responses to “My take on the Mono/C# debate”

  1. good point

  2. No. I won’t “flame you”.

    You are way to arrogant for that and there’s no relevant info in your post. If you for a split second believe that OpenSource survives without users….

    Don’t present yourself as a victim – it’s insulting.

    IF you want to move opinions: Produce arguments that are relevant, valid and makes sense. No such thing here. At all.

    As far as Mono and C# concerned I’ve made my choice and I’ll stick to it.

  3. Jacob: read the post first. Then try again.

  4. “We have PyQt and Qyoto. Yet they are not so widespread and planetkde is filled with new C++/Qt apps”

    An explanation may lie in the fact that the bindings evolve rather fast and there are few people writing the documentation.

  5. @Luca: nice point. Although, there is not such a great demand for them, and most developers are not looking for an easier programming language. That was my main point, sorry if I explained it badly. And anyway I used PyQt already 😀

  6. I’m with Dario here, good post, bad language 🙂

  7. C# exists for a reason, you can’t say that C# is for n00bs and C++ is for expertz, that would certainly not be true.

    I’s not the memory management, it’s probably C++’s deficiencies, there are a lot of non-memory-management problems in the language that can make a sane developer not want to code in it(I’m gonna get flamed to hell for saying this).

    Which brings us to C, well to make it simple and clear: C is not a language for GUI development, it’s procedural(there I go, I said it), yeah you can emulate OOP in it, but then why bother with it? So repeat after me: C is not for GUI, C is for kernel, device drivers and PIC’s, but it’s not for GUI development.

    Mono is not the problem, ignorance is, if someone can make a good program in C#, then why not let him do it? In the free software world the better wins anyway, right?

  8. I am a .Net developer who tried Qt… when it comes to tools…

    Visual Studio > Qt Creator

    When it comes to the frameworks…
    MonoDevelop at least tries to duplicate some of the goodness of the .Net toolchain. It’s not about languages or memory management either. I Enjoy C++ more than VB .Net and C# from a technical point of view, and in many ways Qt is superior to .Net.

    But when I tried Qt I couldn’t connect to a database. WTF is with that? I had to compile drivers… fine… but then the compilation failed consistently. Serious frameworks need to connect to popular databases from the get go. PHP does. .Net does. Delphi does. Qt does not. Why?

    Qt suffers from acceptance in line of business applications, because it’s not geared for those. I can whip up a data driven program in Visual Studio(and I’m assuming Monodevelop) in a matter of minutes. Qt Doesn’t do this.

    Corporate code slaves like myself don’t have time to spend 5 hours to set up our environment to work with a db.

    Also note that there are lots and lots of .Net jobs, more so than Qt. Like you said: people need to make money. They are excluded from open source because they cant come home and write an application in the languages they know.

    I like Qt. In fact I think it’s great, but it’s not the be all and end all of frameworks. Qt is not the panacea.

    • WTF! Qt!= .Net
      They have totally different purposes.

      And Mono <<<<<<< .Net (the whole stack)

      • They essentially do the same things:
        – GUI/Widgets/Forms
        – Database connectivity and abstraction
        – Threading
        – Other various things like sockets and settings management

        Qt is a framework for C++
        .Net is a framework for Many languages

        I realise mono is nowhere near the entire .Net stack, but the goal of mono is essentially to be on par with .Net.

        I realise that .Net is more similar to Java in many respects, but the fact is when you are writing a desktop application you might very well be able to choose between the two for the same application, and that makes them comparable.

  9. Agree 100%.
    Code using C++/Qt has a really clean syntax, is easily readable and easy to use.

    And for f*** sake, stop using scripted languages to create system processes. I don’t mind Eclipse takin’ 200mb, but I do mind a couple of python process that takes 20mb of ram each just to make sure my packages are updated…

    And besides what Gnome/Mono has to show? An under featured photo app and a simple note taking app.

  10. @AIM: Sure, the best wins. In my opinion, C# is not the best. And I didn’t say that C# is for noobs, I hoped I clarified that in the first lines. And yes, C++ has its problems as well, what doesn’t have them?

    @Tjaart: Well, I agree almost completely with you. And I think as well Qt is not the ultimate solution, otherwise everyone would be using this. But you know what? There are not 10000 prophets spreading “Oh Qt is the best thing since the wheel we all should be using it”. So people don’t feel the urge in writing it. And that’s also the reason why I wrote this post.

  11. Could you please explain to us what kind of middleware, enterprise grade applications would you write in C++/Qt? All languages have their niche: C is good for kernels, C++ is great on the desktop, Java/C# are great for the backoffice, Erlang is great for stuff that runs forever etc. The intensity of flamming each other on the tools we use should always be a function of the application domain.

  12. @yeah_me: The debate is not global over Qt/C#/.NET (even though I’d choose Qt in almost every field, but that’s just my own, questionable, preference) but more relevant to Mono and the various discussion happening those days. And your comment is actually agreeing with what I said in the post 🙂

  13. C++/Qt is different from C++ as such. C++ gives you more options but sometimes minimalism helps to get a job done. C++/Qt is a self-restricted world of programming where the Qt world tries to eliminate the risks there are, with an extremely well designed toolkit. But let’s face it, C++ is ugly and enables you to code ugly and dangerous. You have to keep order or things will mess up.

    C++ programmers are like construction workers, if you wear a helmet you are not a real man.

    c# enables you do things fast and reliable. In the desktop world there is little you can’t do with c# better and more robust. If you need less skills to code a result and there are less options to mess things up, that is a huge advantage, a productivity gain. With managed code you don’t have a problem with memory leaks and no, it is just because c was not designed for oop, cmp. it with smalltalk. Of course some programmers may find it useful to waste their time to care about memory but always mind Murphy’s law. What can go wrong will go wrong.

    Now mono: great software but what I find despicable are the attempts to make Gnome dependent on Mono through beagle, tomboy, gnome do, banshee, all of which applications you can as well code in other languages. Fedora ported tomboy to gnote, Ubuntu uses tracker instead of beagle and so forth.

    You know if I can code with X an application and require less skill k and time t than you with language Y and skills j and time s and my application X is more robust than Y who cares about whether you can impress your programmer peers with mastering a more “difficult” path. X better Y, j > k, s > t.

  14. Well, you are more or less saying that mono is a gnome/gtk problem. It definatly is.
    I absolutely agree that c++ is the way to go, but that’s not the debate. The problem is that mono is a fundamental part of the standard gnome desktop and as such a lot of coding is invested in mono-based projects. The more mono-programs get developed for gnome and the more distributions include gnome, the more developers might think writing programs in C# is a good idea and the whole gnome-experience will get dependend on mono.
    Now, what if microsoft really finds a way to shut down mono? At the moment, that wouldn’t be a huge problem. Banshee can be replaced instantly by any other jukebox for gnome. Tomboy also has some alternatives.
    Still, this seems like the right moment to discuss if we really want mono at all. The whole debate is causing more damage then mono itself, so you have take the effect to the community into consideration. If the gnome lead would simply say they want to get rid of mono in the standard-desktop, the debate might finally end. mono-evangelists would still write mono apps for gnome or not, but nobody would care any more.
    As an Xfce-user that builds almost all programs from source, I must say that most gnome-programs are dependency monsters and every new language used for gnome-programs makes the situation worse. When I install 3 different gtk-media-players for gtk, I will have 3 dependencies for the same jobs. As currently every media-player has at least one major flaw, that’s annoying and that’s a point, where user-experience should be taken into consideration.

  15. @Karsten: Agreed for C++. In fact I always referred to C++/Qt. And it’s not being “cooler” for choosing something more difficult. The point is that I don’t think Qt/C++ is more difficult to a programmer which can bear the name than C#. Especially in the desktop field in which GNOME and KDE wander.

  16. @lord bla: Thanks, this is one of the first sensible, technical and user-centered discussions I hear. And you caught the hidden problem with bindings

  17. Great post!

    I’m a programmer, former college teacher, guiding students in Pascal, C++ and Java.

    Every programming language/runtime has it’s place but I’m not sure C#/Mono or Java are suitable as languages for the Gnome or KDE platforms proper. They may have their place for in-house application development like VB had in the 90s but for the Desktop Environment – I think not.

    Let’s look at some applications in the Windows world shall we.

    Firefox: C++
    MS Office: C/C++ and I’m told there is some assembly in Excel.
    Adobe Reader: My bet is on C/C++
    Total Commander: My bet is on C/C++.
    F-Prot antivirus: C/C++ I know, used to work there.
    OpenOffice.org: C++
    etc, etc..

    You get the idea.

    Personally I like Apples Objective-C with NextStep like class libraries for GUI development and I believe Apple uses that for most of it’s GUI applications.

    These are my technical observations. About legal matters – I’m not sure. Not my field.

    Better safe than sorry!

  18. Great post!

    I’m a programmer, former college teacher, guiding students in Pascal, C++ and Java.

    Every programming language/runtime has it’s place but I’m not sure C#/Mono or Java are suitable as languages for the Gnome or KDE platforms proper. They may have their place for in-house application development like VB had in the 90s but for the Desktop Environment – I think not.

    Let’s look at some applications in the Windows world shall we.

    Firefox: C++
    MS Office: C/C++ and I’m told there is some assembly in Excel.
    Adobe Reader: My bet is on C/C++
    Total Commander: My bet is on C/C++.
    F-Prot antivirus: C/C++ I know, used to work there.
    OpenOffice.org: C++
    etc, etc..

    You get the idea.

    Personally I like Apples Objective-C with NextStep like class libraries for GUI development and I believe Apple uses that for most of it’s GUI applications.

    These are my technical observations. About legal matters – I’m not sure. Not my field.

    Better safe than sorry!

  19. I think the users speak because they fear a legal issue, witch would affect probably most of future GNOME applications. I agree that C/GTK+ isn’t the best language for desktop application, and that’s why more and more applications will use C#/mono. If everyone switch to mono, witch is said to be far better than C/GTK+, there won’t be any choice, and many GNOME people feels dangerous depend so heavily from a “dangerous” library, not becouse it isn’t free, but because it could be illegal.

  20. >Total Commander: My bet is on C/C++

    Wrong. TC is written in Delphi

  21. >Wrong. TC is written in Delphi.

    Which has a real compiler. No virtual machine/runtime penalty. It’s nice someone is still using a Pascal compiler.

  22. What about productivity?
    You named memory management, but why on Earth should I manage myself the memory when a garbage collector is able to do the same job well and almost for free?

    On the other hand I agree with you when you say that the libraries really make the difference.

  23. Ok, I agree with the first part of your post, but not completely on the second one (yes, I code for KDE so I write in C++, but I still think that, as a developer, I don’t want to handle the memory myself, and having to do it manually today is a waste of time… IMHO of course 🙂 )

    >Why on earth someone should choose C# over Qt/C++?

    Well, I made a few very little apps in Visual Studio a few months ago, but if the M$ compiler is similar to the Java one, I should choose C#/Java because g++ error messages are mostly incomprehensible (hey, you said that you wanted a developer perspective!)…

    >the flaming box is just some pixels away from you!

    Man, you _really_ need to be part of POuL! 😀

  24. You’re 100% right. I was rather forced on my technical university (I’m studying telecommunications) to use VS/.NET/C# as a programming environment on some classes. I’ve never been satisfied with it, but some of my friends just loved it. When it came to write computer simulation project, initially to be written in C++, almost everybody have chosen C#. To them it’s easier to use VS, or maybe they just don’t have the skills to write good C++ code using standard tools like gcc or gdb. They don’t want to care about the memory management, possibly because it’s to hard for them to understand the basics of good, old-fashioned programming. Like my professor says about those who written their computer simulation in C#: “I don’t understand the trend about writing in ‘c-shit'” 🙂 .

    Also, I’ve had to write a radio channel simulation program. Initially to be written in C# or Java. I’ve chosen C++, Qt and QWT, and my teacher was stunned by the effect. He didn’t even realized that the program was written in C++, before I’ve told him.

  25. Excellent point.
    I couldn’t agree more.

  26. C and C++ don’t have garbage collection. C++ isn’t such a bad language if you use modern, idiomatic C++ techniques (such as smart pointers for heap objects) but learning modern, idiomatic C++ is a huge undertaking. It takes years to become proficient and learn to hack around the sharp edges. I think most programmers won’t bother if they can avoid it. (I basically make a living off my C++ expertise, and if it weren’t for that, I would regret all the time I’ve invested in C++.) Not to mention that using C++ means that almost all the libraries you use will be written in C or in ancient unsafe dialects of C++.

    It’s one thing to regret the aesthetics and runtime penalties of newer languages. It’s another thing to point to C and C++ as practical alternatives. The continuing popularity of those languages in domains they’re poorly suited for, such as GUI programming, (and keep in mind C++ pays my bills) is a tragedy.

  27. I miss one thing from Dario’s post. Where are all those Gtk# apps ?
    I know just an handful, and Mono has been around for 8 years.

    No intention to flame, but I wouldn’t say it’s that diffused.

  28. I work to an FOSS project. Switching from C++ from a real job to C# to this project, was really a relief. The things that I really like are for sure compiling time that can be an issue if your project gets over 100 classes. At this count of classes even the link time may be an issue.

    The other annoying things are: (99% of times) code completion works, and this is happening to work always on external code (because is done with reflection, not by ctags&co that a well crafted macro will break it).

    Also, even sounds a small issue, using for instance SharpDevelop you will have always working UML reverse engineering, refactor tools, auto-suggestion for add using, performance profiler and unit tests perspective. So when you draw a line, is not only two things “nice to have” like compiling time and GC.

    But even they will be the thing that makes the difference, what it means at the end? That persons that use those other techologies prefer lightning fast compiles and to not look for dangle pointers.

    Which is great IMHO.

  29. As long as Mono remains a choice in the GNOME desktop, all will basically be well with the world. If it becomes a requirement, however, GNOME will lose users. Whether this is as it should be or not is irrelevant since no amount of debate on the issue will satisfy both sides. Some genuine reassurance from the GNOME team that it will never come to that would be nice, since ensuring that Mono will always be optional is probably the closest one can get to a resolution.

  30. I removed mono from my Ubuntu system in order not to have any software potentially tainted by M$ patents.

    sudo apt-get remove –purge mono-common libmono0

    With Gnome moving daily closer to Mono/C# lock-in, I made KDE my default desktop. Gnome/gtk apps are hell to port, whereas QT apps all compile nicely on mac and linux.

    If you are installing Ubuntu, I recommend installing the gnome desktop first (unless you are installing a server OS) and then kde-desktop, since so many linux apps depend on gtk*. If that gets you Tomboy and the 50MB of Mono it requires, it’s easy enough to remove, and that action breaks none of gnome. — YET — That may change.

  31. To make things clear: I am a C++ programmer. However I can very clearly see the reasons why to use C#:
    1. Compilation time does matter: I work on a rather largish C++ library with an admittedly crappy build system and a simple code compile test cycle can take up to half an hour which is especially annoying when you discover that you made a typo. Using a modern language like C# or Java that were designed with a compiler friendly grammar in mind pretty much eliminates this issue.
    2. An underlying VM does not necessarily mean slower execution of code. JIT compiling enables the VM to do on-the-fly optimization of the code even during runtime. Together with the fact that these new languages actually do have something like a “sane” specification allowing for the creation of very efficient byte-code due to heavy optimization can make C# or Java run even faster than natively compiled code. In fact the Computer Graphics department at my University is considering to rewrite their realtime raytracer in C# because of the better optimizer.
    3. C++ can drive even experienced programmers insane! There are thousands of ways how to achieve things (which is good!) but you have to know the quirks of every each approach in order choose the right one.
    4. Lets be honest, the C++ STL is crap. I mean: it often eases your life considerably, is reasonably fast and so on. However the interface is simply horrible. You cannot really use the container classes interchangeably and the lack of a proper hashmap implementation is simply ridiculous. I know there are many improvements in the pipeline with C++1x (or should I say C++2x) but how long will it take until all compilers support the new standard completely? And keep in mind that this will add another layer of complexity to the language…
    5. There is no proper IDE for C++ which really eases a developers life. Visual Studio is bloated and overcomplex and Windows only. Eclipse CDT gets more in my way than actually helping me… I am actually looking forward for Qt Creator becoming more mature or the final release of KDevelop. However up till now what serves me best is vim. With C# and Java code completion and analysis just works in any given IDE. I have simple refactoring tools, error highlighting and whatnot on the hand, which is really boosting my productivity.

    So to sum up I can see plenty of advantages in using C#. C++ still has an advantage when working with applications where every byte matters, but you have to be extremely skilled to use it appropriately in these situations. Toolkits like Qt are of course very nice to use, mostly because they hide most of the underlying complexity of C++ and actually force the developer to code “their way” to get the maximum out of them (which is usually not a bad thing). And well, there still has to be some language to write VM’s in 😉

  32. Interesting post. I agree with you about it being a developer problem and I think the potential patent issues (as mentioned by Adriaan previously) are a big enough deal to stay away.

    I do disagree however about C# having few benefits over C++ but, as you mentioned, these apply equally to Java. Managing your own memory is good sometimes but it allows for a whole class of bugs and security exploits (buffer overflows, segmentation faults) that just don’t really happen in any real way in C# or Java. These are big deals when you are writing applications to be delivered to end users and unless you are writing a performance critical application there’s not a huge need in using C++.

    I write this as someone who is paid to write C++ for a living and have been for a few years. I still miss Java though and would use it if the bindings and deployment issues were better.

  33. Thanks everyone for the comments and especially for keeping the discussion constructive and polite. I’ll try and reply to the main points:

    1. I probably got misunderstood about memory. What I wanted to say is not that you should manage your memory in every damned situation, but you should be able to. A way for saying that if you like C#, use it all the way, but do it because you like it, and not because you wouldn’t be able to use a lower-level language.

    2. To Stefano: surely more than Qyoto apps. And they’re maybe not much, but very relevant. Banshee, Gnome-Do, Tomboy… look on planet gnome, a new one gets born very frequently. And you’re right that Mono has been around for years, but it’s right now that it’s becoming used and widespread.

    3. Yes guys, I’m talking about of C++ AND Qt. STL is a major pain in my ass as well, and I would rather use something else. That’s why I use Qt.

  34. You completely miss the point.
    1. Talking about python > Gnome > MyPreferedLanguage is stupid and pointless.
    Learn to respect people preferences.
    2. “Why on earth someone should choose C# over Qt/C++?”, the good question would be “Why on earth someone should choose C# over GTK/C and GTK/C++?” ?

    3. So the main point of your post seems to be :
    my take is that mono is just a way to “modernize” something that is NOT obsolete (and I repeat: NOT obsolete), but simply no longer fitting the 2009 attitude of “oh shit I need to create a program in 3 lines of code!!!”

    NOT obsolete ? Please back this with arguments and otherwise this post is like telling “I prefer apples because they are NOT tomatoes !!!”. This is not constructive.

  35. @shamaz: What about you learning to respect people’s opinion? I think I gave enough arguments before that sentence. And my post was surely more constructive than your comment.

  36. @shamaz: And reading your comment again, looks like you didn’t even understand what I was trying to say, so either improve your english or your reading skills

  37. mmmm. As you suggested I read your post again, and your replies.
    So you think people should use QT/C++ instead of C#/Java.
    To me, it’s not very clear how this can apply to the recent problems concerning Tomboy and other *Gnome* GTK# applications.
    That’s why I said you miss the point.

    Then I think it’s quite surprising that you see GNote as a symbol of freedom. Gnote is a fork, a line to line *port* of Tomboy, and I don’t understand how it proves “Mono is NOT saving time to someone who is skilled and knows how to do things the right way”.

    But ok, I’ll try to respect this opinion… Even when you imply that “coding skills are getting lower and lower” because of languages with managed memory (I won’t say ‘modern’ languages, since this might bother you…)

    Your writing style is maybe in a perfect english, but looks really arrogant. Sorry, maybe I’m too easily offendable, or maybe I should improve my reading skills… Who knows.

    • >So you think people should use QT/C++ instead of C#/Java.
      > To me, it’s not very clear how this can apply to the recent >problems concerning Tomboy and other *Gnome* GTK# applications.
      > That’s why I said you miss the point.

      No: I’m telling that people are using C# because of the bad quality of the base GTK API. I used Qt as a proof of this, as Mono is not that widespread in Qt.

      >Then I think it’s quite surprising that you see GNote as a >symbol of freedom. Gnote is a fork, a line to line *port* of >Tomboy, and I don’t understand how it proves “Mono is NOT saving >time to someone who is skilled and knows how to do things the >right way”.

      Quoting myself “To me, GNote is not a symbol of freedom”, and look how much time it took to be realized. GNote is the demostration that a developer that knows C++ and GTK really well does not need mono

      >But ok, I’ll try to respect this opinion… Even when you imply >that “coding skills are getting lower and lower” because of >languages with managed memory (I won’t say ‘modern’ languages, >since this might bother you…)
      >Your writing style is maybe in a perfect english, but looks >really arrogant. Sorry, maybe I’m too easily offendable, or >maybe I should improve my reading skills… Who knows.

      Or you simply can keep writing comments like this one, and not like the previous one 🙂

  38. I’ll try to answer from my (programmer’s) point of view.

    1. I like programming. Yes, of course I prefer GUI’s over other types of programming, but I like ALL the programming. And of course I prefer to raise my skills in single language/technology to maximum instead of learning 10 languages and use them from time to time. That’s why I like Java – it gives you power to do almost anything, some things of course better than others. I totally agree that on GUIs Java will never be as powerful as Qt/C++ is, and of course it hurts me. But still, I can use Java for everything I want (only not for kernel and drivers).

    2. There is huge deployment problem. You see, for big project (as KDE is) there are lots of people who can compile and test it on another platform, using another versions of libs and so on. While working on smaller project you have to do it yourself. In my case Sun guarantees that any my Java application will work the same on any platform, any hardware (from their’s list). So I don’t need to set up “compilation farms” myself. Of course now, when there are more JVM’s from Apache, GNU, RedHat and OpenJDK – I have guarantee only from Sun, not from them all, and it hurts me too.

    3. OOP solves few problems, among them – maintainability. Of course, every other language/compiler/interpreter comes with it’s own view of maintainability (Hell, there are too many letters in this word) and solves it in it’s own way. I hate interpreters because I want to see problems in my code in compile time, but not in runtime. I hate pointer arichmetics for the same reason. And of course I hate obfuscated code like some languages suggests. For example, take a look at JavaFX – completely new language from Java creators. Don’t you think it sucks? I think so. It’s not intuitive, it’s hardly maintainable. While Java/C# is clean and readable. In case of C++ – it’s a bit overloaded to be easily readable if compared to Java/C#. It’s much harder to write confusing code in Java than in C++. And it matters for me as long as I like to read code of interesting apps.

    4. Politics is everywhere. There are lots of political and commercial reasons, zounds of fanboys. Asking questions like this you’re assuming you’re not asking it to fanboys. And you getting answers, some stupid some not, on your questions or on questions from someone other’s head. While politics have influence on technology – there always will be crappy apps like banshee, fstop, M$Windows… It’s the same as if I’ll ask “For Satan’s sake, why do you people go to church?”. I’m not sure I’ll get the answers I want to hear, because people who CAN answer me will be stopped by quantity of flame I’ll get.

  39. I agree that Qt/c++ presents a much better solution than the counterpart GTK+/c. This leads to a greater demand for simpler languages in the GNOME world. However GNOME itself has a solution, Vala, and I think that this should be the language to spread: it has simpler and cleaner solutions than it’s counterparts for GNOME.

  40. I think that comparing Qt and GTK+ is quite unfair, since we are dealing with two different languages. One should compare Qt and GTKmm, which is the c++ wrapper of GTK+ that no one seems to know.
    In my experience of almost pure c++ programmer, using GTKmm is even more satisfying and concise than Qt; for example, I don’t get why in Qt every class must start with Q, since in c++ we have namespaces, created just for this purpose. In GTKmm a window is a Gtk::Window and if you’re in a file dealing mostly with gui objects you can declare the using namespace Gtk and then a window is just a Window. get the catch?
    However I admit that Qt has more features (integrated OpenGL, for one).
    For the rest, I totally agree on what the article said about Mono.
    Oh and sorry for the maybe broken english.

  41. > I’d like to skip the ethics/politics part for a variety of
    > reasons.

    You also skipped the legal issue, the most important one.

    > Why on earth someone should choose C# over Qt/C++?

    I hope you know about a bunch of reasons now.

    > Please come up with some technical reasons why C# is better.
    > And don’t start with compilation: I don’t think it’s so
    > relevant for a deployment.

    Was your thinking the ultimate word on this, there wouldn’d be any technical reasons. But maybe that’s not the case.

    > And my take is that mono is just a way to “modernize” something
    > that is NOT obsolete (and I repeat: NOT obsolete), but simply
    > no longer fitting the 2009 attitude of “oh shit I need to
    > create a program in 3 lines of code!!!”.

    The “oh shit I need to create a program in 3 lines of code!!!” acctitude predates 2009 and even 1980, I can provide evidence if necessary. Mono, .NET, Python, Java and old BASIC are answers to it –well, they are not just that. This has nothing to do with C or C++ being obsolete.

    > So, what’s the conclusion?
    > Mono is not the panacea.

    You got me!

  42. @drfav

    Okay, wait a second.
    So, basically what you’re trying to get here is that people should not use Python and Java and just stick to C++ because C++ is the way to go?

    But isn’t that like saying: “People should not drive automatic-geared cars and should stick to manual-geared cars because they are safer and more gas-efficient”?

    However, I do agree that people should NOT use C#/.NET, not because it’s not a good language or whatever, but because it’s Microsoft’s language. And the only reason MS is trying so hard to push it down Linux’s throat to apply their EEE (Embrace, Extend and Extinguish -through patents-) strategy. Nothing more.

    And this was proven dozens of times through that past few years. (Latest example was the TomTom lawsuit).

  43. I have worked on C# and C++. My take on the whole debate is C# is gr8 for windows and u can’t beat how easy & fast it is to write a desktop app (especially if it talks to a db) on windows. But you can do the same about a 100 times better (quality) in c++/qt. I have worked with all sorts, fanboyz for C# & .net. When yo want some serious server side or client side performance C#/Jave don’t come close.

    C# will always be ahead on the win platform and has no place on nix. Having worked in a number of arge software corps, any one will tell you C# will not catch on in the nix world.

    Qt is gr8 for cross platform stuff…if you want performance and cross platform go to QT/C++. If you are going for simple desktop GUI stuff only for windos go for C#.

    • –>”C# will always be ahead on the win platform and has no place on nix. Having worked in a number of arge software corps, any one will tell you C# will not catch on in the nix world.”

      I couldn’t agree more.

  44. “lightning fast compiles and pointers.”

    I think this is a moot point as any one with any serious programming experience will only compile the module that he/she has changed…oh so u say your code is not arrange in modules (in seperate dirs)…then you need to learn to design better.

    Critical sections (read speed/performance critical) are designed with proper design patters and memory managent. Rest of it uses shared pointers…

  45. […] is true that some people are in favour of Mono, but as we shall show in a moment, a lot of Mono proponents are also Microsoft proponents, but […]

  46. hey you have such a nice blog thanks for sharing keep posting

  47. This site very fantastic and tutorial !!

  48. This site very fantastic and educational !!

  49. I think everyone forgets that each language and or framework was designed with something else in mind.

    I’ve tried and use quite a bit of languages as well as frameworks. C/C++,Java,Python,C#,VB,.Net,Mono,etc. I’ve also have very minor experience with Assembly(it was quite the experience…)

    Each offered something that made certain task far easier or more efficient.

    I love coding in C and C++, why? it feels like i am actually coding, since i am dealing with memory management. At the same time though as someone stated earlier C is not really made for GUI development. C++ is more suited. BUT whats more suited to GUI development is Mono,.Net and Java. They were designed for those things in mind. C on the other hand wasn’t.

    I’ll agree that the similarity between Java and languages like C# are similar, but that’s because they are essentially based off the C++ design scheme. And is that really so bad? I don’t think so, for me as a developer it allows me to go between different languages and develop something similar(just for the heck of it) in about the same amount of time.

    I absolutely hate when people say this framework/language is better than yours or that one. When even though that may be the absolute case, it really comes down to personal preferences. I enjoy being able to develop a fully functional and decent program in relative short time in .Net or Mono.

    But what do all programs share in common? Bugs/glitches/etc

    And that arises from BAD CODING PRACTICES or experimentation in new ideas most of the time.

    So what it really comes down to is how well you can code something. And the more experienced you are, the better you will code, yes it is nice having nicer tools, but think about way back in the day when they DIDN’T have the tools we have. Be grateful that you have such a wide variety of choices.

    For the beginners i say start with the high level languages(such as C#,VB or Java) and then move down to the lower level languages(such as C/C++ or Assembly)

  50. Well spoken. I happen to like C#, but I can’t argue with your common-sense point of view. Any developer should be proficient in C or C++. Then once a foundation has been established, languages like C# and python are a great way of getting things done quickly.

  51. C# and its mono derivative is a useful language, and ther is no doubt that C++ is a more powerful language, but it really depends on what your building which you use.

    But I do agree, c#, java, php, I could go on, make it possible for poor coders to make okayish software, because they dont have to worry about the lower level stuff, but it enables good developers to make great software quickly. e.g. open office (i think thats Java).

    C++ is certianly not for beginners because its to powerful, and to easy to have issues with memory management.

    Personally which one you use would depend on the project, but it is equally possible to mix and match e.g. write mainly in mono and use class libraries wriren in c++ were necessary. This would make code that is easier to extend in the future, and also enable mixed teams of developers.

    • No, OpenOffice is not Java. Examples of good java-based applications are Eclipse, NetBeans, jEdit. If you’ll work with it – maybe you’ll feel the power of Java. On the other hand – if you’ll work with Oracle SQLDeveloper – you’ll hate java for rest of your life. The problem of Java – it is used mostly by business, if business wants good app – it will be good in Java, if they don’t – it will be another SQLDeveloper.

      And mixing few languages together is the worst thing you can imagine. It is much better for both integration, performance and maintainance to write everything in single language and minimize any mixings. For example, pow method written purely in Java will work about 10 times faster than same pow written in C++ and invoked from Java application.

      • Obviously i was not clear enough, where i would mix would be more like when i need to interct at allow level that java or c# would allow. e.g. a file system in user space or a custom driver etc. this small componet or module could be interacted with by java or c# or what ever. though you are right there would be a performance impact in invoking a library, but sometimes its easier and quicker development wise to take the hit and save time else where, especially when adding functionality to an existing sytem. And i can and have seen far worse development desisions than mixing in the fashion i describe.

        In the end it really does come done to choosing the right language for the job, and sometimes that means fudging things alittle

        And i agree that some development apps do tend to end up with poor business apps, especially when the business requirements get complex.

  52. başarılar siteniz güzel olmuş elinize sağlık

  53. Youre so appropriate. Im there with you. Your weblog is surely really worth a read if anybody comes across it. Im lucky I did since now Ive obtained a entire new view of this. I didnt realise that this issue was so crucial and so universal. You absolutely put it in viewpoint for me.

  54. One thing I want to add about the C++ vs C#/Java debate:

    Why does everyone assume that beginners hate C++ because of memory management? That is not the case, it has tons of other annoying elements.Lack of a reflection mechanism for example: this has frustrated me personally to no end.Therefore, how can one doubt the need for C# and Java.As to whether or not it allows poor coders to get away with writing ok code, I strongly disagree: a poor coder is just as capable of writing poor c# code as he is writing poor C++ code.The only difference is that the only thing they’re likely to destroy if they’re using C# would be the sanity of the person maintaining their code.While in the case of C++ consequences can be much more catastrophic.
    So, in the end, I’m a firm believer in using the right tools for the job.And for most jobs, the safer the language, the better.Sure, if you’ve done your design right, and bothered to identify the bottlenecks in your program, by all means, go ahead and write the relevent modules in C++ if you need the performance that much.But in some cases the risks of using that language far outweigh the potential benefits.

    “In C++ it’s harder to shoot yourself in the foot, but when you do, you blow off your whole leg.” — Bjarne Stroustrup.

  55. Within that post I detect clear insights into an issue that interests me. But the post is not dispassionate, and that leaves me nowhere. I unintentionally found myself needing to write actionscript code. Previously, I was immersed in functional programming and its way of thinking. But object-oriented thinking can address some formidable problems I want to solve or pursue until I am convinced they are unsolvable. I want to know how to do it.
    It is not evident to me, though, that conveniences like automatic memory management will negatively affect the quality of developers. The very first human tools were rocks and sticks. But those tools were used to produce other tools. The creation of tools that free time and resources allow humans to address bigger and more interesting problems. Several years ago, a guy employed in the same company as I, whose mathematical abilities wildly deviated from normal, approached me with an equation he’d been at for some time. He thought it might be explicitly unsolvable. He came to me, specifically, because he knew I had a copy of Wolfram’s Mathematica. I went home for lunch and, after I typed one line of code, Mathematica confirmed his suspicion. Maybe 50 years ago, mathematicians would have scoffed at our intellectual laziness. But in reality, watching them spend hours or days working on problems with pen and paper, wouldn’t teach us something we already knew.
    The existence of Mathematica also illustrates how the open-sourced/close-source divide does not frame the important issues for me personally, which is power and flexibility in software. Mathematica is not open-source and it is also very expensive. But you can use it to do remarkable things, and choose to share or not the source. The newest version, 8, does things I would never guess or even think of.
    What I really want to understand are the intrinsic limitations of C# and C++. I want to know the principles of their conception. I also want to know: do the creative minds tend to .NET or Mono? Which is best defined by its limitations?

  56. I actually do know how to manage memory. Hell, I’ve been in this business since way before there was any such thing as virtual memory. But I consider it as atavistic a skill as being able to code major pieces in assembler or entering a program in hex. Very very rarely useful or a reasonable use of a skilled developer’s time. This is the 21th century. If we haven’t yet figured out how to dependably get the machines to do such crap jobs as managing memory then we really suck!

  57. […] to Mono, SFLC says no. Oh, and I missed this one until after I’d published this post – My take on the Mono/C# debate. The author is […]

  58. Thank you for the mindless drivel oh most self-righteous of fanboys.

    • Sorry that was a bit harsh. Some decent commentary in there but it was really difficult to get past the initial rant.

  59. Great post, all cool boys and hackers code in C++, rest of languages are for stupid noobs! Why would they choose C# or something else if there is so cool language for hackers?

  60. This is an overly egoistic and an extremely subjective post about a closed-minded boy and his love for a particular language. I’d LOVE to see you write a Web Application using C++, sure there’s Wt but a quick Google search will expose a truck load of hate towards it. Open your mind, get familiar with more languages and pick the right one based on the project requirements – not your ego. C# is a fairly easy language to learn and has exposed a lot of bad code but don’t blame the language – blame the developers who learn by ‘hacking’, not by reading.

  61. Mono is dead. Attachmate (a microsoft buddy-corp) sacked everyone when it bought Novell. Are you so naive to think Mono can survive just under Xamarin?

Leave a reply to lord bla Cancel reply