LINUX.ORG.RU

C# vs Java в 2020. Что выбрать?

 , , , ,


2

8

Приветствую. Учусь на 1 курсе технического вуза. На 1 курсе у нас C. Я на него забил, просто написал программу на C++, предъявил преподу, мол я шарю, и все. Для работы избрал Python/Django. Интересует удаленка, желательно на Европейского или Американского работодателя. Под собственные задачи не хватает нормального языка программирования. Что значит нормального? Python держится на библиотеках. Динамическая типизация просто? Увольте. Я не рискнул бы писать крупный (не веб) проект на Python. Почему? Потому что большинство ошибок вылавливаются во время работы самого кода. Вот вам и динамическая типизация, и интерпретация. Посмотрите, как используется язык. В веб проектах, потому что Django надежен. Как по мне Python+Django много лучше PHP, да хотя бы и из-за Django Rest. Но кроме веба, Big data, машинного обучения и автоматизации, Python нигде не применяется. Игры, крупные приложения, как правило, Python страхует C++. А скорее, он работает внутри него. Ладно, окей, под Windows игру написать можно. Но вдруг пришла идея запрограммировать что-то под Android. Смотрим. Kivy. Пробуем и убеждаемся, что тут и выходит, молотком вкручиваем лампочку, никак иначе. В общем, нужен второй язык. Язык, где якобы больше кода и т.д, но который по факту надежнее, и работать будет производительнее, и ошибки отдавать на компиляции. Понятно, что C++/C#/Java. Иного не дано. Посидев, повздыхав, я выкинул C++ в помойку. Причины:

  1. Когда делал на C++ работу для универа, 6 часов убабахал на это. На установку VS, на подключение QT, на изучение возможностей для написания простого текстового редактора с менюшкой, где открыть, сохранить и выход, потом еще это не компилировалось из-за ошибок, связанных с библиотекой… В общем, 6 часов. Если такое будет каждый раз с новой библиотекой…
  2. Пообщался с C++ разработчиками. Если проект, который на C#/Java пишется за неделю/две, на C++ я буду пилить 3 месяца…
  3. Удовольствие от разработки самого алгоритма программы. Логики программы. Но никак не от работы с памятью и прочими заморочками на низком уровне. Пусть компилятор сделает, как надо, нежели я где-то допущу ошибку, в одном месте, а потом из-за нее будет ошибка на несколько окон, и за ней многочасовой поиск места с ошибкой. В итоге, C# vs Java. Учитывая, что ранее я работал с C#, начал читать всякие статьи «C# vs Java». На форумы тоже писал. Но моя главная цель была заработок. Сейчас же разработка приложений по моим интересам. Почитав понял, что никакого четкого вывода нет. Прошло время, когда C# был лишь под Windows. С одной стороны, C# круче. Развивается, Microsoft кидают туда все, что нужно и не нужно. С другой стороны. Давайте посмотрим правде в глаза. Где сейчас применяется C#? Под Windows. Все сервера на Windows Server. Какие приложения (не игры) разработаны под Android с C#? Я не знаю таковых. Исследуя рынок понимаем, что по Java и вакансий больше, и зарплаты выше. Естественно, зарплаты то у синьоров. У джунов и мидлов примерно одинаково, но Java таки немного выше. А открывая вакансии я понимаю, что меня не ожидает с C# карьера. Ибо не сдался мне ASP.NET, если я уже на Django. Других вакансий нет. У Java тут все, что хочешь. И веб, и сервера, и приложения под Android. Но есть еще 2 момента:
  4. .NET Foundation. Кроме того, планируется объединить .NET и .NET Core. Выстрелит ли это? Возможно. Но я не думаю, что все сразу бросятся переписывать сервера с Java на .NET, а кто сидел на Windows Server будут переписывать под Linux;
  5. Kotlin. Всей душенькой ненавижу этот язык, и не спрашивайте, почему. А сейчас много где его используют наравне с Java, и вместо Java. Открываем сравнения производительности, и понимаем, что по производительностью C# давно обогнал Java. В общем. Уважаемые девелоперы. Желательно те, кто знаком и с той и с той технологией. Озвучьте пожалуйста ваше мнение по вопросу «C# vs Java в 2020. Что выбрать?». Как следует делать выбор? На что ориентироваться? На что обратить внимание? В общем все возможное и не возможное по этой теме. C# и Java очень и очень схожи, но хочется для себя провести между ними различие, дабы выбрать нужный инструмент. Заранее благодарен!

