
Сравнение Java и С# — тема многочисленных интернет-баталий и холиваров. Этому противостоянию даже посвящена своя отдельная страничка в Википедии. Схватка в умах разработчиков началась давно и она, кажется, вышла зрелищнее, чем борьба Android с iOS. Но на сегодняшний день страсти вроде бы улеглись. Каждый язык занял свое место и развивается согласно собственной концепции.
Вот тут то мы и решили подвести черту. Не будем сравнивать языки с точки зрения вакансий и коммерческих перспектив. Просто спросим у наших экспертов, преподающих в IT-Академии, об их ключевых отличиях и идеях. Может быть, пора заключить перемирие?
Ну а если серьезно, то вопрос выбора языка программирования для начинающих свою карьеру в IT стоит как правило остро. При этом единственно верного ответа просто не существует. Мы попросили наших экспертов сравнить языки с точки зрения практического применения при решении реальных задач.
Степан Яковенко, архитектор программного обеспечения в компании “LFIRON” (Словакия), более 10 лет опыта работы на Java, преподаватель курса Java Developer:
Язык C# приятен тем, что там больше синтаксического сахара, проще вызывать виндовые DLL. Мы портировали большой проект с C# на Java и выяснили, что C# работает с файловой системой значительно быстрее; в Java чтение из файла по байтам — разорительная операция.
С другой стороны, Java — более открытая технология. Если у вас появилась проблема с компонентом или средой, то шансов открыть их и исправить самостоятельно больше, чем в случае с более закрытыми решениями Microsoft, хотя и там это тоже иногда возможно. Мне это тяжело сейчас оценивать, но раньше цена входа для новичка в C# была ниже.
В Java довольно много необходимых знаний, которые разбросаны по интернету, а у Microsoft стратегия собрать все в одном месте, чтобы удешевить разработку. Но чем более уникальные у вас знания, тем больше они ценятся на рынке труда.
Где-то в курсе математики доказывается, что все языки программирования эквивалентны. Ограничение Java как языка — это необходимость что-то делать чересчур быстро, например, потоково сжимать графику или работать с очень большими объектами, которые из-за накладных расходов лучше хранить в куче (heap) C/C++. Но если требования к производительности умеренные, то, в принципе, можно достигнуть высокой нагрузки и на Java.
Олег Колесников, Software Engineer, Axmor Software, Inc, Новосибирск, программирует на языках C++/C#, преподаватель курса C# (C Sharp) онлайн:
С# — это очень хорошо продуманный высокоуровневый объектно-ориентированный язык программирования. На платформе .Net можно реализовать любое приложение: от оконной Windows программы (при помощи современной технологии WCF) и современных веб сайтов (с помощью ASP.NET) до мобильных и облачных приложений. Формально владение языком C# позволяет разрабатывать приложения для любой платформы и операционной системы. Например, компания Xamarin активно развивает проект Mono — реализацию .Net для UNIX-подобных операционных систем. Таким образом, можно сказать, что язык C# успешно конкурирует с другими языками программирования. Он не лучше и не хуже других языков, он просто занимает свою долю рынка, причем очень приличную.
Все эти языки реализуют идею объектно-ориентированного программирования. C#, как и Java является JIT-компилируемым языком, т.е. в процессе компиляции программы создаётся промежуточный байт-код, а в процессе выполнения самой программы, среда исполнения компилирует этот байт-код в машинные команды. Такой подход позволяет разрабатывать кроссплатформенные приложения, в отличие от C++, где для каждой отдельной платформы, скорее всего, придется написать своё приложение. Тем не менее, хорошо написанная программа на С++ будет производительнее аналога, написанного на языке с JIT-компиляцией. Что касается конкуренции между Java и C#, я думаю, что последний развивается быстрее благодаря стараниям компании Microsoft.
Николай Толстокулаков, старший преподаватель Факультета Информационных Технологий в НГУ, более 11 лет опыта разработки на Java, преподаватель курса Advanced Java with EE (Java для опытных):
Никто из них не умрет в ближайшее десятилетие. Самый острый этап конкуренции между ними тоже позади лет десять как. У каждого языка есть свои области, в которых они уже прочно обосновались. Конкуренция и обмен идеями между ними пошла на пользу обоим. Сфера применения Java гораздо шире и рынок программистов больше. Формально есть Tiobe index, где рейтинг отличается в три раза. Основное применение C# пока так и ограничивается Windows-платформами, но их доля на мобильном рынке ничтожна, а на серверном рынке испытывает давление со стороны Linux. Такие компании, как Google, Facebook, Twitter, строят свой бизнес из сотен тысяч серверов без использования Windows & .Net/C#. Значение desktop падает из-за планшетов. Альтернативные решения с использованием C# за пределами Windows есть, но особой популярности не завоевали.
Границы применимости Java — работа на низком уровне с hardware, ядром операционной системы, системы реального времени и там, где требуется выжать из железа все, что можно, и даже чуть больше. Стартапы, если речь идет не об Android, а о Web-сервисах, чаще используют другие технологии (PHP, JavaScript, Python, Ruby).
А вот интеграция разнородных распределенных систем — сильная сторона Java-платформы. Это связано, на мой взгляд, с двумя вещами: кроссплатформенностью самого Java и наличием библиотек интеграции практически со всеми системами и сервисами. Также производительность JVM и множество библиотек позволяют заниматься трансформациями данных при интеграции разнородных систем из самых экзотических форматов.
Заключение
Как ни крути, ответ на вопрос, поставленный в заголовок данной статьи, невозможно сформулировать единственно правильным образом. Скорее всего даже, что кого-то данный материал еще больше запутал, однако это отнюдь не вина наших экспертов — такова природа самих языков программирования. В первую очередь, это инструменты, которые могут быть использованы для разных целей и которые могут попасть в разные руки. И в зависимости от этого меняется их функционал и мощность.