Kotlin — всё по этой теме для программистов


Оглавление (нажмите, чтобы открыть):

Основы Kotlin. Введение

Основы языка Котлин

Языки программирования — интереснейшая область современной техники. За последние 30-40 лет информационные технологии разрослись до невероятных пределов, и сейчас мало кто в состоянии обозреть эту область в полном объёме. Компьютерные программы выросли с нескольких сотен строк до десятков миллионов строк, применяются сейчас в самых разных областях и запускаются на самых разных платформах, например:

  • обыкновенные программы для персонального компьютера, часто называемые desktop-программами;
  • web-программы, которые делятся, в свою очередь, на клиентскую часть, выполняющуюся на компьютере пользователя, и серверную, выполняющуюся на сервере;
  • мобильные приложения для планшетов, смартфонов и других мобильных устройств;
  • системные программы, являющиеся частью операционной системы;
  • встраиваемые программы, являющиеся частью встраиваемых систем управления (применяемые, например, в транспорте, банкоматах, станках с программным управлением, при программировании роботов).

Языки программирования

Для написания разных видов программ сейчас применяются разные языки программирования. Например, в сфере разработки мобильных приложений основными являются языки Java и Kotlin (устройства под управлением Android), а также Swift (мобильные устройства под управлением iOS).

Системные программы, как правило, пишутся на языках C или C++. Эти же языки долгое время использовались и для создания встраиваемых программ, но в последние годы в этой области набирает популярность язык Java. Для написания web-клиентов часто используется JavaScript, а в простых случаях — язык разметки страниц HTML. Web-серверы используют опять-таки Java (в сложных случаях), а также Python и PHP (в более простых). Наконец, простые desktop-программы сейчас могут быть написаны на самых разных языках, и выбор во многом зависит от сложности программы, области её использования, предполагаемой операционной системы. В первую очередь следует назвать языки Java, C++, C#, Python, Visual Basic, Ruby, Swift.

В каком-то смысле самым универсальным и одновременно самым распространённым языком программирования на данный момент следует считать язык Java. Java в широком смысле — не только язык, но и платформа для выполнения программ под самыми разными операционными системами и на разной аппаратуре. Такая универсальность обеспечивается наличием виртуальной машины Java — специальной системной программы, интерпретирующей Java байт-код в машинные коды конкретного компьютера или системы. Java также включает богатейший набор библиотек для разработки.

Почему Kotlin

Однако для начинающих язык Java является несколько многословным и сложным. Это пособие посвящено другому языку программирования, спутнику Java — языку Котлин. Котлин — молодой, лёгкий для изучения язык программирования, позволяющий писать программы под платформы JVM и Android более лаконично, просто и с меньшим количеством ошибок по сравнению с языком Java. Котлин и Java — полностью интероперабельные языки, поэтому одна и та же программа может быть частично написана на Котлине, частично на Java. Программы на Котлине могут использовать все имеющиеся Java-библиотеки, и наоборот. На данный момент программы на Котлине пишут сотни тысяч программистов, основная ниша его промышленного применения — мобильные приложения под платформу Android и, в несколько меньшей степени, web-разработка.

В ходе изучения Котлина мы изучим также многие элементы стандартной библиотеки Java, а понимание работы программ на Котлине во многом упростит понимание работы Java-программ. После освоения основ языка Kotlin вы сможете уверенно освоить уроки по разработке андроид-приложений на языке Котлин.

Что требуется для начала

Самый простой способ начать программировать на Котлине — зайти на сайт http://try.kotlinlang.org. Имеющаяся там «песочница» позволяет писать программы прямо в браузере, с возможностью выполнять и сохранять свои программы и проходить обучающие курсы.

Масштабы песочницы, однако, достаточны только для небольших программ, а более-менее серьёзные программы, как правило, разрабатываются в интегрированной среде (IDE). Разработка под платформу Java в любом случае требует установки пакета JDK, который необходимо скачать с сайта компании Oracle. Первое время вам потребуется Java Platform, Standard Edition, рекомендуется 8-я её редакция, на сентябрь 2020 года последняя её версия — Java SE 8u181.

Среда разработки IntelliJ IDEA

В качестве интегрированной среды разработки рекомендую установить IntelliJ IDEA Community Edition, её следует брать отсюда. Community Edition является полностью бесплатной, базовая версия обеспечивает поддержку программирования на Java, Kotlin, Scala, Groovy, поддержку систем контроля версий Git, Mercurial, SVN, интеграцию с системами сборки Maven и Gradle.

Для интеграции IDEA с системой контроля версий Git необходимо установить один из клиентов Git. Таких клиентов существует много; «родной» Git клиент можно скачать здесь. Имейте в виду, что в IDEA интегрирован собственный Git-плагин, уже имеющий графический интерфейс, поэтому скачивать и устанавливать клиенты Git с графическим интерфейсом (GUI Clients) необязательно.

Учебный проект

В ходе обучения мы будем активно использовать проект «Котлин как первый язык программирования», содержащий текст данного пособия и около сотни различных задач на языке Kotlin. Оригинальный код данного проекта доступен по адресу https://github.com/Kotlin-Polytech/KotlinAsFirst2020 на сайте GitHub, который является специализированным хранилищем программных кодов и основан на системе контроля версий Git. Для того, чтобы начать работать с этим проектом, Вам необходимо выполнить следующие действия.

  1. Зарегистрироваться на https://github.com/ (в случае, если у Вас еще нет GitHub аккаунта). Далее выбранное Вами имя будет обозначаться как .
  2. Создать специальную копию репозитория проекта — форк. Для этого достаточно зайти на страницу проекта https://github.com/Kotlin-Polytech/KotlinAsFirst2020 и нажать кнопку Fork в правом верхнем углу страницы. После этого Ваша персональная копия проекта станет доступна по адресу https://github.com/ /KotlinAsFirst2020, и всю работу по решению различных задач Вы должны выполнять именно с Вашей копией.
  3. Для загрузки проекта в IntelliJ IDEA следует выполнить команду Check out from Version Control → GitHub из окна Welcome to Intellij IDEA (или File → New → Project from Version Control → GitHub из окна проекта), в появившемся окне ввести Git Repository URL https://github.com/ /KotlinAsFirst2020 и место на компьютере, куда будет скачан проект (Parent Directory).
  4. Далее следуйте инструкциям среды для настройки проекта. Подробное руководство вы можете найти здесь.

Проект содержит задачи, разбитые на девять уроков (lesson). Тексты задач доступны через окно Project в IntelliJ IDEA (открывается комбинацией клавиш Alt + 1 ). В папках src/lessonX , где X — номер урока, находятся примеры решённых задач к данному уроку, тексты задач, которые необходимо решить, и готовые заглушки функций для написания решения. В папках test/lessonX находятся тестовые функции к задачам. Подробнее о задачах и тестах см. раздел 1 этого пособия.

Список уроков по основам Котлин

Вопросы

В ходе изучения нового языка у вас, конечно, будут возникать вопросы, не стесняйтесь их задавать. У вас есть следующие возможности:

  • посмотреть «часто задаваемые вопросы» далее по тексту
  • поискать ответ на вопрос с помощью поисковой системы в Интернете
  • почитать разнообразную информацию о Котлине в его документации
  • русскоязычная документация по Котлину здесь
  • задать нам вопрос в Kotlin Slack (получить приглашение можно здесь) в канале russian-kotlinasfirst
  • воспользоваться другими ресурсами для общения

Kotlin Slack — это система общения, созданная специально для программистов на Котлине. Система состоит из множества каналов, посвящённых разным аспектам программирования на Котлине — в большинстве из них общение идёт на английском языке. Нашему курсу посвящён канал russian-kotlinasfirst, и там вы сможете задать любые вопросы по этому курсу на русском языке. В качестве других важных каналов имеется general — канал с общими обсуждениями, касающимися Котлина, и russian — общий канал для русскоязычных Котлин-программистов.

Часто задаваемые вопросы (F.A.Q.)

  • Что делать, если при открытии файла расширением .kt из учебного проекта (например, Simple.kt) вы видите сообщение над ним Project SDK is not defined ?

Нажмите на ссылку Setup SDK в правой части сообщения. Выберете JDK 1.8 для работы с проектом в появившемся окне. Если список JDK в окне пуст или не содержит JDK 1.8, следует нажать на клавишу Configure , затем зелёный плюс в верхнем левом углу и зарегистрировать установленную на Вашем компьютере JDK 1.8 в Intellij IDEA. Если Вы забыли установить JDK, это следует сделать, предварительно скачав её с сайта Oracle.

  • Что делать, если отсутствует зелёный треугольник напротив функции main и тестовых функций?

Откройте окно Maven Projects на панели в правой части окна IDEA (если вы не видите там такой надписи, откройте его через меню — View > Tool Windows > Maven Projects) и нажмите в нём на кнопку с изображением двух стрелок в круге. Дождитесь окончания импортирования Maven-проекта (наблюдайте за надписями в нижней части окна IDEA), после чего зелёные треугольники должны появиться. Проверьте также отсутствие надписи Project SDK is not defined в верхней части окна (см. вопрос выше).

Если вам не удаётся открыть окно Maven Projects, попробуйте выйти из Intellij IDEA и войти в неё заново.

Использованы материалы онлайн-курса «Котлин как первый язык программирования» в соответствии с лицензией

Как петербуржцы создали язык программирования Kotlin и почему его теперь используют Android и Google

Язык программирования Kotlin, созданный петербургской компанией JetBrains, стал официальным языком для разработки на Android.

Почему Kotlin назвали в честь острова в Финском заливе, как и когда язык стал популярен среди разработчиков мобильных приложений, почему им удобно пользоваться и зачем он изначально понадобился? Маркетинг-менеджер Kotlin Роман Белов рассказал «Бумаге», как в Петербурге создавали язык, признанный Google.

Как и когда появился язык программирования Kotlin?

Мы начали разрабатывать Kotlin в 2010 году. К тому времени компании JetBrains было уже десять лет и основной продукт компании — JetBrains IntelliJ IDEA, полностью написанный на Java, — был уже очень большого размера. Стало понятно, что во многом Java нас не устраивает. Было несколько альтернативных языков программирования, но оказалось, что ни один из них не соответствует тем требованиям, которые мы выдвигаем к языку, на который хотели бы перейти.

Была и вторая причина. Когда в одном месте собирается очень много людей с большим экспертным опытом в области языков программирования, часто получается, что рождается новый язык. Так оно и получилось. Во-первых, была осознанная и серьезная потребность, а во-вторых, мы могли ее удовлетворить.

Как и многие наши продукты, мы создавали Kotlin исходя из своей необходимости. Это, вообще, заложенный в развитии компании принцип: мы видим, что на рынке нет инструмента, который решал бы какую-то проблему, и тогда создаем его. Наши первые пользователи — это всегда мы сами. Поэтому обычно у нас получаются очень практичные и прагматичные инструменты.

Почему Kotlin называется именно так?

В тот момент, когда придумывалось название, на JVM (Java Virtual Machine — прим. «Бумаги») существовали еще языки, названные в честь островов: Java, Ceylon. И мы подумали: какой у нас есть остров рядом? Котлин. И это название прижилось. Тут нет какой-то традиции или правила, но так случилось, какой-то более глубокой мысли за этим нет.

В чем особенности языка?

Наверное, самое удачное слово, которое подходит к языку Kotlin, — это прагматичность. Языки бывают разные: некоторые выходят из академической среды, другие созданы для конкретных платформ. Мы изначально были нацелены на практичный язык для максимально широкой аудитории. Он должен был быть демократичным, то есть без заумных вещей. Бывают ситуации, когда программист знает все тонкости языка и благодаря этому пишет хитрый код, — и в этот код никто из джуниор-программистов не может лезть. Нам нужен язык, который одинаково хорош как для начинающих программистов, так и для продвинутых.

Внутри компании у нас также полная демократия: каждый программист сам решает, на каком языке писать, на Java или на Kotlin, и далеко не все переходят на Kotlin. Для меня как для маркетинг-менеджера языка JetBrains — это маленький мир. Когда в нашей большой компании все перейдут на Kotlin, тогда, наверное, и во всем мире программисты перейдут на него. Но, действительно, процент использования Kotlin в компании неизменно растет.

Чем же Kotlin так хорош? В первую очередь разработчики любят Kotlin за его краткость и выразительность. Это свойственно всем новым языкам. Раньше людей это не очень смущало, потом размер программ стал больше — люди поняли, что пишут очень много совершенно бессмысленных кусков кода только потому, что от них это требует синтаксис языка программирования.

Вторая причина в том, что он полностью совместим с Java и позволяет постепенно мигрировать с Java-приложения на Kotlin-приложение. Например, приложение Basecamp в течение полугода полностью мигрировало с Java на Kotlin.

Третий пункт — Kotlin безопасен: в семантику языка заложены принципы, которые предотвращают целый ряд очень распространенных ошибок, которые обычно случаются в момент исполнения программы. Это позволяет писать более безопасный код, что в конечном итоге помогает сэкономить деньги и снизить затраты на тестирование.

Как Kotlin заметили разработчики приложений?

В JetBrains мы не занимаемся Android-разработкой и изначально никто не думал, что Kotlin будет языком, который так удачно подойдет для целей Android-разработчиков. Но в какой-то момент оказалось, что Android застрял на Java 6 и очень многие новые фичи Java на Android недоступны. Тогда прогрессивные разработчики обратили внимание на Kotlin.

