Нужен ли C#?
От: vsb Казахстан  
Дата: 30.12.14 19:13
Оценка: -3 :)
Часто читаю мнение. Мол 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#? На макбук вроде венда ставится. Проблем то по сути не испытываю, но боязно в один момент остаться эдаким знатоком кобола. Языки новые мониторю, всё со своими проблемами. Не мотивирует переходить.
Re: Нужен ли C#?
От: maloi_alex СССР  
Дата: 30.12.14 19:21
Оценка: +4 :))) :)))
Здравствуйте, vsb, Вы писали:

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


С Наступающим!
Re: Extension methods
От: Qbit86 Кипр
Дата: 30.12.14 19:26
Оценка: 2 (1)
Здравствуйте, vsb, Вы писали:

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


Разница большая, когда используется fluent API — цепочки вызовов
Автор: Qbit86
Дата: 21.10.14
. Сравни «параллельные» скобки и вложенные, а также порядок вызова методов:

var y = x.First()
    .Second()
    .Third()
    .Fourth();

var y = Fourth(Third(Second(First(x)))); // )))))))
Глаза у меня добрые, но рубашка — смирительная!
Re: Нужен ли C#?
От: Sinix  
Дата: 30.12.14 19:46
Оценка: 9 (1) +3 :))) :)
Здравствуйте, vsb, Вы писали:

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


Сам виноват
  о набросах
Давным-давно, в тоталитарно-кровавом мире людей принуждали хотя бы поверхностно ознакомиться с обсуждаемым предметом. Иначе карма портилась.
Глупая ограниченность образованием и ответственностью нещадно подавляла тягу к самовыражению. Не давала нести правду через истинно истинные техники "я так вижу" и "не изучал == не нужно". Истязала логикой и требовала пруфов.
Мир был скучен и однозначен, и не было в нём места свободным от знаний.

Короче, дикие были обычаи. Но светлая эра интернета позволила отринуть рабские ограничения. Только троллинг, только набросы, только свобода! Так победим!!


Как же я скучаю по древним недобрым временам...



P.S. Если всё ещё нужно, я могу и серьёзно ответить
Re: Нужен ли C#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.12.14 19:58
Оценка: +1
Здравствуйте, vsb, Вы писали:

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


Если ты из мира Явы, то ныряй сразу в Котлин или Скалу. Они на ява-машине базируются. Ты в них освоишся куда быстрее. А по функционалу они Шарп превосходят оба.

Ну, немерл советовать не буду, он дотнентый.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Нужен ли C#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.12.14 20:07
Оценка:
Здравствуйте, vsb, Вы писали:

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

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

Вот Extension methods и нужны чтобы можно было присобачить Linq к старым библиотекам. И никакие статические методы их в этом не заменят.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Нужен ли C#?
От: vsb Казахстан  
Дата: 30.12.14 20:25
Оценка: +1
Здравствуйте, VladD2, Вы писали:

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


VD>Если ты из мира Явы, то ныряй сразу в Котлин или Скалу. Они на ява-машине базируются. Ты в них освоишся куда быстрее. А по функционалу они Шарп превосходят оба.


Скалу щупал и даже маленький транслятор написал на ней. У меня смешанные чувства. Такое ощущение, что у создателей была классная идея, но реализация получилась не такой, какой могла бы. Как то всё наворочено, накручено. Как в С++ boost. Но там хотя бы можно понять, они его 30 лет делали, груз веков и всё такое, но тут то лет 5 языку. Где то они промахнулись. Конкретных доводов привести вряд ли смогу, просто чувствую, что язык некрасив с инженерной точки зрения. Но, наверное, это таки лучше, чем Java, если сравнивать по всем параметрам. Но пока речь про C#.

VD>Ну, немерл советовать не буду, он дотнентый.


При всёмм уважении, немерл у меня ассоциируется примерно с хаскелем – в свободное время можно пощупать, но исключительно ради любопытства, ибо в работе сам он не пригодится никогда (полученные знания могут). Может зря.
Re[2]: Extension methods
От: vsb Казахстан  
Дата: 30.12.14 20:29
Оценка:
Здравствуйте, Qbit86, Вы писали:

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


Q>Разница большая, когда используется fluent API — цепочки вызовов
Автор: Qbit86
Дата: 21.10.14
. Сравни «параллельные» скобки и вложенные, а также порядок вызова методов:


Q>
Q>var y = x.First()
Q>    .Second()
Q>    .Third()
Q>    .Fourth();
Q>

Q>
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);
Re[2]: Нужен ли C#?
От: vsb Казахстан  
Дата: 30.12.14 20:30
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, vsb, Вы писали:


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


S>Сам виноват


Да я хотел вроде во flame.comp, но промазал, извиняюсь, пост не претендует на большую серьёзность, но за ответ буду благодарен.
Re[3]: Нужен ли C#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.12.14 20:55
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>При всёмм уважении, немерл у меня ассоциируется примерно с хаскелем


При всем уважении, у тебя одни ассоциации и поверхностные суждения. Почти все твои утверждения вызывают, мягко говоря, скеписис.

Надо не домысливать, а разбираться с вещами как следует.

