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)
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!