Ответ на: комментарий от stasolog

Котлин не нужен по определению, но кому хочется сладкого, тот пусть на нем пишет, а не притаскивает всякое говно для «экономии» времени и места.

cocucka ★★★★☆
()

Если проект, который на C#/Java пишется за неделю/две, на C++ я буду пилить 3 месяца…

а скорость это показатель качества?)

darkenshvein ★★★★★
()
Ответ на: комментарий от stasolog

Это чудовищный и довольно криво работающий костыль.

Зачем он нужен, если IDE по хоткеям сгенерирует тебе Getter/Setter/toString/Equals/Construction и пр.?

EXL ★★★★★
()
Ответ на: комментарий от darkenshvein

Если проект, который на C#/Java пишется за неделю/две, на C++ я буду пилить 3 месяца…

а скорость это показатель качества?)

Это показатель для «поднять баблишка».) Немного наивно, но всё же.

Virtuos86 ★★★★★
()

Node.js 14 вышел - вот под него и писать, чтобы не бороться с многословностью Java/C#, за час напишешь под ноду то, что на этих монстрах будешь день пилить

menangen ★★★★★
()
Ответ на: комментарий от EXL

Это чудовищный и довольно криво работающий костыль.

Не сказал бы что костыль прям, он же использует стандартные возможности. А почему криво работающий?

Зачем он нужен, если IDE по хоткеям сгенерирует тебе Getter/Setter/toString/Equals/Construction и пр.?

Что бы это все в коде видно не было. Ну и там же не только геттеры-сеттеры.

stasolog
()
Ответ на: комментарий от stasolog

Это костыль для инвалидов, причем опасный костыль. Мало того, что он отбирает у тебя контроль и скрывает детали, так он еще на перформанс влияет.

cocucka ★★★★☆
()
Ответ на: комментарий от cocucka

Это костыль для инвалидов, причем опасный костыль. Мало того, что он отбирает у тебя контроль и скрывает детали

Что то мне это напоминает... Продуктивность разработки на C++. (комментарий)

так он еще на перформанс влияет

Но как? Он же во время компиляции код вставляет просто.

stasolog
()
Ответ на: комментарий от dave

встраиваемый софт для управления ядерными реакторами, или управления машинами, или управления поездами, или управления самолетами

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

Im_not_a_robot ★★★★★
()
Ответ на: комментарий от stasolog

он же использует стандартные возможности

Он ломает дополнение в куче IDE и для его полноценного использования требуется обмазываться различными плагинами и настройками.

А почему криво работающий?

Потому что когда тебе нужно сделать что-то нетривиальное, оно либо отсутствует в Lombok’е, либо находится в experimental с неясным будущем.

P.S. Don’t Use Lombok.

EXL ★★★★★
()

Если хочешь побольше зарплату, то выбирать Scala.

spec_po_kiskam ★★★
()
Ответ на: комментарий от EXL

Он ломает дополнение в куче IDE

У Java есть куча IDE? Я недавно поставил NetBeans, там и экспериментальные вещи автодополнялись итд, хотя кто его сейчас развивает? Я думал все на IDEA сидят, там то уж точно все имеется. Хотя может нужно что то сложное сделать что бы что то поломалось?

Потому что когда тебе нужно сделать что-то нетривиальное, оно либо отсутствует в Lombok’е, либо находится в experimental с неясным будущем.

Ну это не проблема существующих возможностей ведь.

stasolog
()
Ответ на: комментарий от stasolog

Он же во время компиляции код вставляет просто.

Ну да и тем увеличивает время компиляции. Это раз.

А еще он генерит неоптимальные hashCode и equals, которые влияют на производительность при работе с коллекциями. С билдерами сгенеренными тоже бывали проблемы. Это два.

А еще он модифицирует байт-код класса, что вообще-то annotation processor не должен делать.

cocucka ★★★★☆
()
Ответ на: комментарий от cocucka

