Часто читаю мнение. Мол C# безнадёжно обогнал джаву. Сам C# знаю примерно понаслышке (VS запускал, код писал, но, грубо говоря, месяц против 6 лет на Java).
LINQ. В теории клёво. На практике – где конкретно применяется? ORM? Часто слышу, что Entity Framework – тормознутый отстой. Сам Hibernate применяю, но крайне осторожно. В его кишках ползал не раз. Видел людей, которые вляпались в него с ушами и потом долго и мучительно отмывались, пытаясь добиться достойной производительности. Неужели EF решил все проблемы хибернейта и стал почти недырявой абстракцией? Или по факту надо так же на каждый чих контролировать генерируемые запросы, постоянно тюнинговать маппинги, периодически лазить в самое нутро фреймворка?
Вроде ими можно коллекции обрабатывать вместо функциональных Map/Filter. Реально так делают? Насколько эффективно работает? Сравнимо с тупым циклом?
Async/await. Клёво. Где оно надо? На первый взгляд идея прикольная чисто теоретически. На практике не придумаю, где применять. Тут особенность – пишу в основном веб на достаточно толстых серверах. В случае надобности пустить 1 или 10 потоков не страшно.
Properties. Клёво. Но по факту — те же геттеры-сеттеры. Не пишем 3 буквы и всё. Ерунда какая. Крошечный слой синтаксической сахарной пудры. Практически не стоит упоминания.
Лямбды. Реально надо. В Java 8 появились. То, что захватывают implicitly final переменные, серьёзным ограничением не считаю.
Extension methods. Ещё тоньше пудра. Даже упоминать не буду. Какая разница — писать a.b(c) или b(a, c). Никакой.
Да, всё по мелочи и всё накапливается, тут согласен. Но это всё некритично. Может про что-то важное забыл – напишите.
Хотелось бы спросить — насколько развитие стандартной библиотеки C# успевает за развитием языка? Вот LINQ – выглядит притянутым за уши, или реально отлично лёг на существующие классы коллекций? В Java есть эта беда. Новые фичи языка зачастую не находят достойного отражения в стандартной библиотеке.
Может ну её нафиг, эту Джаву, и нырнуть в C#? На макбук вроде венда ставится. Проблем то по сути не испытываю, но боязно в один момент остаться эдаким знатоком кобола. Языки новые мониторю, всё со своими проблемами. Не мотивирует переходить.
Здравствуйте, vsb, Вы писали:
vsb>Часто читаю мнение. Мол C# безнадёжно обогнал джаву. Сам C# знаю примерно понаслышке (VS запускал, код писал, но, грубо говоря, месяц против 6 лет на Java).
Здравствуйте, vsb, Вы писали: vsb>Часто читаю мнение. Мол C# безнадёжно обогнал джаву. Сам C# знаю примерно понаслышке
Сам виноват
о набросах
Давным-давно, в тоталитарно-кровавом мире людей принуждали хотя бы поверхностно ознакомиться с обсуждаемым предметом. Иначе карма портилась.
Глупая ограниченность образованием и ответственностью нещадно подавляла тягу к самовыражению. Не давала нести правду через истинно истинные техники "я так вижу" и "не изучал == не нужно". Истязала логикой и требовала пруфов.
Мир был скучен и однозначен, и не было в нём места свободным от знаний.
Короче, дикие были обычаи. Но светлая эра интернета позволила отринуть рабские ограничения. Только троллинг, только набросы, только свобода! Так победим!!
Как же я скучаю по древним недобрым временам...
P.S. Если всё ещё нужно, я могу и серьёзно ответить
Здравствуйте, vsb, Вы писали:
vsb>Может ну её нафиг, эту Джаву, и нырнуть в C#? На макбук вроде венда ставится. Проблем то по сути не испытываю, но боязно в один момент остаться эдаким знатоком кобола. Языки новые мониторю, всё со своими проблемами. Не мотивирует переходить.
Если ты из мира Явы, то ныряй сразу в Котлин или Скалу. Они на ява-машине базируются. Ты в них освоишся куда быстрее. А по функционалу они Шарп превосходят оба.
Ну, немерл советовать не буду, он дотнентый.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, vsb, Вы писали:
vsb>Extension methods. Ещё тоньше пудра. Даже упоминать не буду. Какая разница — писать a.b(c) или b(a, c). Никакой. vsb>... vsb>Хотелось бы спросить — насколько развитие стандартной библиотеки C# успевает за развитием языка? Вот LINQ – выглядит притянутым за уши, или реально отлично лёг на существующие классы коллекций? В Java есть эта беда. Новые фичи языка зачастую не находят достойного отражения в стандартной библиотеке.
Вот Extension methods и нужны чтобы можно было присобачить Linq к старым библиотекам. И никакие статические методы их в этом не заменят.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
vsb>>Может ну её нафиг, эту Джаву, и нырнуть в C#? На макбук вроде венда ставится. Проблем то по сути не испытываю, но боязно в один момент остаться эдаким знатоком кобола. Языки новые мониторю, всё со своими проблемами. Не мотивирует переходить.
VD>Если ты из мира Явы, то ныряй сразу в Котлин или Скалу. Они на ява-машине базируются. Ты в них освоишся куда быстрее. А по функционалу они Шарп превосходят оба.
Скалу щупал и даже маленький транслятор написал на ней. У меня смешанные чувства. Такое ощущение, что у создателей была классная идея, но реализация получилась не такой, какой могла бы. Как то всё наворочено, накручено. Как в С++ boost. Но там хотя бы можно понять, они его 30 лет делали, груз веков и всё такое, но тут то лет 5 языку. Где то они промахнулись. Конкретных доводов привести вряд ли смогу, просто чувствую, что язык некрасив с инженерной точки зрения. Но, наверное, это таки лучше, чем Java, если сравнивать по всем параметрам. Но пока речь про C#.
VD>Ну, немерл советовать не буду, он дотнентый.
При всёмм уважении, немерл у меня ассоциируется примерно с хаскелем – в свободное время можно пощупать, но исключительно ради любопытства, ибо в работе сам он не пригодится никогда (полученные знания могут). Может зря.
Здравствуйте, Qbit86, Вы писали:
vsb>>Extension methods. Ещё тоньше пудра. Даже упоминать не буду. Какая разница — писать a.b(c) или b(a, c). Никакой.
Q>Разница большая, когда используется fluent API — цепочки вызовов
Q>var y = Fourth(Third(Second(First(x)))); // )))))))
Q>
Ну сахар это, сахар. Кто так пишет, Fitst, Second, Third. Вынеси в промежуточную переменную и разница вообще сотрётся. Искусственный пример, надуманный. Я пишу постоянно такие утилитные мелкие методы на джаве. Жить можно. Смотрится в C# лучше, я не спорю, но это небольшая разница.
var f1 = First();
var f2 = Second(f1);
var f3 = Third(f2);
var f4 = Fourth(f3);
var f5 = Nth(x, 5);
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, vsb, Вы писали:
vsb>>Часто читаю мнение. Мол C# безнадёжно обогнал джаву. Сам C# знаю примерно понаслышке
S>Сам виноват
Да я хотел вроде во flame.comp, но промазал, извиняюсь, пост не претендует на большую серьёзность, но за ответ буду благодарен.
Здравствуйте, vsb, Вы писали:
vsb>При всёмм уважении, немерл у меня ассоциируется примерно с хаскелем
При всем уважении, у тебя одни ассоциации и поверхностные суждения. Почти все твои утверждения вызывают, мягко говоря, скеписис.
Надо не домысливать, а разбираться с вещами как следует.
Что касается немерла, то писать на нем проще чем на шарпе. К хаскелю он никаким боком. Хаскель это эталонный ФЯ. Немерл, гибрид. В нем нет разных извратов вроде экзистенциальных типов и т.п. Он сугубо практичен. В двух словах Немерл — это соеденение удобного практичного языка и мощной макро-системы. Из минусов — не очень качественная реализация.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, vsb, Вы писали:
vsb>Скалу щупал и даже маленький транслятор написал на ней. У меня смешанные чувства. Такое ощущение, что у создателей была классная идея, но реализация получилась не такой, какой могла бы. Как то всё наворочено, накручено. Как в С++ boost. Но там хотя бы можно понять, они его 30 лет делали, груз веков и всё такое, но тут то лет 5 языку.
Здравствуйте, 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 куча велосипедов один лучше другого. У майкрософтовских решений тоже свой.
Здравствуйте, andyag, Вы писали:
A>ИМХО, смотреть только на язык — не очень хорошая идея.
Я смотрю так. Есть C# + .NET. Это всё обещали в каком то виде портировать на все платформы. Судя по тому, что Resharper уже есть, есть немаленькие шансы увидеть кроссплатыорменную IDE от JetBrains для C# в течениче 1-2 лет. Если всё это произойдёт, пойдёт развитие библиотек и народ может просто хлынуть с Java. Мода, она такая штука. Jetty, HSQLDB это всё по большому счёту пишется 1-2 энтузиастами за обозримое время. Хочется это предвидеть и заранее подготовиться.
Ну или не терять на всё это время, если это всё простой пшик и дела останутся так, как сейчас.
Здравствуйте, vsb, Вы писали:
vsb>Здравствуйте, andyag, Вы писали:
A>>ИМХО, смотреть только на язык — не очень хорошая идея.
vsb>Я смотрю так. Есть C# + .NET. Это всё обещали в каком то виде портировать на все платформы.
Они уже плюс-минус начали, но выглядит оно как-то подозрительно. Там будет "кроссплатформенное подмножество", а всё остальное — платформозависимое. В результате уже сейчас когда говорят "библиотека X", на самом деле там набор из пяти сборок под разные платформы. "Но этого почти не видно".
vsb>Судя по тому, что Resharper уже есть, есть немаленькие шансы увидеть кроссплатыорменную IDE от JetBrains для C# в течениче 1-2 лет.
Есть некий энтузиаст-хардгейнер: http://habrahabr.ru/post/246043/ но я не смотрел.
vsb>Если всё это произойдёт, пойдёт развитие библиотек и народ может просто хлынуть с Java. Мода, она такая штука. Jetty, HSQLDB это всё по большому счёту пишется 1-2 энтузиастами за обозримое время. Хочется это предвидеть и заранее подготовиться. Ну или не терять на всё это время, если это всё простой пшик и дела останутся так, как сейчас.
Можно посоветовать просто выделить часов 40-80 личного времени и попробовать сделать какой-то хелловорлд типа веб-сервиса с базой, с интеграционными тестами, и т.д. на попсовых ASP.NET Web API, EF, NUnit и чего там ещё вокруг этого. При этом посмотреть каково оно, когда нельзя сказать "./gradlew clean test" или "clean run". Майкрософт вон даже недавно сделал VS Community Edition (http://www.visualstudio.com/en-us/news/vs2013-community-vs.aspx).
Здравствуйте, Qbit86, Вы писали:
Q>Здравствуйте, vsb, Вы писали:
vsb>>
int sum = users.stream().filter(u -> u.isActive()).mapToInt(u -> u.getMoney()).sum();
vsb>>Честно говоря в Java лучше. В Java нормальные общепринятые названия для функциональных методов.
Q>Это `.mapToInt()` лучше? Q>А `.mapToMyCustomType()` есть?
mapToInt() в иллюстрации нужен, чтобы потом можно было написать sum(). Если вместо mapToInt() использовать просто map(), то ".sum()" нужно будет заменить например на reduce(...).
Здравствуйте, Sinix, Вы писали:
S>Давным-давно, в тоталитарно-кровавом мире людей принуждали хотя бы поверхностно ознакомиться с обсуждаемым предметом. Иначе карма портилась.
Э-хе-хе. И задолго до кроваво-тоталитарного мира это уже было.
////////////////////
— Браво! браво! Слушай, Аркадий... вот как должны современные молодые люди выражаться! И как, подумаешь, им не идти за вами! Прежде молодым людям приходилось учиться; не хотелось им прослыть за невежд, так они поневоле трудились. А теперь им стоит сказать: все на свете вздор! — и дело в шляпе. Молодые люди обрадовались. И в самом деле, прежде они просто были болваны, а теперь они вдруг стали нигилисты.