Немного истории

В 1991 Джеймс Гослинг со своей командой из компании Sun Microsystems начали разрабатывать первую версию Java, которая тогда называлась Oak (Дуб). Нацеленные на программирование бытовой техники с различными процессорами, главной целью команды было создание кросс-платформенного языка. Со временем оказалось, что помимо этого у Java есть еще одно преимущество - безопасность и стабильность.

С# - более новая технология, разработанная Microsoft в 1998-2001, и во многом основанная на принципах Java. Поэтому С# еще часто называют “Microsoft Java”. Изначально она имела большой недостаток - работа велась исключительно на Windows, но с изобретением фреймворка .NET Core С# получил второе рождение.

Область применения

Java:

  1. Enterprise-системы, направленные на автоматизацию предприятий в различных сферах (банковская, финтех, телеком и так далее)

  2. мобильная разработка (Android) 

С#:

  1. как и у  Java, Enterprise-системы

  2. разработка под Windows. Это осуществимо и с Java, но desktop-приложения на ней не пишут почти никогда. Гораздо более функциональным будет выбор C#/WPF

  3. игры (на движке 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 будет выбрана с наибольшей вероятностью.