Недавно у нас в блоге вышел весьма специфичный пост про Котлин: не очень серьезный, довольно поверхностный и неожиданно бодрый. Но мы прекрасно понимаем, что критиковать технологию, потратив на её изучение несколько дней, — это моветон. И поэтому в этот раз мы решили поговорить о Котлине с человеком, который пишет на нем на проде с версии 1.0.



Сегодня названием Kotlin уже сложно кого-то удивить, особенно в Android-разработке. То ли дело в начале 2016-го: востребованность была на порядок ниже, об официальной поддержке Google ещё и речи не шло, и писать на Kotlin было уделом смелых духом. Одним из таких смельчаков стал Антон Кекс, и впоследствии он тоже уделял Kotlin много внимания (например, дважды выступал на KotlinConf). Поэтому мы решили расспросить его о том, как жизнь Kotlin-разработчика менялась со временем.

А чтобы два раза не вставать, охватили и другую тему. Антон — сооснователь эстонской компании Codeborne, практикующей extreme programming, поэтому заодно узнали, что в Эстонии с IT и каково создавать там собственную компанию.

— Как вы начали писать на Kotlin, и как используете его теперь?
— Стал использовать в начале 2016-го, с версии 1.0. Первый проект на Котлине у меня был самый безопасный: плагин для IntelliJ IDEA, который я делал для японского заказчика. После этого начал и переводить свои личные проекты с Java на Kotlin, и пытаться использовать его для бэкенда.

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

— Раз вы видели язык с версии 1.0 и до сегодняшней 1.3 — как он изменялся с точки зрения пишущего на нём разработчика?
— В начале я думал, раз релизная версия, то всё уже офигенно и будет работать без проблем. Оказалось, не совсем так, и первый промежуток, между 1.0 и 1.1 — это во многом исправление косяков, улучшение перформанса и так далее. А вот версии 1.2 и 1.3 — это про новые фичи.

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

И вот что ещё очень интересно: в версии 1.2 появилась экспериментальная поддержка мультиплатформенных проектов, стало можно компилировать и в JavaScript с Kotlin/JS, и в нативный код с Kotlin/Native. Но пока что компилировать в JavaScript мне страшновато, а с Native основная проблема в том, что у Kotlin очень маленькая стандартная библиотека. В случае с JVM Kotlin очень зависит от стандартной библиотеки Java. А в Kotlin/Native, по идее, можешь использовать любые нативные библиотеки, но тогда лишаешься «полной кроссплатформенности», всё становится отдельно. Однако сейчас в JetBrains над этим работают, и у кроссплатформенности может быть большое будущее. Кроссплатформенные iOS/Android-приложения — то, чего многим бы хотелось.

— Их нам уже пытались дать и Xamarin, и React Native…
— У них всех есть проблема, с которой Kotlin не сталкивается. В случае с React Native, Xamarin и им подобными нужно, чтобы фреймворк не отставал от релизов ОС. Постоянно что-то ломается, и все эти фреймворки не поспевают. Находишься в непонятном состоянии, когда новая версия ОС уже вышла, а твой фреймворк ещё не работает, и тебе всё равно надо что-то сделать. Это самый неприятный момент. А с Kotlin в этом смысле всё иначе — они напрямую используют из языка все стандартные API и библиотеки.

— Зачастую фича в Kotlin появляется как «экспериментальная», и до стабильной версии успевает измениться. Нравится ли вам этот подход? Если использовать экспериментальные фичи, насколько они изменяются и много ли приходится переделывать?
— Да, нравится. Потому что в бета-версиях и релиз-кандидатах 1.3 было реально много багов (я даже для своего доклада с паззлерами нашёл парочку паззлеров на эту тему), а в финальном релизе они их исправили, и это очень хорошо.

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

