Хабрахабр

Каково делать Kotlin: интервью с Андреем Бреславом

Но остаётся куда менее освещённой другая сторона: а как вообще выглядит процесс разработки языка? Дефицита технических материалов о Kotlin нет, узнать о корутинах или nullability можно много где. Каковы задачи у «самого главного человека»? Как принимаются решения? Остаётся ли у него в жизни время на что-либо ещё?

3, мы расспросили «самого главного» Андрея Бреслава не про корутины, а про совсем другое: от того, чем он занимался до Kotlin, до того, чем полезна психотерапия.
— Ты разработчик языка программирования. И сейчас, когда вот-вот выйдет Kotlin 1. До этого ты чем-то таким занимался?

Это была исследовательская деятельность про предметно-ориентированные языки (DSL), по сути чисто умозрительная, без пользователей. — До этого я много преподавал программирование и занимался академической работой. Сейчас все по-другому: язык общего назначения, куча пользователей и задач, связанных с реальной разработкой.

— А зачем тебе это всё вообще?

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

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

Профессию я выбирал достаточно рано. — Вопрос сложный. В школе мне понравилось программировать, я программировал много, пошел учиться этому в университет. Что у меня тогда получалось, что мне тогда нравилось — этому я и посвящал много времени. Еще я попробовал позаниматься наукой, computer science, но в академическом мире мне не понравилось. Затем довольно быстро переключился на преподавание, занимался этим сначала full time, лет восемь, наверное, потом — параллельно с программистской работой и дальше окончательно переключился на разработку Котлина.

— В общественном сознании разработка языка программирования — это и есть тот самый computer science.

Разработка языка программирования — это инженерная работа, computer science — это исследование чего-нибудь нового, тут нужна какая-то научная новизна. — Ну, в общественном сознании часто смешиваются понятия. В случае с языком программирования что-нибудь общеупотребительное померить крайне сложно. Чтобы получить научный результат, нужно, чтобы результаты были хотя бы как-то измеримы или доказаны. По языку вроде Котлина теоремы доказывать крайне сложно, потому что он просто не для этого. Есть люди, которые занимаются разработкой академических языков — по языку Haskell написано невероятное количество научных работ, и он специально так построен, чтобы по нему можно было доказывать теоремы. Люди пытаются, для этого делаются маленькие версии этих языков. С точки зрения математики мейнстримные языки очень грязные, там очень сложно что-то до конца формализовать. Не так давно была распиаренная статья Ross Tate и Nada Amin про то, что системы типов Scala и Java — unsound. И оказывается, что те доказательства, которые были написаны для этих маленьких версий, для больших могут уже не работать. Это как раз связано с тем, что маленькие модели, которые рассматривались до этого, не учитывали одно важное свойство настоящего языка.

— А что ты по этому поводу думаешь?

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

— А что важно?

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

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

Было несколько поколений языков программирования, которые было трудновато читать. Мысль о читаемости кода довольно долго прорастала в умах. А в былые времена, например, какой-нибудь APL — очень яркий представитель. Наверное, самый яркий из поздних примеров — это Perl. Кстати, и программы стали гораздо больше и сложнее, чем раньше, что тоже подталкивает к этой мысли. Сейчас уже более-менее все сошлись на том, что читать программу гораздо важнее, чем писать. Поэтому, например, многие ненавидят boilerplate — «очевидный» код, в котором нет ничего содержательного, хочется его пропустить при чтении, но там по-прежнему могут прятаться баги. Хочется как-то бороться с этой сложностью, как-то ее сдерживать.

Я не хочу писать тысячу раз одно и то же. Людям важно уметь повторно использовать какие-то структуры в своих программах. И средств абстракции в языках программирования всегда недостаточно для того, чтобы переиспользовать всё на свете. Очень хочется какие-то общую структуры  вынести в библиотеку. Всё на свете никогда нельзя будет переиспользовать. Это закон бытия. Поэтому в Котлине, например, появились какие-то абстракции, которых в других мейнстримовых языках раньше не было, например, delegated property или inline-функции как структура в языке. Но можно выбрать класс вещей, которые встречаются часто, и научиться переиспользовать эти вещи. Например, в Scala невероятное количество абстракций, в Haskell много всяких абстракций, которых нигде больше нет, и т.д. Другие языки экспериментируют с другими абстракциями. Это всё попытки сделать так, чтобы какие-то вещи можно было повторно использовать, чтобы то, что я один раз сделал, мне потом пригодилось много раз.

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

