Дмитpий Hecтepук

Блог о программировании — C#, F#, C++, архитектура, и многое другое

Archive for the ‘Engineering’ Category

Microsoft, инновации и откровенный флейм

54 комментария

Учитывая то количество флейма которое летит в направлении Microsoft/.Net разработчиков, тот пост что я пишу сейчас надо было написать уже давно, дабы попробовать объяснить всем кому интересно чем же .Net стек так привлекателен и что в нем не так. Следуя традициям spbalt.net, попробую осветить проблему с обеих сторон. Если что – комментируйте, буду рад.

Фанатизм Microsoft

Для начала, лучше всего сразу отсекать фанатиков. Предлагаю сделать это первым же абзацем дабы потом не фокусировать на них внимание. Да, существуют фанатики, причем как анти-Microsoft так и pro-Microsoft. Обе группы не несут в себе какого-то адеквата и трезвой аргументации. Я не знаю какая демографика этих групп, но подозреваю что не слишком-то зрелая там аудитория. Зрелая аудитория по крайней мере пытается преставлять хоть какие-то аргументы, и даже если они иногда выглядят как сравнение яблок с апельсинами, это лучше чем ничего.

Интересно было посмотреть на весьма смелый (зная Хабр) пост Александра Ложечкина. Не знаю, ожидал ли он такой флейм или нет, но мне кажется все равно его пост достиг нужной аудитории, и донес до нее главную информацию. Кричали, конечно, различные критики в силу возможности. Первый комментарий (с рейтингом -51) показывает относительную адекватность Хабрапользователя:

Позовите, когда мы сможем попрощаться с Вами вообще.

Комментариев к такому у меня, увы, нет. Интересно что его оставил далеко не самый последний (по рейтингу) пользователь.

Языки – Java vs. C# и аналогичные флеймы

Окей, у меня блог посвященный C# поэтому тут можно обвинить меня в предвзятости. Нет, я не буду пропагандировать C# или сравнивать его, например, с Java потому что подобные действия имеют свойство очень быстро вырождаться в откровенный флейм со стороны MS- и Java- сообществ. Единственное, что я могу сказать насчет языков так это то, что (имхо) C# является фундаментальным мотиватором изучения платформы .Net начинающими разработчиками. Этот язык сложно критиковать, в то время как к любому другому языку можно предъявить море претензий на тему “современности” и т.п. Это не значит что C# кардинально лучше, т.к. понятие “лучше” само по себе ничего не значит – “интереснее”, “прибыльнее” – это уже более адекватные эпитеты. В этом же ключе можно говорить и про распостраненность, цитируемость, и т.п. Де факто, любой язык – даже COBOL – в правильных руках позволит решать задачи, и метрики показывают что за исключением Ассемблера, производительность разработчиков с разными языками для аналогичных тасков примерно одинакова. Но если учитывать что мы не сферических коней в вакууме строим а решаем бизнес-задачи, более корректны (имхо) сравнения на уровне платформ. И то, каждое сравнение автоматически вырождается в флейм. Может не стоит?

К слову хочу заметить что, несмотря на то что Microsoft поспособствовала выпуску ряда альтернативных языков для платформы .Net, их прием в качестве рабочих лошадок заказчиками был и остается минимален. Причины? А вы представьте себя на стороне заказчика – какой проект лучше потом поддерживать, тот что на C# или тот что на IronRuby? Более того, использование не-C# языков очень сложно аргументировать. Иначе говоря, если аргументировать использование Scala вместо Java достаточно просто (в силу “мощности” языка), то аргументировать использование F# вместо C# – значит напирать на “функциональность”, немутабельность, async workflows и т.п. Иначе говоря, на те вещи которые реализуются на C# без каких-то громадных трудозатрат. Например, на C# проще простого сделать immutable структуру, да еще и тест написать который проверяет ее “немутабельность”.

В заключение о языках хочу добавить что единственная фича, которая нужна в C# – это статическое метапрограммирование. И оно у нас будет. А все кто считает что Ruby лучше как раз из-за возможностей метапрограммирования которые “я получу уже сегодня” занимаются сравнением яблок и апельсинов, т.к. метапрограммирование в Ruby динамическое. Нечестное, как мне кажется, сравнение.

Незрелость библиотек и MVC vs. Rails

Окей. Да, в каком-то смысле .Net играет в догонялки с той же Java в тех областях где эти платформы имеют общие требования. Люди очень любят приводить пример с “рельсами” которые якобы копируют авторы Asp.Net MVC. Меня всегда итересовало – что мотивирует людей делать такие обзоры и сравнения когда мы живем, собственно, в эпоху свободы выбора, когда вместо того чтобы тупо читать что А лучше B я скорее скачаю и сам попробую и А и В.

Вообще сравнивать библиотеки – это дело неблагодарное. Сравнивать фреймворки – это да, это уже как-то актуальнее. Но кто хочет, например, сравнить Swing и WinForms/WPF? Нет желающих? Опять же, очень глупо катить бочку против Microsoft когда в плане презентационных фреймворков для десктоп-приложений не так уж и многа выбора. Я конечно все понимаю, и как сказал Ринат Абдуллин “Россия это страна где еще на Delphi пишут”, но серьезно… какие варианты быстрого (да-да, быстрого и качественного) построения интерфейсов thick-client знаете вы?