Мы поняли, что Kotlin может быть очень полезен для Android, и стали дорабатывать фичи, которые помогают Android-разработчикам, учитывали их потребности при разработке дизайна языка.

Год назад у нас произошло довольно большое событие: система сборки Gradle, с помощью которой собираются все приложения для Android, объявила о переходе на Kotlin.

В каком-то смысле история с Kotlin на Android — совершенно сказочная и хрестоматийная: мы просто делали язык программирования, и он очень нравился разработчикам. Это история про движение снизу вверх, а не наоборот. Разработчики давно просили Google поддержать Kotlin. И Google к ним прислушался.

С анонсом от Google формально для нас ничего не меняется: мы продолжаем разрабатывать язык и нацелены на разные платформы. Естественно, мы предвкушаем особое внимание к языку со стороны Android-разработчиков: оно будет, в частности, выражено в сообщениях об ошибках, в запросах на поддержку той или иной функциональности, и, естественно, мы будем всё это обрабатывать. Но в целом, конечно, продолжим двигаться по намеченному пути.

Кто и зачем использует язык Kotlin?

В компании мы начали применять Kotlin года с 2012-го, но официальный релиз языка был 17 февраля 2020 года. До этого времени конструкции языка активно менялись и поддерживать код на Kotlin было достаточно проблематично. Надо понимать, что развитие языков программирования требует большого внимания к обратной совместимости. И когда мы заявили о релизе, взяли на себя обязательство по обратной совместимости: по тому, что новый код будет совместим на бинарном уровне со старым. И мы эти обязательства выполняем.

Сейчас язык Kotlin в своих приложениях используют такие российские компании, как Avito и «Рокет Банк». За прошлый год Kotlin опробовали 160 тысяч программистов. До сегодняшнего дня Kotlin показывал экспоненциальный рост по числу программистов, и, думаю, объявление Google поможет нам продолжить этот рост.

Записки программиста

Мои первые впечатления от языка Kotlin

25 февраля 2015

В мире JVM уже давно предпринимаются попытки заместить Java чем-то более пристойным. Наиболее успешной такой попыткой, по всей видимости, на сегодняшний день является Scala. Тут вам и сообщество программистов, и куча фреймворков, и вакансии — все что угодно. Но и Scala далека от идеала. Среди наиболее существенных недостатков языка можно отметить его относительную сложность (что признает даже Одерски) и, что намного важнее, медленную скорость компиляции, а также требовательность к ресурсам во время этой компиляции. Поэтому такие языки под JVM, как Kotlin, Gosu и Ceylon все еще представляют собой интерес.

Когда мне захотелось ознакомиться с одним из этих языков, Ceylon отпугнул меня своим синтаксисом. Gosu выглядел куда более приятно. Но в примечаниях к последнему релизу языка среди прочего говорилось об устаревании оператора неравенства <> и что дескать вместо него теперь нужно использовать != . С такой нестабильностью я мириться не готов. А вот Kotlin и порадовал синтаксисом и произвел впечатление стабильного языка. К тому же, его разрабатывают наши соотечественники из JetBrains, и, понятное дело, полноценная поддержка со стороны IntelliJ IDEA также уже имеется. На нем я и решил остановиться.

Прочитав 130 страниц полного описания языка я сделал следующие выводы:

  • Язык очень похож на Scala, только проще и быстро компилируется. В частности, скорость компиляции не медленнее, чем в Java, разработчики языка ставят одной из своих главных целей. Из наиболее существенных отличий от Scala следует отметить полное отсутствие каких-либо имплиситов. Однако прикручивать методы к уже существующим final классам можно, как и в Scala.
  • Язык компилируется не только под JVM, но и в JavaScript. Это хорошо, можно писать UI и бэкенд на одном языке.
  • Все основные элементы ФП присутствуют — замыкания, хвостовая рекурсия, REPL, функции высших порядков, map / reduce / filter, автоматический вывод типов, паттерн матчинг, АТД (кстати, здесь case классы называются data классами) и так далее. Каррирования, как в Scala, похоже нет, но если функция принимает последним аргументом другую функцию, можно использовать синтаксис в стиле lock(lock) < body >, что решает ту же самую проблему.
  • Коллекции бывают неизменяемые (List, Set, Map) и изменяемые (MutableList, MutableMap, …), то же самое с переменными (val, var).
  • В языке есть немало интересных решений. Например, меня удивили делегаты, через которые, помимо прочего, сделаны ленивые вычисления. Еще есть такая фишка под названием smart casts, благодаря которой код if(x is String) < print(x.length) >компилируется и тайпчекается без дополнительного приведения переменной к типу String. Немного напоминает Rust.
  • Вместо Option/Maybe в языке используются nullable типы. С одной стороны, они дают такие же статические гарантии отсутствия NPE, с другой — более эффективны, чем Option, так как работают поверх все тех же null’ов, то есть, не приводят к использованию дополнительных классов. Что опять-таки напоминает Rust.
  • В Kotlin также есть ковариация и контравариация, но благодаря использованию ключевых слов in и out работа с ними становится намного проще и понятнее. Если тип помечен как in, методы класса могут принимать его на вход (консьюмер), если же out — методы возвращают тип (продьюсер). И не нужно помнить о том, что in — это контравариация, а out — ковариация, все просто и понятно.
  • Вообще, язык выглядит очень продуманно. Поля класса по умолчанию не являются public, при выводе data-классов перед значениями полей выводятся их имена, функции можно объявлять прямо в пакете без всяких дополнительных package object’ов и так далее. Всякие такие мелочи внушают доверие.

Чтобы попрактиковаться в программировании на Kotlin, я решил написать на нем одну программку, которую в свое время я уже писал на Scala, а также на Rust. Программа эта принимает текстовый файл, выдирает из него все URL, и выдает на выходе HTML-код со списком этих ссылок, используя в качестве тестов ссылок title соответствующих страниц. Вот что у меня получилось:

package me. eax . examples . shownotegen

import org. apache . http . client . methods . *
import org. apache . http . impl . client . *
import java. util . regex . *
import java. io . *

fun defaultUserAgent ( ) =
«»»Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, «»» +
«»»like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60″»»

fun getTitle ( url : String ) : String <
val req = HttpGet ( url )
req. setHeader ( «User-Agent» , defaultUserAgent ( ) )
try <
HttpClients. createDefault ( ) use <
it. execute ( req ) use < resp - >
val entity = resp. getEntity ( )
val charset = run <
val contentType = entity. getContentType ( ) . getValue ( ) ?: «»
val pattern = Pattern. compile ( «charset=(.*)» )
val matcher = pattern. matcher ( contentType )
if ( matcher. find ( ) ) matcher. group ( 1 ) else «UTF-8»
>
val title = run <
val body = entity. getContent ( ) . readBytes ( ) . toString ( charset )
val pttrn = Pattern. compile ( «»»(?is) (.*?) «»» )
val matcher = pttrn. matcher ( body )
matcher. find ( )
matcher. group ( 1 )
>
return title. replaceAll ( «»» \s +»»» , » » ) . trim ( )
>