— Вы как-то занимаетесь тем, что поддерживаете культуру?

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

— Я правильно понимаю, что ты сам тоже отвечаешь?

Иногда мы устраиваем какие-то целенаправленные мероприятия. — Я отвечаю не очень часто, у меня не всегда хватает времени за этим следить, но бывает, что отвечаю. Еще был довольно успешный «Ask me anything» на Reddit. Один раз была видеодвижуха, когда мы собирали вопросы в Твиттере и стримили ответы, я сидел и отвечал на вопросы.

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

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

— Обычный вопрос: что тебя толкнуло сделать первый доклад?

Очень просто сказать, когда был первый доклад про Котлин — мы анонсировали Котлин на JVM Language Summit в 2011 году, и там была задача заявить о проекте как можно громче. — Сейчас попробую вспомнить, как это было. И как раз в том году я поехал делать несколько первых больших публичных докладов, это были мои первые выступления на английском языке. И нам хотелось собрать фидбэк от специалистов. То есть меня толкнула исключительно маркетинговая необходимость.

Что-то, что ты не знал о людях? — А есть какие-нибудь удивительные наблюдения с докладов?

Всё-таки я и преподавал до этого много, и в целом основные вещи понятны. — Особо ничего нет удивительного. Сомневаюсь, что даже половина аудитории приходит, чтобы реально что-то узнать. Например, далеко не все люди приходят на доклад, чтобы что-нибудь узнать. Например, когда человек по какой-то причине известен, вроде меня («один из создателей Котлина»), люди приходят на мой доклад не потому, что хотят что-то узнать про Котлин, вопрос мне какой-то задать, а просто потому что это доклад человека, про которого они раньше слышали. Много кто приходит пообщаться с докладчиком. Иногда люди, которые пришли себя показать, задают очень интересные вопросы. Часть людей приходит себя показать, причем это бывает как конструктивно, так и нет. А иногда себя показать хочется, а интересный вопрос придумать не получилось, тогда вопросы получаются какие-то странные. Я не уверен, что они это осознают, но в чем заключается их задача — они хотят как-то выступить, задают интересные вопросы, потому что у них есть какие-то соображения. Иногда это бывает очень смешно, когда приходит человек и, вместо того, чтобы задавать вопросы, просто формулирует своё мнение, произносит целую речь. Ну а есть еще те, кто хочет чему-то научить докладчика или всех присутствующих.

— А был такой человек, который тебя всё-таки чему-то научил?

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

Как-то мы говорили со Стивеном Колборном, и он с нами очень много спорил о том, что писать типы справа после двоеточия — это ужасно, нужно обязательно писать типы слева. У нас на раннем этапе, еще когда Котлин не зарелизился, были всякие смешные разговоры. Уже были популярны Pascal, Scala — какая разница, с какой стороны тип писать. И всем, кто хоть немного погрузился в языки, было понятно, что это спор остроконечников с тупоконечниками — ни о чем, это не принципиально. Но есть люди, которые верят, что это действительно очень важно, и готовы потратить очень много энергии, чтобы это обсудить. Где удобнее с точки зрения структуры остального языка, там и надо писать. Стив же не просто так вцепился в это, а остальным было всё равно — нет, была достаточно большая группа людей, которым казалось, что это важно. Это бывает странно, но всё равно приходится какие-то аргументы формулировать, потому что такой человек не один, это не просто так взялось. Языки программирования — штука достаточно сложная, и не так много чего из этой области легко понять. Про синтаксис такое часто бывает. Во-первых, очень многих учили тому, как это всё формируется, в университете часто есть курс про формальные грамматики. А про синтаксис понятно, синтаксис — это просто. А там чем дальше (семантика времени выполнения, система типов и так далее), тем меньше мнений, потому что понять сложно. Да даже если не учился, это всё не очень сложно понять, и поэтому про синтаксис очень много мнений. И это жалко, потому что вообще-то тут очень много чего интересного можно обсудить, но в основном вся энергия обсуждений рассеивается где-то в районе синтаксиса, как это ни жалко.