— Если говорить не о самом языке, а, например, про IDE, там как шло развитие? Как дела обстояли раньше, и что теперь?
— Поскольку JetBrains производят и язык, и компилятор, и инструментарий, то с точки зрения под��ержки в IDE тут была беспрецедентная ситуация. Очень часто, когда рождается язык, early adopters поначалу на нём пишут в текстовом редакторе без подсветки, и тому подобное. А с Kotlin этого не было даже до версии 1.0, поддержка в IDE была сразу.

Однако она не была идеальной, и со временем она постоянно улучшается, с каждой минорной версией добавляют инспекции. И то, что сейчас, гораздо лучше, чем было. Например, один из таких багов, починки которых я ждал: в Kotlin есть template strings, и я хотел в своих проектах попытаться использовать их вместо другого templating-языка, но из-за бага в IDE подсветка ломалась, как только начиналась переменная внутри template string в Kotlin. И сейчас это наконец-то исправлено, поэтому я начал это использовать. На данный момент у меня уже не осталось конкретных вещей, которые бы не устраивали.

— А что с развитием экосистемы в целом — сообщества, ответов на Stack Overflow, фреймворков?
— Насколько вижу, сообщество очень активное, много активности в Slack. На Stack Overflow тоже уже написано вполне достаточно. Может быть, единственная проблема в том, что при гуглении иногда находятся какие-то посты, которые были написаны до версии 1.0, когда какие-то фичи были совсем другие. За актуальностью приходится следить.

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

— Взрыва популярности в Android-мире не привёл к перекосу в сообществе, когда всех волнует только Android, а остальные платформы отошли на второй план?
— Я как-то вообще не ощущаю перекоса. Конечно, решение Google сделать Kotlin официальным языком для Android резко повлияло на увеличение интереса к языку, но мне кажется, что выстрелил не только Android, а интерес к языку вообще. На KotlinConf было достаточно много андроид-разработчиков, но много и тех, кто пишет серверные приложения, десктопные, даже JS: я встречал людей, которые реально используют написание кода и для client-side, и для server-side. И там нет ощущения, что это «язык для андроида». Хотя Android стал драйвером интереса, это всё-таки язык общего назначения.

— С новыми технологиями есть вечное опасение «интересно, но в продакшн пока не затащишь», и в Android такой проблемы уже нет, а вот за пределами Android ещё вопрос. Если для Codeborne такие опасения актуальны, то за время, что вы используете Kotlin, что изменилось?
— Мы преимущественно сами выбираем технологии, но частенько бывает так, что клиент тоже хочет поучаствовать в принятии решений. И на данный момент, когда мы Kotlin привносим в разные проекты, нет никаких возражений. Что изменилось: раньше клиенты не слышали про Kotlin вообще ничего, а теперь он уже на слуху. И сейчас, если мы говорим «начинаем переходить на Котлин», уже нет опасения, например, что он пропадёт. Есть Kotlin Foundation, там JetBrains и другие компании в хорошем финансовом состоянии. И поддержка комьюнити большая. В общем, уже абсолютно есть уверенность, что Kotlin никуда не денется.

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

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

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

А немного масштабнее — package-local доступ. Мне кажется, что internal в Kotlin — скорее ошибка. Пытались улучшить то, что есть в Java, но, на мой взгляд, зря так сделали. В Java это более-менее хорошо работало, и а internal полезен, только если ты пишешь библиотеку, а не обычное приложение. И мне не хватает такого fine-grain разграничения доступа, который есть в Java есть.

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



— Перейдём ко второй части вопросов: Эстония, Codeborne, предпринимательство. Для начала неайтишный вопрос: каково вообще жить в Таллине?
— Я, может быть, не совсем правильный человек для этого вопроса, потому что я фанат Таллина, мне кажется, что это лучшее место на Земле. С одной стороны, у нас здесь Евросоюз, европейская валюта, европейский порядок и европейская чистота. А с другой, достаточно широко можно использовать русский язык (треть населения на нём точно говорит), и географически мы рядом. К нам сейчас приезжает очень много айтишников из России, Украины, Белоруссии — думаю, что именно по этим причинам.

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

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

