Re: Нужен ли C#?
От: andyag  
Дата: 30.12.14 21:05
Оценка: 14 (2)
Здравствуйте, vsb, Вы писали:

vsb>Часто читаю мнение. Мол C# безнадёжно обогнал джаву. Сам C# знаю примерно понаслышке (VS запускал, код писал, но, грубо говоря, месяц против 6 лет на Java).


У них в дотнетах нет всяких клёвых штук типа jetty или hsqldb. По состоянию на сегодня на дотнете невозможно сделать "app.exe", который будет стартовать веб-сервер с готовым к употреблению сайтом. Веб-сервис можно, а полноценный сайт нельзя (http://stackoverflow.com/questions/25478451/owin-self-host-asp-net-mvc). ХЗ как им это удалось, но факт. Но скоро обещают сделать. А язык круче, да.

vsb>LINQ. В теории клёво. На практике – где конкретно применяется? ORM? Часто слышу, что Entity Framework – тормознутый отстой. Сам Hibernate применяю, но крайне осторожно. В его кишках ползал не раз. Видел людей, которые вляпались в него с ушами и потом долго и мучительно отмывались, пытаясь добиться достойной производительности. Неужели EF решил все проблемы хибернейта и стал почти недырявой абстракцией? Или по факту надо так же на каждый чих контролировать генерируемые запросы, постоянно тюнинговать маппинги, периодически лазить в самое нутро фреймворка?


На практике тоже клёво. Если взять джавовский jpql/hql и сделать его частью синтаксиса Java, получится немного меньше, чем LINQ. Кроме монструозных EF и NH есть ещё более легковесные библиотеи (https://github.com/linq2db/linq2db), которые не столько ORM, сколько транслятор из LINQ — в SQL. В мире Java самое близкое, что есть — QueryDSL (http://www.querydsl.com/). Но его за 1 раз не осилишь — простые вещи делаются сложно, сложные вещи — тоже. В LINQ всё сравнительно просто.

vsb>Вроде ими можно коллекции обрабатывать вместо функциональных Map/Filter. Реально так делают? Насколько эффективно работает? Сравнимо с тупым циклом?


Всё что угодно можно обрабатывать. А что нельзя — можно написать немного кода и тоже можно. Если рассмотреть сценарий, когда из базы достаётся несколько коллекций записей и из них нужно скрутить какой-то красивый DTO, в Java это получится сильно длиннее, чем в C#/LINQ. Конкретно Map/Filter/Reduce — всё есть.

vsb>Async/await. Клёво. Где оно надо? На первый взгляд идея прикольная чисто теоретически. На практике не придумаю, где применять. Тут особенность – пишу в основном веб на достаточно толстых серверах. В случае надобности пустить 1 или 10 потоков не страшно.


Это убийственная фича для UI. Код выглядит так, будто все долгие операции выполняются на UI thread. При этом никаких коллбеков, сохранений состояний и прочего. Пишу про UI потому что кроме UI пока нигде не использовал. (http://msdn.microsoft.com/en-us/magazine/dn605875.aspx)

vsb>Properties. Клёво. Но по факту — те же геттеры-сеттеры. Не пишем 3 буквы и всё. Ерунда какая. Крошечный слой синтаксической сахарной пудры. Практически не стоит упоминания.


По большому счёту это те же джавовские bean properties и часто используются в аналогичных ситуациях.

vsb>Лямбды. Реально надо. В Java 8 появились. То, что захватывают implicitly final переменные, серьёзным ограничением не считаю.


Лямбды сами по себе — это фигня. А вот вместе с Expressions — убийственное сочетание. Можно, например, писать вещи типа getName(person => person.name) и получать "name" в виде строки (http://blogs.msdn.com/b/charlie/archive/2008/01/31/expression-tree-basics.aspx)

vsb>Extension methods. Ещё тоньше пудра. Даже упоминать не буду. Какая разница — писать a.b(c) или b(a, c). Никакой.


Сами по себе они довольно бестолковые, но нужны для реализации LINQ (http://msdn.microsoft.com/en-us//library/bb383977.aspx — искать по "the most common")

vsb>Да, всё по мелочи и всё накапливается, тут согласен. Но это всё некритично. Может про что-то важное забыл – напишите.


vsb>Хотелось бы спросить — насколько развитие стандартной библиотеки C# успевает за развитием языка? Вот LINQ – выглядит притянутым за уши, или реально отлично лёг на существующие классы коллекций? В Java есть эта беда. Новые фичи языка зачастую не находят достойного отражения в стандартной библиотеке.


vsb>Может ну её нафиг, эту Джаву, и нырнуть в C#? На макбук вроде венда ставится. Проблем то по сути не испытываю, но боязно в один момент остаться эдаким знатоком кобола. Языки новые мониторю, всё со своими проблемами. Не мотивирует переходить.


ИМХО, смотреть только на язык — не очень хорошая идея.
1. В Java очень крутые pure-Java штуки типа упомянутых ранее Jetty и HSQLDB. В .NET иногда такое встречается, но нечасто.
2. В Java прикольные инструменты типа Gradle — одновременно и "проект", и "зависимости", и билд скрипт и ещё куча всего. В .NET всё отдельно: проекты отдельно (их делает студия, руками не получится), зависимости — NuGet (можно наверное руками писать XML, но обычно — мышкой или в студийной консоли), билд-скрипты — MSBuild (ещё более другой XML). Тут же стоит добавить, что в Java-проектах ничего не стоит использовать параллельно несколько языков не имея никакой головной боли. Например, решение можно писать на Java, а тесты — на Groovy. В .NET такого нету.
3. В Java куча зрелых библиотек на все (бэкендные) случаи жизни. Для одной и той же задачи можно выбрать из нескольких решений, при этом у каждого решения будет своё большое коммьюнити. В .NET с ходу даже не вспомню что-нибудь достаточно масштабное и известное, при этом не сделанное майкрософтом.
4. В Java есть стандарты API, в .NET их нет. Например в Java есть стандарт "валидатор", а в .NET куча велосипедов один лучше другого. У майкрософтовских решений тоже свой.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.