Ладно, идем дальше. — Все обсуждают то, что понимают. Команда тоже формирует какую-то свою репрезентативную группу? Ты работаешь не один, а в команде.

У нас, безусловно, мнения людей внутри команды играют большую роль в развитии языка. — Конечно. Вообще JetBrains — это такая компания, которая очень сильно зависит от догфудинга. И команда подбирается так, чтобы мнения были релевантны. И Котлином мы тоже сами пользуемся, и в котлиновской команде, и за ее пределами. Мы все наши продукты активно догфудим (это от английского выражения «to eat your own dog’s food» — если мы что-то делаем, мы сами этим пользуемся). Надо понимать, что у нас юзкейс специфический. Фидбэк изнутри доходит быстрее всего. Например, нам бы в компиляторе очень пригодились некоторые языковые фичи, которые больше никому не нужны.

— Можешь привести пример?

В функциональных языках программирования принято иметь паттернмэтчинг, а в Котлине его нет. — Есть такой глобальный спор про паттернмэтчинг. И мы в какой-то момент сознательно не стали делать полный. Есть только довольно ограниченный вариант. Фича достаточно большая, сложная, для объектно-ориентированного языка программирования достаточно грязная. Он был когда-то запроектирован, но мы не стали реализовывать. Попробовали. Мы посмотрели по сложности, сколько стоит реализация этой фичи, и решили попробовать не делать её и посмотреть, что будет. А всё остальное — похоже, что большинству пользователей всё равно. Выяснилось, конечно, что компилятор можно было бы писать и поудобнее. Но похоже, что, как всегда, 80+ процентов юзкейсов не требуют этой фичи. Конечно, всегда есть часть людей, которая знает, что есть паттернмэтчинг, и им очень хочется в тех редких случаях, когда он релевантен, его использовать. Я пытался его агитировать, что не надо так сильно усложнять Джаву, и так всё непросто во многих местах. Это всё довольно забавно, потому что сейчас Java пытается смотреть в сторону паттернмэтчинга, и мы с Брайаном Гётцем об этом говорили не раз. Я пока не очень понимаю, насколько его аргументы веские. Но Брайан говорит, что паттернмэтчинг людям нужен, у него есть какие-то свои аргументы. Зато у нас теперь есть шанс, что они эту фичу добавят, мы посмотрим, что у них получится, и там решим.

— Если добавят.

Судя по тому, насколько Брайан оптимистичен, я думаю, рано или поздно добавят. — Ну, это очень вероятно. Надо заметить, что в Котлине не то чтобы вообще нет следов паттернмэтчинга, есть что-то достаточно похожее. Сколько времени это займет, правда, непонятно. Вообще очень большая часть юзкейсов паттернмэтчинга покрывается в языке. За счет того, что у нас есть смарткасты, есть when expression, есть destructuring assignment. И вот похоже, что их можно и не уметь. Мы с ним не умеем делать только сложные вещи. Но если окажется, что всё-таки очень нужно, значит, нам станет легче писать компилятор.

— Можешь немного рассказать о команде — как вы живете?

