
Подавляющее большинство программистов на вопрос, на каком языке пишут приложения для Android, даст один из двух вариантов ответа: Java или Kotlin. В этом нет ничего удивительного, если учесть простой и очевидный факт. Именно эти два языка являются официальными и поддерживаются компанией Google – разработчиком операционной системы Android. Как и основной платформой для программирования для этой ОС – Android Studio. Поэтому сравнение языков выглядит вполне логичным. Рассмотрим противостояние Kotlin vs Java более внимательно.

Первым делом необходимо дать некоторые общие сведения о каждом из языков программирования. Целесообразно начать с более «старшего».
Java относится к типизированным и объектно-ориентированным языкам программирования. Создан одним из первых – в 1995 году – компанией Sun Microsystem, позднее приобретен одной из крупнейших IT-корпораций Oracle. Язык является универсальным, так как используется для написания разнообразных клиентских и серверных приложений. Но основным направлением применения многие специалисты считают создание ПО для Android. До 2017 года был единственным языком, официально поддерживаемым Google и сервисом компании Android Studio.

Kotlin также относится к типизированным и объектно-ориентированным языкам программирования. В этом нет ничего удивительного, так как он работает поверх JVM (Java Virtual Machine), которая является основной частью исполнительной системы Java. Поэтому с некоторой долей условности Kotlin можно назвать надстройкой над Java.
Язык появился в 2011 году, а в 2017 получил официальный статус от компании Google в качестве инструмента для работы на Android Studio. Что стало основанием для длительных разбирательств между Google и Oracle, чьи интересы, как владельца бренда Java, были затронуты таким решением.

Разработчики Kotlin, как и специалисты Google, декларируют множество преимуществ этого языка программирования над Java. На официальном сайте операционной системы Андроид приводятся следующие плюсы Kotlin:
Но даже активная поддержка со стороны Google не привела к потере лидирующих позиций Java. Именно этот язык продолжает использовать большая часть разработчиков, что позволяет ему входить в топ-5 (часто – в топ-3) любых опросов среди программистов. Kotlin обычно занимает места ниже 10-го, а иногда и не входит в топ-20.

Поэтому на вынесенный в подзаголовок вопрос можно ответить однозначно: намного чаще на Java. Важно понимать, что такой перевес достигается в значительной степени за счет простых и средних по сложности приложений. Это объясняется тем, что серьезные профессионалы в программировании для Android все активнее используют именно Kotlin. Но в пользу Java сказывается намного более длительная история и огромное число приложений, написанных ранее.

Но нужно сделать одну важную оговорку. Java так сильно доминирует над Kotlin не из-за каких-то своих положительных качеств, а из-за легаси. До появления Kotlin все повально писали код на Java, и с появлением Kotlin они, естественно, не стали переходить на новый язык – пришлось бы переписывать весь код и перекапывать всю архитектуру. А раз старые приложения продолжают писать на Java – значит, спрос на джавистов намного больше, чем на Kotlin-разработчиков. А раз джавистов – больше, то и новые приложения чаще пишутся на Java, потому что у джавистов нет времени/желания изучать Kotlin. Формируется порочный круг, который медленно разрывают стартапы, не имеющие легаси по определению. Поэтому не стоит отдавать предпочтение Java только потому, что ее больше на рынке – Java-разработчиков на рынке тоже больше, то есть вы столкнетесь с более серьезной конкуренцией.
Оба языка программирования являются универсальными и хорошо дополняют друг друга. Считать, что они используются исключительно для Android-разработки, в корне неверно. Напротив, каждый из языков имеет намного большую сферу практического применения. Применительно к Java она включает:
Область использования Kotlin не менее обширна и включает:
Язык Java активно применяется в работе сайтов практически всех ведущих корпораций мира. Как было отмечено, он продолжает оставаться намного более популярным, чем конкурент. Но после 2017 года многие из них, например, Twitter, Netflix и сам Google, часть проектов и сервисов переводят на Kotlin.
Предсказать дальнейшее развитие событий и итоговый результат конкурентной борьбы между схожими языками программирования достаточно сложно.Что не делает невозможным их сравнение по наиболее важным критериям, приведенное в таблице.
Критерий сравнения | Язык программирования | |
Java | Kotlin | |
Возраст | Около 27 лет. Java намного старше, что является одним из ключевых аргументов в его пользу | Примерно 11 лет. Заметно уступает конкуренту по этому параметру |
Объем кода | Сравнительно большой, заметно более громоздкий, чем у Kotlin | Краткий и лаконичный. Один из самых простых в написании |
Безопасность | Относительно невысокая | Высокая, предусматривающая встроенную опцию null-безопасности |
Среда программирования | Одинаковая для обоих языков разработки ПО – Android Studio | |
Цели создания ПО | Преимущественно поддержка старых продуктов, написание простых приложений | Разработка нового и сложного программного обеспечения с длительным сроком использования |
Комьюнити | Намного многочисленнее, с большим количеством форумов, тематических сайтов и методических ресурсов | Находится на стадии активного формирования, уступает по численности и имеющимся ресурсам |
Доля рынка Android | По разным данным – в диапазоне 75-85% | По разным данным – в диапазоне 15-25% |
Запросы работодателей | Входит в число обязательных требований по большинству вакансий | Выступает необходимым требованием далеко не всегда, но очень часто – при наборе в самые серьезные IT-компании |
Перспективы | Сохраняются хорошими из-за огромного количества приложений, созданных с помощью Java. Переписать их все на Kotlin или другие языки программирования попросту невозможно | Выглядят несколько предпочтительнее, в том числе – за счет очевидной поддержки Google |
Несмотря на родство, языки довольно ощутимо отличаются друг от друга в мелочах, и обычно эти мелочи делают жизнь программистов на Kotlin более удобной.

