Как я познакомился с C# и едва не перешел на темную сторону Силы
Работая в Linux, я частенько сталкиваюсь с задачами автоматизации, которые мне успешно помогал решать язык программирования Ruby. И вдруг он мне разонравился. Встал вопрос: чем бы его заменить?
А почему разонравился Ruby?
Ruby я использовал для написания программ с интерфейсом командной строки, а когда требовался графический интерфейс, то использовал фреймворк Ruby on Rails, который написан на Ruby, основан на модели MVC (Model-View-Controller) и предназначен для создания Web-приложений. Другими словами, когда требовался графический интерфейс я делал локальное web-приложение. Такой подход имел несколько преимуществ. Например, моя программка для хранения заметок могла быть быстро выложена в интернет и доступ к заметкам я бы получил везде, где есть интернет (эдакий Evernote). И это без каких либо переделок. И самим Ruby я был вполне доволен.
Но со временем пришлось написать несколько десктопных приложений, которые как-то не очень хорошо смотрелись в браузере. Кроме того, программы на Rails неудобно распространять. Выложить в интернет и дать друзьям ссылку, конечно, можно, а если вывод в общий доступ не планируется, то возникают некоторые сложности. Помимо скриптов, жаждущим моего софта приходилось устанавливать Apache, MySQL, постигать особенности их настройки и изучать нюансы развертывания RoR-приложений. Стоит ли удивляться, что согласных пройти такое ради моей драгоценной программы набралось аж 0 человек? Поэтому Ruby остается для консоли, Rails для web, а вот для desktop-приложений пришлось искать что-то новое.
Как я искал что-то новое и нашел Си
Первой мыслью было использовать голый Си и какую-нибудь устоявшуюся графическую библиотеку к нему. Си я знал еще со времен раннего детства, достать графическую библиотеку в наше время не проблема, даже кроссплатформенную и под свободной лицензией. Но отговорили спецы: негоже, говорят, в наше время Си использовать. Ошибок с памятью не оберешься, да и разработка намного медленнее.
Признаться, я немного огорчился, ведь хотел использовать Си из-за следующих его преимуществ:
- согласно всем рейтингам, Си всё еще самый частоиспользуемый язык;
- быстрее Си только ассемблер;
- грамотные программы на Си легко переносить на любую ОС;
- Linux написан на Си;
- на Си написано огромное количество великолепнейших библиотек;
- и многое другое.
Но раз специалисты сказали не надо, значит не надо.
Cи++ и Linux
Следующим претендентом стал Си++. Плюсы:
- относительно высокая скорость работы программ на Cи++;
- ООП (впрочем, это сомнительный плюс).
Минусы:
- подвержен всем болячкам, которыми болел предшественник — Си;
- громоздкий синтаксис;
В общем, спасибо, не надо!
Java для линуксоида
В Яве понравилось многое и это был серьезный претендент на победу.
Плюсы:
- широкая распространенность (2е место после Си);
- кроссплатформенность;
- безопасность;
- наличие прекрасных свободных IDE типа Eclipse и NetBeans;
- и много других плюсов.
Минусы:
- тормознутость;
- громоздкий и своеобразный синтаксис;
- в комплекте с собственной программкой в 100 кб потребуется распространять и JRE (кажется, около 50 Мб);
- всё же не очень подходит для настольных приложений, скорее для сетевых;
- гадкая контора Oracle, владеющая патентами на Java;
- Ричард не благословил;
- и некоторые другие.
Долго думал начать ли освоение Явы, но как-то передумал.
C# в Linux
Слышен гул толпы. В воздух полетели помидоры. Да как автор статьи посмел упомянуть название продукции богомерзкой фирмы Микрософт на сайте, который преподносится как мир электронной свободы?! Выкрики неодобрения все громче. Слышны выстрелы.
Плюсы C#:
- отличные IDE как под Linux (MonoDevelop), так и под Windows (Visual Studio);
- обе IDE бесплатны (MonoDevelop вообще, а Visual Studio в редакции Express);
- удобный синтаксис;
- первосортная документация на русском;
- библиотеки практически на любую тему;
- легкость в освоении;
- управляемый код несет с собой много бонусов;
- скомпилированная в Windows программа на C# запускается в Linux без перекомпиляции и — о чудо — без всякого Wine;
- при распространении программы не нужно докладывать библиотеки и интерпретатор в комплект: .NET Framework входит в состав Windows, а Linux-дистрибутивы содержат Mono;
- изначальная ориентированность на desktop-приложения.
Минусы:
- тормознутость;
- продукция печально известной фирмы Microsoft;
- традиционно, стандарты поддерживаются так, что работают только с продукцией от Microsoft (классический пример — библиотека для работы по протоколу SMTP, которая работает не со всеми SMTP-серверами, а только от MS);
- постоянная угроза судебного преследования со стороны Microsoft из-за нарушения патентов;
- не очень высокая популярность (5е место в рейтинге);
- Ричард не благословил.
Какой язык программирования выбрать пользователю Linux?
Сейчас я пробую просто из любопытства C#, хотя и сомневаюсь, что буду действительно его использовать в практических целях. Если временно отбросить вопросы лицензирования, патентов и свободы, если забыть о предупреждениях RMS, то пока увиденное производит скорее приятное впечатление. Это касается как свободного Mono, так и родной реализации.
Настольное приложение на C# разрабатывается быстро, легко и удобно. Программа работает как в Linux, так и Windows. Серьезных проблем не заметил.
Помощь читателей
И вот здесь мне требуется помощь читателей. Я чувствую, что если мне тут же не сообщат о каком-нибудь серьезном недостатке C#, то я могу и полюбить этот язык, а если полюбить что-то от MS, то так не далеко и до перехода обратно на Windows. Друзья, спасайте линуксоида! 😉
Monodevelop для Linux — норм?
MonoDevelop — это полный отстой. Есть прекрасная IDE под названием SharpDevelop. Используется для разработки на C# и основана на MonoDevelop. К сожалению, работает только под Windows, но должно работать и под Wine. Сам MonoDevelop нелогичен, неудобен и часто падает. В топку.