— Ну, к последнему петербуржцам/москвичам не привыкать. А что в стране с IT?
— У нас очень высокий уровень развития технологий. Активно развивается всё, что связано с «электронным государством» — вплоть до программы электронной резиденции, когда можно стать резидентом страны онлайн, вообще не находясь в ней. Многие онлайн-услуги, которые в других странах сейчас в новинку, у нас воспринимаются как само собой разумеющеися. Появляются стартапы — например, Skype изначально был эстонским. Вакансии тоже в изобилии. Поэтому я бы сказал, что интересного для айтишников тут много.

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

И, возможно, в российских источниках про Эстонию мало пишут, но если смотреть на международную прессу, то очень много текстов в духе «электронное государство, первое в мире» (вот отличный пример). Когда я езжу на IT-конференции по всему миру, мне говорят: «Эстония? О, у вас там такое IT!»

А кроме того, рядом с Таллином есть Хельсинки, между ними полтора часа по воде или 15 минут на вертолёте. И есть переговоры о том, чтобы Таллин-Хельсинки объединить в один европейский IT-хаб. Возможен туннель между двумя городами, тогда это будет самый длинный туннель в мире.

— Когда в стране с маленьким населением большое IT, вероятно, оно работает в первую очередь на зарубежных заказчиков?
— Да, любая зарождающаяся тут компания хочет как можно быстрее выбраться на международный рынок. Внутренний маленький по количеству людей. Но благодаря тому, что мы в Евросоюзе, рынок Евросоюза у нас есть сразу. А кроме того, маленький внутренний рынок позволяет IT тестировать какие-то вещи до мирового релиза.

— У многих россиян в сознании Прибалтика сливается воедино, поэтому уточним: а насколько сказанное об Эстонии применимо к Латвии и Литве?
— Не очень применимо, на самом деле. Какие-то пересечения есть, но менталитет разный, у латышей и литовцев он ближе к Восточной Европе. История у стран тоже абсолютно разная. Поэтому если приехать и погулять по Таллину, по Риге и по Вильнюсу, то будет ощущаться, что они разные, а если пожить подольше, то ещё больше различий будет.

Когда-то я по работе взаимодействовал и с латышами, и с литовцами — тогда эстонцы оказывались в IT самыми прогрессивными, потом латыши перенимали, а литовцы ещё позже.

— Вы один из сооснователей эстонской компании Codeborne — для начала расскажите о ней.
— Мы маленькие, нас 32 человека. Все разработчики, называем их не «разработчик», а «software craftsman» — это очень важное отличие, потому что у нас нет ни аналитиков, ни тестировщиков, ни продакт-менеджеров. У нас универсальные fullstack-люди, которые, кроме fullstack-разработки, занимаются ещё и общением с клиентом напрямую без всяких посредников, которые сами себе могут поставить задачи. Благодаря этому эффективность получается в разы выше, чем у многих других айтишных компаний. Мы можем двумя-четырьмя людьми построить вещи, для которых условному Сбербанку потребуются тысячи человек. Я, кстати, не шучу, мы общались со Сбербанком на эту тему, они были за��нтересованы взаимодействовать. Но мне кажется, при больших масштабах такая эффективность, как при наших маленьких, невозможна. Как раз поэтому мы не хотим слишком сильно расти. Company culture — действовать быстро, маленьким количеством людей делать суперэффективно, решать большие проблемы, чтобы заказчик не ждал по полгода. Для этого мы используем, например, extreme programming и парное программирование.

— А весь этот экстрим — это особенность конкретно Codeborne, или для Эстонии вообще подобное типично? В другой стране вы бы так смогли?
— Скажем так, аджайл в Эстонии типичен, маленькие команды — это достаточно типично. Но я думаю, что мы отличаемся и пошли ещё дальше. Вряд ли здесь много компаний, которые делают парное программирование в таком количестве и которые настолько developer-centric.

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

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