Первый пример различия – это null по ссылке. В Java можно без проблем написать:
String new_string = “Hello world”; new_string = null;Ссылка указывала на строку, одна строчка кода – и ссылка уже никуда не указывает. И это – ужасный дизайн, потому что одна упущенная ссылка может сломать все приложение, и искать баг вы будете очень долго. Kotlin позволяет вам делать ссылки, которые не могут быть null:
var foo: String = "Hello World!" foo = null // compilation error var bar: String? = "This is nullable" bar = null // okayЕсли вы создали простую ссылку – она в принудительном порядке должна указывать на строку. Хотите сделать так, чтобы ссылка могла быть null – поставьте специальный оператор «?».
Оператор Switch в Java выглядит крайне громоздким и неудобным:
public class Calculator { public static double calculate (double a, String op, double b) throws Exception { switch (op) { case "plus": return a+b; case "minus": return a-b; case "div": return a/b; case "times": return a*b; default: throw new Exception(); } } }В Kotlin его существенно оптимизировали:
fun calculate(a: Double, op: String, b: Double): Double = when (op) { "plus" -> a + b "minus" -> a - b "div" -> a / b "times" -> a * b else -> throw Exception() }Создание классов в Java – это ад, потому что нужно переопределить как минимум 3 метода класса Object (toString(), equals() и hashCode()), для каждого поля нужно добавить геттеры и сеттеры:
public class Person { private String name; private String email; private int age; public Person(String name, String email, int age) { this.name = name; this.email = email; this.age = age; } public String getName() { return name; } public String getEmail() { return email; } public int getAge() { return age; } @Override public String toString() { //переопределение } @Override public int hashCode() { //переопределение } @Override public boolean equals(Object obj) { //переопределение } }При этом в 99% случаев переопределение – настолько стандартное, что IDE все сама делает за вас. В Kotlin весь код выше (и это – сокращениями) умещается в одну строку:
data class Person(val name: String, val email: String, val age: Int)Kotlin может дополнить функционал класса «на лету»:
fun String.greeting(): String = "Hi there!" fun main() { val foo = "DaString" val bar = foo.greeting() // "Hi there!" }Java так не умеет, совсем.
Kotlin заимствовал от Python возможность объявлять функциональность вне классов:
fun foo(): String = "Hi there!" class SomethingRandom { fun bar(): String = "Hi there!" }Это позволяет вам писать функционал в зависимости от своих потребностей, а не в зависимости от навязываемых языком правил. Java же жестко навязывает правила игры: ничего вне класса описать нельзя.
Увы, в Kotlin его нет, поэтому приходится изобретать велосипеды:
val foo = if (bar == 1) getMessage() else "Hi there!"Java заставляет вам перехватывать все выкидываемые кодом исключения, в то время как Kotlin позволяет вам не обрабатывать исключения вовсе – тогда их будет выкидывать через весь стэк вызовов по стандартному протоколу. Это однозначно можно назвать минусом – если вы сами выкидываете где-то в коде исключение, вы должны его как-то обработать, а если кода для обработки нет – значит, вы забыли его написать (и обнаружите вы это только тогда, когда приложение крашнется).
Большая часть специалистов ответит на этот вопрос достаточно просто: сначала имеет смысл освоить Java в качестве базы. Только после этого целесообразно переходить к изучению Kotlin, что позволит повысить уровень профессиональной подготовки и станет важным плюсом в глазах работодателя.
Обратный порядок освоения языков программирования вряд ли окажется эффективным. Он возможен только в том случае, если обучение ведется с опытным наставником и направлено на решение четко поставленной задачи.
Например, реализации определенного проекта, где требуется исключительно знание Kotlin и его окажется достаточно.
На это существует, как минимум, три веских причины. Первая и главная – языки являются прямыми конкурентами в разработке приложений для Android, а это один из самых больших сегментов рынка ПО. Вторая – признание Google обоих языков в качестве официальных для Android Studio. Третья – создание Kotlin фактически на базе Java.
Главные из них состоят в следующем: более длительная история, большое число разработанных приложений и подготовленных специалистов, многочисленное профессиональное комьюнити со всеми вытекающими отсюда последствиями в виде тематических интернет-ресурсов и форумов.
Язык программирования проще, компактнее и безопаснее. Он заметно удобнее в работе и позволяет создать более производительные приложения.
Java остается намного более востребованным и широко применяемым языком программирования.
У каждого из них хорошие перспективы. Хотя Kotlin выглядит несколько предпочтительнее, прежде всего – из-за разносторонней поддержки от Google.