Немного истории
В 1991 Джеймс Гослинг со своей командой из компании Sun Microsystems начали разрабатывать первую версию Java, которая тогда называлась Oak (Дуб). Нацеленные на программирование бытовой техники с различными процессорами, главной целью команды было создание кросс-платформенного языка. Со временем оказалось, что помимо этого у Java есть еще одно преимущество - безопасность и стабильность.
С# - более новая технология, разработанная Microsoft в 1998-2001, и во многом основанная на принципах Java. Поэтому С# еще часто называют “Microsoft Java”. Изначально она имела большой недостаток - работа велась исключительно на Windows, но с изобретением фреймворка .NET Core С# получил второе рождение.
Область применения
Java:
Enterprise-системы, направленные на автоматизацию предприятий в различных сферах (банковская, финтех, телеком и так далее)
мобильная разработка (Android)
С#:
как и у Java, Enterprise-системы
разработка под Windows. Это осуществимо и с Java, но desktop-приложения на ней не пишут почти никогда. Гораздо более функциональным будет выбор C#/WPF
игры (на движке Unity). Этот пункт включает и мобильную, и кросс-платформенную разработку. Например, Hearthstone - очень популярна игра, написанная на C#
Лицензия
Обе технологии предоставляют возможности бесплатной разработки, но нужно помнить о некоторых вещах.
Java: В середине 2018 года Oracle объявил, что собирается изменить лицензионную политику. 16 апреля 2019 года изменение вступило в силу. Теперь все опубликованные после этой даты сборки Java SE можно использовать бесплатно только для личных нужд и с целью разработки. Для использования в коммерческих целях (в том числе для продакшена) надо оформить платную подписку у Oracle. Но, с другой стороны, есть и другая официальная сборка - OpenJDK, которую можно использовать бесплатно.
C#: Язык бесплатный, но некоторые IDE - нет. Как обычно, платные предлагают больше возможностей и безопасности, так что платить или не платить - это ваше решение. Кроме того, для базы данных вам понадобится сервер MsSQL.
Популярность
Этот график отражает статистику веб-поиска. Java лидирует с большим отрывам, но ее популярность заметно снижается.
Похожая ситуация и на рынке вакансий
Опять же, Java выше C#, но нельзя сказать, что со значительным отрывом. Да, вакансий на Java больше чем в 2 раза, но следует иметь в виду: на Java намного больше кандидатов, ведь спрос рождает предложение.
Более того, если посмотреть на количество разработчиков-профессионалов на обоих языках, у Java явное преимущество, ведь технология старше и изменяется не так динамично. Наш вывод полностью подтверждается статистикой Github.
Важно также учитывать, что с приходом коронавируса появилось большое количество удаленных вакансий, поэтому шансы найти работу на обеих технологиях примерно равны.
Стабильность и миграции
Синтаксис Java практически не менялся из версии в версию. Конечно, язык совершенствовался, добавлялись новые функции и возможности, но тем не менее синтаксис очень стабилен. Код, написанный 20 лет назад более чем читаем, если знать только самые современные технологии. Поэтому поддерживаемость кода Java на высоте.
Чего нельзя сказать о С#. За последние 15 лет язык изменился почти до неузнаваемости, настолько динамично его развитие. Да, большинству программистов нравиться постоянно изучать что-то новое, даже в рамках одной технологии. Тут уж дело вкуса каждого.
Изучение
Оба языка имеют С-подобный синтаксис, похожую структуру и возможности. Поэтому при изучении покажутся одинаковой сложности. Кстати, из-за этого переучиться с одного языка на другой довольно просто и займет всего пару дней (проверено командой Лансофт).
Но так как Java старше более стабильна, то по ней вы найдете гораздо больше материалов. Разработаны и методики изучения, поэтому она является классическим примером и преподается в большинстве технических университетов.
Естественно, это не значит, что по C# нет материалов и курсов. Конечно же есть, и, конечно, он тоже преподается в университетах. Но все же Java более распространен.
Фреймворки
Как мы уже писали, С# сам по себе совместим только с Windows. .NET Framework(2002) - оригинальная версия .NET, тоже. А вот .NET Core - кроссплатформенный, и наиболее широко используем. Его можно сопоставить с фреймворками на основе Spring у Java. Здесь практически 100%-е совпадение по возможностям, нельзя сказать, что что-то есть в Java и нет в C#. Но все-таки инфраструктура Java надежнее и как-то более отполирована.
C# vs Java: Кто победитель?
Никто не может с уверенностью сказать, какой язык лучше и у какого больше перспектив. Ясно, что с тем огромным количеством строк кода на обоих языках и с тем количеством Enterprise- систем, обе технологии продолжат уверенное существование. Языки похожи, но области применения разнятся, и для игр или desktop - приложений вы выберете С#, а для мобильной разработки - Java.
А вот что касается Enterprise- систем, вы, скорее всего, уловили мое видение текущей ситуации: Java пока что более надежна. Это нельзя отрицать, и если заказчику будет нужно разработать защищенное приложение с тысячами пользователей одновременно, Java будет выбрана с наибольшей вероятностью.
oleg_gavrilov
Сначала удивлялся, как можно такое постить на хабре, но потом посмотрел тэги и всё стало ясно. Кармы не хватило на хаб «я пиарюсь»?