Нас уже очень много. — Мы живем очень весело. С тех пор мы сильно выросли. Когда мы начинали, я был единственным full time-разработчиком, но это было давно, 8 лет назад. В Питере больше всего, но есть люди в Мюнхене, в Новосибирске, возможно, появятся в Москве. Нас уже около 50 человек, мы сидим в разных офисах. Внутри проекта несколько команд. Есть еще какие-то изолированные удаленные люди. Есть команда джаваскриптового бэкенда, Kotlin/Native, библиотечная команда, которая занимается всеми библиотеками, есть команда IDE и другого тулинга, build-тулы в первую очередь, инкрементальная компиляция и так далее. У нас есть команда, которая занимается фронтендом компилятора и, как исторически получилось, JVM-ным бэкендом. У нас довольно разнообразный профиль, мы много всего делаем, поэтому есть очень много задач по координации: надо, чтобы все команды, делающие разные вещи, к каждому релизу сошлись в одной точке и выдали что-то полезное.

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

Во-первых, за всем следить невозможно. — Нет, так это, конечно же, не работает. Это значит, что ко мне в какой-то форме попадают разные соображения о том, что у кого болит, у меня есть какие-то свои мысли по поводу нашей стратегической линии развития. В основном я занимаюсь дизайном языка и какими-то общестратегическими вопросами. Это всё надо составить и решить, что мы делаем в следующем большом релизе. Мы пытаемся это как-то совместить с текущими возможностями, с технической ситуацией: что у нас случилось (или не случилось) в компиляторе, и что у нас болит по инфраструктуре, где у нас накопился технический долг или еще что-то. Мы на всё это смотрим такой группой лиц: дизайном языка занимается одна подгруппа лиц, технической частью — пересекающаяся, но не совпадающая подгруппа лиц, есть еще Q/A, который достаточно сильно помогает с тем, чтобы понять, на что надо обращать внимание, где у нас проблемы, где пользователю непонятно — этим занимаются support и Q/A. Это коллегиальная работа, совершенно не в одну голову. Я в этом смысле тот человек, к которому приходят, если оказывается, что непонятно, что делать. И вот из всей этой разнообразной информации у нас получается картина того, где у нас приоритеты и на что надо обращать внимание. И дизайн языка на мне замыкается в том смысле, что язык должен быть внутри логически согласованным, все решения должны пройти через какую-то одну голову. Например, надо выбрать между двумя несовместимыми разумными стратегиями, это уже решается с моим участием. Сегодня это моя голова.

Многие компании, особенно энтерпрайзная и банковская разработка, которые, вполне возможно, читают нас сейчас как пользователи языка, организованы по принципу армии. — Хочу кое-что уточнить. Это армия, это спецназ, это набор ресерчеров — что происходит? У вас как? Потому что когда смотришь на YouTrack снаружи, тебе дается очень странный вью на компанию — там даже есть отдельные люди.

В компании JetBrains есть проекты с абсолютно разной внутренней организацией. — Компания и проект — это немного разные разговоры. И в некоторых проектах эта модель до сих пор доминирует. Традиционно, когда-то на заре, JetBrains был командой автономных разработчиков, у каждого была какая-то зона ответственности, и каждый в ней более-менее сам решал всё, что случится: что делать, как делать, сам общался с пользователями и так далее. Есть проекты, которые работают по Скраму, кто-то работает в режиме вертикальной организации, где кто-то наверху решает, как что делается. В IDE это вполне жизнеспособная штука, по крайней мере, пока IDE еще не огромная. Что касается нас, сложно сказать, где мы в этом спектре находимся. Понятно, что какая-то самостоятельная деятельность там всё же есть, но есть какая-то более вертикальная конструкция. Сейчас мы как раз пытаемся чуть больше формализовать наше планирование, чтобы мы точнее понимали, когда мы что собираемся успеть, потому что команды иногда не могут понять, какие у кого приоритеты, и происходят какие-то сбои, к счастью, пока не очень заметные снаружи. У нас точно не Скрам, у нас достаточно легковесный процесс, который мы со временем больше формализуем, потому что нам приходится координировать всё больше людей — всё-таки 50 человек совсем ad hoc трудно координировать.

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

— Работа влияет на расклад жизни?

Работа занимает огромное количество времени. — Очень влияет.

— Не оказывается ли так, что ты работаешь 24 часа и спишь в офисе?

