Мне нравятся хоткеи, алиасы, shell-скрипты и другие способы повысить свою продуктивность с помощью клавиатуры. Сам я не очень далеко зашёл на этом пути, но меня всегда впечатляют люди, по-настоящему углубившиеся в это, и хочется их расспрашивать.
Осенью на нашей конференции DevOops выступала Джессика Дин. Она удивительно разносторонний человек в отношении платформ: обожает Linux, постоянно пользуется Mac и при этом работает в Microsoft. И она очень любит автоматизацию, скрипты и отказ от мышки — настолько, что в её дотфайлах уже сотни коммитов.
В трансляции DevOops мы с Михаилом Дружининым (xomyakus) поспрашивали её и об использовании терминала, и о совмещении миров Windows/Linux/Mac, а поскольку дело было на девопс-конференции, к концу разговор свернул ещё и в сторону Kubernetes. А сейчас, прямо перед новым онлайновым DevOops, мне захотелось перевести это интервью на русский, чтобы оно было и в текстовом формате.
Текстовый вариант чуть сокращённый, если предпочитаете посмотреть исходное англоязычное видео, оно вот:
Евгений Трифонов: Я заглянул в твои дотфайлы на GitHub и оказался впечатлён…
Джессика Дин: Большое спасибо! Да, это интересный проект, и он продолжает разрастаться, я постоянно добавляю к нему разное. Я фанатка автоматизации, штук, упрощающих любой процесс. Мои дотфайлы так или иначе связаны с этим. Их можно использовать и в Linux, и в Windows Subsystem for Linux (хоть WSL1, хоть WSL2), и на macOS. Они обращаются к 17 разным опенсорсным инструментам. Основная причина, по которой я всем этим занялась — упрощение моего рабочего процесса как с точки зрения разработки, так и с точки зрения эксплуатации.
А в последний раз я добавляла туда что-то как спикер, потому что ещё я очень люблю демонстрировать людям реальное демо и код. Я использую VS Code, но зрителям в зале сложно что-то увидеть на тёмном фоне, а у меня обычно включен он, и удобного способа переключаться между профилями не существовало. Поэтому я написала две функции для переключения, чтобы было удобно кодить в тёмном режиме, а потом демонстрировать код со сцены в светлом.
В общем, ура автоматизации, когда пишешь одну функцию вместо того, чтобы руками вбивать 10 команд.
Евгений: Мне близки эти идеи, но ощущаю пару проблем. Первая: чем больше всего настраиваю на своём компьютере, тем сложнее мне оказывается при попытке воспользоваться чьим-то чужим, особенно с другой ОС. Наверное, раз твои дотфайлы переносимы между разными ОС, всё проще, но всё же: не было ли такой проблемы?
Джессика: Особо не было. Но ты подкинул мне идею, как я ещё могу улучшить свои дотфайлы. Если я запускаю обычную установку, то ей придётся установить целый набор из упомянутых 17 инструментов. Но тут ещё вопрос, что мне нужно в системе.
Если речь о моей собственной системе, то я установлю всё, что мне может понадобиться, со всеми зависимостями. Но если я использую чужую, то мне нужен только удобный CLI с комфортным интерфейсом — я использую тему для zsh Powerlevel9k (да, я знаю, что уже появился Powerlevel10k), у меня на экране много полезной информации. И сейчас я подумала, что мне нужна установочная опция, где устанавливаешь только этот интерфейс без всех остальных зависимостей. Сейчас главное «бутылочное горлышко» здесь — это время, которое требуется на установку всего.
Я думаю, чем больше у тебя shell-скриптов и команд, от которых зависишь, тем важнее становится как раз автоматизация, позволяющая реплицировать всё это быстро и эффективно. Тут, наверное, проглядывает мой DevOps-бэкграунд.
Евгений: Моя вторая проблема. Вроде бы главная цель автоматизации в экономии времени, но если вовремя не остановиться, можно случайно написать операционную систему, а это противоположность «экономии времени». Нет ли у тебя ощущения «падения в кроличью нору»?
Джессика: Порой бывает! У меня даже есть пост со словами «Down the Rabbit Hole» в заголовке.
Я написала функцию, чтобы включать и выключать часы в меню macOS. Потому что я провожу технические демонстрации на камеру, а в них стоит скрывать часы. Я не хочу каждый раз заходить в настройки ОС и кликать там мышкой, чтобы включать и выключать их. Для меня это лишние шаги, которые я не хотела совершать. И я упала в очень глубокую кроличью нору, пытаясь написать функцию, решающую эту задачу.
Действительно, наступает момент, когда ты понимаешь, что решение заняло у тебя слишком много времени. На macOS это оказалось непросто, а если заняться реализацией ещё и для Linux с Windows, то не закончишь никогда. Есть определённые моменты, когда надо спросить себя: «Какую пользу я извлеку из этого? Сколько времени сэкономлю, потратив 48 часов на написание штуки, которая экономит каждый раз по три секунды?».
Но ещё есть любопытство, потому что все мы инженеры: «Но я ведь уже начал, я не могу сдаться!»
Михаил Дружинин: И как тебе удаётся себя остановить?
Джессика: Иногда никак, иногда я пишу до трёх часов ночи! В других случаях я ищу чужой код. Я много занималась опенсорсом, и мне кажется, что мы лучше как инженеры, когда работаем вместе. Я знаю многих, кто любит начинать и писать с нуля и искать свои собственные ответы. Но я добавила в свои дотфайлы 17 других инструментов отчасти потому, что уже есть члены опенсорс-сообщества, у которых уже было что-то нужное мне. Я смогла использовать их код и добавить к нему что-то своё, внеся тем самым собственный вклад.
Есть люди, которые форкнули мои дотфайлы. А я форкнула свои изначально у кого-то ещё, тот у кого-то ещё. Мы все вместе строим поверх друг друга. Мне кажется, это экономит время в долгосрочной перспективе, потому что я не просто пытаюсь решить проблему, а работаю с другими, и все вместе мы движемся к одной общей цели.
Евгений: У вас там целое сообщество людей, которые смотрят дотфайлы друг друга?
Джессика: Так и есть! Есть треды на Reddit об этом, есть видео в сети.
Ещё меня как-то упомянули в таком треде на Reddit как человека, который работает в Microsoft, пишет дотфайлы под Linux и macOS, выступает о Linux, получал и сертификаты Apple, и звание Windows MVP. Это было собрано в треде под грифом «Мы не понимаем». Но я просто люблю работать с другими инженерами и мне неважно, на какой платформе кто работает! Я вношу свой вклад в сообщество dotfiles, до этого делала то же самое с PowerShell (ещё до выхода PowerShell Core, так что это было только для Windows). Сейчас забавно, когда мне приходится снова писать скрипты на PowerShell, столько отличий. Я просто люблю тусоваться в разных сообществах, и dotfiles — одно из них.
Евгений: Интересно, что ты любишь Linux и работаешь в Microsoft. В этом нет противоречия, но, наверное, люди часто удивляются?
Джессика: Да! Потому что так было не всегда. Я каким-либо образом связана с Microsoft уже более 10 лет. Изначально работала на их подрядчика. И тогда была совсем другая эпоха с совсем другим руководством компании. Когда я пришла в кампус, у меня были iPhone и Mac и кто-то меня окликнул: «Ты случайно не из тех, у кого Mac и iPhone?» И я такая, пряча свой рюкзак и комп: «Кто-нибудь! Срочно дайте мне Windows Phone! Сбегайте в музей! Я не хочу быть белой вороной!» Даже в команде, с которой я работала, подшучивали, потому что меня все знали как любительницу Linux и Apple, хотя в то же время у меня был статус Windows MVP и сертификация.
Я тогда по работе занималась примерно тем же, что и сейчас делаю как advocate, но тогда делала это в онлайне — мы называли это вовлечением через социальные сети. Моя работа заключалась в том, чтобы взаимодействовать с сообществом на популярных в IT интернет-ресурсах вроде Reddit и Spiceworks, общаться с теми, у кого были технические вопросы. Это было во времена Microsoft Deployment Toolkit и SCCM. Я помогала людям в этих сообществах, а в то же время была инженером интеграции систем Linux и чинила компьютеры Apple. Так что я всегда пересекала границы платформ. Но тогда это было нетипично.
Сейчас я в Microsoft уже почти 4 года и то, как изменилось направление внутреннего и внешнего развития, взрывает мне мозг каждый день. 10 лет назад я была полезна, работая на подрядчика Microsoft, но из меня вышла бы не очень хорошая сотрудница непосредственно для Microsoft, потому что я любила работать на Linux и Mac, и не собиралась от них отказываться. И 4 года назад они наняли меня после моего выступления о линуксовом веб-сервере. Я такая: «Вы в курсе, что я только что говорила про Linux, да?» Так что конфликта тут больше нет, хотя и есть определённое прошлое. Это уже совсем другой Microsoft!
Евгений: А что для такого человека, как ты, означало появление Windows Subsystem for Linux? Перевернуло ли это всю твою жизнь? :)
Джессика: Ну, моя главная система для разработки — это по-прежнему Mac. Но у меня дома есть и Surface Book. И это действительно сказывается — особенно теперь, с WSL 2 и опенсорсным Terminal. У меня может быть и PowerShell, и Ubuntu, и Fedora, и любые другие дистрибутивы, и я могу настраивать разные профили. Я работала с командой WSL с момента его появления.
Мой коллега, Скотт Хансельман, шутил, что он «провёл нагрузочное тестирование моего блога», ретвитнув один из моих постов пару лет назад, когда у Windows 10 вышло Fall Creators с обновлением WSL. Шутка была в том, что в блог пришло так много читателей, что он упал и мне пришлось его поднимать. Это был пост о том, как можно взять терминал, дотфайлы, о которых мы говорили, и сделать так, чтобы на WSL всё выглядело идентично тому, что я запускаю на Mac и Ubuntu.
Это взорвало людям мозг. И до сих пор взрывает мозг мне! Мне не пришлось вносить никаких изменений. Код, который я использовала на Ubuntu — такой же, какой я использовала на WSL. Поэтому у моих дотфайлов сейчас всего две ветки — одна из них называется "WSL", но работает и на Linux, а другая для macOS. Я до сих пор влюбляюсь в свою работу, просто глядя на направление, в котором мы двигаемся. Объединение разработчиков всех платформ.
Евгений: Иногда я ввожу поисковые запросы не в браузере, а в терминале с помощью ddgr. Подозреваю, такой человек, как ты, тоже делает в терминале что-то, что обычно делают иначе?
Джессика: Это правда, особенно в отношении CI/CD-пайплайнов — я работаю ещё в DevOps-команде, занимаюсь автоматизацией скриптами, и там могу делать проверки вроде «открывается ли такой-то URL». И в моём докладе здесь, на DevOops, есть пример использования curl. Чтобы протестировать такие вещи, я сначала выполняю их локально в терминале до того, как помещу в пайплайн. А в итоге я ощущаю, что могу выполнять такие задачи эффективнее, потому что для меня становится естественным выполнять их из командной строки.
Я уже говорила про мои дотфайлы, что всегда хочу видеть в терминале определённую информацию, и в том числе хочу знать мои внутренний и внешний IP-адреса. Некоторые люди, чтобы узнать свой IP, идут на сайт вроде https://whatismyipaddress.com/. А у меня это просто часть терминала.
Когда-то я не была таким энтузиастом командной строки, и тогда задавала вопрос «Зачем тратить столько времени, набирая что-то на клавиатуре». А потом поняла, что если однажды набрал что-то, и оно осталось в истории или было сохранено как функция, то вызвать это гораздо быстрее, чем кликать! Так что теперь мой личный бренд — #noclickyclicky.
Михаил: Как ты к этому пришла? Как долго ты шла к осознанию, что печатать быстрее?
Джессика: Примерно 5-6 лет. Работая одновременно и с Linux, и с технологиями Microsoft, я деплоила приложения и с IIS, где было очень много кликанья, и с Linux, где было сплошное печатание. Каждый раз, когда разворачивала на Linux — всё шло без проблем, а на IIS всё было гораздо сложнее. В итоге я начала писать скрипты на PowerShell — так я ещё дальше зашла в автоматизацию. В общем, это был долгий путь.
Михаил: Какую часть своего рабочего дня ты проводишь в терминале сейчас?
Джессика: Terminal у меня всегда запущен, он всегда открыт в фоне. Я бы сказала, что непосредственно в нём не меньше 50% времени, возможно, больше. А поскольку я пользуюсь DevOps-инструментами, повсюду код: в Codefresh и Azure DevOps Serviсes — YAML, в Jenkins — Groovy… Поэтому у меня ощущение, что я всё время живу либо в командной строке, либо в VS Code, и терминал всегда открыт.
Михаил: Ещё один вопрос, чтобы закрыть эту тему. Vim или Emacs?
Джессика: Vim.
Я знаю некоторых, кто предпочитает Pico, Emacs, nano… Не могу представить, зачем может понадобиться работать в nano… Я из тех сумасшедших, кто за Vim. А вы как? Vim или Emacs? И в tmux что используете, Ctrl+A или дефолтное Ctrl+B?
Михаил: Vim, Ctrl+B.
Евгений: Vim. К вопросу о нём: другой спикер Себастиан Дашнер сегодня рассказал нам, использует плагин Vimium в браузере и IdeaVim в IntelliJ IDEA. Ты чем-то подобным пользуешься?
Джессика: Нет. Самое нердовское, что я использую — это плагин NERDTree. Он добавляет мне файловый менеджер слева и я могу нажать Ctrl+N, чтобы этот менеджер появлялся и скрывался. Ну и ещё я использую таблицу стилей в Vim. У меня есть моя обычная таблица стилей со шрифтами и цветными штуками для терминала, а в Vim свое цветовое оформление. Вроде бы сейчас использую схему wombat… Ну, это всё в открытом доступе, можете сами проверить.
Евгений: Мне хочется делать как можно больше с клавиатуры, но во многих случаях обращаюсь -таки к мышке/тачпэду. А когда идёшь по жизни с девизом #noclickyclicky, какие сценарии могут вынудить оторваться от клавиатуры?
Джессика: Мы же уже говорили про DevOps. Если я демонстрирую Azure DevOps и показываю общую картину того, как он работает (а это, по сути, система запуска задач), я открываю то, что мы называем визуальным редактором. Там список задач без всякого YAML, и я пользуюсь мышкой, чтобы его показать… В общем, пользуюсь мышью для навигации в браузере, но когда делаю что-то с кодом, мои руки на клавиатуре.
Михаил: Вчера на BOF-сессии о будущем Kubernetes говорили как раз о том, что происходит переход к кликам в браузере, и больше не надо возиться с YAML, «больше не нужно быть YAML-разработчиком, спасибо и на этом»…
Джессика: Прямо как с табуляцией и пробелами!
Михаил: GitHub также выпустил GitHub Actions — он тоже визуальный с кликами. Что ты думаешь об этом направлении? Мне кажется, люди так позабудут о клавиатуре.
Джессика: Возможно, это просто говорит моя страсть к командной строке, но если вспомнить, как всё развивалось в последние 10-15 лет, мне кажется, что она никуда не денется.
Я думаю, что хотя «кликанье» проще как точка входа, командная строка является гораздо более мощным инструментом с точки зрения воспроизводимости. Если мы дойдём до такого момента, когда я могу кликами настроить всё, а потом экспортировать и легко использовать это снова, это будет хорошо — но ведь это тоже будет в виде некоторого кода, чтобы можно было не делать заново все эти клики. Я не могу запрограммировать свою руку, чтобы совершать одни и те же повторяемые действия, но я могу запрограммировать те же GitHub Actions так, чтобы у меня были одни и те же последовательные шаги.
Михаил: Сделать конфигурацию в UI, потом экспортировать в некий код, а потом продолжить что-то с ним делать.
Джессика: Потому что так я могу его ещё и проверить. Я могу разместить его вместе с моим исходным кодом, с моим приложением...
Михаил:… посмотреть diff.
Джессика: Да, особенно. Если я собираюсь обновить мой пайплайн, мне нужно посмотреть разницу, что я изменила, особенно если пайплайн сломается. Мне нужна история. Я не уверена, что мы когда-нибудь отойдём от кода. Да, мы будем улучшать и упрощать его, в этом основная цель того же Kubernetes. Он был создан чтобы упрощать. Helm был создан, чтобы упрощать упрощённое. Есть другие инструменты такие как Draft и Skaffold, которые были сделаны, чтобы упростить и его.
В Microsoft у нас есть Azure Dev Spaces, который, судя по роадмапу, в будущем будет работать даже вне Azure, и он был сделан, чтобы работать с ещё большим уровнем абстракции, когда тебе не нужно беспокоиться про Docker или Kubernetes. У тебя просто может быть изолированная песочница. Как разработчице мне не нужно что-либо настраивать и мне не нужно иметь дело с кодом. Мы постоянно работаем над тем, чтобы упростить простое. Мне кажется, мы продолжим двигаться в этом направлении.
Михаил: Как ты думаешь, каким будет следующий конкретный уровень упрощения Kubernetes? На что бы ты поставила?
Джессика: Предсказательница из меня никакая! Я не знаю. Если мы вернёмся в прошлое, виртуализация уже была первым шагом абстракции. Больше не было нужды в физических машинах, теперь можно виртуализировать окружение. Потом при помощи контейнеров виртуализировали ядро и продвинули виртуализацию ещё дальше. Потом оркестрация стала способом управлять и продолжить абстрагировать. У нас есть Serverless. Теперь нас есть возможность объединить Serverless с оркестрацией.
Мне кажется, что дальнейшее направление — просто продолжать выводить эту абстракцию к большему упрощению, и это реально очень просто, потому что чем большей абстракции мы достигаем в Kubernetes, тем сложнее всё становится, правильно? Сейчас у меня есть 10 разных микросервисов для одного приложения, в одном из них баг. Как мне провести отладку? Я могу это сделать, используя определенные инструменты и методы, хотя если мы сможем сделать это доступнее, то это именно то направление, куда нам нужно двигаться. Нам нужно быть уверенными, что чем больше мы абстрагируем, тем более полное у нас понимание того, зачем это делать, а почему это делать не надо.
Не всё нужно разбирать до такого мелкого уровня. Не всё надо запускать в Kubernetes. Люди говорят: «Kuberenetes во все поля!» Зачем? Келси Хайтауэр как-то твитнул, что лучшая часть понимания контейнеров и будущего направления их развития не в том, чтобы понимать, как ими пользоваться, а в том, чтобы понимать, когда ими пользоваться не надо. Мне кажется, это то направление, в котором нам нужно двигаться дальше.
Михаил: Просто перестаньте использовать лямбды, контейнеры, ВМ…
Джессика: Не то что бы перестать, но чётко понимать, когда надо использовать, а когда не надо. Все думают, что надо использовать всегда, потому что сейчас это хайповая тема. Я призываю вас удостовериться, что это как раз то, что вам нужно. Как только люди поймут, что это использовать не обязательно, тогда мы сможем додуматься до следующего шага.
Другой мой коллега, крупная фигура в Go коммьюнити, Эрик Сент-Мартин, известен своим высказыванием: «Kubernetes — это не Та Самая Вещь. Это вещь, которая поможет нам достигнуть следующей вещи, а потом та даст добраться до следующей». Это вечно продолжается. Но мы сможем понять, как попасть дальше, только если будем понимать, зачем что-то нам нужно, а почему оно нам не нужно.
Евгений: Вот на этом и остановимся, потому что время на интервью закончилось. Спасибо за ответы!
Уже сегодня в 17:00 стартует новая конференция DevOops: в этот раз в онлайне и пятидневная. Там без слова «Kubernetes», конечно, тоже не обойдётся! А ещё будут легенда DevOps Джон Уиллис, ряд докладов про DevOps как культуру, любимец публики Барух Садогурский и многое другое — смотрите полную программу, чтобы понять, сколько там актуального лично для вас.