Компания ДомКлик существует с 2015 года, и за это время мы успели сменить целевой язык для разработки ключевых сервисов с Java на Kotlin.
Меня зовут Александр Коцюруба, руковожу разработкой внутренних сервисов в компании ДомКлик. Отвечая на вопрос, почему мы перешли на Kotlin, я опубликую два материала:
Итак, начнем.
Для JetBrains IDE — основной продукт, и они, как IT-компания, заинтересованы в быстром развитии и качестве своих продуктов. Разрабатывается Intellij IDEA на платформе JVM 6. С одной стороны, виртуальная машина отлично справляется с нагрузкой, надежна, как автомат Калашникова, и представлена внушительным сообществом. С другой стороны, развитие Java как языка начинает замедляться. Это связано в том числе с финансовыми трудностями в компании Sun Microsystems – языку банально начинают уделять меньше внимания, это видно из релизной частоты Java.
Таймлайн релизов Java и Intellij IDEA:
Как видно компания JetBrains успела выпустить шесть мажор-версий Intellij IDEA. В то время как Java продвинулось только на одну. Причем Java 6 не была большим прорывом, как, например, Java 5.
На момент 2010 года Java уже достигла совершеннолетия (~20лет, старт разработки в 1990 году) и слегка «обросла мхом» в размере >50k классов. Со слов Андрея Бреслава abreslav, принимающего участие как внешний эксперт в разработке лямбд для Java, добавить такой функционал не нарушив работу JVM было достаточно сложно (одна из причин отложить релиз функционала в Java 8).
Это сподвигло JB посмотреть в сторону других языков для разработки своих продуктов. В компании были компетенции по разработке на популярных на тот момент языках Groovy и Scala.
От Groovy пришлось отказаться из-за недостатков динамически типизированных языков:
Scala также не подошла для внутренней разработки JetBrains:
Стоит отметить, что Scala была удачным проектом с точки зрения совмещения разных концепций в одном языке.
В то же время JetBrains при разработке той или иной среды разработки пишет фронтальный компилятор для соответствующего языка. Это включает в себя разбор семантического дерева, подсветку и т.п. Другими словами, описывает половину работы компилятора. Имея на тот момент 7 IDE, можно сказать, что компания JetBrains разработала 3.5 компилятора.
Очевидно, что лаконичный код поможет сфокусироваться на бизнес-логике, что, в свою очередь, увеличит скорость разработки и уменьшит риск ошибки. Java 6 этому не способствовала, а жизнь самого языка и платформы была непонятна (отсылка к SUN и слухам продажи в Oracle Corp). Это подтолкнуло компанию к разработке языка под свои внутренние нужды.
Ключевые требования к языку были следующие:
Так зародился проект под названием Kotlin.
К этому времени появляется MVP Kotlin.
JB переводит Kotlin в статус opensource и начинает активно его использовать для внутренней разработки IDE. По результатам опыта внутреннего использования планируется решить, выпускать ли первый релиз продукта.
Выходит релиз Kotlin 1.0 с поддержкой JVM 6 и Android. В это время ДомКлик также пилотирует Kotlin и выпускает написанный на нем сервис безопасных расчетов – безналичный способ взаиморасчета за объект недвижимости между покупателем и продавцом. Разработчики довольны лаконичностью, возможностями и идеями языка и приняли решение включить Kotlin в список «дозволенных языков разработки».
Выходит релиз Kotlin 1.1. Среди значимых фич стоит отметить:
Пару слов хочется добавить про компиляцию в JS. Учитывая опыт по разработке фронтальных компиляторов и потребности разработки, Kotlin практически с самого начала поставил перед собой задачу поддержки мультиплатформенности (Kotlin MPP, подробнее дальше в статье).
Выходит релиз Kotlin 1.2. В релиз включают:
Под поддержкой мультиплатформы подразумевается возможность подключения в проект модулей как специфичных для конкретной платформы, так и общих для платформ.
В это же время Google включает поддержку языка Kotlin по умолчанию в Android Studio 3.0. На мой взгляд, это значимое событие для сообщества Kotlin, т.к. по сути язык получил признание со стороны Android сообщества в лице гиганта Google.
В октябре выходит релиз 1.3, включающий стабильные корутины с обратной совместимостью и компилятор в нативный код.
В этом же году на архитектурном комитете в ДомКлике принимается решение о смене целевого языка разработки с Java на Kotlin.
В 2019 году для сообщества Kotlin происходит важное событие – все тот же Google на конференции устанавливает Kotlin как стандарт для разработки Android приложений.
Весной 2019 мы достигаем переломной точки в смене Java на Kotlin. Наши графики показывают, что прирост функционала на Kotlin опередил Java. Другими словами, мы стали больше писать на Kotlin, нежели на Java, и наша ключевая компетенция де-факто сменилась на Kotlin.
На сегодняшний день стоит отметить существование Kotlin for Data science. Данную тему хотелось бы осветить отдельно, погрузившись глубже и показав преимущества в следующих статьях.
У нас же в компании на server-side доминирует Kotlin в сравнении с Java более, чем в 3 раза.
В целом у нас в компании разнообразие языков программирования:
При помощи Kotlin MPP вы можете использовать Kotlin как дефолтный язык в разработке в своей компании. Мы в ДомКлике провели успешный пилот по разработке ипотечного калькулятора на Kotlin MPP для платформ Kotlin/JVM (Server-Side + Android) + Kotlin/Native(iOS). В дальнейших наших планах расширить пилот до Kotlin/JS.
И подводя итоги.
Первая часть статьи вышла теоритически-исторической, на то она и ретроспектива. Вторая часть будет ближе к практике, в ней мы рассмотрим на примере Kotlin/JVM:
Полезные ресурсы:
Меня зовут Александр Коцюруба, руковожу разработкой внутренних сервисов в компании ДомКлик. Отвечая на вопрос, почему мы перешли на Kotlin, я опубликую два материала:
- Первая часть будет посвящена ретроспективе возникновения языка (которую вы, собственно, и будете сейчас читать)
- Вторая часть будет ориентирована на практически примеры (которая выйдет позже)
Итак, начнем.
2010 год:
- в августе проходит парад планет
- в начале декабря в Цюрихе прошло объявление России как страны, принимающей чемпионат мира по футболу 2018 года
- в конце декабря компания JetBrains выпускает Intellij IDEA 10.0
Для JetBrains IDE — основной продукт, и они, как IT-компания, заинтересованы в быстром развитии и качестве своих продуктов. Разрабатывается Intellij IDEA на платформе JVM 6. С одной стороны, виртуальная машина отлично справляется с нагрузкой, надежна, как автомат Калашникова, и представлена внушительным сообществом. С другой стороны, развитие Java как языка начинает замедляться. Это связано в том числе с финансовыми трудностями в компании Sun Microsystems – языку банально начинают уделять меньше внимания, это видно из релизной частоты Java.
Таймлайн релизов Java и Intellij IDEA:
Как видно компания JetBrains успела выпустить шесть мажор-версий Intellij IDEA. В то время как Java продвинулось только на одну. Причем Java 6 не была большим прорывом, как, например, Java 5.
На момент 2010 года Java уже достигла совершеннолетия (~20лет, старт разработки в 1990 году) и слегка «обросла мхом» в размере >50k классов. Со слов Андрея Бреслава abreslav, принимающего участие как внешний эксперт в разработке лямбд для Java, добавить такой функционал не нарушив работу JVM было достаточно сложно (одна из причин отложить релиз функционала в Java 8).
Это сподвигло JB посмотреть в сторону других языков для разработки своих продуктов. В компании были компетенции по разработке на популярных на тот момент языках Groovy и Scala.
От Groovy пришлось отказаться из-за недостатков динамически типизированных языков:
- Низкая производительность языка в runtime
- Высокая стоимость рефакторинга
- Отсутствие полноценной IDE
Scala также не подошла для внутренней разработки JetBrains:
- Отсутствие полноценной IDE для языка
- Высокий порог входа
- Высокая стоимость разработчиков
- Производительность компилятора
Стоит отметить, что Scala была удачным проектом с точки зрения совмещения разных концепций в одном языке.
В то же время JetBrains при разработке той или иной среды разработки пишет фронтальный компилятор для соответствующего языка. Это включает в себя разбор семантического дерева, подсветку и т.п. Другими словами, описывает половину работы компилятора. Имея на тот момент 7 IDE, можно сказать, что компания JetBrains разработала 3.5 компилятора.
Очевидно, что лаконичный код поможет сфокусироваться на бизнес-логике, что, в свою очередь, увеличит скорость разработки и уменьшит риск ошибки. Java 6 этому не способствовала, а жизнь самого языка и платформы была непонятна (отсылка к SUN и слухам продажи в Oracle Corp). Это подтолкнуло компанию к разработке языка под свои внутренние нужды.
Ключевые требования к языку были следующие:
- Совместимось с Java (т.к. в компании большое количество кода уже было на Java)
- Лаконичность
- Быстрый
- Типобезопасность
Так зародился проект под названием Kotlin.
2010 — 2016:
2012:
К этому времени появляется MVP Kotlin.
JB переводит Kotlin в статус opensource и начинает активно его использовать для внутренней разработки IDE. По результатам опыта внутреннего использования планируется решить, выпускать ли первый релиз продукта.
2016:
Выходит релиз Kotlin 1.0 с поддержкой JVM 6 и Android. В это время ДомКлик также пилотирует Kotlin и выпускает написанный на нем сервис безопасных расчетов – безналичный способ взаиморасчета за объект недвижимости между покупателем и продавцом. Разработчики довольны лаконичностью, возможностями и идеями языка и приняли решение включить Kotlin в список «дозволенных языков разработки».
2017 — наши дни:
2017 март:
Выходит релиз Kotlin 1.1. Среди значимых фич стоит отметить:
- Поддержка JVM 8
- Корутины (экспериментальная версия)
- Компилятор в JavaScript
Пару слов хочется добавить про компиляцию в JS. Учитывая опыт по разработке фронтальных компиляторов и потребности разработки, Kotlin практически с самого начала поставил перед собой задачу поддержки мультиплатформенности (Kotlin MPP, подробнее дальше в статье).
2017 Ноябрь:
Выходит релиз Kotlin 1.2. В релиз включают:
- Поддержка мультиплатформы
- Компилятор в нативный код (экспериментальная версия)
Под поддержкой мультиплатформы подразумевается возможность подключения в проект модулей как специфичных для конкретной платформы, так и общих для платформ.
В это же время Google включает поддержку языка Kotlin по умолчанию в Android Studio 3.0. На мой взгляд, это значимое событие для сообщества Kotlin, т.к. по сути язык получил признание со стороны Android сообщества в лице гиганта Google.
2018:
В октябре выходит релиз 1.3, включающий стабильные корутины с обратной совместимостью и компилятор в нативный код.
В этом же году на архитектурном комитете в ДомКлике принимается решение о смене целевого языка разработки с Java на Kotlin.
2019:
В 2019 году для сообщества Kotlin происходит важное событие – все тот же Google на конференции устанавливает Kotlin как стандарт для разработки Android приложений.
Весной 2019 мы достигаем переломной точки в смене Java на Kotlin. Наши графики показывают, что прирост функционала на Kotlin опередил Java. Другими словами, мы стали больше писать на Kotlin, нежели на Java, и наша ключевая компетенция де-факто сменилась на Kotlin.
Наши дни:
На сегодняшний день стоит отметить существование Kotlin for Data science. Данную тему хотелось бы осветить отдельно, погрузившись глубже и показав преимущества в следующих статьях.
У нас же в компании на server-side доминирует Kotlin в сравнении с Java более, чем в 3 раза.
В целом у нас в компании разнообразие языков программирования:
Kotlin компиляторы:
При помощи Kotlin MPP вы можете использовать Kotlin как дефолтный язык в разработке в своей компании. Мы в ДомКлике провели успешный пилот по разработке ипотечного калькулятора на Kotlin MPP для платформ Kotlin/JVM (Server-Side + Android) + Kotlin/Native(iOS). В дальнейших наших планах расширить пилот до Kotlin/JS.
И подводя итоги.
Первая часть статьи вышла теоритически-исторической, на то она и ретроспектива. Вторая часть будет ближе к практике, в ней мы рассмотрим на примере Kotlin/JVM:
- как он живет совместно с компилятором Java
- разберем несколько кейсов из Kotlin'a и как именно они отрабатывают на платформе Java.
Полезные ресурсы:
- kotlinlang.org
- Доклад Андрея Бреслава — Что такое Kotlin? Введение
- Доклад Андрея Бреслава — Project Kotlin