Когда-то очень давно в юности у меня был год, когда я работал где-то 80 часов в неделю. — Я не могу работать 24 часа. Мне приходится достаточно сильно следить за распределением рабочего и личного времени, потому что иначе я просто очень устаю, перестаю соображать и впадаю в грустное состояние. На следующий год я решил, что больше никогда не буду так работать, потому что это физически очень тяжело. Вообще стараюсь время вне офиса уделять другим вопросам. Я работаю фиксированное количество часов в день и сознательно стараюсь не работать на выходных, по вечерам. Это тоже работа, но другая, и есть некое выделенное количество времени, которое я этим занимаюсь. У меня параллельно есть еще один проект, стартап про поиск психологов и психотерапевтов.

— Работаешь ли ты после работы?

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

— По поводу твоего второго проекта: ты же разработчик, при чем тут психологи?

У меня есть ощущение, что полезность психотерапии очень сильно недооценена в современном обществе. — Хоть я и разработчик, но я же не перестаю быть человеком? Это развитие разных «органов», функций организма. Люди уже выучили, что ходить в спортивный зал или в бассейн — полезно, многие люди выучили, что полезно развиваться как-то еще — кто-то книжки читает, кто-то тренирует прикладную рациональность, еще что-то. А можно развивать то, что связано с осознанностью.

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

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

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

Так что у нас все по-настоящему: конкуренция, азарт. Сейчас есть какие-то другие проекты, которые пытаются делать что-то подобное. Мы, мне кажется, выделяемся тем, что мы обращаем внимание на некоторые вещи, на которые обращать внимание неудобно с точки зрения бизнеса, но очень важно с точки зрения результата. Я в наш проект очень верю. Если вы получили рекомендацию у нас, то это будет очень хорошо проверенный специалист, профессионал. Мы занимаемся тем, что на входе отбираем самих психотерапевтов, очень строго, по профессиональным характеристикам. Методика эта достаточно разносторонняя, и мы уверены, что те специалисты, которых мы предлагаем, действительно хорошие. Мы потратили кучу времени, чтобы сформировать методику, как отличать хороших специалистов от не очень хороших, работаем с учеными из московского научно-исследовательского института ПИ РАО. Это как раз та часть, на которую наши коллеги из других проектов обращают маловато внимания, нужно обращать побольше. Кроме этого мы собираем обратную связь и следим за тем, чтобы больше не рекомендовать тех, кто сделает что-то не то. Мы еще стараемся научиться подбирать автоматически, что достаточно интересно.

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

Когда надо идти на психотерапию? — Какой спусковой крючок?

Первый — когда есть ощущение, что что-то не устраивает в эмоциональной сфере: я всё время грустный, у меня повторяется одна и та же эмоциональная ситуация, я всё время расстраиваюсь, когда мне говорят что-нибудь, у меня в отношениях с партнером всё время повторяется одно и то же — например, такой круг длиною в год и т.д. — К этому вопросу есть два подхода. И дело не в том, что я недостаточно умный, чтобы в себе всё понять, а в том, что сознание имеет ограниченные возможности рефлексии: мы одним и тем же инструментом под названием «мозг» пытаемся изучать тот же самый инструмент — физически тот же, не такой же, а тот же. В таких вещах имеет смысл разбираться с терапевтом, потому что, во-первых, это очень эффективно, можно быстро узнать много чего полезного, а во-вторых, это вещи, которые очень сложно осознавать самому, даже если мне кажется, что я всё понимаю — 100%, что это неправда.

Он не должен давать вам советы, одна из его функций — отражать, дать мне возможность по-настоящему увидеть, что у меня в голове происходит. А психотерапевт во многом выступает как зеркало. Важно, чтобы это был именно профессионал, потому что, вообще говоря, рассказывать всё подряд, что у меня в голове творится, какому-нибудь человеку, который вообще непонятно, как на это отреагирует, может сделать мне неприятно, сделать что-то, что в дальнейшем на меня повлияет (или даже еще кому-нибудь расскажет) — это просто опасно. Все решения всё равно буду принимать я, все приоритеты буду расставлять я, но другой человек может мне помочь узнать, что там на самом деле творится. Это сильно отличается от друга или родственника, потому что с ними у меня есть какие-то отношения, и, если я что-нибудь такое расскажу, это может повлиять на эти отношения. Поэтому важно найти специалиста, который, во-первых, работает экологично, во-вторых, связан обязательством неразглашения. А в случае с психотерапевтом что бы я ни рассказал, я ничем особо не рискую.

