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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.