fun processFile ( fileName : String ) <
val data = File ( fileName ) . readText ( Charsets. UTF_8 )
val matcher = Pattern. compile ( «»»https?:// \S +»»» ) . matcher ( data )
println ( »

    » )
    while ( matcher. find ( ) ) <
    val url = matcher. group ( )
    println ( «
  • \» $url \» >$ » )
    >
    println ( «

» )
>

fun printUsage ( ) <
val executableName = System. getProperty ( «sun.java.command» )
println ( «Usage: $executableName input.txt» )
System. exit ( 1 )
>

fun main ( args : Array String > ) <
when ( args. size ( ) ) <
0 — > printUsage ( )
else — > processFile ( args [ 0 ] )
>
>

Обратите внимание на использование метода use. В Kotlin он используется вместо try with resoruces в Java. Как и Scala, Kotlin позволяет вызывать методы при помощи инфиксной записи, а не через точку. Объяснение того, что делает функция run, можно найти здесь. Также в ходе своих экспериментов с Kotlin я выяснил, что простой hello world, упакованный в fat jar, весит 937 Кб, что не так уж много. Приведенная же выше программа в виде fat jar, как оказалось, весит чуть менее 2 Мб. Против 5.5 Мб в случае с аналогичной программой на Scala. Размер fat jar’ов, возможно, не является супер важным фактором при выборе языка, но на приятную мелочь вполне потянет.

Общие впечатления от языка у меня исключительно положительные. Как Java, только намного более лаконичный, и с удобняшками из мира ФП. Порог вхождения при этом намного ниже, чем у Scala. А скорость компиляции заметно выше. Эдакий очень правильный OCaml под JVM. Каких-то особо громких историй успеха и кучи своих фреймворков у Kotlin, правда, вроде бы нет. Но есть сильные подозрения, что это просто потому что при программировании на Kotlin используют все те же фреймворки, что при программировании на Java. И используют Kotlin те же Java-программисты, уставшие от многословности Java. В том числе был замечен очень сильный интерес к языку Kotlin со стороны разработчиков под Android. Да, что же касательно поддержки языка со стороны IntelliJ IDEA, то тут тоже вроде все ОК.

А что вы думаете о Kotlin и не пишите ли на нем случайно?

Андрей Бреслав, JetBrains: «Прямой монетизации языков программирования, скорее всего, уже не будет»

В конце мая Google на конференции для разработчиков объявила, что одним из официальных языков разработки приложений на Android станет Kotlin – язык, созданный петербургской компанией JetBrains. О компании, запущенной в 2000 году петербургскими программистами, Forbes уже писал. Компания была основана разработчиками Сергеем Дмитриевым, Евгением Беляевым и Валентином Кипятковым в Праге и стала прибыльной с первого года работы. Вначале они запустили Renamer — небольшую программу, которая позволяла делать простой рефакторинг в программах на Java. Затем предложили пользователям CodeSearch — плагин к JBuilder, быстро находивший все использования заданного метода или класса в программе.

Сегодня главный продукт JetBrains — интегрированная среда разработки (IDE, Integrated Development Environment, то есть «умный редактор») IntelliJ IDEA для программирования на Java. Компания выпускает продукты для разработки на языках C#, Java, C++, Ruby, PHP, JavaScript, Python, Objective-C и других. Спустя 17 лет JetBrains выросла в международный бизнес с годовым оборотом в $176 млн, с аудиторией активных пользователей в 4 млн и с 600 сотрудниками в штате.

По данным составителей рейтинга самых популярных языков программирования TIOBE, Kotlin занимает 43-е место по уровню востребованности. Большинство языков программирования, хотя их создание требует крупных вложений финансов и ресурсов, — открыты и общедоступны. Разработчики языков не гонятся за быстрой прибылью, а рассчитывают собирать вокруг языков программирования сообщества за счет open source-решений. Какие перспективы открывает поддержка Android для приложений, созданных на основе Kotlin? Что вообще может измениться в монетизации языков программирования, если, например, в Kotlin компания вложила $15 млн, а он остается бесплатным и общедоступным? Об этом Forbes поговорил с Андреем Бреславом, возглавляющим разработку Kotlin в JetBrains.

— С чем было изначально связано решение создавать новый язык программирования, еще в 2010 году?

— На 2010 год ситуация на рынке языков программирования была такой, что нам самим было не на чем писать, кроме Java, а Java развивалась (и продолжает развиваться) крайне медленно и консервативно. За двадцать лет «эры Java» понимание того, как должен быть устроен современный язык программирования продвинулось довольно далеко, и интегрировать все эти идеи в существующий язык технически крайне сложно. Поэтому возникла потребность в новом языке. Попытки предпринимались и ранее (наиболее успешные — Groovy и Scala), но по разным причинам сферы их применения оказались ограниченными.

Мы занимались и занимаемся технологиями, основанными на глубоком анализе языков программирования, поэтому хорошо понимаем, как устроены языки и как делать их лучше. Кроме того, компания известна на мировом рынке как производитель IDE — инструментов, которые во многом определяют удобство и производительность труда современных программистов. Мы решили, что такая позиция в информационном поле — уникальная возможность «продвинуть» свой язык, сделать так, чтобы его заметили.

— А с точки зрения бизнес-перспектив, почему «взяли курс»?

— Потому что мы считаем, что этот проект приносит нам выгоду на нескольких уровнях: эффективность нашей собственной разработки, распространение бренда JetBrains, повышение привлекательности наших продуктов на рынке. Мы начинали с того, что Kotlin стали пользоваться те, кто уже любит другие наши продукты. Со временем эта ситуация перевернется: люди будут выбирать наши продукты, потому что мы сделали Kotlin.

— В чем должны были оказаться особенности нового языка? На что вы решили сделать ставку? Что должно было стать конкурентным преимуществом, раз попытки создать «альтернативу Java» уже были?

Есть несколько ключевых аспектов языка, от которых зависит стоимость его «эксплуатации», то есть расходы компаний, которые будут писать на этом языке. Во-первых, если язык очень сложный, то программистам, которые на нем пишут, придется платить большую зарплату. Во-вторых, если программы сложно понимать, если сложно искать в них ошибки и вносить изменения, то разработка затягивается и становится дороже. В-третьих, если программы получаются медленными из-за свойств языка, приходится вкладывать деньги в их ускорение (от найма дорогих специалистов по оптимизации до покупки более быстрого «железа»).

Поэтому Kotlin — достаточно простой для изучения язык, и средний программист, работающий за среднюю зарплату, может легко его освоить. Синтаксис языка, система типов и инструментальная поддержка делают его удобным в использовании, так что производительность разработчиков весьма высока (выше, чем в Java). Например, data-классы, свойства, вывод типов и многие другие возможности языка позволяют писать (а значит и читать) меньше кода для типичных задач, встроенный контроль нулевых ссылок и механизм smart casts помогают раньше и быстрее обнаруживать ошибки, а гибкие абстракции (функции расширения, функциональные типы и т.д.) позволяют повторно использовать больше кода. К тому же, программы получаются такими же быстрыми, как на Java (иногда даже немного быстрее).

Мастер Йода рекомендует:  Как найти толкового партнёра по разработке

Среди существовавших ранее языков для платформы Java такое сочетание не встречалось: другие языки оказываются слишком дорогими для широкого класса проектов. Java слишком «многословная», поэтому код сложнее читать, писать и модифицировать, к тому же Kotlin позволяет исключить некоторые виды ошибок, которые часто встречаются в программах на Java. Scala слишком сложная, хорошо ей пользоваться могут только дорогие специалисты. Groovy слишком медленный для многих задач и подвержен ошибкам. У каждого языка есть своя ниша, в которой он очень хорош, просто вопрос в размере этой ниши. Для Kotlin она весьма велика, для других альтернативных языков — несколько уже.

— Есть еще вопрос издержек на «переключение» с одного языка на другой.

— Безусловно, стоимость смены технологии тоже играет большую роль Kotlin делает ставку на постепенный переход с максимальным переиспользованием всего ранее написанного кода на Java, это технически крайне непросто реализовать, но в результате можно начать пользоваться языком с минимальными вложениями и минимальными рисками. Можно добавить немного кода на Kotlin в существующий проект и вызывать его из Java без проблем. Или заменить небольшую часть Java-кода на Kotlin, не меняя остальной код. Не все альтернативные языки предоставляют такую возможность.

— Каковы были главные сложности при разработке Kotlin?

— Самые сложные вопросы — это интеграция с другими системами. Одно из главных преимуществ Kotlin, о котором упоминалось выше — совместимость с Java, потребовало очень много усилий. Другие интеграционные задачи тоже зачастую отнимают много времени. Когда нужно научить две сложные системы понимать друг друга — это обычно сложная задача.

— Можете оценить общий объем инвестиций в создание Kotlin?

Общий объем инвестиций в Kotlin за семь лет мы оцениваем примерно в $15 млн.

— Как быстро росла аудитория?

До выпуска первой официальной версии 1.0 (это было в феврале 2020 года) пользователями языка были только самые отчаянные энтузиасты (которых, тем не менее, было больше 1000 человек каждый день). С момента релиза 1.0 количество пользователей плавно увеличивалось и за год выросло более чем в пять раз. За 2020 год языком пользовались примерно 160 000 программистов. Сразу после объявления Google был резкий скачок более, чем вдвое: за один день пришло очень много новых пользователей, и теперь мы ожидаем гораздо более быстрого роста, чем раньше. За первый год после релиза мы выросли примерно в 2,2 раза, а за три недели с момента объявления Google — в 2,7 раза

— Какие изменения вы вносили уже после релиза? Были серьезные «повороты» в продуктовой стратегии?

Добавлять в язык слишком много возможностей нельзя, потому что он может стать слишком сложным как для изучения, так и для развития. Поэтому мы стараемся балансировать между потребностями пользователей и цельностью дизайна. Все наши новые идеи мы обсуждаем с сообществом, показываем предварительные версии, даем возможность попробовать, собираем обратную связь, исправляем то, что не удобно, добавляем то, чего не хватает.

Исторически было несколько крупных изменений в языке до 1.0, когда мы советовались с нашими пользователями внутри и вне компании, выясняли, что неудобно и сильно перерабатывали язык. Самые заметные изменения были, опять же, в области взаимодействия с Java: что-то оказывалось недостаточно удобно, мы искали решение, которое было бы по-настоящему прозрачным для пользователей.

— Какие инструменты работали для популяризации Kotlin? Для языка программирования вообще применимы термины «продвижение», «маркетинг»?

Мы в JetBrains в принципе считаем, что продукты должны распространяться по принципу «сарафанного радио». Если разработчикам нравится инструмент, они рассказывают о нем другим: за чаем на работе, в блоге и в твиттере, на конференциях и т.д. В этом смысле наши продукты распространяются «снизу»: инженеры хотят их использовать, поэтому их руководство принимает решение о приобретении лицензий. То же самое случилось и с Android: программисты из разных компаний постоянно задавали представителям Google вопросы о Kotlin, и в конечном счете убедили производителя платформы поддержать наш язык официально.

Рекламу в обычном смысле мы для Kotlin практически не используем. В основном, опираемся в продвижении на блог, Twitter, наш собственный форум, Slack, выступления на конференциях, поддержку пользовательских групп и тематических митапов в разных странах. В самом начале мы использовали как стартовую площадку аудиторию пользователей продуктов JetBrains, а дальше сообщество прирастало сначала энтузиастами, которые писали о языке на разных ресурсах, потом и другими интересующимися. Наша задача — предоставить людям информацию и возможность ее обсуждать, а также быть всегда на связи. Программисты из нашей команды много общаются с пользователями на открытых площадках, отвечая на вопросы, обсуждая возможности и собирая мнения.

— Какова, по вашим оценкам, текущая аудитория Kotlin?

— За май 2020 года Kotlin использовали более 100 000 человек — это примерно в 2,7 раза больше, чем в апреле. Есть пользователи из всевозможных стран, включая экзотические, такие как, например, Тринидад и Тобаго. Больше всего пользователей в Китае, США, России, Германии, Индии, Японии, Великобритании, Польше, Бразилии и Канаде.

— Для создания каких продуктов чаще всего он используется?

— До объявления от Google половина наших пользователей делала серверные приложения на JVM, а вторая половина — мобильные приложения под Android. Сейчас пропорции могут измениться, но мы ожидаем, что серверное комьюнити тоже будет расти.

— А каковы типичные сценарии использования Kotlin именно для мобильной разработки?

В принципе Kotlin целесообразно использовать для написания приложений от начала до конца, но, если уже есть приложение, написанное на Java, типичным сценарием будет постепенный переход. Можно плавно добавлять новый код на Kotlin и/или конвертировать Java-код, но не весь сразу, а постепенно. Совместимость с Java максимально упрощает такой сценарий

— Когда вы впервые стали общаться с Google?

Мы сотрудничаем с Google уже несколько лет, с тех пор как официальной средой разработки стала Android Studio, построенная на основе нашей платформы IntelliJ. Мы постоянно поддерживаем деловые контакты, наши инженеры иногда ездят в США общаться с коллегами из Google. Во время нашего визита на Google I/O 2020 нам оказали очень радушный прием, было очень приятно. В Google в основном отказывались комментировать вопросы про Kotlin до официального объявления. Официальная поддержка была их решением, мотивированным потребностями и запросами пользователей.

— В чем ценность Kotlin для бизнеса JetBrains в целом, раз сейчас это полностью общедоступный инструмент?

— Кроме улучшения нашей собственной производительности от перехода на Kotlin, мы получаем широкое распространение бренда JetBrains, что способствует повышению интереса к нашим продуктам. Со временем еще больше людей будут покупать, например, IntelliJ IDEA, потому что это «главная» среда разработки для Kotlin. Большое значение имеют также коммерческие продукты, которые мы в дальнейшем сможем разрабатывать на основе Kotlin. Так, например, мы рассматриваем создание на базе бесплатного компилятора Kotlin/Native коммерческих инструментов разработки для iOS, встроенных систем и других платформ.

— На ваш взгляд, как будут в дальнейшем развиваться языки программирования? Будет ли все большая специализация?

— Все наиболее популярные сегодня языки достаточно универсальны. Даже JavaScript уже несколько лет успешно работает на серверах и мобильных телефонах. Я думаю, что будущее за многоплатформенной разработкой, именно поэтому мы развиваем Kotlin не только на JVM и Android, но и для браузеров и устройств без виртуальных машин (iOS, IoT и т.д.).

— Как будет меняться рыночная среда языков программирования? Как может измениться роль open source? Какими будут способы монетизации или прямой монетизации не будет?

— На текущий момент практически не остается широко используемых коммерческих компиляторов (программы, которые переводят код, написанный программистами, в машинный код, который «понимает» процессор — Forbes). Если еще в 1990-е годы язык программирования как таковой был продаваемым продуктом, то сегодня это как правило бесплатное ПО с открытым кодом. Прямой монетизации языков программирования, скорее всего, уже не будет. Остаются, конечно, какие-то нишевые коммерческие проекты, но это тоже не просто языки, а интегрированные решения вроде Wolfram Mathematica (система для математических вычислений, работает с языком программирования Wolfram Language — Forbes). Будучи важными элементами инфраструктуры, практически наравне с Linux, OpenSSL или MySQL, компиляторы и интерпретаторы языков программирования (интерпретатор фактически решает те же задачи, что и компилятор, но на лету – Forbes), скорее всего, будут разрабатываться в Open Source при поддержке одной или нескольких коммерческих компаний. Сегодня так разрабатываются, например, компиляторы C++, Swift, C#, Java и Kotlin. Торговые марки при этом могут принадлежать производителю, но код открыт и компилятор распространяется бесплатно.

— А как будут меняться соотношения сил между энтузиастами и сообществом и крупными компаниями?

— Я не думаю, что это соотношение когда-нибудь заметно поменяется. Язык программирования — это довольно сложная система. Чтобы ее согласовано поддерживать и развивать, нужен довольно централизованный процесс дизайна, где решения принимает узкий круг экспертов. У большинства современных языков, включая Kotlin, есть один «главный архитектор», который в конечном счете принимает все ключевые решения. Естественно, исследовательскую часть, прототипирование, апробацию и еще много чего может делать множество других людей, но решения в конечном счете зачастую принимает кто-то один. Это необходимо для «синхронизации» идей и получения согласованного дизайна. Что касается реализации, то современный компилятор — это технологически весьма сложный продукт, поэтому нельзя ожидать существенного вклада от большого количества добровольцев. В большинстве случаев тут нужны инженеры, имеющие высокую квалификацию в весьма узкой области, и им нужно платить довольно большую зарплату.

— Будут ли рано или поздно языки полностью разрабатывать программисты, а не компании?

— Если говорить о разработке языков широким кругом пользователей, довольно давно существует концепция предметно-ориентированных языков (Domain-Specific Languages, DSLs). Идея состоит в том, чтобы предоставить пользователю инструментарий для того, чтобы легко создавать «маленькие» языки для узкого круга задач. Несмотря на то, что было испробовано множество подходов, включая весьма интересную систему MPS (система создания новых языков программирования, разработанная в JetBrains – Forbes), на сегодня самый популярный способ создания DSL — это использование достаточно гибкого языка общего назначения, синтаксис которого можно приспособить под узкоспециализированные нужды предметной области. Kotlin весьма неплохо справляется с такой задачей, так что можно сказать, что наши пользователи могут сами делать маленькие языки, когда это нужно.

— Многие сервисы уходят с ПК в мобильную среду, как это повлияет на развитие языков программирования?

— С точки зрения языков мобильная разработка все меньше отличается от разработки для больших компьютеров. Есть ограничения по энергопотреблению, но на языках это мало сказывается. Больше всего на языки может влиять появление специализированных процессоров. Сегодня, например, популярны GPU (графический процессор – Forbes) со своими системами программирования, такими как CUDA и OpenCL, это не отдельные языки, но со временем нельзя исключать специализированных добавлений такого рода в языки общего назначения.

— А как на развитие языков программирования влияют новые типы взаимодействий (m2m) или появление новых типов интерфейсов (VR/AR)?

— Самый релевантный тренд здесь, пожалуй, AI. Когда установятся типичные задачи, базовые «кирпичики», для построения, скажем, нейронных сетей или других инструментов машинного обучения, возможно, в языки будут добавлять поддержку этих возможностей, чтобы избавить программистов от лишней рутинной работы, но пока не совсем понятно, какими могли бы быть эти расширения.

Kotlin стал приоритетным языком программирования для Android

Компания Google в рамках конференции Google I/O 2020 в блоге для разработчиков для операционной системы Android объявила, что язык программирования Kotlin теперь является предпочтительным языком для разработки приложений под её мобильную операционную систему, что означает его первичную поддержу со стороны компании во всех инструментах, компонентах и API по сравнению с другими языками.

Многие новые API и компоненты для разработки теперь первыми будут доступны для разработчиков на Kotlin (изображение: adhishlal.com)

«Разработка Android будет всё больше ориентироваться на Kotlin», — пишет Google в объявлении. «Многие новые API и компоненты Jetpack будут предлагаться первыми для Kotlin. Если вы начинаете новый проект, вы должны писать его на Kotlin. Код, написанный на Kotlin, часто означает для вас гораздо меньше кода как для ввода, так и для тестирования, и сопровождения».

Впервые официальная поддержка Kotlin в IDE Android Studio появилась в 2020 году

Всего два года назад, на конференции I/O 2020, Google впервые объявила о поддержке Kotlin в своей IDE — Android Studio. Это стало неожиданностью, учитывая, что долгое время предпочтительным языком для разработки приложений для Android оставалась Java. Лишь немногие объявления на конференции в том году получили больше аплодисментов. За последние два года популярность Kotlin только возросла. По словам Google, более 50 % профессиональных разработчиков Android используют этот язык для разработки своих приложений, и в последнем опросе разработчиков Stack Overflow он считается четвёртым по популярности языком программирования в мире.

И, похоже, сейчас Google нашла смысл в том, чтобы увеличить свою поддержку Kotlin. «Мы объявляем, что следующий большой шаг, который мы предпринимаем, это то, что Kotlin станет для нас первым», — сказал Чет Хаазе (Chet Haase), инженер команды разработчиков Android UI Toolkit в Google.

«Мы понимаем, что не все ещё используют Kotlin, но мы верим, что вы должны попробовать», — продолжает Хаазе. «У вас могут быть веские причины по-прежнему использовать языки программирования C++ и Java, и это совершенно нормально. Они никуда не уходят.»

Стоит отметить, что Kotlin разработан компанией JetBrains, основанной нашими соотечественниками и имеющей офисы в Москве, Санкт-Петербурге, Новосибирске, а также в Праге, Бостоне, Мюнхене и Амстердаме . Таким образом, Kotlin в значительной степени можно считать отечественной разработкой, достигшей мирового признания. Остаётся поздравить команду JetBrains с этим успехом и пожелать дальнейшего плодотворного развития.

«Разработка языка Kotlin обошлась намного дороже, чем наш средний продукт»: интервью с главой JetBrains


Максим Шафиров попал в JetBrains в 2002 году десятым сотрудником, а в 2012 году занял пост гендиректора. В интервью он рассказал:

О карьерном пути и управлении большой компанией

Это было в 2004 году. В 2012 году ситуация повторилась, но уже не на уровне руководства разработкой проекта, а всей компании. Сергей сказал, что хочет заняться другими проектами, развивать биоинформатику. Может быть, найдётся в компании кто-нибудь, кто его заменит? На следующий день я сказал: «Да, можно попробовать». Потому что надо. Как-то естественно всё получилось — я никогда не ставил себе в качестве цели карьерный рост.

В последний месяц мне ничего не удалось написать, но вообще да. Сейчас я работаю над новым продуктом в качестве разработчика, даже не в качестве лида.

В начале каждый из приходящих сотрудников привносил свои опыт и знания и, грубо говоря, отвечал за свою область — например, кто-то за XML, кто-то за веб-сервисы и так далее. В целом всё так и осталось. Люди у нас обладают очень большой свободой действий и, соответственно, очень большой ответственностью. Они более или менее самостоятельно общаются с пользователями, выясняют, что нужно делать в рамках той предметной области, за которую они отвечают. Ну и дальше — больше.

В общем-то, компания так же и структурирована. Любая команда разрабатывает продукт более или менее самостоятельно, планов сверху никто не спускает. У нас есть отдел, который занимается разработкой всех IDE на базе платформы IntelliJ IDEA. Есть отдел разработки всех инструментов для .NET. Отдел разработки инструментов для команд. Есть Kotlin, дизайн-студия, HR.

Что касается офисов в других странах, мы, в отличие от многих других компаний, не стали локализовывать разработку продуктов по офисам. Может запросто получиться, что какой-нибудь продукт разрабатывается во всех шести. Хорошо, что изобрели видеосвязь, она нас спасает.

Слово «подчинение» немного не подходит. Мы не классическая иерархическая организация: я не ставлю им задачи, они не предоставляют мне отчёты. Мы встречаемся и решаем, что нужно делать. Чаще всего не один на один, а более крупной компанией — 10–15 человек.

Конечно, имеет значение местное законодательство и регулирование. А с точки зрения организации разработки продуктов — нет, я не думаю. Большой процент тех, кто работает за границей, — люди, которые уехали отсюда. То есть типичный путь человека, который оказался в мюнхенском офисе, — его наняли здесь, а потом он переехал.

Конечно. Если мне пришла в голову какая-то мысль, здесь я спущусь на два этажа и поговорю с человеком. А в Мюнхене — надо писать: «А можно я тебе позвоню?». Чем больше таких танцевальных па, тем сложнее коммуникация.

Рационально никакой проблемы нет. Пошёл, поднял трубку, поговорил, всё то же самое. Как-то проще, когда все рядом. Но всех рядом нет, не могут все жить в одном городе. Просто планета большая.

Офис JetBrains в Петербурге

О стратегии и бизнесе JetBrains

Мы почти не выстраиваем маркетинг и продажи под конкретные страны. Весь наш бизнес глобальный. Поэтому, конечно, мы можем посчитать, где мы больше заработали, но это скорее показатель не того, насколько мы успешны, а того, насколько развит рынок в этой стране. Больше всего мы зарабатываем в Штатах, где-то 40%.

3% в России, 4% — СНГ.

Я каждый день получаю письмо по продажам. Но смотрю на него сейчас не очень внимательно, потому что объём большой, соответственно, инерция тоже очень большая. То есть сопоставить то, что мы имеем сегодня, с тем, что мы сделали вчера, сложно. Маховик раскручен.

Через два-три года в лучшем случае. Скорее, горизонт — пять-семь лет.

Я знаю, а вот насколько это верно, конечно, никто не знает. Мы начинали как IDE для одного вполне специфичного, но очень конкретного, платёжеспособного и растущего рынка Java-программистов. Потом росли горизонтально — делали всё то же самое для людей, которые занимаются тем же, но с использованием другого языка программирования. И кажется, сейчас практически всё, что имеет для нас финансовый интерес, мы покрыли, горизонт роста закрыт.

Есть несколько хорошо друг с другом сочетающихся, но не вполне связанных вариантов дальнейшего развития. С одной стороны, мы сами создаём для себя рынки. Например, Kotlin: мы создаём рынок для бесплатного продукта, но лучшие инструменты для него, конечно же, случайно оказались у нас.

Есть и дополнительный вариант роста. Сейчас мы продаём продукт в основном компаниям, но он консьюмерский, b2c. Потому что эмоциональное решение о покупке принимает конечный потребитель-программист. Он уже уговаривает своё начальство, чтобы ему разрешили это купить.

Мы хотим стать компанией, которая имеет серьёзный вес на рынке инструментов для команд, причём не только команд разработчиков. Это уже будет классический b2b-продукт, и нам с ним придётся непросто с точки зрения продвижения на рынке. Но мы постараемся.

Это они к нам находили подход. Программисты друг другу передают идею о том, что им очень нравится работать с нашими продуктами, с ними они чувствуют себя продуктивнее. И продают эту идею своим коллегам и начальству.

У нас уже есть YouTrack, есть TeamCity — это продукт для сборки. Upsource для code review. Пока всё, но есть ещё один большой продукт в разработке.

Когда мы начинали делать TeamCity в 2005 году, идея была такая: мы сделали IDE и всё, что можно было сделать в IDE для индивидуального разработчика. «Продукт закончен», — думали мы 14 лет назад. Что ещё можно сделать? Например, такую же интегрированную среду, но для команд. Начать решили с того, что было наиболее востребовано в тот момент и отсутствовало на рынке — это Continuous Integration. Был такой инструмент, назывался CruiseControl, но работать в нём было неудобно.

Нам казалось, что мы сейчас всё сделаем как надо. Сделали, выпустили на рынок, и пользователи сказали: «Прекрасно, нам очень нравится ваш продукт, а ещё мы хотим вот такую функциональность, и ещё вот такую, и ещё вот такую». Мы любим наших пользователей, всячески им помогаем, и помогание это растянулось на вот уже, получается, 14 лет.

Когда выпускаешь продукт на рынок, то потом сказать «нет, на самом деле мы хотели сделать кое-что другое, давайте его перепрофилируем» тем сложнее, чем более продукт успешен. Нам не повезло — продукт стал успешным. И несколько лет назад мы вспомнили, что идея была в том, чтобы сделать инструмент для команд, который объединяет все инструменты для разработки и не только: для планирования, коммуникации, отслеживания процессов, результатов. Решили попытаться вновь. Думаю, в течение года уже можно будет на что-то посмотреть.

Доля рынка, которую YouTrack занимает по сравнению с Jira, действительно небольшая. И в последнее время не меняется.

Если говорить про ошибки, которые мы допустили: Jira развивалась не только как продукт, но и как экосистема. Есть масса компаний, которые пишут в Jira какие-то расширения, плагины или просто оказывают сервис по настройке для конечных пользователей.

Тем не менее YouTrack довольно успешный, денежку приносит, мы им сами пользуемся с большим удовольствием. И ребята планируют развиваться дальше.

О расстановке сил на рынке

Для разных продуктов разные конкуренты. Что касается инструментов для разработки — это Atlassian и в последнее время Microsoft. Она стала много вкладываться в работу с девелоперами, есть инструменты для команд. Visual Studio Code активно набирает популярность.

Сначала нужно понять, что люди находят в VS Code. Мне кажется, у нас есть ответ: это простота. Инструмент исключительно проще. Мы всегда делали упор на сильные и мощные инструменты для работы с кодом, здесь нас переплюнуть сложно. Профессиональные разработчики чаще всего предпочитают наш инструмент.

Но мы проводили исследования и выяснили, что если брать разработчиков в общей массе, очень немногие из них используют всю функциональность на полную мощность. Доходит до смешного: существенный процент пользователей никогда не пользовался лампочкой с подсказками.

Будем стараться образовывать пользователей, такие вещи нужно обязательно популяризировать. Мы считали, что это уже общеизвестные факты, все этим пользуются и объяснять не нужно. Так вот — нужно. И сам продукт нужно делать проще.

То, что там есть продвинутая функциональность, не является извиняющим фактором, чтобы делать продукт сложным. Можно привести в пример первые iPhone. Там было столько функциональности сразу — никто не думал, что такие вещи могут быть в телефоне, да? Но при этом продукт был настолько прост и понятен, что им могли пользоваться буквально все.

Важно смотреть, где та или иная компания извлекает прибыль, что она в конечном итоге продаёт. Microsoft не строит бизнес на девелоперских инструментах. Точно так же, как Google не продаёт поиск, например. Microsoft с помощью инструментов привлекает разработчиков в свою экосистему. А потом продаёт сервера на Azure. Или офисные программы. А наш клиент — программист. То есть мы что делаем, то и продаём. Мне кажется, что это очень выгодное отличие.

Для этого есть маркетинг. У нас есть сотрудники, которые на примерах объясняют, почему это имеет смысл. Обычно людей цепляют какие-то мелочи.

В этой сфере нужно сразу сделать продукт, который будет конкурировать на глобальном рынке, делать что-то локально не получится. А в мире большая конкуренция и не так много денег.

Программисты, как ни странно, очень не любят платить за софт. Так что это тяжёлый бизнес.

О Kotlin, работе с Google и отзывчивости

Наверное, можно так сказать про Kotlin. Не то чтобы мы его не монетизируем, просто процесс монетизации — это игра в очень долгую. Мы не ставим себе это как цель первого порядка и понимаем, что так или иначе с этим всё будет хорошо.

Только на инструментах. Open-source-проекты классически зарабатывают на консалтинге. Они продают обучение или внедрение этих технологий в бизнес. Но мы продуктовая компания, для нас консалтерский бизнес не привлекателен. В консалтинге вы продаёте время людей, и если вы хотите заработать в десять раз больше денег, нужно нанять в десять раз больше людей. Мы хотим остаться продуктовой компанией.

И да и нет. Попробую объяснить. Вообще, язык нужен для перевода кода из структурированного текста в формат, который понимает и может выполнять машина. При этом у каждой машины своя платформа, свои библиотеки, среда исполнения. Kotlin пока может работать в двух средах исполнения: Java — например, для приложений на Android, и JavaScript — например, для фронтенда. Ещё мы работаем над компилятором в нативный код, можно будет писать приложения для iOS.

То есть выглядит так, будто у нас есть IDE для каждого языка, но на самом деле это не так. Язык — дело вторичное, важна платформа. Вот это IDE для Android, вот это IDE для Java Server Side, это IDE для фронтенда, это IDE для scientific-вычислений и так далее. А Kotlin — везде. И на всех платформах он родной. Под Java-платформу можно писать часть на Java, часть на Kotlin. Фронтенд тоже: можно писать часть на JavaScript, часть на Kotlin.

Пока Kotlin везде свой, пока он не обрастёт собственной экосистемой, завязанной исключительно на него, не очень понятно, к чему делать инструмент. Но мы будем.

Пару лет, я думаю, это займёт.

Есть области, которые, скорее всего, и не будут охвачены Kotlin — это системное программирование, например. Писать драйверы для железа на Kotlin — скорее нет, чем да. Код, который должен работать в реальном времени, всякие датчики и так далее — тоже скорее нет, чем да. Операционные системы — нет.

А вот уровень приложений для какой бы то ни было операционной системы или платформы — это то, что мы хотим покрыть. Теоретически всё уже и покрыто, осталось поднакопить жирку: библиотеки, примеры, комьюнити, экосистему, людей, которые умеют это делать и могут научить других.

Вообще могла. По лицензиям абсолютно ничего такого тут нет.

Да, в 2011 году команда Google пришла к нам и сказала, что хочет разработать IDE, но делать на базе Eclipse (IDE для Java от Eclipse Foundation — vc.ru) её тяжело. Eclipse — это тоже open-source-проект, но чтобы интегрировать в него специфичный инструментарий для Android, нужно было сделать API.

И этот API команде Google никак не удавалось протащить, не было коммуникации. Они пришли к нам и наладили коммуникацию, мы просто оказались более отзывчивыми. Мы даже отдали им собственный плагин для Android, они его открыли для разработчиков — с этого и начали. Но никаких денег там не было.

Мастер Йода рекомендует:  Белый дом обвинил Северную Корею в распространении малвари WannaCry

Получилось довольно смешно: когда мы начали разрабатывать Kotlin, то про Android не думали вообще. Потом кто-то из энтузиастов попробовал написать что-то на Kotlin под Android, и что-то пошло не так, сломалось. Нам сообщили, мы поправили, нам сообщили что-то новое, мы поправили ещё. Опять же, проявили некоторую отзывчивость.

Ещё у Android на Java сложилась такая ситуация: версия языка всегда отставала от того, что было у остальных разработчиков на Java. Поэтому когда Android-программисты получили красивый, удобный и функциональный язык, они стали долбить Google: выскажите своё официальное мнение — можно ли на этом писать? Не будет ли проблем в будущем?


Команда Android в Google внимательно слушает сообщество. Может быть, не сразу отвечает, но на ус мотает. И в какой-то момент, видимо, накопилась некая критическая масса, пора было выразить свою позицию по этому поводу.

Они обратились к нам. Опять же, можно было просто взять и начать пользоваться Kotlin, от нас тут ничего не нужно было, как и от них. Но они хотели пойти дальше, сделать ставку на Kotlin и оформить всё легально — чтобы в случае, если кто-нибудь недоброжелательный вдруг купит компанию JetBrains, Google не оказалась в некомфортной ситуации.

Мы договорились, что торговая марка Kotlin будет передана в специально основанный для этого фонд. JetBrains всё ещё стоит за Kotlin, но если вдруг что-то случится, кто-то сможет форкнуть Kotlin и продолжать разработку под этим же названием.

Да, было очень забавно читать. Тогда никаких разговоров об этом не было. Сама постановка вопроса о том, что язык нужен Google для того, чтобы избежать лицензионных проблем с Oracle, не имеет ни малейшего основания, потому что претензии Oracle состояли в копировании API. Но пишете ли вы на Kotlin, на Java, на Python, на чём угодно — используются всё те же самые API.

Замена языка никаким образом не затрагивает предмет спора между Google и Oracle. Звучал и такой вариант: «А давайте мы тогда вообще просто заменим Java на Swift». Но это значит, что все приложения под Android можно выкинуть в мусорное ведро. Никто на это никогда не пойдёт.

Да, конечно. Никаких технических препятствий не было.

Мне не с чем сравнивать, у меня это единственный опыт. С одной стороны, долго. А с другой стороны, я рад, что получилось именно так, и сейчас попробую объяснить, почему.

Разработчики придерживаются такой идеи: надо сперва что-нибудь сделать, а потом уже изменениями приводить это в нужное состояние. С языком так не работает: если он меняется, то написанные на старой версии языка программы перестают работать. Если вендор языка позволяет себе такие выкрутасы, то скоро пользователей у него не останется, если только это не Apple.

Apple может себе такое позволить, со Swift ровно так и происходит. Каждые пару лет выходит новая версия Swift, которая с предыдущей не совместима: пожалуйста, переписывайте ваши программы. Но от Apple программисты не денутся никуда и никогда, а мы так не можем.

Если выпустить продукт на рынок рано и привлечь пользователей, то в итоге с накоплением фич и модификаций язык получается гораздо сложнее, чем если сразу выпустить конечную версию без груза всех тех программ, которые на нём были написаны. В этом специфика языка. Но чтобы понять, как должен выглядеть язык, нужно прогнать его через максимальное количество реальных юзкейсов, им должны попользоваться реальные люди.

Получается вопрос курицы и яйца. С одной стороны, нужно накопить большое количество пользователей, чтобы понять, что хорошо, а что плохо. А потом вам нужно их всех выкинуть, потому что в процессе выяснится, что на самом деле нужно было делать не так.

Мы в своё время просто явно сказали пользователям: сейчас язык будет меняться. Мы максимально постараемся помочь с миграцией с одной версии на другую, но ничего не обещаем. А после релиза 1.0 изменения закрыты. Теперь всё, что написано на Kotlin, будет компилироваться и в следующей версии компилятора будет работать так же.

То есть мы накопили базу, решили, что правильно, что неправильно, что оставить, что выкинуть — вот и получилось столько времени.

В случае с Kotlin у нас гораздо меньше переиспользования по сравнению с другими продуктами. Для новой IDE, скажем, нужно 80% того же кода и 20% уникального. В Kotlin очень много писали нового, много чего перепродумывали. Kotlin дороже, чем средний продукт, много дороже.

А потом рекламу продавать, если доводить до абсурда? Пока не приходило в голову. Своё облако — это свои сервера, совсем не наш бизнес. Лет через 20 давайте синхронизируемся, может, мы передумаем.

О роли основателей в компании и жизни идеи от рождения до закрытия

Сергею Дмитриеву интересна биоинформатика, aging, образование как концепция. У него есть интересные мысли, как можно по-другому вообще устроить образование, чтобы учиться было интереснее и эффективнее. У него есть проекты в этой сфере — и свои, и те, в которые он инвестировал. Другой основатель — Евгений Беляев — делает образовательный продукт в виртуальной реальности, который называется CoSpaces. Ещё один основатель, Валентин Кипятков, лицензию пилота получил.

Некоторые из своих проектов они делают в рамках компании, некоторые — вне.

Есть что-то вроде совета директоров, но у нас так не принято, что сверху собрались все, что-то решили, а потом компания двигается в этом направлении. Все решения обсуждаются с теми людьми, которые их могут воплотить. Это может быть кто угодно.

Давайте я на примере Kotlin расскажу, потому что это было смешно. Тот же самый Сергей пришёл и говорит: «Что нового можно было бы сделать для программистов?». И один коллега — Дима Жемеров — говорит: «Самая крутая штука, которую можно сделать для программистов, — это язык программирования». Я такой: «Вы чего вообще, куда? Где мы, а где язык программирования? Мы никогда не потянем и не сделаем его популярным». Ну а на следующее утро я пришёл и сказал: «Всё, делаем».

За это время мы сделали столько IDE для разных языков, что мы понимали, как люди пользуются разными фичами языка. Какие места больше всего у людей реально болят. У нас была накоплена огромная системная экспертиза в широком поле по языкам. А Java на тот момент развивалась категорически медленно, писать на ней было просто неудобно. Решили попробовать.

Есть ещё дополнительный нюанс в разработке языка, который становится мультипликатором всех рисков. Для другого продукта в принципе достаточно, если у него есть пользовательская база. Это оправдывает инвестиции и времени, и денег. Язык либо мегапопулярен, либо он не нужен.

Да. Давно, правда. Был такой продукт, назывался Omea. Это новостной агрегатор, десктопный инструмент, в котором можно было читать почту, фиды, новостные группы, RSS. Мы его закрыли, потому что было непонятно, как привлечь более широкую аудиторию. Открыли исходный код, и он даже до сих пор, по-моему, живёт.

Это не повлияло критически ни на что. Ещё был давно большой продукт, назывался Fabrique. Это фреймворк и IDE для разработки именно серверных приложений сразу с UI. Но пока мы его делали, а делали мы его долго, обновился стэк технологий, и необходимость в продукте отпала. Мы его закрыли за несколько недель до планируемой даты релиза. Решили, что, наверное, не жилец. Конечно, можно было начать с нуля всё делать, но зачем?

Да. Смотрите, есть продукты, которые нам стоят больше, чем мы с них получаем, но во-первых, есть пользователи, для которых этот продукт важен, во-вторых, закрытие будет нести репутационные издержки.

Есть такой имидж, например, у компании Google: вы, конечно, можете пользоваться их продуктами, но никто не скажет, что завтра они не исчезнут. Нам бы такого не хотелось: кажется, что репутация именно на рынке разработчиков очень важна.

ReSharper. Всё скучно, да? Понимаете, бывают продукты с каким-то космическим ростом. Но у нас не так, всё накапливается потихоньку. Чем дольше продукт на рынке, тем больше он зарабатывает.

Rider. Это IDE для .NET. С ним тоже смешная история. У нас вообще-то есть продукт ReSharper — плагин для Visual Studio. Но это игра в догонялки: Visual Studio добавляет какую-то функциональность, мы добавляем больше. Всё было нормально, но тут выяснился вот какой нюанс: Visual Studio потребляет ресурсы, память, CPU и так далее, а мы добавляем сверху. Visual Studio до сих пор ориентирована на 32 бита, памяти потребляется не более чем 2 ГБ — и мы вдвоём просто перестали помещаться.

Подумали — и решили сделать свою IDE, Rider называется. Она показывает хорошую динамику. И GoLand показывает хорошую динамику — в частности, потому что сам рынок растёт очень хорошо.

Разрабатывать IDE и не пользоваться этой же IDE — странно. Это означает, что, наверное, ты что-то не то делаешь, хотя мне известны люди, которые предпочитают только легковесные редакторы. Чтобы кто-то использовал VS Code, мне не известно. Во всяком случае, даже если это так, то это не проблема.

Кто как. Наверное, мы уже не стартап. Когда мы начинали, я действительно уходил в 2–3 часа ночи, работал и в субботу, и в воскресенье. Просто потому что было ужасно интересно. Сейчас у нас тут по субботам кружок по робототехнике, сотрудники приводят своих детей, и я тоже со своими прихожу в офис. И нет, народу не очень много.

Нет. Скажем, даже были конфликтные ситуации, когда люди не хотели идти в отпуск, а мы отправляли. Ну ничего, как-то перестроились.

О культуре в компании и найме сотрудников

Да. Есть масса пользы в том, что люди приобретут новый опыт. Они будут более интересующимися и мотивированными. А если им это запрещать, они будут считать, что компания их ущемляет, не даёт заниматься тем, что им интересно, и уйдут куда-нибудь. У нас есть такая тема, как в Google, — 20%. День в неделю можешь заниматься чем хочешь. Хотя загорать на пляже 20% времени не поощряется.

Не всегда. У нас есть люди, которые работали в поддержке, а 20% тратили на дизайн — нравился он им. А потом переквалифицировались в дизайнеров интерфейсов. Иногда человек работает много лет в одной команде, и вроде как его всё устраивает, но хочется попробовать что-нибудь другое, перейти в другую команду — но страшно.

Вдруг не справлюсь, вдруг там всё плохо устроено или начальник злой, или коллеги на обед не ходят вместе. Тогда он говорит: «Давай я один день в неделю буду работать у вас». Иногда переходят совсем. Иногда говорят: «Нет, что-то мне у вас не нравится». И уходят назад. Мы так не планировали, но вот так с этим правилом получилось.

У меня есть обратное ощущение — приятно, конечно, осознавать масштаб деятельности, но с другой стороны, разработчики часто интроверты, им комфортно в маленьком кругу. А когда тут такой резкий взрыв, возникает дополнительный дискомфорт.

С одной стороны — да, с другой стороны — мы делаем много продуктов, у нас всегда кадровый голод. И чем больше мы нанимаем, тем больше у нас хотелок.

Работаем со студентами — это надёжный, но довольно долгий способ получить очень хороших сотрудников. Хантим отовсюду, откуда только можно.

Мы проводим хакатоны внутри, оттуда рождается масса идей. Это, знаете, такое программирование без обязательств: не надо думать, как тебе завтра сопровождать продукт, что с ним будет через 10 лет. Но некоторые вещи потом приходится всё-таки тянуть — иногда получаются полезные штуки. Хакатоны для привлечения снаружи мы не проводили. Наверное, это здравая мысль, спасибо.

У нас разная культура в разных проектах. Когда мы находим человека, смотрим, куда он подойдёт — не только по скиллам, но и по ценностям.

Конечно. Нужно, чтобы человеку было интересно. Всё остальное приложится. Должно переть от программирования. Не потому что он больше кода напишет или более эффективный будет, а потому что он лучше понимает, что мы хотим сделать за продукт, мы ведь на самом деле его пишем для себя. Надо уметь рефлексировать — почему ты такой код пишешь, а не такой?

Студенты редко делают что-то конкретное. Когда они приходят на стажировку, то проходят интервью. Мы проверяем базовые знания — каким местом человек слушал то, что ему в университете рассказывали. И смотрим, насколько ему нравится кодить. Это с возрастом из людей получаются хорошие программисты, которые уже не любят программировать. А когда человек этим только начинает заниматься, у него либо горит всё, либо не горит. Когда горит — можно брать.

Да. Я же попал. Обычно так это выглядит: приходит человек, начинает что-то делать. Если он сидит в своём углу, никуда не показывается, то карьерной лестницы у него нет — но ему и не надо.

Иногда человек говорит: «Ну посмотрите, у нас же здесь плохо сделано, давайте я помогу». Если человек активен, помогает другим, то зарабатывает авторитет, и вокруг него получается команда. Тогда мы предлагаем им сделать продукт вместе. Они его делают, а он выступает в роли тимлида.

Как сложится. У нас нет заранее продуманной иерархии, скорее мы просто идём от имеющегося. Структура образуется только там, где она необходима.

Надо посмотреть, отчего он перегорел. Вряд ли потому что познал всё про руководство командой размером в семь человек, это выглядит довольно неестественно. Потому что наша задача не руководить людьми, а делать продукт. Руководство людьми — одна из самых важных функций, но всё равно инструмент. Если человек понимает, что этот продукт он уже сделал, может сделать ещё один продукт. Или помочь сделать соседний продукт.

Человек должен продемонстрировать видение, понимание того, чем компания может заниматься дальше. Продемонстрировать способность спокойно взаимодействовать с массой людей. Возможность заразить своими идеями, чтобы кто-то по собственной воле подхватывал и шёл что-то делать дальше. Да и хватит, пожалуй.

Да. Руководство компанией для меня не самоценность или самоцель. Если такой человек появится и я увижу все эти свойства в нём, поверю в него, то вообще нет проблем.

Да, остался бы. Что бы я делал? В принципе то же самое, что сейчас. Но только мне не надо было бы отвлекаться от программирования.

Почта, Slack, митинги и работа в IDE.

О России на глобальном рынке и о покупке других компаний

Становится лучше. С одной стороны, грех жаловаться. Я здесь учился, как и 99% моих коллег. А с другой стороны, в западных университетах гораздо более фундаментальные курсы по Computer Science. Но мы активно нагоняем.

Больше практики. Но и сейчас ничего не мешает студентам по ночам вместо того, чтобы готовиться к сессии, чего-то программировать.

Ощущения очень двоякие. Есть масса энергичных людей, которые могут, хотят и много чего делают. Но и отток очень чувствуется. Говорят, что все, кто мог уехать, уже уехали, а остались те, кто уехать не мог, — это, конечно, не так. Но всё-таки очень много из тех людей, кто уехал, уехали с мозгами.

Мы офис в Мюнхене открывали именно по этим соображениям, чтобы люди, которые хотят уехать из России, не должны были увольняться из компании. Это хорошо работает, прямо прекрасно. Часто люди, которые отсюда уезжают, устраиваются в очень большие фирмы — Google, Facebook, Microsoft. Можно за них порадоваться, но чем больше компания, тем меньше личного участия в результате. Здесь они могли бы сделать что-то более impactful.

Бывает, но я не считал. Например, есть такой Фёдор Коротков. Он уехал от нас в 2013 году. Есть люди, которым надо в Долину съездить. Он работал в Twitter, потом в Airbnb. Потом сделал свой продукт, который с нами конкурирует. Он очень хороший чувак, я всё жду, когда его можно будет обратно забрать.

Как получится. Покупка компании — у нас пока эта мышца не очень работает.

Не сильно. Обычно всё разбивается о проблему, что потом делать с людьми. Как их интегрировать? Они же совсем по-другому работают.

Ради технологии покупать никакого смысла нет. Всё, что полезного есть в нашей индустрии в смысле технологий, уже с открытым исходным кодом.

Ради людей есть смысл покупать, надо просто научиться. Мы пока не умеем.

Как петербуржцы создали язык программирования Kotlin и почему его теперь используют Android и Google

Язык программирования Kotlin, созданный петербургской компанией JetBrains, стал официальным языком для разработки на Android.

Почему Kotlin назвали в честь острова в Финском заливе, как и когда язык стал популярен среди разработчиков мобильных приложений, почему им удобно пользоваться и зачем он изначально понадобился? Маркетинг-менеджер Kotlin Роман Белов рассказал «Бумаге», как в Петербурге создавали язык, признанный Google.

Как и когда появился язык программирования Kotlin?

Мы начали разрабатывать Kotlin в 2010 году. К тому времени компании JetBrains было уже десять лет и основной продукт компании — JetBrains IntelliJ IDEA, полностью написанный на Java, — был уже очень большого размера. Стало понятно, что во многом Java нас не устраивает. Было несколько альтернативных языков программирования, но оказалось, что ни один из них не соответствует тем требованиям, которые мы выдвигаем к языку, на который хотели бы перейти.

Была и вторая причина. Когда в одном месте собирается очень много людей с большим экспертным опытом в области языков программирования, часто получается, что рождается новый язык. Так оно и получилось. Во-первых, была осознанная и серьезная потребность, а во-вторых, мы могли ее удовлетворить.

Как и многие наши продукты, мы создавали Kotlin исходя из своей необходимости. Это, вообще, заложенный в развитии компании принцип: мы видим, что на рынке нет инструмента, который решал бы какую-то проблему, и тогда создаем его. Наши первые пользователи — это всегда мы сами. Поэтому обычно у нас получаются очень практичные и прагматичные инструменты.

Почему Kotlin называется именно так?

В тот момент, когда придумывалось название, на JVM (Java Virtual Machine — прим. «Бумаги») существовали еще языки, названные в честь островов: Java, Ceylon. И мы подумали: какой у нас есть остров рядом? Котлин. И это название прижилось. Тут нет какой-то традиции или правила, но так случилось, какой-то более глубокой мысли за этим нет.

В чем особенности языка?

Наверное, самое удачное слово, которое подходит к языку Kotlin, — это прагматичность. Языки бывают разные: некоторые выходят из академической среды, другие созданы для конкретных платформ. Мы изначально были нацелены на практичный язык для максимально широкой аудитории. Он должен был быть демократичным, то есть без заумных вещей. Бывают ситуации, когда программист знает все тонкости языка и благодаря этому пишет хитрый код, — и в этот код никто из джуниор-программистов не может лезть. Нам нужен язык, который одинаково хорош как для начинающих программистов, так и для продвинутых.

Внутри компании у нас также полная демократия: каждый программист сам решает, на каком языке писать, на Java или на Kotlin, и далеко не все переходят на Kotlin. Для меня как для маркетинг-менеджера языка JetBrains — это маленький мир. Когда в нашей большой компании все перейдут на Kotlin, тогда, наверное, и во всем мире программисты перейдут на него. Но, действительно, процент использования Kotlin в компании неизменно растет.

Чем же Kotlin так хорош? В первую очередь разработчики любят Kotlin за его краткость и выразительность. Это свойственно всем новым языкам. Раньше людей это не очень смущало, потом размер программ стал больше — люди поняли, что пишут очень много совершенно бессмысленных кусков кода только потому, что от них это требует синтаксис языка программирования.

Вторая причина в том, что он полностью совместим с Java и позволяет постепенно мигрировать с Java-приложения на Kotlin-приложение. Например, приложение Basecamp в течение полугода полностью мигрировало с Java на Kotlin.

Третий пункт — Kotlin безопасен: в семантику языка заложены принципы, которые предотвращают целый ряд очень распространенных ошибок, которые обычно случаются в момент исполнения программы. Это позволяет писать более безопасный код, что в конечном итоге помогает сэкономить деньги и снизить затраты на тестирование.

Как Kotlin заметили разработчики приложений?

В JetBrains мы не занимаемся Android-разработкой и изначально никто не думал, что Kotlin будет языком, который так удачно подойдет для целей Android-разработчиков. Но в какой-то момент оказалось, что Android застрял на Java 6 и очень многие новые фичи Java на Android недоступны. Тогда прогрессивные разработчики обратили внимание на Kotlin.

Мы поняли, что Kotlin может быть очень полезен для Android, и стали дорабатывать фичи, которые помогают Android-разработчикам, учитывали их потребности при разработке дизайна языка.

Год назад у нас произошло довольно большое событие: система сборки Gradle, с помощью которой собираются все приложения для Android, объявила о переходе на Kotlin.

В каком-то смысле история с Kotlin на Android — совершенно сказочная и хрестоматийная: мы просто делали язык программирования, и он очень нравился разработчикам. Это история про движение снизу вверх, а не наоборот. Разработчики давно просили Google поддержать Kotlin. И Google к ним прислушался.

С анонсом от Google формально для нас ничего не меняется: мы продолжаем разрабатывать язык и нацелены на разные платформы. Естественно, мы предвкушаем особое внимание к языку со стороны Android-разработчиков: оно будет, в частности, выражено в сообщениях об ошибках, в запросах на поддержку той или иной функциональности, и, естественно, мы будем всё это обрабатывать. Но в целом, конечно, продолжим двигаться по намеченному пути.

Кто и зачем использует язык Kotlin?

В компании мы начали применять Kotlin года с 2012-го, но официальный релиз языка был 17 февраля 2020 года. До этого времени конструкции языка активно менялись и поддерживать код на Kotlin было достаточно проблематично. Надо понимать, что развитие языков программирования требует большого внимания к обратной совместимости. И когда мы заявили о релизе, взяли на себя обязательство по обратной совместимости: по тому, что новый код будет совместим на бинарном уровне со старым. И мы эти обязательства выполняем.

Сейчас язык Kotlin в своих приложениях используют такие российские компании, как Avito и «Рокет Банк». За прошлый год Kotlin опробовали 160 тысяч программистов. До сегодняшнего дня Kotlin показывал экспоненциальный рост по числу программистов, и, думаю, объявление Google поможет нам продолжить этот рост.

Хочу всё знать. Язык Kotlin

В 2010 году группа разработчиков российского отделения JetBrains взялась за разработку языка, который был бы удобнее и типобезопаснее, чем Java, но не так сложен, как Scala. Название этому языку было дано в честь острова Котлин, расположенного в Финском заливе (по аналогии с Java, который также назван в честь острова).

Если вы посмотрите на любой современный обзор наиболее перспективных языков программирования, в том числе наш, вы непременно найдете там Kotlin. В чем суть этого языка, почему он так всем нравится, какие у него перспективы — об этом далее.

Синтаксис

Идея сделать язык, одинаково удобный, как для новичков, так и для опытных разработчиков напрямую выразилась в его синтаксисе. Как и любой современный аналог, Kotlin — предельно лаконичный, компактный и понятный. Огромное количество кода, которое приходилось раньше писать на Java теперь можно просто проигнорировать. Простой пример: использование точки с запятой для разделения операторов не является обязательным условием — компилятор теперь всё понимает самостоятельно, если просто перейти на новую строку. При объявлении переменных во многих случаях не обязательно указывать тип — он определится автоматически.

При этом надо сказать, что Kotlin в плане записи немного вернулся к стилю Pascal — здесь тоже наглядность главенствует над чёткостью конструкций. Немного подробнее об этом можно почитать в этой небольшой статье. В ней рассмотрены лишь базовые принципы построения языков Java и Kotlin, поэтому понятна она будет абсолютно всем.

Впрочем, небольшой кусочек кода всё же оставим:

fun main(args : Array ) <
val scope = «world»
println(«Hello, $scope!»)
>

Предельно простая запись, которая должна быть понятна любому, кто хотя бы год в школе или университете учил программирование.

Важно упомянуть, что Kotlin полностью совместим с Java. Именно поэтому на первых порах его рассматривали как простой синтаксический сахар, используя для комплексных задач, где просто хотелось сэкономить время и силы.

Преимущества

В общем-то все преимущества в сравнении с Java уже были названы, поэтому просто соберем их в одном месте:

Объем кода. Неиспользование ненужных архаичных кусков кода ускоряет процесс разработки и повышает читаемость;

Безопасность. Заложенные в синтаксис языка правила создания кода позволяют избегать мелких трудно отслеживаемых ошибок, которые возникают лишь в момент исполнения программы;

Совместимость в Java. Это удобно и с точки зрения обучения новому языку, и с точки зрения постепенного перевода ваших программных продуктов c Java на Kotlin. К примеру, именно так произошло с приложением Basecamp.

Недостатки

Как у языка, который был разработан на основе Java, у Kotlin по сравнению с ним есть два очевидных недостатка: скорость и проработанность. В первом случае все понятно: работая на JVM трудно обойти по быстродействию Java. Вторая проблема немного надуманная для столь молодого языка, ведь в официальном обороте он существует чуть больше года. Да, здесь существенно меньше инструментов и библиотек, чем на Java. Но, во-первых, пока это не критично, а во-вторых, в мире Java количество далеко не везде перешло в качество.

Kotlin же пока со своими главными задачами справляется, а полная совместимость с Java помогает закрыть глаза на указанные пробелы.

Перспективы

Несмотря на то, что разработка Kotlin началась в 2010 году, первая официальная версия увидела свет лишь в феврале 2020. С этого момента востребованность языка стремительно растет, в рейтинге TIOBE он за год ворвался в TOP-50, а в прошлом месяце на конференции Google I/O было объявлено об официальной поддержке Kotlin в системе разработки Android-приложений.

Учитывая высокую популярность IntelliJ IDEA среди разработчиков и стратегическую ставку компании на Kotlin, можно с уверенностью утверждать, что через 3-4 года мы увидим его среди полноправных конкурентов Java и Swift в области мобильной разработки. Кроме того, если создатели языка не разочаруются в своем продукте, наверняка Kotlin отправится всерьез захватывать и другие горизонты: веб, ИИ, интернет вещей, большие данные, десктопные приложения.

Если вас всерьёз заинтересовал этот язык, то обязательно загляните на его официальный сайт (русская версия) и испытайте все его преимущества на личном опыте. Спешите, пока это не стало мейнстримом.

В 2010 году группа разработчиков российского отделения JetBrains взялась за разработку языка, который был бы удобнее и типобезопаснее, чем Java, но не так сложен, как Scala. Название этому языку было дано в честь острова Котлин, расположенного в Финском заливе (по аналогии с Java, который также назван в честь острова).

Мастер Йода рекомендует:  5 ошибок в SEO с точки зрения Google

Если вы посмотрите на любой современный обзор наиболее перспективных языков программирования, в том числе наш, вы непременно найдете там Kotlin. В чем суть этого языка, почему он так всем нравится, какие у него перспективы — об этом далее.

Синтаксис

Идея сделать язык, одинаково удобный, как для новичков, так и для опытных разработчиков напрямую выразилась в его синтаксисе. Как и любой современный аналог, Kotlin — предельно лаконичный, компактный и понятный. Огромное количество кода, которое приходилось раньше писать на Java теперь можно просто проигнорировать. Простой пример: использование точки с запятой для разделения операторов не является обязательным условием — компилятор теперь всё понимает самостоятельно, если просто перейти на новую строку. При объявлении переменных во многих случаях не обязательно указывать тип — он определится автоматически.

При этом надо сказать, что Kotlin в плане записи немного вернулся к стилю Pascal — здесь тоже наглядность главенствует над чёткостью конструкций. Немного подробнее об этом можно почитать в этой небольшой статье. В ней рассмотрены лишь базовые принципы построения языков Java и Kotlin, поэтому понятна она будет абсолютно всем.

Впрочем, небольшой кусочек кода всё же оставим:

fun main(args : Array ) <
val scope = «world»
println(«Hello, $scope!»)
>

Предельно простая запись, которая должна быть понятна любому, кто хотя бы год в школе или университете учил программирование.

Важно упомянуть, что Kotlin полностью совместим с Java. Именно поэтому на первых порах его рассматривали как простой синтаксический сахар, используя для комплексных задач, где просто хотелось сэкономить время и силы.

Преимущества

В общем-то все преимущества в сравнении с Java уже были названы, поэтому просто соберем их в одном месте:

Объем кода. Неиспользование ненужных архаичных кусков кода ускоряет процесс разработки и повышает читаемость;

Безопасность. Заложенные в синтаксис языка правила создания кода позволяют избегать мелких трудно отслеживаемых ошибок, которые возникают лишь в момент исполнения программы;

Совместимость в Java. Это удобно и с точки зрения обучения новому языку, и с точки зрения постепенного перевода ваших программных продуктов c Java на Kotlin. К примеру, именно так произошло с приложением Basecamp.

Недостатки

Как у языка, который был разработан на основе Java, у Kotlin по сравнению с ним есть два очевидных недостатка: скорость и проработанность. В первом случае все понятно: работая на JVM трудно обойти по быстродействию Java. Вторая проблема немного надуманная для столь молодого языка, ведь в официальном обороте он существует чуть больше года. Да, здесь существенно меньше инструментов и библиотек, чем на Java. Но, во-первых, пока это не критично, а во-вторых, в мире Java количество далеко не везде перешло в качество.

Kotlin же пока со своими главными задачами справляется, а полная совместимость с Java помогает закрыть глаза на указанные пробелы.

Перспективы

Несмотря на то, что разработка Kotlin началась в 2010 году, первая официальная версия увидела свет лишь в феврале 2020. С этого момента востребованность языка стремительно растет, в рейтинге TIOBE он за год ворвался в TOP-50, а в прошлом месяце на конференции Google I/O было объявлено об официальной поддержке Kotlin в системе разработки Android-приложений.

Учитывая высокую популярность IntelliJ IDEA среди разработчиков и стратегическую ставку компании на Kotlin, можно с уверенностью утверждать, что через 3-4 года мы увидим его среди полноправных конкурентов Java и Swift в области мобильной разработки. Кроме того, если создатели языка не разочаруются в своем продукте, наверняка Kotlin отправится всерьез захватывать и другие горизонты: веб, ИИ, интернет вещей, большие данные, десктопные приложения.

Если вас всерьёз заинтересовал этот язык, то обязательно загляните на его официальный сайт (русская версия) и испытайте все его преимущества на личном опыте. Спешите, пока это не стало мейнстримом.

Записки программиста

Мои первые впечатления от языка Kotlin

25 февраля 2015

В мире JVM уже давно предпринимаются попытки заместить Java чем-то более пристойным. Наиболее успешной такой попыткой, по всей видимости, на сегодняшний день является Scala. Тут вам и сообщество программистов, и куча фреймворков, и вакансии — все что угодно. Но и Scala далека от идеала. Среди наиболее существенных недостатков языка можно отметить его относительную сложность (что признает даже Одерски) и, что намного важнее, медленную скорость компиляции, а также требовательность к ресурсам во время этой компиляции. Поэтому такие языки под JVM, как Kotlin, Gosu и Ceylon все еще представляют собой интерес.

Когда мне захотелось ознакомиться с одним из этих языков, Ceylon отпугнул меня своим синтаксисом. Gosu выглядел куда более приятно. Но в примечаниях к последнему релизу языка среди прочего говорилось об устаревании оператора неравенства <> и что дескать вместо него теперь нужно использовать != . С такой нестабильностью я мириться не готов. А вот Kotlin и порадовал синтаксисом и произвел впечатление стабильного языка. К тому же, его разрабатывают наши соотечественники из JetBrains, и, понятное дело, полноценная поддержка со стороны IntelliJ IDEA также уже имеется. На нем я и решил остановиться.

Прочитав 130 страниц полного описания языка я сделал следующие выводы:

  • Язык очень похож на Scala, только проще и быстро компилируется. В частности, скорость компиляции не медленнее, чем в Java, разработчики языка ставят одной из своих главных целей. Из наиболее существенных отличий от Scala следует отметить полное отсутствие каких-либо имплиситов. Однако прикручивать методы к уже существующим final классам можно, как и в Scala.
  • Язык компилируется не только под JVM, но и в JavaScript. Это хорошо, можно писать UI и бэкенд на одном языке.
  • Все основные элементы ФП присутствуют — замыкания, хвостовая рекурсия, REPL, функции высших порядков, map / reduce / filter, автоматический вывод типов, паттерн матчинг, АТД (кстати, здесь case классы называются data классами) и так далее. Каррирования, как в Scala, похоже нет, но если функция принимает последним аргументом другую функцию, можно использовать синтаксис в стиле lock(lock) < body >, что решает ту же самую проблему.
  • Коллекции бывают неизменяемые (List, Set, Map) и изменяемые (MutableList, MutableMap, …), то же самое с переменными (val, var).
  • В языке есть немало интересных решений. Например, меня удивили делегаты, через которые, помимо прочего, сделаны ленивые вычисления. Еще есть такая фишка под названием smart casts, благодаря которой код if(x is String) < print(x.length) >компилируется и тайпчекается без дополнительного приведения переменной к типу String. Немного напоминает Rust.
  • Вместо Option/Maybe в языке используются nullable типы. С одной стороны, они дают такие же статические гарантии отсутствия NPE, с другой — более эффективны, чем Option, так как работают поверх все тех же null’ов, то есть, не приводят к использованию дополнительных классов. Что опять-таки напоминает Rust.
  • В Kotlin также есть ковариация и контравариация, но благодаря использованию ключевых слов in и out работа с ними становится намного проще и понятнее. Если тип помечен как in, методы класса могут принимать его на вход (консьюмер), если же out — методы возвращают тип (продьюсер). И не нужно помнить о том, что in — это контравариация, а out — ковариация, все просто и понятно.
  • Вообще, язык выглядит очень продуманно. Поля класса по умолчанию не являются public, при выводе data-классов перед значениями полей выводятся их имена, функции можно объявлять прямо в пакете без всяких дополнительных package object’ов и так далее. Всякие такие мелочи внушают доверие.

Чтобы попрактиковаться в программировании на Kotlin, я решил написать на нем одну программку, которую в свое время я уже писал на Scala, а также на Rust. Программа эта принимает текстовый файл, выдирает из него все URL, и выдает на выходе HTML-код со списком этих ссылок, используя в качестве тестов ссылок title соответствующих страниц. Вот что у меня получилось:

package me. eax . examples . shownotegen

import org. apache . http . client . methods . *
import org. apache . http . impl . client . *
import java. util . regex . *
import java. io . *

fun defaultUserAgent ( ) =
«»»Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, «»» +
«»»like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60″»»

fun getTitle ( url : String ) : String <
val req = HttpGet ( url )
req. setHeader ( «User-Agent» , defaultUserAgent ( ) )
try <
HttpClients. createDefault ( ) use <
it. execute ( req ) use < resp - >
val entity = resp. getEntity ( )
val charset = run <
val contentType = entity. getContentType ( ) . getValue ( ) ?: «»
val pattern = Pattern. compile ( «charset=(.*)» )
val matcher = pattern. matcher ( contentType )
if ( matcher. find ( ) ) matcher. group ( 1 ) else «UTF-8»
>
val title = run <
val body = entity. getContent ( ) . readBytes ( ) . toString ( charset )
val pttrn = Pattern. compile ( «»»(?is) (.*?) «»» )
val matcher = pttrn. matcher ( body )
matcher. find ( )
matcher. group ( 1 )
>
return title. replaceAll ( «»» \s +»»» , » » ) . trim ( )
>

fun processFile ( fileName : String ) <
val data = File ( fileName ) . readText ( Charsets. UTF_8 )
val matcher = Pattern. compile ( «»»https?:// \S +»»» ) . matcher ( data )
println ( »

    » )
    while ( matcher. find ( ) ) <
    val url = matcher. group ( )
    println ( «
  • \» $url \» >$ » )
    >
    println ( «

» )
>

fun printUsage ( ) <
val executableName = System. getProperty ( «sun.java.command» )
println ( «Usage: $executableName input.txt» )
System. exit ( 1 )
>

fun main ( args : Array String > ) <
when ( args. size ( ) ) <
0 — > printUsage ( )
else — > processFile ( args [ 0 ] )
>
>

Обратите внимание на использование метода use. В Kotlin он используется вместо try with resoruces в Java. Как и Scala, Kotlin позволяет вызывать методы при помощи инфиксной записи, а не через точку. Объяснение того, что делает функция run, можно найти здесь. Также в ходе своих экспериментов с Kotlin я выяснил, что простой hello world, упакованный в fat jar, весит 937 Кб, что не так уж много. Приведенная же выше программа в виде fat jar, как оказалось, весит чуть менее 2 Мб. Против 5.5 Мб в случае с аналогичной программой на Scala. Размер fat jar’ов, возможно, не является супер важным фактором при выборе языка, но на приятную мелочь вполне потянет.

Общие впечатления от языка у меня исключительно положительные. Как Java, только намного более лаконичный, и с удобняшками из мира ФП. Порог вхождения при этом намного ниже, чем у Scala. А скорость компиляции заметно выше. Эдакий очень правильный OCaml под JVM. Каких-то особо громких историй успеха и кучи своих фреймворков у Kotlin, правда, вроде бы нет. Но есть сильные подозрения, что это просто потому что при программировании на Kotlin используют все те же фреймворки, что при программировании на Java. И используют Kotlin те же Java-программисты, уставшие от многословности Java. В том числе был замечен очень сильный интерес к языку Kotlin со стороны разработчиков под Android. Да, что же касательно поддержки языка со стороны IntelliJ IDEA, то тут тоже вроде все ОК.

А что вы думаете о Kotlin и не пишите ли на нем случайно?

Андрей Бреслав, JetBrains: «Прямой монетизации языков программирования, скорее всего, уже не будет»

В конце мая Google на конференции для разработчиков объявила, что одним из официальных языков разработки приложений на Android станет Kotlin – язык, созданный петербургской компанией JetBrains. О компании, запущенной в 2000 году петербургскими программистами, Forbes уже писал. Компания была основана разработчиками Сергеем Дмитриевым, Евгением Беляевым и Валентином Кипятковым в Праге и стала прибыльной с первого года работы. Вначале они запустили Renamer — небольшую программу, которая позволяла делать простой рефакторинг в программах на Java. Затем предложили пользователям CodeSearch — плагин к JBuilder, быстро находивший все использования заданного метода или класса в программе.

Сегодня главный продукт JetBrains — интегрированная среда разработки (IDE, Integrated Development Environment, то есть «умный редактор») IntelliJ IDEA для программирования на Java. Компания выпускает продукты для разработки на языках C#, Java, C++, Ruby, PHP, JavaScript, Python, Objective-C и других. Спустя 17 лет JetBrains выросла в международный бизнес с годовым оборотом в $176 млн, с аудиторией активных пользователей в 4 млн и с 600 сотрудниками в штате.

По данным составителей рейтинга самых популярных языков программирования TIOBE, Kotlin занимает 43-е место по уровню востребованности. Большинство языков программирования, хотя их создание требует крупных вложений финансов и ресурсов, — открыты и общедоступны. Разработчики языков не гонятся за быстрой прибылью, а рассчитывают собирать вокруг языков программирования сообщества за счет open source-решений. Какие перспективы открывает поддержка Android для приложений, созданных на основе Kotlin? Что вообще может измениться в монетизации языков программирования, если, например, в Kotlin компания вложила $15 млн, а он остается бесплатным и общедоступным? Об этом Forbes поговорил с Андреем Бреславом, возглавляющим разработку Kotlin в JetBrains.

— С чем было изначально связано решение создавать новый язык программирования, еще в 2010 году?

— На 2010 год ситуация на рынке языков программирования была такой, что нам самим было не на чем писать, кроме Java, а Java развивалась (и продолжает развиваться) крайне медленно и консервативно. За двадцать лет «эры Java» понимание того, как должен быть устроен современный язык программирования продвинулось довольно далеко, и интегрировать все эти идеи в существующий язык технически крайне сложно. Поэтому возникла потребность в новом языке. Попытки предпринимались и ранее (наиболее успешные — Groovy и Scala), но по разным причинам сферы их применения оказались ограниченными.

Мы занимались и занимаемся технологиями, основанными на глубоком анализе языков программирования, поэтому хорошо понимаем, как устроены языки и как делать их лучше. Кроме того, компания известна на мировом рынке как производитель IDE — инструментов, которые во многом определяют удобство и производительность труда современных программистов. Мы решили, что такая позиция в информационном поле — уникальная возможность «продвинуть» свой язык, сделать так, чтобы его заметили.

— А с точки зрения бизнес-перспектив, почему «взяли курс»?

— Потому что мы считаем, что этот проект приносит нам выгоду на нескольких уровнях: эффективность нашей собственной разработки, распространение бренда JetBrains, повышение привлекательности наших продуктов на рынке. Мы начинали с того, что Kotlin стали пользоваться те, кто уже любит другие наши продукты. Со временем эта ситуация перевернется: люди будут выбирать наши продукты, потому что мы сделали Kotlin.

— В чем должны были оказаться особенности нового языка? На что вы решили сделать ставку? Что должно было стать конкурентным преимуществом, раз попытки создать «альтернативу Java» уже были?

Есть несколько ключевых аспектов языка, от которых зависит стоимость его «эксплуатации», то есть расходы компаний, которые будут писать на этом языке. Во-первых, если язык очень сложный, то программистам, которые на нем пишут, придется платить большую зарплату. Во-вторых, если программы сложно понимать, если сложно искать в них ошибки и вносить изменения, то разработка затягивается и становится дороже. В-третьих, если программы получаются медленными из-за свойств языка, приходится вкладывать деньги в их ускорение (от найма дорогих специалистов по оптимизации до покупки более быстрого «железа»).

Поэтому Kotlin — достаточно простой для изучения язык, и средний программист, работающий за среднюю зарплату, может легко его освоить. Синтаксис языка, система типов и инструментальная поддержка делают его удобным в использовании, так что производительность разработчиков весьма высока (выше, чем в Java). Например, data-классы, свойства, вывод типов и многие другие возможности языка позволяют писать (а значит и читать) меньше кода для типичных задач, встроенный контроль нулевых ссылок и механизм smart casts помогают раньше и быстрее обнаруживать ошибки, а гибкие абстракции (функции расширения, функциональные типы и т.д.) позволяют повторно использовать больше кода. К тому же, программы получаются такими же быстрыми, как на Java (иногда даже немного быстрее).

Среди существовавших ранее языков для платформы Java такое сочетание не встречалось: другие языки оказываются слишком дорогими для широкого класса проектов. Java слишком «многословная», поэтому код сложнее читать, писать и модифицировать, к тому же Kotlin позволяет исключить некоторые виды ошибок, которые часто встречаются в программах на Java. Scala слишком сложная, хорошо ей пользоваться могут только дорогие специалисты. Groovy слишком медленный для многих задач и подвержен ошибкам. У каждого языка есть своя ниша, в которой он очень хорош, просто вопрос в размере этой ниши. Для Kotlin она весьма велика, для других альтернативных языков — несколько уже.

— Есть еще вопрос издержек на «переключение» с одного языка на другой.

— Безусловно, стоимость смены технологии тоже играет большую роль Kotlin делает ставку на постепенный переход с максимальным переиспользованием всего ранее написанного кода на Java, это технически крайне непросто реализовать, но в результате можно начать пользоваться языком с минимальными вложениями и минимальными рисками. Можно добавить немного кода на Kotlin в существующий проект и вызывать его из Java без проблем. Или заменить небольшую часть Java-кода на Kotlin, не меняя остальной код. Не все альтернативные языки предоставляют такую возможность.

— Каковы были главные сложности при разработке Kotlin?

— Самые сложные вопросы — это интеграция с другими системами. Одно из главных преимуществ Kotlin, о котором упоминалось выше — совместимость с Java, потребовало очень много усилий. Другие интеграционные задачи тоже зачастую отнимают много времени. Когда нужно научить две сложные системы понимать друг друга — это обычно сложная задача.

— Можете оценить общий объем инвестиций в создание Kotlin?

Общий объем инвестиций в Kotlin за семь лет мы оцениваем примерно в $15 млн.

— Как быстро росла аудитория?

До выпуска первой официальной версии 1.0 (это было в феврале 2020 года) пользователями языка были только самые отчаянные энтузиасты (которых, тем не менее, было больше 1000 человек каждый день). С момента релиза 1.0 количество пользователей плавно увеличивалось и за год выросло более чем в пять раз. За 2020 год языком пользовались примерно 160 000 программистов. Сразу после объявления Google был резкий скачок более, чем вдвое: за один день пришло очень много новых пользователей, и теперь мы ожидаем гораздо более быстрого роста, чем раньше. За первый год после релиза мы выросли примерно в 2,2 раза, а за три недели с момента объявления Google — в 2,7 раза

— Какие изменения вы вносили уже после релиза? Были серьезные «повороты» в продуктовой стратегии?

Добавлять в язык слишком много возможностей нельзя, потому что он может стать слишком сложным как для изучения, так и для развития. Поэтому мы стараемся балансировать между потребностями пользователей и цельностью дизайна. Все наши новые идеи мы обсуждаем с сообществом, показываем предварительные версии, даем возможность попробовать, собираем обратную связь, исправляем то, что не удобно, добавляем то, чего не хватает.

Исторически было несколько крупных изменений в языке до 1.0, когда мы советовались с нашими пользователями внутри и вне компании, выясняли, что неудобно и сильно перерабатывали язык. Самые заметные изменения были, опять же, в области взаимодействия с Java: что-то оказывалось недостаточно удобно, мы искали решение, которое было бы по-настоящему прозрачным для пользователей.

— Какие инструменты работали для популяризации Kotlin? Для языка программирования вообще применимы термины «продвижение», «маркетинг»?

Мы в JetBrains в принципе считаем, что продукты должны распространяться по принципу «сарафанного радио». Если разработчикам нравится инструмент, они рассказывают о нем другим: за чаем на работе, в блоге и в твиттере, на конференциях и т.д. В этом смысле наши продукты распространяются «снизу»: инженеры хотят их использовать, поэтому их руководство принимает решение о приобретении лицензий. То же самое случилось и с Android: программисты из разных компаний постоянно задавали представителям Google вопросы о Kotlin, и в конечном счете убедили производителя платформы поддержать наш язык официально.

Рекламу в обычном смысле мы для Kotlin практически не используем. В основном, опираемся в продвижении на блог, Twitter, наш собственный форум, Slack, выступления на конференциях, поддержку пользовательских групп и тематических митапов в разных странах. В самом начале мы использовали как стартовую площадку аудиторию пользователей продуктов JetBrains, а дальше сообщество прирастало сначала энтузиастами, которые писали о языке на разных ресурсах, потом и другими интересующимися. Наша задача — предоставить людям информацию и возможность ее обсуждать, а также быть всегда на связи. Программисты из нашей команды много общаются с пользователями на открытых площадках, отвечая на вопросы, обсуждая возможности и собирая мнения.

— Какова, по вашим оценкам, текущая аудитория Kotlin?

— За май 2020 года Kotlin использовали более 100 000 человек — это примерно в 2,7 раза больше, чем в апреле. Есть пользователи из всевозможных стран, включая экзотические, такие как, например, Тринидад и Тобаго. Больше всего пользователей в Китае, США, России, Германии, Индии, Японии, Великобритании, Польше, Бразилии и Канаде.

— Для создания каких продуктов чаще всего он используется?

— До объявления от Google половина наших пользователей делала серверные приложения на JVM, а вторая половина — мобильные приложения под Android. Сейчас пропорции могут измениться, но мы ожидаем, что серверное комьюнити тоже будет расти.

— А каковы типичные сценарии использования Kotlin именно для мобильной разработки?

В принципе Kotlin целесообразно использовать для написания приложений от начала до конца, но, если уже есть приложение, написанное на Java, типичным сценарием будет постепенный переход. Можно плавно добавлять новый код на Kotlin и/или конвертировать Java-код, но не весь сразу, а постепенно. Совместимость с Java максимально упрощает такой сценарий

— Когда вы впервые стали общаться с Google?

Мы сотрудничаем с Google уже несколько лет, с тех пор как официальной средой разработки стала Android Studio, построенная на основе нашей платформы IntelliJ. Мы постоянно поддерживаем деловые контакты, наши инженеры иногда ездят в США общаться с коллегами из Google. Во время нашего визита на Google I/O 2020 нам оказали очень радушный прием, было очень приятно. В Google в основном отказывались комментировать вопросы про Kotlin до официального объявления. Официальная поддержка была их решением, мотивированным потребностями и запросами пользователей.

— В чем ценность Kotlin для бизнеса JetBrains в целом, раз сейчас это полностью общедоступный инструмент?

— Кроме улучшения нашей собственной производительности от перехода на Kotlin, мы получаем широкое распространение бренда JetBrains, что способствует повышению интереса к нашим продуктам. Со временем еще больше людей будут покупать, например, IntelliJ IDEA, потому что это «главная» среда разработки для Kotlin. Большое значение имеют также коммерческие продукты, которые мы в дальнейшем сможем разрабатывать на основе Kotlin. Так, например, мы рассматриваем создание на базе бесплатного компилятора Kotlin/Native коммерческих инструментов разработки для iOS, встроенных систем и других платформ.

— На ваш взгляд, как будут в дальнейшем развиваться языки программирования? Будет ли все большая специализация?

— Все наиболее популярные сегодня языки достаточно универсальны. Даже JavaScript уже несколько лет успешно работает на серверах и мобильных телефонах. Я думаю, что будущее за многоплатформенной разработкой, именно поэтому мы развиваем Kotlin не только на JVM и Android, но и для браузеров и устройств без виртуальных машин (iOS, IoT и т.д.).

— Как будет меняться рыночная среда языков программирования? Как может измениться роль open source? Какими будут способы монетизации или прямой монетизации не будет?

— На текущий момент практически не остается широко используемых коммерческих компиляторов (программы, которые переводят код, написанный программистами, в машинный код, который «понимает» процессор — Forbes). Если еще в 1990-е годы язык программирования как таковой был продаваемым продуктом, то сегодня это как правило бесплатное ПО с открытым кодом. Прямой монетизации языков программирования, скорее всего, уже не будет. Остаются, конечно, какие-то нишевые коммерческие проекты, но это тоже не просто языки, а интегрированные решения вроде Wolfram Mathematica (система для математических вычислений, работает с языком программирования Wolfram Language — Forbes). Будучи важными элементами инфраструктуры, практически наравне с Linux, OpenSSL или MySQL, компиляторы и интерпретаторы языков программирования (интерпретатор фактически решает те же задачи, что и компилятор, но на лету – Forbes), скорее всего, будут разрабатываться в Open Source при поддержке одной или нескольких коммерческих компаний. Сегодня так разрабатываются, например, компиляторы C++, Swift, C#, Java и Kotlin. Торговые марки при этом могут принадлежать производителю, но код открыт и компилятор распространяется бесплатно.

— А как будут меняться соотношения сил между энтузиастами и сообществом и крупными компаниями?

— Я не думаю, что это соотношение когда-нибудь заметно поменяется. Язык программирования — это довольно сложная система. Чтобы ее согласовано поддерживать и развивать, нужен довольно централизованный процесс дизайна, где решения принимает узкий круг экспертов. У большинства современных языков, включая Kotlin, есть один «главный архитектор», который в конечном счете принимает все ключевые решения. Естественно, исследовательскую часть, прототипирование, апробацию и еще много чего может делать множество других людей, но решения в конечном счете зачастую принимает кто-то один. Это необходимо для «синхронизации» идей и получения согласованного дизайна. Что касается реализации, то современный компилятор — это технологически весьма сложный продукт, поэтому нельзя ожидать существенного вклада от большого количества добровольцев. В большинстве случаев тут нужны инженеры, имеющие высокую квалификацию в весьма узкой области, и им нужно платить довольно большую зарплату.

— Будут ли рано или поздно языки полностью разрабатывать программисты, а не компании?

— Если говорить о разработке языков широким кругом пользователей, довольно давно существует концепция предметно-ориентированных языков (Domain-Specific Languages, DSLs). Идея состоит в том, чтобы предоставить пользователю инструментарий для того, чтобы легко создавать «маленькие» языки для узкого круга задач. Несмотря на то, что было испробовано множество подходов, включая весьма интересную систему MPS (система создания новых языков программирования, разработанная в JetBrains – Forbes), на сегодня самый популярный способ создания DSL — это использование достаточно гибкого языка общего назначения, синтаксис которого можно приспособить под узкоспециализированные нужды предметной области. Kotlin весьма неплохо справляется с такой задачей, так что можно сказать, что наши пользователи могут сами делать маленькие языки, когда это нужно.

— Многие сервисы уходят с ПК в мобильную среду, как это повлияет на развитие языков программирования?

— С точки зрения языков мобильная разработка все меньше отличается от разработки для больших компьютеров. Есть ограничения по энергопотреблению, но на языках это мало сказывается. Больше всего на языки может влиять появление специализированных процессоров. Сегодня, например, популярны GPU (графический процессор – Forbes) со своими системами программирования, такими как CUDA и OpenCL, это не отдельные языки, но со временем нельзя исключать специализированных добавлений такого рода в языки общего назначения.

— А как на развитие языков программирования влияют новые типы взаимодействий (m2m) или появление новых типов интерфейсов (VR/AR)?

— Самый релевантный тренд здесь, пожалуй, AI. Когда установятся типичные задачи, базовые «кирпичики», для построения, скажем, нейронных сетей или других инструментов машинного обучения, возможно, в языки будут добавлять поддержку этих возможностей, чтобы избавить программистов от лишней рутинной работы, но пока не совсем понятно, какими могли бы быть эти расширения.

Добавить комментарий