— Это как когда с компилятором говоришь.

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

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

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

Словом «осознанность» обозначаются разные вещи. — Это очень интересно с точки зрения терминологии. Она еще немного помогает психологическому комфорту — помогает лучше расслабляться, со стрессом полегче и т.д. Есть история про медитацию или mindfulness, другие практики телесной осознанности — очень полезная штука с точки зрения управления вниманием, умения концентрироваться. Люди, которые много напрягают мозг, безусловно выигрывают оттого, что тренируют это место и могут иметь больше контроля над тем, куда направлено внимание и какие пропорции энергии уделяются какой сфере деятельности сознания. Это ближе к физическому упражнению, речь идет о довольно низкоуровневых механизмах в мозге, которые позволяют натренировать некоторое управление вниманием. Другая история — осознанный выбор, это не то же самое. Это одна история. Осознанный выбор — штука тоже довольно полезная не только в работе инженера, но и везде, где нужно принимать решения.

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

У всех есть интуиция. И другая вещь. Почему ты уверен? Бывает, когда ты уверен, что надо делать так. Не придумываешь какие-то странные аргументы, не пытаешься пересилить оппонента напором, силой характера, а четко сформулировать: «Я не знаю, почему так. Бывает сложно объяснить, и нужна определенная осознанность, довольно высокая, чтобы признать, что ты не знаешь, почему ты так хочешь. И если ты можешь обосновать, почему так не надо, то я тебе поверю, а если тебе тоже «кажется», то у нас просто разные интуиции, и никто из нас не более прав». Мне так кажется. Я думаю, что в целом такая возможность рефлексировать и возможность немного отпустить своё эго в работе очень помогает. Это тоже очень важно. Вы можете отделить своё личное от объективного и рабочего. Это напрямую связано с осознанностью мотивации, с возможностью делать осознанный выбор.

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

Дел много, и, если всё осознавать, можно сойти с ума. — По определению большинство вещей, которые мы делаем, мы делаем неосознанно. Суть в том, что есть механизмы автоматического принятия решений, которые я не осознаю. В разных книгах это по-разному называется, но, грубо говоря, у нас есть «быстрый мозг» и «медленный мозг», «Система 1» и «Система 2». Я не знаю, как они получились, я как-то рос, учился чему-то и неосознанно, имплицитно усвоил это всё. Они быстрые, но зато они сформировались без моей воли. И есть мой медленный мозг, где я осознанно, вербально могу что-то подумать. Есть такой механизм, имплицитное научение, который, собственно, это всё и формирует. Они, естественно, связаны, поэтому то, что я усвоил автоматически, влияет на моё мышление, но у меня гораздо больше свободы в области мышления. Это гораздо более свободная система. У меня нет возможности применять это везде, но там, где мне важно, я бы хотел это применять. Но это гораздо более затратно. Очень многие приоритеты, которые мы расставляем в жизни, продиктованы культурой. Если посмотреть вокруг — всё, что люди делают, вообще всё, оно на большую долю неосознанно, и это не всегда плохо, но это часто признак какой-то несвободы: как мы выбираем, чем нам заниматься, с кем нам жить и общаться, как мы решаем, что для нас важно или не важно, очень сильно всё от этого зависит. Мы этого всего не осознаем и думаем, что делать такой  выбор — это же «естественно». То есть какие-то люди, как правило, очень давно, сформировали какое-то представление, которое может быть абсолютно неактуально сегодня, и поэтому я сегодня делаю какой-то выбор, который влияет на всю мою жизнь.

— Ты сейчас о религии?

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

