Хабрахабр

«Для сообщества критически важно установить стандарты»: Марсин Москала о Kotlin

В 2019-м разжёвывать азы уже не требуется, зато теперь появляется публикация совсем другого формата. Пару лет назад было много блог-постов «смотрите, какой интересный язык Kotlin», где объяснялись основы. Марсин Москала, который уже не первый год учит людей этому языку, сейчас выпускает книгу «Effective Kotlin» — то есть уже не просто «как писать на Kotlin», а «как писать на Kotlin наилучшим образом».

Поэтому мы поспрашивали его и про новую книгу, и про доклад, и про обучение людей Kotlin, и о происходящем в индустрии вокруг этого языка. А скоро Марсин приедет к нам на Mobius с докладом. Что вы делали до того, как стали обучать людей и создали Kt. И про то, чем различаются слова «effective» и «efficient».
— Для начала расскажите, пожалуйста, немного о себе. Academy?

Начал с Visual Basic, когда мне было 10, потому что хотел делать игры. — Я программировал с детства. В следующие годы я работал для компаний вроде Samsung, Warta и mBank (как сотрудник Apreel), Docplanner и Gamekit. Позже, во время обучения, я открыл для себя Android и посвятил себя Android-разработке. Я начал выступать с докладами о нём, писать статьи и книги. А также обнаружил Kotlin и влюбился. Academy. Вскоре компании начали обращаться ко мне за тренингами, и так появилась Kt.

Каким требованиям для него нужно соответствовать? — У вас есть статус партнёра JetBrains, а что он означает? Часто ли вы общаетесь с сотрудниками JetBrains?

Также нужно, чтобы человек был надёжным, и не лишним будет, если он известен. — Главное требование — хорошо знать Kotlin и распространять знания о нём.

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

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

Они особенно отмечают его лаконичность и то, что у них получается очень легко. — Людям он очень нравится. По-моему, с первым вариантом проблемы нет, а вот что насчёт второго… Думаю, люди переусердствуют в его использовании, и мы только начинаем осознавать масштаб проблемы. А беспокоят их функции верхнего уровня и неявные получатели в лямбда-выражениях (implicit receivers).

— А есть ли в Kotlin-коде разных людей какая-то самая распространённая ошибка или антипаттерн?

Ну, знаете, всякие DSL внутри DSL, apply внутри apply… всё чаще и чаще получатель используют скрыто. — Я думаю, это как раз излишнее стремление спрятать получатель. Это здорово, когда пишешь код, но не когда его читаешь.

А теперь приходится ли вам учить людей, которые вообще не знают Java, но хотят узнать Kotlin? — Изначально все приходили в Kotlin только из Java.

Ещё со стороны Kotlin много думают о питонистах — надеюсь, они тоже присоединятся. — Да, я обучал немало разработчиков на JavaScript и Swift, команду скалистов и даже команду разработчиков на C, для которых Kotlin был громадным прыжком.

Или начинающим всё равно придётся сталкиваться и с Java, так что будет сложно? — А порекомендуете ли вы в 2019-м учить Kotlin как первый язык?

Если бы у меня было больше времени, я бы написал книгу о современной Android-разработке, которая вообще не затрагивала истоки, а сразу предлагала новые подходы: Kotlin, AndroidX, Room, WorkManager, ConstraintLayout и MVVM с ViewBinding (а скоро и вовсе Jetpack Compose)… Мы можем отлично прожить без Java, Support Library, DatabaseHelper, AlarmManager. — Если человек хочет заниматься Android-разработкой — определённо порекомендую.

Так что для обучающихся это тоже может быть интересным вариантом. В бэкенде посложнее, но и там увлекательно с современными Kotlin-фреймворками вроде Ktor.

А каково преподавать Kotlin по сравнению с Java? — Разные языки по-разному оценивают в контексте обучения: Python в этом отношении часто хвалят, Java порой критикуют.

Когда преподаёшь Kotlin, очень помогает возможность поместить много классов и функций в один файл. — С одной стороны, в Kotlin куда проще что-то сделать.

Хотя в некоторой степени эти идиомы всё равно воплощают повторяющиеся паттерны из Java: например, data-классы, которые для новичка в Java будут непростыми, а в Kotlin тривиальными, достаточно добавить модификатор data. С другой стороны, у Kotlin больше фич, чем у Java, так что их изучение требует времени. Я бы сказал, что в целом учить Kotlin веселее.

Что вы видите по своим тренингам: весь спрос на них со стороны мобильных разработчиков, или бэкендеры тоже обращаются? — Порой Kotlin воспринимают только «языком для Android», но у него есть амбиции и в других сферах.

А сейчас, думаю, примерно 50 на 50. — Год назад почти все были для Android-разработчиков. Также растёт интерес к тренингам «Kotlin Corotuines» и «Effective Kotlin».