Ну да и тем увеличивает время компиляции. Это раз.

И сильно?

А еще он генерит неоптимальные hashCode и equals, которые влияют на производительность при работе с коллекциями.

А какая альтернатива? Только руками писать, этим можно заняться используя lombok.

А еще он модифицирует байт-код класса, что вообще-то annotation processor не должен делать.

Ну вот это сомнительно, да.

stasolog
()
Ответ на: комментарий от stasolog

Не знаю как на NetBeans, а вот на IDEA этот Lombok у меня частенько глючит и IDE постоянно подчёркивает классы красненьким, пока не вычистишь кеши и не переимпортируешь проект заново.

Ну и да, не все кто пишет на Java сидят в NetBeans/IDEA/Eclipse и пр., а даже если и сидят, то тянуть себе в проект лишнюю 3rd party зависимость, которая ещё и должна влиять на конфигурацию IDE, не каждый горит желанием.

Ну это не проблема существующих возможностей ведь.

Это проблема консистентности кодовой базы. Одну вещь пишут через Lombok, а ту, которую Lombok не умеет, оставляют. В итоге получается какая-то стрёмная и пёстрая хрень.

EXL ★★★★★
()
Ответ на: комментарий от stasolog

И сильно?

Бывало и в два-три раза, сейчас хз, может оптимизировали.

А какая альтернатива? Только руками писать, этим можно заняться используя lombok.

Ну так вот и не нужен ломбок получается. Хешкоды руками писать, геттеры editor folding-ом скрыть.

cocucka ★★★★☆
()
Ответ на: комментарий от EXL

Реакция на критику Lombok пользователя Lombok

14 жаба делает не нужными @NonNull т.к. ide все равно не подсказывает что не так, а ошибки в рантайме в 14 версии будут и так точно указывать на источник null.

record делает не очень нужным @Data, хотя… он мутабельный, а record нет. Так что @Data может еще пригодится.

@var тоже ненужен будет после перехода на java9, хотя я им нигде кроме тестов не пользуюсь.

@log реально бесполезная штука, получается экономия строчки кода с декларированием поля, для того чтоб добавить строчку с аннотацией.

@NoArgsConstructor, @RequiredArgsConstructor не особо нужно, но если ломбок подключен то пользуюсь.

@Getter/@Setter и все прочее что генерирует геттеры и сеттеры НУЖНЫ! В котлин и скала поля называются атрибутами и являются полноценными участникам класса, их можно переопределять, обращения проксировать и делегировать. А в жабе пичалька.

anonymous
()

rust и только rust !!!

anonymous
()
Ответ на: комментарий от stasolog

Ну ахренеть теперь. Притащить костыль, чтобы потом еще костыль притащить?

Я тогда пойду сразу на XML программировать, чо уж там, терять нечго.

cocucka ★★★★☆
()
Ответ на: комментарий от Korchevatel

на нём банально проще писать оконные приложения (Win-only, но всё же)

А как же Mono?

Ну и по моему впечатлению, сейчас оконных приложений мало пишут, а если и пишут, то это получается бразуер. Остаётся применение C#/Java на сервере.

Но да, C# сейчас всё ещё клонится в сторону винды. Может, лет через пять это поменяется, и на нём можно будет писать что под Линукс, что под оффтоп, поэтому Java более соответствует форумной тематике.

gedisdone ★★★
()
Ответ на: комментарий от stasolog

Ммм… притянуть Lombok, чтобы увеличить время компиляции, неявно встроить/модифицировать себе какой-то байткод с неизвестно какой гарантией по производительности, затем получить проблемы с IDE, усложнить процесс автодополнения и разбора кода, потому что всё будет идти через доп. фильтры, затем героически делать delombok, чтобы привычные инструменты работали нормально.

А всё ради чего? Ради лени написать пару явных строк, генерацию которых можно вообще забиндить на нажатие хоткея.

EXL ★★★★★
()
Ответ на: комментарий от stasolog

WSL1 претит тем, что в нём из коробки можно обращаться к виндовым разделам без лишних телодвижений и наоборот.

Не знаю, как там WSL2, но раз это Hyper-V, то чем оно лучше того же VirtualBox, я не вижу.

gedisdone ★★★
()