— В начале интервью упоминали японского заказчика — это типично? Когда заказчики зарубежные, да ещё и такие, с какими языками приходится сталкиваться в работе?
— Про Японию — да, типично, Эстония много работает с японцами, они сюда приезжают целыми делегациями.

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

А с остальными странами работаем по-английски — хотя японцы английский обычно не очень, но те, которые доезжают до Эстонии для переговоров, обычно говорят. И даже внутри Эстонии часто общаемся по-английски, потому что она в последние лет десять очень космополитная, особенно IT. Приехало много специалистов со всего мира, поэтому почти всегда получается так, что не все участвующие в диалоге говорят по-эстонски. Я думаю, это тоже причина, почему в Эстонию достаточно легко переехать — главное знать английский, эстонский не требуется.

— Думаю, многие разработчики теоретически хотели бы создать собственную компанию, но боятся, что тогда им станет вообще не до программирования, и перемена будет к худшему. А ваш опыт создания компании в Эстонии что показывает?
— Я бы сказал так. Codeborne — скоро девять лет, и за это время, когда кто-то уходил из компании, чаще всего для того, чтобы создать собственную. С одной стороны, это обидно, потому что мы людей выращивали и обучали, а с другой — льстит, что люди считают, что следующий шаг после Codeborne может быть уже только такой.

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

Это не всем подходит, поэтому я бы посоветовал какое-то время пофрилансить. В случае с фрилансом есть та же проблема — надо не только разрабатывать, но и находить подходящих заказчиков.

— Ещё один страх разработчиков — «вместо кода надо управлять людьми». Правильно ли понимаю, что ваш случай показывает «можно найти самоуправляемых и куда меньше отвлекаться на управление»?
— Да, у нас абсолютно flat-структура. Мы изначально решили избавиться от всех вещей вроде «ежегодичных собеседований», поэтому специально искали людей, которые сложились не просто как разработчики, но и как личности — их не надо «водить за ручку». Но я бы сказал, что сейчас заниматься подобным приходится чуть больше, чем в начале, потому что изначально в нашей core team было 10 человек и все всех понимали, а с 30 всё-таки иначе. Но пока что на это тратим достаточно мало усилий и скорее стараемся делать открытую организацию.

— Возвращаясь к «электронному государству»: а насколько оно упростило жизнь в создании компанию? Вещи вроде бухгалтерии делаются легко?
— В Эстонии поставлен рекорд Гиннесса по времени созданию компании: порядка трёх минут. Если ты являешься резидентом Эстонии (либо электронным резидентом), то создать компанию — дело нескольких минут онлайн. В этом вообще нет проблем. И с бухгалтерией тоже: у нас нет своего бухгалтера, мы покупаем этот сервис, и так как в Эстонии достаточно простая система налогообложения, то это обходится достаточно дёшево.

— Всё так хорошо звучит, что напоследок хочется найти какую-то боль по сравнению с обычной наёмной работой. Есть такая?
— У меня лично боли точно нет. Ну, естественно, когда ты наёмный сотрудник и занимаешься только одним проектом, то можешь гораздо больше расслабиться. Особенно в Codeborne, потому что у нас нерабочее время — действительно нерабочее, мы очень строго объясняем заказчикам, что не будем делать что-то по ночам и вечерам. Естественно, основатели (в том числе я) тратят время и силы на вопросы, которые у других сотрудников не стоят — например, чтобы люди всегда были заняты в каком-то проекте. Но это тоже интересно. Поэтому лично я ни о чём не жалею и меня всё устраивает.

На ближайших выходных Антон представил второй набор Kotlin-паззлеров в Москве на конференции Mobius. Помимо него, в программе — ещё много интересного для мобильных разработчиков (например, доклад «Kotlin для написания общего кода под Android и iOS»).