Вот другое дело web – тут как бы технология общая (HTML), и бороться за нее не надо, т.к. она не проприетарная. Тем самым можно сказать что используете вы Rails или MVC или PHP – это не так критично т.к. и там и там можно получить идентичный результат. Мне кажется что сам спор веб-фреймворков также бессмысленнен в связи с тем, что вне зависимости от ваших предпочтений уже есть хорошие платформы для построения решений, ничего не надо писать “с нуля”, можно просто кастомизировать. Сказать что А лучше В тут сложно – да, есть разница в зрелости фреймворков, но посмотрите вокруг – люди поставляют решения даже на сырых платформах. И что – работает!

Про стоимость лицензий

Вообще меня удручает подход разработчиков которые считают что все должно быть FOSS (бесплатно и open-source). Это абсолютно ущербный подход, т.к. если мне, например, перестанут платить за производство решений, то… я тупо перестану что-либо производить и уйду в другую область. Идея о том что можно получать бесплатно все что нужно для разработки породило такие решения как NHibernate (действительно the linux way – если что нужно, берите лобзик и допиливайте) или, например, тот же SharpDevelop. Я не имею ничего против, но когда у вас есть IDE без вменяемой отладки – это не IDE. Поэтому коммерческие решения нам нужны как воздух.

Очень много разговоров идет про стоимость лицензирования, про то что BizSpark это маркетинговая уловка, про то что сложно оплатить N лицензий, там, Windows или SQL Server. Если честно, эта дискуссия тоже уже устарела. Например, корпоративный сектор, который очень хорошо умеет считать деньги, с удовольствием использует ПО от Microsoft, и оно входит в его бюджеты. То есть сказать, что Windows – дорого, значит ничего не сказать.

Да, конечно, хорошо когда все бесплатно. И с моей стороны достаточно лицемерно говорить про стоимость лицензий когда я использую ПО по программам MVP и BizSpark. Но несмотря на это, те заказчики с которыми мы работаем с удовольствием приобретают ПО от Microsoft – с другой стороны, у многих из них стоит и Linux/Java. И вот что я вам скажу – они довольны и тем и тем. Поэтому говорить что что-то кардинально лучше – некорректно. И я не буду тут писать про то, насколько стоимость ПО ничтожна по сравнению со стоимостью разработки кастомных решений, ибо вы все итак уже знаете.

Инновации, смерть SQL, и т.п.

Для многих, Microsoft, ‘enterprise и консерватизм – это слова из одной ипостаси (люблю это слово). Поэтому многим видится консервативная компания которая по-тихоньку удовлетворяет и пьет кровь большого бизнеса, не очень-то обращая внимание на малый. Тем самым, сравнивая деательность Apple и Microsoft, например, обыватель может достаточно справедливо сказать что у Apple все как-то поинтересней – по крайней мере с точки зрения продуктов.

Увы, в плане разработки под различные платформы ситуация действительно не очень внушающая – посудите сами, что сейчас выгодней – разработывать для iOS или WinMobile? (или Android?) Ну а desktop-приложения для Windows сейчас создавать бессмысленно т.к. рынок перенасыщен уже давно, да и нет какого-то “уютного магазинчика” для всего этого добра.

Впрочем, в плане веба инноваций тоже как-то маловато. Да, Asp.Net MVC это небольшой шажок вперед, но если посмотреть на другие новые проекты (например Node.js), начинаешь понимать что речь идет о разных уровнях инноваций. В одном случае, это действительно свежии, новаторские идеи. В другом, эволюция существующих идей (например WebFormsViewEngine --> Razor), которая является чем-то ожидаемо-предсказуемым. Совершенно разные вещи. Так что в этом плане я с критиками согласен – инновационность, по крайней мере для разработки в стеке .Net определенно страдает. Есть конечно интересные вещи (Rx, StreamInsight) но их мало и кардинально они мозг не выносят.

Насчет NoSQL и SQL Server

В принципе, таким заголовком можно открыть флейм на тему SQL Server vs. NoSQL, где одни будут предрекать падение платформы SQL Server а другие указывать на то, что понадобятся годы чтобы реализовать SSxS на MongoDB или аналогичных системах.

Очень сложно спорить с тем, что при всех наработках платформы, SQL Server капитально проигрывает в производительности, масштабируемости, а также платформной зависимости. И еще, вы уж извините, но в стоимости он проигрывает тоже – да, я знаю что ранее я написал что стоимость некритична в общем случае, но так уж получилось, что суть хранилищ данных – это большие объемы а следовательно большое количество ядер. Лицензирование SQL Server в этом плане оставляет желать лучшего. Не знаю, может есть скидки когда инстансов много?

Тема NoSQL и то как она повлияет на стек .Net очень интересна. В принципе, уже понятно что binding’и на NoSQL базы есть и будут, поэтому существенные причины уходить с .Net неактуальны пока вы не решите уйти с Windows. Могу по себе сказать, что мои личные проекты связанные с web mining медленно перекачивают на MongoDB. Что касаеться “продакшн”, то тут я как и все буду осторожничать. Так или иначе, лично мне занятие MongoDB кажется актуальной стратегией для развития – даже более актуальной чем наращивание компетенций в Windows Azure.

Comments welcome.

Реклама

Written by Dmitri

21 июля 2010 at 22:42

Опубликовано в .NET, Development, Engineering, Internet, Programming