Ребята, заканчивайте халиварить. ТС ожидает ответа о том, что лучше юзать в его случае, а еще лучше, как провести различие. А не ваши споры, у кого, простите, задница больше и красивее. И у кого лучше работает.

Jonikster
() автор топика

На 1 курсе у нас C. Я на него забил, просто написал программу на C++, предъявил преподу, мол я шарю, и все C# vs Java в 2020. Что выбрать?

Эвтаназию. Такие сотрудники не нужны.

PPP328 ★★★★★
()
Ответ на: комментарий от anonymous

Я могу сказать, что этот пользователь забыл одну запятую в заголовке своего топика. Довольно комично, лол. Сам тред уже закрыт, поэтому не могу его спросить, что он там увидел в тексте новости, а пруфов он не привел. Ты доволен моим ответом, чепушила?

Virtuos86 ★★★★★
()
Ответ на: комментарий от EXL

Имею два рабочих проекта на net core, крутящихся под линуксом - дискорд бот и веб-приложение примочка к боту на аспнете.

Прям сейчас пишу по работе микросервис, который точно также будет разворачиваться под линуксом.

Из проблем - у net core есть ряд windows-only api (COM, примитивы синхронизации типа именованных мутексов), но я подозреваю у жабы тоже есть свои особенности. Ну и традиционно слабая документация. А так в общем-то нормально.

Midael ★★★★★
()
Последнее исправление: Midael (всего исправлений: 1)

На 1 курсе у нас C. Я на него забил, просто написал программу на C++, предъявил преподу, мол я шарю, и все.

Ну все ты в черном списке метапрога. По сабжу выбирай Метапрог, среда разработки с визуальным вводом программ следующего поколения, очень перспективная разработка, активно развивается, сможешь быть у истоков. Кстати @stasolog кофеечка, от тебя я такого не ожидал, я конечно все понимаю, но почему я должен заманивать людей в проект метапрога :3

abcq ★★
()
Ответ на: комментарий от Midael

А учитывая еще что можно биндится всегда к С, сейчас вообще особо разницы нет, джава это будет или дотнет. Конечно джава вообще прямо все из коробки, но для человека который программирует это никогда не могло бы быть проблемой.

abcq ★★
()
Ответ на: комментарий от Midael

Ну и традиционно слабая документация.

Странно, я всегда считал документацию Microsoft одной из лучших.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Анекдотический пример: в одном из их энтерпрайзных фреймворков есть метод, который загружает файл. Естественно у метода есть перегрузка, принимающая Stream. Пытаемся залить стрим с сетевого ресурса - получаем непонятную ошибку. Лезем рефлектором в библиотеку - оказывается, что стрим должен быть CanSeek и CanStat (а сетевой поток не может в seek), но нигде об этом не написано - ни в документации, ни в блогах Enterprise IT Consultant Pajit Shitstreet. Сакральное знание как есть.

Дальше если говорить конкретно о net core, а еще конкретнее об asp net core:

1) Много магии, которая нигде не объясняется. UseSomeFeature при конфигурировании фреймворка на старте - что оно делает? В документации написано «Adds needed services to use SomeFeature». Хочешь подробностей - милости прошу на гитхаб, смотреть че конкретно в extension методе для билдера происходит

2) Система мидлварей у нового аспнета определенно лучше, чем asp net page lifecycle из двухтысячных, но вот нюанс - мидлвари чувствительны к порядку их вставки в пайплайн. Правильный порядок что? Правильно, нигде не написан. Поставил не туда UseForwardedHeaders для работы за реверс прокси - ничего не будет работать. Ошибок скорее всего тоже не будет.

3) Они быстро двигаются и ломают вещи. Сакральные знания, нагугленные вчера, сегодня могут быть уже неактуальны, т.к. в новой версии че-нибудь поменяли. Милости прошу на гитхаб, следить за announcement'ами.

Это все конечно YMMV и с опытом скорее всего не так остро ощущается. Плюс я не знаю как там в жава мире. Говорят в спринге тоже магия через магию...

Midael ★★★★★
()
Ответ на: комментарий от theNamelessOne

Везде так, я полагаю. И везде никто не заморачивается с документацией на этот счет?

Midael ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.