Были совершенно другие представления о счастье, о функции семьи, и тогда это было актуально. Когда-то было общество, в котором всё было не так, в котором никого абсолютно не интересовало, насколько вы были счастливы в браке, брак — это были имущественные отношения, достаточно осмысленные по тем временам. То, как мы сегодня оцениваем после создания семьи, хорошая она получилась или плохая, никак не связано с тем, как это оценивали люди, которые нам в некотором смысле диктуют, что нам это нужно сделать как можно скорее. С тех пор всё поменялось. И дело не в том, что надо обязательно заводить семью поздно. Эти люди давно вымерли, а мы до сих пор думаем, что нужно поскорее создавать семью и что человек, который этого не сделал, не реализовался. Не потому, что на меня давит моё воспитание, книжки, которые я прочел, или мнение других людей, бабушка на мозг капает, что тебе 25 лет, а у тебя всё еще нет детей, какой ужас. Надо просто обязательно подумать, зачем я это делаю сейчас, что я умею/не умею, какие у меня риски, и осознанно принять решение. Можно иметь детей и в 21 год, и в 18 лет — вопрос в том, почему я это сделал, как я принимал решение.

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

Юридические вопросы, которые реально связаны с семьей, влияют не на всех. — Да, связаны. Кому-то нужен, кому-то нет, зависит от того, как вы хотите управлять имуществом. Например, пока нет детей — стоит подумать, нужен ли брак. Это совершенно нормальное объяснение. Если кто-то заключает брак, чтобы иметь какие-то юридические возможности, то всегда пожалуйста, только объясни себе, что ты заключаешь брак ради этих юридических возможностей, а не для того, чтобы партнера к себе привязать веревкой. Главное, себя не обманывать. Любое объяснение, которое правдиво, — нормальное.

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

У вас есть один универсальный ответ на всё? — Кстати, вы же в Котлине тоже культуру строите.

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

— Забавно было бы иметь такую культуру, в которой осознанные решения являются важной частью этой культуры.

Я начинаю волноваться, что человек, исходя из этих непонятных соображений, будет дальше принимать решения, и вдруг его ветром вынесет в странное место — и что мы потом будем делать? — Я, честно говоря, думаю, что общение со мной немного подчеркивает такую необходимость, потому что я начинаю довольно сильно нервничать, когда вижу, что человек на чем-то настаивает и не может мне объяснить, почему. Объясни!». Поэтому, когда я с кем-то спорю, я часто задаю вопросы «Почему ты так думаешь?

— Мозг же очень умный, он даже по текущему состоянию может достроить картинку «почему ты так думаешь».

Есть у меня какое-то интуитивное ощущение, что вот так надо сделать, и я дальше могу с очень умным видом объяснять, почему, подгоняя аргументы под ответ. — Да, есть такая штука, как рационализация.

— Например, что надо писать типы слева.

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

Говорить: да, это мне просто так показалось, я не прав. Еще важно уметь признавать свои ошибки. Если я говорю: «Нам нужно А, потому что В», а кто-то мне на это сказал: «Слушай, нет, что-то А из Б не следует», то я могу посмотреть и убедиться, что да, действительно, не следует. Логика в этом помогает. Я что-то сказал, мне казалось, что это железно так, а потом оказалось, что нет, не железно, и возможно, что даже не так. Может случиться такой момент прозрения.

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

Списки когнитивных искажений. — Но это нужна какая-то процедура самотестирования.

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

— Особенно если это какой-то скрам-митинг и на тебя 15 человек показывают.

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

— Можешь что-нибудь пожелать/посоветовать нашим читателям на Хабре?

И я считаю, что «свободно» значит, как правило, осознанно. — Очень желаю всем людям принимать решения свободно, как на работе, так и в жизни.

— Спасибо тебе большое!

А после выступления в дискуссионной зоне можно будет как следует уточнить всё интересующее, так что близкий Андрею формат «люди задают вопросы» тоже будет. Ещё больше о том, как выглядит «один день из жизни дизайнера языка программирования», Андрей расскажет 19 октября на нашей конференции Joker.

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

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

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

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

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