Означают ли такие похожие названия, что новый доклад — это краткий пересказ тезисов всей книги? — К вопросу об «Effective Kotlin»: ваша новая книга называется так же, а ваш доклад на Mobius — «Efficient Kotlin».

«Effective» — более общее, про самые разные best practices. — У слов «effective» и «efficient» в программировании очень разные значения, как у «safe» и «secure». Для Mobius это лучше подходит, потому что конференция известна продвинутыми докладами для опытных разработчиков. А «Efficient Kotlin» — это только о производительности и оптимизациях памяти, в книге этому посвящена третья часть. А время доклада ограничено, всю книгу там не осветить.

— А принципы из «Effective Kotlin» и «Efficient Kotlin» подходят всем разработчикам, что бы они на Kotlin ни писали, или там есть какая-то специфика?

— Всем: не только Android и бэкенд, но даже тем, кто использует Kotlin/JS и Kotlin/Native.

Насколько ваша книга похожа на неё? — Название «Effective Kotlin» немедленно заставляет вспомнить «Effective Java» Джошуа Блоха.

Я вдохновлялся и «Effective Java», и другими — «Effective C#», «Effective Python», «Effective C», «Effective JavaScript». — Есть много книг формата «Effective X», и все они построены по одному принципу: на конкретных примерах показывать, как лучше писать код. Хотя если вы прочитаете их все, а потом прочитаете «Effective Kotlin», сможете увязать любой мой совет с советами из других «эффективных» книг. Но нет какой-либо строгой привязки к любой из этих книг — всё это разные языки, и с ними требуются разные советы. Моей целью было взять лучшие советы, которые подходят Kotlin, и презентовать их самым понятным образом. А также с советами из других влиятельных книг вроде «Code Complete», «Clean Code», «Clean Archutecture», «Structure and implementation of computer programs» и так далее.

Считаете ли вы, что сначала сообществу были нужны основы Kotlin, а теперь оно освоилось и хочет повышать качество? — Про Kotlin уже издано немало книг, но обычно они были в формате «как сделать что-то на Kotlin», а не «как сделать это самым эффективным образом».

По данным официального сайта, в мире уже больше двух миллионов Kotlin-разработчиков. — Да, я думаю, сообщество так разрослось, что теперь ему нужны best practices. Уже есть много статей формата «Как сделать...» и ответов на Stack Overflow, но есть всё больше людей, которым пришлось использовать Kotlin из-за решения CTO, или для которых он стал первым языком. Это очень много. Теперь задать стандарты критически важно, потому что Kotlin позволяет очень многое, и если мы не остановим людей от безумных вещей, в итоге его могут перестать любить и начать считать запутанным и нечитаемым.

На ваших тренингах или докладах возникают дискуссии? — Best practices — это всегда дискуссионная тема, мнения людей по поводу «как лучше всего» расходятся.

Как я уже сказал, людей часто волнуют некоторые фичи. — Да, и эти дискуссии как раз и вдохновили меня написать «Effective Kotlin». В итоге всегда удаётся прийти к выводам о преимуществах и недостатках фичи, и дальше команды решают, как им с ней поступать. Я обычно слушаю и даю им высказаться.

Как выглядит процесс работы над ними? — Вы издаёте уже вторую книгу. Например, как вы решаете, кто будет её публиковать?

Я оказался не вполне доволен сотрудничеством, так что я решил издать «Effective Kotlin» самостоятельно с помощью LeanPub. — Первую я опубликовал в Pact. У меня отличные ревьюеры-добровольцы, хороший дизайнер и славная типография. Пока что опыт отличный. Проблемы возникли только с аккаунтом в Amazon, но надеюсь, успею разобраться с ним до публикации окончательной версии книги.

Насколько это полезно для разработчика? — Советуете ли вы разработчикам писать книги?

Прикидывайте по 1-2 часа на страницу. — Приступая к книге, надо знать, что это почти наверняка займёт больше времени, чем вы предполагаете. С другой стороны, вы многое узнаете. И если вы разработчик, маловероятно, что книга принесёт вам больше денег, чем если бы вы потратили это время на программирование. А это уникальный опыт. Чтобы уверенно писать, нужно тщательно изучить тему и по-настоящему понимать каждый довод.

— И последний вопрос: если бы вы могли изменить в Kotlin одну вещь, что бы это было?

Он немного раздражающий. — Думаю, я бы избавился от Unit. Особенно при взаимодействии с некоторыми другими языками.

Книга «Effective Kotlin» публикуется на Leanpub, а описание нового доклада Марсина, с которым он в декабре приедет на Mobius, опубликовано на сайте конференции (и там же можно посмотреть её полную программу).
Напоследок напомним ссылки на упомянутое в тексте.

Показать больше

Похожие публикации

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»