Как я познакомился с 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 нелогичен, неудобен и часто падает. В топку.