Что касается немерла, то писать на нем проще чем на шарпе. К хаскелю он никаким боком. Хаскель это эталонный ФЯ. Немерл, гибрид. В нем нет разных извратов вроде экзистенциальных типов и т.п. Он сугубо практичен. В двух словах Немерл — это соеденение удобного практичного языка и мощной макро-системы. Из минусов — не очень качественная реализация.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Нужен ли C#?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 30.12.14 21:02
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Скалу щупал и даже маленький транслятор написал на ней. У меня смешанные чувства. Такое ощущение, что у создателей была классная идея, но реализация получилась не такой, какой могла бы. Как то всё наворочено, накручено. Как в С++ boost. Но там хотя бы можно понять, они его 30 лет делали, груз веков и всё такое, но тут то лет 5 языку.


Около 11 лет уже с первого релиза Scala.
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 куча велосипедов один лучше другого. У майкрософтовских решений тоже свой.
Re[2]: Нужен ли C#?
От: vsb Казахстан  
Дата: 30.12.14 21:16
Оценка:
Здравствуйте, andyag, Вы писали:

A>ИМХО, смотреть только на язык — не очень хорошая идея.


Я смотрю так. Есть C# + .NET. Это всё обещали в каком то виде портировать на все платформы. Судя по тому, что Resharper уже есть, есть немаленькие шансы увидеть кроссплатыорменную IDE от JetBrains для C# в течениче 1-2 лет. Если всё это произойдёт, пойдёт развитие библиотек и народ может просто хлынуть с Java. Мода, она такая штука. Jetty, HSQLDB это всё по большому счёту пишется 1-2 энтузиастами за обозримое время. Хочется это предвидеть и заранее подготовиться.

Ну или не терять на всё это время, если это всё простой пшик и дела останутся так, как сейчас.
Re[3]: Нужен ли C#?
От: andyag  
Дата: 30.12.14 21:32
Оценка:
Здравствуйте, 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).
Re[3]: Extension methods
От: barn_czn  
Дата: 05.01.15 12:39
Оценка:
vsb>
vsb>var f1 = First();
vsb>var f2 = Second(f1);
vsb>var f3 = Third(f2);
vsb>var f4 = Fourth(f3);
vsb>var f5 = Nth(x, 5);
vsb>


Ты прикалываешся или и правда не понимаешь?

Вот те реальный пример, и про LINQ и про экстеншен методы сразу:

var total = users.Where((u)=>u.IsActive).Select((u)=>u.Money).Sum();


Напиши это на своей жабе и сравни где лучше.
Отредактировано 05.01.2015 12:43 barn_czn . Предыдущая версия .
Re[4]: Extension methods
От: vsb Казахстан  
Дата: 05.01.15 14:00
Оценка: -1
Здравствуйте, barn_czn, Вы писали:

_>Ты прикалываешся или и правда не понимаешь?


Скорее слишком много понимаю.

_>Вот те реальный пример, и про LINQ и про экстеншен методы сразу:


_>
_>var total = users.Where((u)=>u.IsActive).Select((u)=>u.Money).Sum();
_>


_>Напиши это на своей жабе и сравни где лучше.


        int sum = users.stream().filter(u -> u.isActive()).mapToInt(u -> u.getMoney()).sum();


Честно говоря в Java лучше. Пример совсем неудачный. В Java нормальные общепринятые названия для функциональных методов.
Re[5]: mapToInt
От: Qbit86 Кипр
Дата: 05.01.15 15:48
Оценка: +1
Здравствуйте, vsb, Вы писали:

vsb>
int sum = users.stream().filter(u -> u.isActive()).mapToInt(u -> u.getMoney()).sum();


vsb>Честно говоря в Java лучше. В Java нормальные общепринятые названия для функциональных методов.


Это `.mapToInt()` лучше?
А `.mapToMyCustomType()` есть?
Глаза у меня добрые, но рубашка — смирительная!
Re[6]: mapToInt
От: andyag  
Дата: 05.01.15 16:20
Оценка:
Здравствуйте, 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(...).
Re[6]: mapToInt
От: vsb Казахстан  
Дата: 05.01.15 17:02
Оценка:
Здравствуйте, Qbit86, Вы писали:

vsb>>
int sum = users.stream().filter(u -> u.isActive()).mapToInt(u -> u.getMoney()).sum();


vsb>>Честно говоря в Java лучше. В Java нормальные общепринятые названия для функциональных методов.


Q>Это `.mapToInt()` лучше?


mapToInt это следствие того, что в Java все типы делятся на примитивные и классы.

Q>А `.mapToMyCustomType()` есть?


map(u -> u.getAnything()) есть.
Re[2]: Нужен ли C#?
От: Pavel Dvorkin Россия  
Дата: 05.01.15 17:48
Оценка: 121 (5) :)
Здравствуйте, Sinix, Вы писали:

S>Давным-давно, в тоталитарно-кровавом мире людей принуждали хотя бы поверхностно ознакомиться с обсуждаемым предметом. Иначе карма портилась.


Э-хе-хе. И задолго до кроваво-тоталитарного мира это уже было.

////////////////////

— Браво! браво! Слушай, Аркадий... вот как должны современные молодые люди выражаться! И как, подумаешь, им не идти за вами! Прежде молодым людям приходилось учиться; не хотелось им прослыть за невежд, так они поневоле трудились. А теперь им стоит сказать: все на свете вздор! — и дело в шляпе. Молодые люди обрадовались. И в самом деле, прежде они просто были болваны, а теперь они вдруг стали нигилисты.

/////////////////////////

(C) Тургенев. Отцы и дети.
With best regards
Pavel Dvorkin
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.