Выпуск 50 · подкаст «Тысяча фичей»

#50: Как я повысил свою продуктивность за этот год

1:19:57
↓ скачать mp3

Сольный, юбилейный 50-й выпуск: Александр Пахомов возвращается к формату монолога и разбирает, что за год ощутимо подняло его продуктивность как программиста. Разговор идёт по четырём слоям — эргономика рабочего места (кресло `ErgoHuman`, кронштейн для ноутбука, ортолинейная сплит-клавиатура), софт (`Ghostty` + `tmux` + `Neovim` как единая среда, `fish`, единая тема во всех программах), пет-проект «база данных на Rust» и его влияние на уверенность в языке, и, наконец, здоровье — отказ от соцсетей и новостных каналов ради «свободного места в голове» плюс спорт как способ прокачать не тело, а майндсет времени и дисциплины.

Главное

  • Эргономичное кресло надо выбирать не по цене и не по интернет-обзорам, а сидя в шоуруме по 10–15 минут на каждой модели: `Herman Miller Aeron` за ~2000$ подошёл автору хуже, чем `ErgoHuman Elite 2` за ~1000$ — под конкретное тело кресло подбирается индивидуально.
  • Кронштейн, поднимающий экран на уровень глаз, снимает постоянное напряжение задних мышц шеи: когда голова висит вперёд над ноутбуком, эти мышцы держат её всё время, что у автора доходило до пульсирующей боли и бессонницы.
  • Одного хорошего монитора достаточно почти всегда; два монитора реально нужны только под стриминг (один транслируется целиком, второй — под `OBS`), а постоянно крутить голову между экранами — неестественная нагрузка.
  • Ортолинейная сплит-клавиатура (клавиши строго друг под другом) резко снижает промахи слепой печати по спецсимволам и скобкам, а разведённые на ~30 см половины расправляют плечи и грудную клетку — 8 часов в день со сведёнными руками сгорбливают.
  • Связка `Ghostty` (терминал на Zig) + `tmux` + `Neovim` под единой темой `Gruvbox` стирает границу между терминалом, командной строкой и редактором — весь интеллектуальный труд, кроме Java (её автор оставляет в `IntelliJ IDEA` + IdeaVim), делается в одном окне.
  • Пет-проект «своя база данных на Rust» оказался без обозримого скоупа (у больших компаний первая версия — это ~5 лет), но именно он превратил формальное «знаю Rust» в реальное умение: автор смог по ходу дела написать на Rust веб-сервер, отдающий `200` для health-check `Traefik`.
  • Отказ от Twitter, новостных телеграм-каналов, TikTok и Instagram освободил «пространство в голове» и энергию: любое чтение таких лент запускает фоновое «думание», а без него у автора появились силы на второй сезон подкаста и другое творчество.
  • Спорт даёт не только здоровую спину и «промытую» кардио голову, но и переносимый на работу майндсет: как штангу в 100 кг не взять за пару тренировок, так и большую фичу или пет-проект берёт наложение времени и дисциплины на деятельность, а не только талант и желание.
Расшифровка

[00:00] — Здорово! Как вас зовут? — Дядя Вова. — Чем вы занимаетесь? — Борьбой. — А свободное время? — Свободного времени нет у меня.

[00:05] Здорово! Меня зовут Саша Пахомов, и я инженер, который любит своё дело. Это 50-й выпуск подкаста «Тысяча фичей». Этот выпуск не похож на предыдущие: он без гостей и без глубоких технических деталей. Это монолог. Старожилы подкаста наверняка помнят первые два сезона, где я делился своими мыслями и процессом изучения того, как работают современные базы данных. И делал я это в одиночку. Сегодня я хочу вернуться к этому формату и поделиться с вами инструментами и практиками, которые ощутимо подняли мою продуктивность как программиста. Но для начала — наверное, вы заметили, что у подкаста поменялся биток. Надеюсь, вам он зайдёт так же, как и мне. Поехали!

[01:08] Про что же мы сегодня поговорим? Начнём с эргономики рабочего места: сплит-клавиатуры, кронштейна для монитора и рабочего кресла. Затем переместимся из физического мира в виртуальный и поговорим про софт, который я использую для работы, — редактор кода и терминал. После этого я расскажу про свой опыт программирования на Rust и про то, как он повлиял на мою работу с другими языками. Затем мне хотелось бы поделиться с вами опытом отказа от социальных сетей и новостных телеграм-каналов, подсветить положительные моменты такого решения. Продолжая капитанские советы и рассказы, я уделю внимание спорту: расскажу, какое место он занимает в моей жизни и как помогает мне быть более продуктивным и добиваться поставленных целей в программировании, да и в работе в целом.

[01:59] Итак, представьте утро. Вы ещё в кровати, но уже проснулись, долёживаете последние минуты с наслаждением. Я всегда так делаю. Затем вы встаёте, идёте в ванную, выполняете свою утреннюю рутину, завтракаете, завариваете себе кофе — в моём случае это флэт-уайт — и подходите к рабочему месту. И что вы видите? Я вижу белый стол и чёрное кресло. К столу прикреплён кронштейн для монитора, на котором висит мой макбук. Рядом с основным кронштейном установлен второй, попроще, — для микрофона. На столе лежит сплит-клавиатура с подушечками под каждую кисть и тачпад. В общем-то, это и всё. Давайте про каждый предмет поговорим по отдельности.

[02:39] Стол. Это, наверное, самый простой предмет из всех, которые я описал. К столу я отношусь максимально просто: я не загоняюсь по столам, которые меняют высоту, хотя знаю, что многим это нравится, и в будущем, наверное, себе такой куплю. Но сейчас у меня самый базовый, самый дефолтный стол — с какого-нибудь Авито, eBay или где вы там можете купить себе стол за 10 тысяч рублей. Главное требование к этому столу — чтобы он не шатался. В общем-то, моё требование он выполняет: обычный белый стол стандартных размеров, стандартной высоты.

[03:14] Дальше переходим к креслу. И здесь я, конечно, был уже более разборчивый, я выбирал. Сейчас расскажу процесс выбора. Во-первых, чтобы вы могли его прогуглить и посмотреть: это кресло ErgoHuman 2 Elite, вот такая модель. Стоит она порядка 100 тысяч рублей — ну, косарь баксов, короче, платите. И такое кресло вы так или иначе найдёте в любой точке мира, — правда, если это не какой-нибудь Бали, там будет посложнее. Это не Herman Miller — это кресло средненького, чуть-чуть, может быть, выше среднего ценового диапазона.

[03:56] Как я выбирал это кресло? И тут, наверное, самый основной момент всего блока про кресло, который действительно хочется выдать в качестве совета. Я поехал в шоурум, который был ко мне поближе, где было максимальное количество вот таких эргономичных кресел, — не обычных, которые можно купить в какой-нибудь Икее, а именно профессиональных. Почему я поехал в шоурум, чтобы посидеть на всех доступных креслах? Потому что главное отличие таких штук, как кресла, от, например, макбука, — который можно просто взять, заказать, купить и не приходить его пробовать, — в том, что на кресле надо посидеть. У каждого человека посадка немного отличается: длина рук, длина локтей, то, как мы в целом сидим. Мы сидим по-разному. И поэтому нужно сначала проверить, как вы сидите на кресле, которое, может быть, присмотрели в интернете, — или вообще не присматривали, а решили просто подобрать. Вот в шоурумах это сделать супер классно.

[05:02] И главный момент здесь — на каждом кресле нужно посидеть хотя бы минут 10, в идеале 15. То есть прям присидеться, что называется. Я так и сделал. По-быстрому, по минутке посидел на пяти-шести креслах, затем выбрал из них два-три, которые мне более-менее подходили. Там был, кстати, по-моему, Herman Miller, если я не ошибаюсь, — и с ним я посидел на ErgoHuman. И, посидев подольше на ErgoHuman, я прям понял, что он идеально подходит под мой рост, вес и комплекцию.

[05:38] Из приколов этого кресла — что его отличает от каких-то кресел из Икеи или игровых. Во-первых, нижняя подушечка двигается вперёд-назад: то, на чём мы сидим, можно двигать вперёд-назад — отдельный механизм этого движения, довольно удобно. Дальше двигается поясничный подпор, который выпрямляет поясницу: он двигается и по высоте, и в глубину — может подпирать поясницу сильнее или послабже. У меня выкручено на максимум, потому что я люблю, чтобы поясницу прям подпирало, не люблю сгорбливаться в этом месте — такая особенность. Подголовник, естественно, тоже двигается вверх-вниз. А подлокотники — супер классные: двигаются вверх-вниз, крутятся по часовой и против часовой стрелки, их можно выдвинуть пошире или сделать поуже, и они ещё меняют угол — то, где будут лежать ваши кисти: повыше или пониже. В общем, подлокотники настраиваются супер классно, и я их прям под себя настроил идеально. Я сажусь — и у меня руки внизу, плечи вверх не топорщатся. Я сажусь комфортно и прям ощущаю себя на своём месте.

[06:47] Кстати, Herman Miller — кресло, которое, наверное, большинство программистов знают как лучшее для того, чтобы сидеть, — мне не очень подходит. Я посидел на нём в шоуруме, когда выбирал, и что-то оно мне великовато показалось. Потом мой близкий друг тоже купил себе такое кресло, я пришёл к нему домой, сел и понял, что моё, ErgoHuman Elite 2, подходит мне лучше, чем Herman Miller. Хотя Herman Miller стоит в два раза дороже — Aeron, который; он стоит около двух тысяч долларов. Поэтому кому как. То есть цена в этом конкретном вопросе вообще не определяет, подходит ли вам кресло. Но, опять же, она не должна быть 10 тысяч рублей. Не верю я, уж извините, что кресло за 10 тысяч рублей, за 100 баксов, будет лишь чуть-чуть хуже правильно подобранного за косарь. Уверен, что цена здесь всё-таки играет роль, но не критично — как мы поняли на примере с Aeron.

[07:53] Так что вот такое у меня кресло. Я на нём сижу уже почти год, и это опыт непередаваемый. Какие преимущества такого кресла именно для человека, который на нём сидит, — не фишки-приколюшки, что-то там двигается или прикольно выглядит? Во-первых, на нём не жарко, потому что оно сделано из сеточки, и это очень важно. Если вы сидели летом на кожаных креслах в автомобилях, то примерно понимаете, о чём я. Когда материал не дышит, когда он плотный, долгое сидение может привести к тому, что вам просто станет жарко; я на подобных креслах постоянно чувствую себя неуютно. Наличие сеточки для меня — основной критерий, и все кресла, которые я выбирал, обязательно должны были быть с сеткой.

[08:31] Дальше, помимо сетки, — это, естественно, посадка. Я сижу на этом кресле так, как мне в целом кажется правильным. Я не профессионал, я не смотрел специальные ролики по посадке, не пользовался услугами врачей, которые бы мне осанку выправляли, но сам замечаю: сидя на этом кресле, я сижу ровно, не скатываюсь вниз, не поднимаю ноги, чтобы сидеть в позе креветки, никак не скашиваюсь. У меня ровная спина, расправленные плечи — плечи расправлены и за счёт сплит-клавиатуры, про которую поговорим дальше, но и подлокотники делают так, что локти просто стоят внизу, они не подняты наверх, плечи не зажаты, расслаблены. Как я стою, так я и сижу в отношении плеч.

[09:19] И я могу менять положение. Если я, например, устал или делаю не какую-то концентрированную, увлечённую работу, а читаю, скажем, документацию по большому проекту, в который мне нужно вникнуть, — тогда я могу откинуть кресло назад. Откидывается оно на порядок лучше всех кресел, на которых я сидел до этого: настолько, что по всей площади соприкосновения тела и кресла вес распределён равномерно. Представьте: когда вы откидываетесь, у вас не на спине большинство веса, не на копчике, а от задней поверхности колен и до затылка — всё, что касается кресла, давит на него примерно одинаково. Надеюсь, вы понимаете, о чём я. То, как оно раскладывается, — тоже супер-супер удобно. Когда откидываешь на максимум, ты уже реально почти лежишь, как в кресле у стоматолога. И в таком положении можно смотреть телевизор: у меня телек висит на стене, я могу откинуться, пододвинуть небольшой журнальный столик, поставить туда, не знаю, пиво и смотреть какой-нибудь сериал. Время, которое я провожу в кресле, — это не обязательно всегда программирование или сконцентрированная работа; это ещё и некоторый досуг, и это дополнительный плюс.

[11:02] Ну, я думаю, достаточно про кресло. Единственный вывод, который можно вынести из всего этого блока: сходите в профессиональный шоурум и посидите на этих креслах, несмотря даже на цену. За удобное кресло заплатить можно любую цену, как мне кажется. Лучше сделать это на два месяца позже — не знаю, два раза отложить, если не хватает, — и купить то, которое вам понравилось, а не что-то, что вроде ок, зато стоит двадцатку. Нет, лучше в этом случае переплатить, но главное — понимать, за что вы переплачиваете. На этом, наверное, всё про кресло. Давайте дальше пойдём.

[11:36] Итак, следующая вещь после стола и кресла, которую я называл, описывая своё рабочее место, — кронштейн, который прикручивается к рабочему столу. То есть он у меня не в стену вкручен, потому что квартира съёмная, а сверлить стены чужой квартиры не очень-то хочется. В своей я точно знаю, что засверлю кронштейн в стену намертво, потому что, когда он крепится к столу, есть одна не очень приятная особенность. Если очень сильно долбить по клавишам — а я иногда так делаю, — резонанс начинает передаваться от стола к кронштейну, и монитор на нём попрыгивает. В моём случае это происходит крайне редко, поэтому проблемой не является. Ну и я приучил себя не так сильно долбить по клавиатуре. Но всё равно, когда я буду проектировать свой офис, кронштейн однозначно на 100% будет вкрученный, тяжеленный, очень толстый, — и на нём будет подвешен монитор.

[12:25] В моём случае это простенький кронштейн, заказанный на маркете, — с виду прилично выглядящий и по отзывам качественный, который полностью оправдал свою цену в тысяч 7 рублей. Единственное — на нём у меня подвешен не монитор, как это должно быть по конструкции, а макбук. Подвешен он, естественно, не за саморезы: есть специальный переходник, такая подставка под ноутбук, — я её отдельно докупил, прикрутил, и теперь у меня на кронштейне стоит ноутбук.

[13:10] Преимущество такой постановки с кронштейном тоже, наверное, будет понятно, только когда ты посидишь и реально поймёшь, почему это круто. Но я попытаюсь донести основную мысль. Если мы сидим за ноутбуком — берём стандартный сетап, — то мы сидим чуть выше, и наша шея и голова немного наклоняются над столом, чтобы смотреть в монитор ноутбука. Думаю, вы все так сидели, а кто-то, может быть, до сих пор так сидит. В чём тут проблема? Когда мы наклоняемся и шея смотрит вниз — я вот так сейчас делаю, понимаю, что вы в подкасте это не видите, но, думаю, вы поняли, — то задние мышцы, которые крепятся от спины к затылку и держат голову, всегда напряжены. Затылок не находится ровно над позвоночником, он чуть-чуть свисает вперёд, и что-то должно удерживать голову — как раз эти задние мышцы. Они всегда в напряжении, и у меня они очень сильно болели, когда я так работал за компом. Болели настолько, что прям пульсировали, и мне даже было сложно уснуть.

[14:22] Поэтому я купил себе подставочку, чтобы поднять ноутбук повыше. Какое-то время я использовал книги — просто подставлял книгами, поднимал монитор ноутбука выше, чтобы поднять голову и выпрямить её относительно всего стержня тела, чтобы она висела не на мышцах, а на костях. Это в каком-то плане помогло, но всё же полумера, потому что иногда хочется откинуться, иногда хочется другую высоту монитора, иногда присесть, поработать чуть пониже. И кронштейн в этом плане — просто супер-фича: ты берёшь ноутбук двумя руками и двигаешь его абсолютно во всех плоскостях. Это как руль на самых дорогих премиальных машинах — берёшь и двигаешь во всех плоскостях: влево-вправо, наверное, вряд ли, в случае с рулём, но вперёд-назад, от себя, выше-ниже. Так же можно двигать и кронштейн: хоть чтобы от головы до монитора было 20 сантиметров, хоть назад настолько, что будет полтора метра.

[15:31] Естественно, я выбираю расстояние вытянутой руки — в среднем это, наверное, метр, может, чуть больше. Это комфортное расположение монитора перед глазами, и центр монитора у меня прям напротив глаз — высота подобрана идеально. Тут, конечно, стоит отметить, что ноутбучный монитор — не самый лучший вариант, хотя в случае с 16-дюймовым макбуком я бы поспорил: очень хороший вариант. Но если брать отдельный хороший монитор — в моём случае, наверное, какой-нибудь от Apple, чтобы была сочная картинка, — то большой монитор был бы сильно выгоднее, потому что 16 дюймов не всегда достаточно, если у тебя один монитор.

[16:20] Кстати, про один-два монитора тоже хочу сказать пару слов. Я считаю, что одного монитора более чем достаточно всегда. Единственный случай, который по-любому требует наличия двух мониторов, — это стриминг. Я стримлю на YouTube, и мне очень хочется всю активность, которую я транслирую в интернет, выполнять на одном мониторе, чтобы весь этот монитор стримился, а на втором видеть настройки стрима, тайминги, OBS. То есть это реально когда тебе как профессионалу необходимо два монитора, потому что с одним очень тяжело. Во всех остальных случаях идея, терминал, браузер, календарь, мессенджеры — всё спокойно умещается в разных рабочих столах. У меня на клавиатуре забиты хоткеи, чтобы быстро между рабочими столами переключаться, есть оконный менеджер, который очень легко и быстро настраивает layout окон, — кстати, называется он Amethyst. Я его использую и совершенно не требую себе второго монитора.

[17:22] Я знаю, многие используют два монитора, им очень удобно. Но, ребят, когда вы долго программируете — долго смотрите в один монитор, потом переключаете взгляд на другой, — вы же голову крутите. А сидеть вполоборота, с поднятой или чуть опущенной головой — неестественное положение для организма. Естественное — когда вы сидите ровно, прямо перед вами есть точка, на которой сфокусированы глаза, и вы только меняете картинку в этом окне. Поэтому для меня супер очевидно и супер удобно иметь один хороший монитор. Думаю, потом куплю просто монитор побольше, но и сейчас 16-дюймовый MacBook вполне справляется с этой задачей.

[18:04] Раз уж я начал говорить про MacBook, давайте на него посмотрим: что у меня за модель и что я про него думаю. Где-то примерно год назад я купил себе MacBook M3 Max на 36 гигабайт оперативной памяти, 1 терабайт на диске. Вроде такая комплектация, я сильно не помню, но оно, знаете, сильно и не важно, потому что таких характеристик хватает на все задачи, которыми я пользуюсь. Это и стриминг, и много открытых окон, и в то же время в Docker поднят composе, половина сервисов. Машинка работает отлично.

[18:38] Единственный минус, который иногда бывает, — не весь софт с этими новыми маковскими процессорами работает прям идеально. Например, когда я прошивал свою сплит-клавиатуру, про которую поговорю дальше, я столкнулся с тем, что на ARM скачанная, предсобранная QMK — софтина для того, чтобы программировать клавиатуру, — просто не работает. Приходилось с GitHub скачивать исходники и своим компилятором на своём процессоре всё компилировать, чтобы программа заработала. Когда ты первый раз этим пользуешься, тебе не очень хочется самому из сорцов какую-то сишную прогу собирать, — опыт такой себе. Случилось это, я так думаю, исключительно из-за того, что у меня MacBook на M-процессоре.

[19:28] Во всём остальном это просто пушка, ребят. Монитор, как обычно, — наверное, лучшие мониторы среди всех компьютеров, которые мы можем себе позволить. Скорость — просто феноменальная. После MacBook на i9-процессоре это словами описать очень сложно, это надо просто попробовать. Ребят, если вы всё ещё сидите на i-процессоре и думаете, переходить или подождать следующего, более мощного, — просто забейте. Прямо сейчас зайдите на сайт Apple, если вы на Маке, и покупайте себе M3-процессор. Я так был доволен, знаете, когда пересел. Это, наверное, можно отдалённо сравнить — по уровню эмоций, которые я испытал, — как если бы я всё время ездил на «Приоре», на палочке, а потом купил себе Audi на классном роботе, с двиглом 250 сил. Это прямо на несколько уровней выше штука. И радость, которую приносит этот процессор, передать очень сложно.

[20:30] К слову, если уж и выбирать, то не между каким-то MacBook и каким-то MacBook, а между MacBook и Linux-машиной. Ведь мы разрабатываем — ну, я лично разрабатываю — софт, который крутится на Linux-овых тачках, и разрабатывать его тоже на Linux-овой тачке довольно логично. Я раньше несколько лет сидел на Ubuntu, когда у меня не было денег на MacBook. И в целом опыт, если у тебя есть нормальный десктоп с нормальным Linux’ом и красивым, хорошим монитором, — тоже приветствуется. Я себе планирую в качестве дополнительной машины, наверное, собрать подобный десктоп. Linux я люблю, уважаю; про Windows говорить даже не буду.

[21:17] Ну и самое сладенькое, самая суть, самая классная вещь на моём рабочем столе. Если бы меня спросили: «Саша, из всех-всех штук, которыми ты оборудовал рабочий стол, — если бы у тебя было, не знаю, 20 тысяч рублей, на что бы ты их потратил?» — кресло я за такие деньги не куплю, о MacBook речи не идёт, кронштейн сам по себе стоит тысяч 7–10, но без него можно обойтись, это уж точно. А вот без чего я уже точно обойтись не могу — это сплит-клавиатура.

[21:51] Да, я обещал как-то записать выпуск про свою сплит-клавиатуру или вообще про их суть. Но я подумал, что в интернете настолько много видео про эти сплит-клавиатуры — просто загугли «ортолинейная сплит-клавиатура» в Ютубе, и будут ютуберы и на русском, и на английском, которые делают вкусную, сочную картинку, так интересно про них рассказывают, у них столько этих клавиатур, они с ними и на беговых дорожках, и так далее, — что очередной мой подкаст исключительно про сплит-клавиатуры выглядел бы немного слабовато. К тому же я не задрот, не лютый энтузиаст: у меня их всего три. Для кого-то, может, и много, но у блогеров, которые увлекаются этими клавиатурами, там все шкафы заставлены.

[22:39] В общем, я как-то начал увлекаться редактором кода Neovim, про который дальше поговорю, и там многие вимеры — смотришь, сидят как-то ровно, — и иногда кто-то говорил: «У меня есть сплит-клавиатура». Я подумал: что за сплит-клавиатура? Начал гуглить, смотреть, и мне понравилось. Во-первых, понравилась идея, которая стоит за этими штуками. Сплит — это, скорее всего, ортолинейная. Ортолинейная — это когда кнопочки располагаются одна под другой, а не смещены, как на всех других раскладках. Поэтому движение пальцев по этим кнопкам более естественно, и промахов слепой печати намного меньше.

[23:19] Раньше, когда я изучал слепую печать на обычной макбуковской клаве, я постоянно промахивался — очень часто. Я думал, что это скилл-ишью, надо просто больше печатать, больше тренироваться. И я уже несколько лет печатал слепым методом, а всё равно очень часто промахивался — особенно по таким клавишам, как открывающие-закрывающие фигурные или квадратные скобки, да и в целом скобки, цифры. Постоянно промахивался по каким-нибудь P — короче, по тому, что не на home row и не прям под пальцами. Почему? Да потому что нет интуитивного, естественного движения рукой на клавишу, которая не на home row: они расположены не друг под другом, ровно как двигаются наши пальцы, а наискосяк. И поэтому ты постоянно мозгом немножко корректируешь палец, чтобы он попал в нужное место. Достичь идеальной мышечной памяти печати на стандартной клавиатуре у меня лично не получилось. Спецсимволы — это беда, я их не мог напечатать, постоянно смотрел на клавиатуру.

[24:23] Сплит-клавиатура просто кардинально решила эту проблему. Её просто сейчас нет. Я вообще никогда не смотрю на клавиатуру, потому что не знаю, что там находится: у меня кнопки просто белые, там ничего не написано. И настолько это меняет опыт — когда кнопки все белые, ты как бы в голове себе запоминаешь, где что. Хотя это не очень точное слово: на самом деле не запоминаешь в голове, а делаешь мышечную память — у тебя пальцы запоминают. И вот эта идея, что запоминают пальцы, настолько меняет ощущение себя за компьютером: ты думаешь, а руки делают. Ты не думаешь о том, что делают руки и как; ты думаешь о сути того, что делаешь. Ты программируешь код, в голове думаешь код, а он сам появляется на экране. Вот такая интересная штука, которая была мне недоступна со стандартной клавиатурой, а со сплит — доступна.

[25:18] Если вы не понимаете, о чём я, или видели это где-то и думаете, что это для каких-то задротов, — то, наверное, возможно, это и правда. Я себя причисляю всё-таки ближе к задротам, нежели к обычным ребятам, — ну уж такой я есть. Но если вам действительно интересно и вы немножко думаете, «а как это вообще», — посмотрите у меня в телеграм-канале «Душный энтерпрайз», ссылка на который всегда прикреплена внизу к каждому выпуску подкаста. У меня там предпоследний пост — фотографии моего рабочего места и моей сплит-клавиатуры, той, которой я пользуюсь. Если интересно — посмотрите, возможно, вам станет чуть интереснее, и вы пойдёте, погуглите, что-нибудь купите.

[26:04] Я начинал с обычной, самой базовой клавиатуры — Corne третьей версии. Посмотрел видосы блогеров, понял, что это самая доступная, недорогая, её можно купить, и на маркетплейсе купил себе собранную. Сам я не паяю. Стоит понимать: в мире сплит-клавиатур они настолько кастомные и индивидуальные, что большинство людей собирают их сами. Собирают — это значит заказывают плату, которая по форме подходит, паяют, ставят или впаивают свитчи, потом заливают прошивку — там какой-нибудь микроконтроллер стоит, некоторые даже на Raspberry Pi делают — и программируют прям как самодельную штуку. Я не из таких, я беру всегда готовое, кем-то сделанное, потому что мне не нравится паять, печатать на 3D-принтере и так далее. Прошивочку я сам подзаливал — раньше через QMK, сейчас есть такой софт Vial: просто открываешь программу, натыкиваешь, что на эту кнопку хочу вот эту, последовательность кнопок, — и оно само автоматически в фоне прошивается. Короче, супер просто, супер удобно.

[27:22] Какая у меня сейчас клавиатура? Velvet V3 от Ergo Heaven — не перепутать с креслом ErgoHuman, это Ergo Heaven. Это парни из России: сами паяют, на 3D-принтере печатают, сами собирают — это, я так понимаю, их собственная разработка. Они не в самом-самом начале пути, уже много классных штук сделали, но находятся, знаете, если представить экспоненциальный график, — вот на этом взлёте экспоненты: ещё не полетели вверх и не захватили весь рынок, но прям вот-вот полетят. Это моё личное мнение, никакой рекламы — просто погуглите, посмотрите, думаю, поймёте, о чём речь.

[28:08] Если не хотите покупать полусамодельные, на 3D-принтере сделанные клавиатуры, можно купить готовые — всё это гуглится. Главное преимущество этих клавиатур, ещё раз повторю, — что они ортолинейные: клавиши находятся одна под другой. Если вы уже умеете печатать слепым методом, вы 100% оцените ортолинейность, потому что эта фича просто офигенная. Ну и помимо неё у вас руки разъезжаются. Раньше, по сути, между двумя указательными пальцами было расстояние в две кнопки — сантиметров пять, — то есть руки довольно близко друг к другу. И это положение рук сопровождает нас как профессионалов часов по восемь в день. А оно неестественное: сжимает грудную клетку, ты сгорбливаешься. Восемь часов в таком положении на протяжении, не знаю, 10, а то и 20 лет — мне кажется, не очень правильная идея. А вот если мы разводим руки — так, как сидим за столом, когда с друзьями общаемся, когда между руками может быть сантиметров 30, — вот на этом расстоянии у меня стоят клавиатурки. Поэтому я сижу с расправленными плечами, расправленной грудью, дышу полной грудью и чувствую себя более уверенно. Мне реально более уверенно сидеть за компом и что-то печатать.

[29:31] Наверное, это основные преимущества сплит-клавиатуры. Я хотел записать отдельный выпуск, но больше не буду, и, наверное, больше говорить про это не буду, потому что я чуть ли не в каждом втором выпуске про эти сплит-клавиатуры и с гостями говорил, и сам. И вот наконец-таки записал такой блок в монологе. Думаю, те, кто уже знают про сплит-клавиатуру, ничего нового для себя не открыли, — ребят, сори за эти 10 минут вашего времени. Те, кто сомневается, но хочет попробовать, — искренне надеюсь, что я немножко добавил вам мотивации посмотреть на эти штуки. А те, кто не знал, что это такое, — ну, теперь вы хотя бы знаете. Ну, а мы идём дальше.

[30:10] Усевшись в свой экзоскелет, я начинаю работу. Почта, Slack, телеграм, календарь, браузер с гугл-доками — это все необходимые инструменты, которые очень сложно кастомизировать, приходится работать с ними как есть. Благо, занимают они процентов 5 всего времени, если не учитывать ревью кода в браузере: тут иногда и половина рабочего дня может уйти, но это редкость. В остальном это терминал и редактор кода.

[30:37] Давайте поподробнее, начнём с терминала, потому что терминалов сейчас очень много, их прям расплодилось: каждый, кому не лень, пишет свой собственный. Популярных, более-менее на слуху, наверное, штук пять, а всего, возможно, штук десять. Я не буду про все рассказывать, расскажу про тот, который у меня есть сейчас. Называется он Ghostty — пишется как ghost, только с двумя t: Ghost TTY. Написан он на замечательном языке программирования Zig. Про сам язык мы, конечно, очень много говорили с Маткладом в выпуске про Tiger Beetle, но там немножко про Zig упоминалось. Я сам очень люблю Zig: мне нравится философия этого языка, нравится его создатель и нравится софт, написанный на нём.

[31:25] Это сложно передать, но, когда пользуешься программой, написанной на Zig, кажется, что всё настолько просто. И да, это простые программы: они просто простые сами по себе. Они очень просто конфигурируются, их почти не надо конфигурировать изначально, а если что-то хочется поменять, то можно даже не гуглить, как это менять, а просто догадаться. Ну, например, берём терминал Ghostty — у него нет конфигурации вообще: изначально, by default, он не конфигурируется, просто поставил — и работает. Потом ты захотел что-то поменять, например добавить прозрачности. У меня терминал прозрачный, мне нравится это opacity — то, что на заднем фоне просвечивает IntelliJ IDEA или моя заставка. Мне нравится, это добавляет какую-то лёгкость.

[32:09] Чтобы добавить это opacity, нужно интуитивно зайти в ~/.config/ghostty/config — создать его, кстати, самому, потому что по дефолту его там нет; это всё, конечно, написано на сайте. Заходим в этот файлик и по референсу опций на сайте понимаем, что нам нужно background-opacity или что-то такое. Меняем и перезагружаем: либо программу просто выключаем и запускаем заново, либо, как советуют, на горячую — shift-comma, — и тут же применяются настройки из файла. Всё очень просто. Дальше мы гуглим, смотрим на GitHub, как люди свой конфиг устраивают — стандартный подход этих dotfiles. Видим, что там есть всякие интересные темы: убирают, не знаю, всякие макосовские плашечки. У меня, кстати, мой конфиг для Ghostty тоже можно увидеть на GitHub. В общем, как-то тюнишь, но всё это делаешь максимально просто и понятно.

[33:09] И ещё что мне очень понравилось — там есть CLI. А мы, конечно, любим CLI. И в этом CLI есть команда, что-то типа «темы»: запускаешь её — и открывается специальное окно, такой TUI, terminal user interface, то есть UI в терминале. Там перечислены абсолютно все темы, которые поддерживаются терминалом, и вы прям кнопочками HJKL, которые из Vim, тыкаете вниз и видите переключение этих тем. И тут же в терминале показано, как выглядит код, как выглядит текст с этой темой. Вам не надо ничего гуглить, смотреть картинки, представлять себе — вы прям видите на своём мониторе, как ваш терминал сейчас с этой темой работает. Если нравится, просто копируете название и вставляете себе в конфиг. Поиск — пожалуйста, как в Vim: нажимаете слэш, набираете, скажем, «material» — и сразу все темы, которые содержат слово «material». Этот TUI максимально простой, но в то же время интуитивный, и всё, что вы в нём делаете, вы делаете интуитивно. За это мне очень нравится этот терминал. Ну и к тому же он очень быстрый — написан на Zig, и такие вещи, мне кажется, надо поддерживать. Если вы используете какой-нибудь WezTerm, написанный на Rust, или Kitty, написанный, по-моему, на Python — не очень помню, — короче, есть много прикольных терминалов, которые можно использовать. Я выбрал самый простой, самый быстрый и написанный на Zig — это Ghostty.

[34:45] Дальше, помимо терминала, из софта у меня всегда используется tmux внутри терминала. Да, в целом можно использовать терминальные сплит-штуки, но мне просто нравится. У меня и в iTerm2 стоял tmux, и я настроил его под себя так, что могу прям разбивать терминал по этим красивеньким панелям так, как я хочу. Настроил, чтобы менять размер этих панелей, — всё это с клавиатуры, естественно, никакой мышки. Когда мне что-то нужно, я прям тут, оп, сплит себе сделал — тоже одной кнопкой, — пошёл что-то попрограммировал, командную строку запустил, тесты запустил, cargo test, если мы про Rust, или gradle check, если про Java. Что-то быстрое в этой панели сделал, потом тут же её закрыл, продолжил писать код. Мне такой флоу работы очень подходит, он мне интуитивно понятен и настроен. Опять же, tmux очень хорошо работает с Ghostty: они прям красивенько отрисовываются, увеличение-уменьшение шрифта, окна, панели tmux в Ghostty работают просто супер, копировать всё можно — отлично. Все файлы, все настройки, дотфайлы у меня на GitHub, можно посмотреть.

[36:03] Кстати, если хотите, чтобы я записал именно видос о том, как я с нуля настраиваю свой сетапчик — Ghostty, tmux и Neovim, про который сейчас поговорим, — напишите мне где-нибудь в телеграме или на площадке, где вы смотрите: там можно писать комментарии. Пожалуйста, пишите, я их обязательно прочту, может быть, запишу видео. А дальше идёт Vim, точнее Neovim. Изменение всех конфигураций, файлов, написание кода — всё, что я делаю по работе, кроме написания кода на Java (звёздочка), я, естественно, делаю в Neovim. Это безумно удобный редактор кода. У меня есть целый плейлист на YouTube — открываете его и смотрите от начала до конца, если вы с нуля не знакомы с Neovim. Я там максимально постарался просто объяснить, как это работает, сам изучал этот редактор, и процесс изучения выложил на YouTube. Всё прикреплю в этом выпуске, если интересно — заходите.

[37:00] От себя про Neovim могу сказать, что там огромное, живое и довольно движовое комьюнити. Это, наверное, одна из немногих таких вещей — ну, ещё в VS Code есть движовое комьюнити, там все плагины пишут. VS Code я, естественно, пользовался, когда он только вышел, посмотрел, не понял, зачем он мне нужен, и с тех пор им не пользуюсь. А вот в Neovim прям понятно, зачем он тебе нужен. Во-первых, это терминальная штука, и когда у вас красивый Ghostty, когда вы можете сплитовать окна с помощью tmux, а Neovim открыть в одной из этих панелей, — ну, это такое удовольствие, настолько интуитивно и понятно, что как будто эти инструменты созданы друг для друга.

[37:51] И в Neovim, когда работаешь, у тебя буквально стирается грань между терминалом и редактором кода — как будто ты живёшь в одном окне. Это уникальное чувство. Оно может возникнуть, знаете, когда пользуешься исключительно IntelliJ IDEA, — вот у меня такое было, когда я был джуниором-мидлом и думал, что эта программа единственная, которую надо использовать программисту. Сейчас, конечно, так не думаю, но тогда — да: у тебя в одной программе есть всё, ты можешь и к базе данных подключиться, и файл создать, что-то запустить, REST-запрос сделать, тесты запустить, зарелизить, по SSH зайти, Docker Compose — всё в этой программе. И это интересный момент, когда тебе не надо держать тысячу окон, никуда переходить — ты просто сидишь и работаешь в инструменте.

[38:44] Сейчас для меня этот инструмент — терминал. У меня стёрты грани между редактором кода, терминалом, командной строкой — это всё одно и то же. Я могу в нём делать всё, что захочу: написать код, создать файл, создать проект — всё делается там. И делается интуитивно, ты не гуглишь, как там создать git init, что дальше, — когда ты это уже сделал много раз, всё на кончиках пальцев. Когда редактор кода в терминале, эта грань как раз и стирается. Вот если бы у меня редактор кода был какой-нибудь VS Code, у меня было бы две программы — терминал и это GUI с редактором. А когда всё в терминале — я там просто живу: он красиво настроен, прозрачненький, в нём классная тема, всё сделано просто и красиво, я в нём сижу, там же и заметки пишу в Markdown. Абсолютно всё, что является результатом моего интеллектуального труда, делается в терминале — и в Neovim в том числе, конечно.

[39:52] Как я говорил, кроме программирования на Java, потому что это, конечно, беда. Программирование на Java равно-равно программирование в IntelliJ IDEA. Да, к сожалению, это так, и с этим не очень хочется что-то делать. То есть сделать-то можно: если бы я реально очень захотел… Иногда, справедливости ради, какие-то маленькие вещи — что-то смерджить, проверить, что всё работает, подправить одну строку конфигурации — я делаю в Neovim, запускаю Gradle или Maven из командной строки в проекте. В этом проблемы нет. Но когда действительно надо что-то попрограммировать на Java, а если уж, господи упаси, на Kotlin, — то это надо делать в идее. И это статус-кво.

[40:40] Почему я сказал, что не очень хочется это менять? Потому что в целом я вижу себя всё менее и менее программирующим на Java. Поэтому для меня нет интереса и азарта, который подстегнул бы меня нормально настроить окружение Neovim для Java. Справедливости ради, оно у меня и сейчас нормально настроено: есть LSP от Eclipse, по-моему, — базовые ошибки подсвечиваются в Neovim, навигация кода вимовская. Мне не нужны все эти фишечки, которые идея предоставляет, — какие-то сложные рефакторинги, — просто потому, что я могу делать эти рефакторинги в Neovim на любом языке с любым текстовым файлом. Могу, если захочу; вопрос в том, что не особо-то и хочу.

[41:28] Естественно, есть проблемы: если я сейчас в своём текущем сетапе буду работать в Neovim с Java, то встроенные чекстайлы будут не особо работать — надо всё время запускать из командной строки, потом идти править чекстайл, импорты, автоматически убирать. Все эти маленькие автоматизации идеек, без которых программирование на Java не выглядит эффективным, в Neovim надо настраивать отдельно, и мне просто неохота этим заниматься. Поэтому для программирования на Java я использую IntelliJ IDEA просто с плагином IdeaVim: у меня абсолютно все те же моушены, все те же конфиги. У меня очень минималистичный конфиг Neovim, очень мало специфичных плагинов, поэтому IdeaVim отлично подходит — по сути, никаких плагинов-то и нет, просто биндинги, маппинги, Vim-режим в идее тоже работает. И я абсолютно не чувствую боли перехода: когда программировал на Java в идее с IdeaVim, — что-то прям очень сложно после Vim? А нет, очень спокойно, нормально.

[42:30] К слову, это тоже к тому, что если мне нужно что-то попрограммировать на ноутбучной клавиатуре, когда я не взял с собой сплит (хотя в последнее время всегда пытаюсь брать), — я просто сажусь и пишу. Нет в этом большой проблемы: садишься и печатаешь, пару раз промазал, вспомнил, что ты не на сплите, и дальше нормально печатаешь. Поэтому я бы не говорил, что, выбирая Vim, я выбираю его, знаете, как религию, и всё, теперь только там. Да нет, везде можно, всё нормально. Относиться надо ко всему спокойно и не делать себе всяких фетишей.

[43:04] Следующая программа — это fish. Это shell, который у меня тоже в системе стоит: вместо bash, или обычного sh, или zsh у меня fish. Почему fish? Просто потому, что какое-то время назад я его себе поставил, настроил. Мне безумно нравятся автокомплиты, которые он предлагает, — такой красивый комплит на всю линию. Мне очень нравится, как он показывает историю через Ctrl-R, по-моему. Мне нравится философия минимальной конфигурации: если надо что-то сконфигурировать — пожалуйста, но по факту вы ничего не конфигурируете. Там очень удобно писать алиасы. Короче, прикольная штука. И к тому же недавно fish переписали на Rust — публично только бету выложили, релиз; нужно подождать, чтобы не было беты, и можно нормально себе поставить. Идеально написано на Rust. Короче, fish всем рекомендасьон. Но в целом и zsh тоже неплохо.

[44:03] И, наверное, последнее из софта, который я постоянно использую и про который хочется сказать, — это тема. У меня она установлена в Ghostty, в tmux и в Neovim. По сути, все эти три программы работают друг в друге, друг через друга, но когда у них отличается тема или одна программа прозрачная, а другая нет — это выглядит немного кривовато. У меня так было в iTerm. Поэтому я решил: выберу одну из самых популярных тем, от которой у меня не вытекают глаза, и поставлю её везде во всей конфигурации, чтобы палитры совпадали абсолютно везде. И эта тема — Gruvbox Material. Классная, нормальная тема; я не в восторге от неё, но она везде есть, везде поддерживается. Настроив эту Gruvbox-тему и сделав прозрачность везде, я добился того, что как будто у меня нет tmux, нет Neovim, а есть просто терминал, который все эти фичи поддерживает. Всё слилось в одно, нет отличий, когда я захожу в Vim, — как будто я в том же терминале сижу, и всё.

[45:14] У меня раньше была тема не такая популярная, называлась Kanagawa, и она мне больше нравилась, была посимпатичнее. Но она была у меня в Vim и, по-моему, в tmux — какой-то там бедный форк, я что-то нашёл, себе поставил. Везде она не поддерживалась, поэтому возникали кривости: выходишь из tmux — она выглядит по-одному, заходишь — по-другому; во всех интерпретациях выглядело немного криво. Можно даже на моих стримах посмотреть, где я на Rust программирую, как это выглядело — неплохо, но не супер, не так вкусно, не так смачно, как сейчас. Если интересно посмотреть, как выглядит мой терминал, — заходите в телеграм-канал «Душный энтерпрайз», там один из последних постов как раз скриншот моего терминала. Мне кажется, это супер прикольно, и за таким терминалом хочется сидеть — это вот очень важно. Ну, а мы пойдём дальше.

[46:14] Помните, я закоммитился в выпуске про Tiger Beetle, что буду писать свою базу данных на Rust? Вот этот отрывок.

[46:23] «— Коммитмент публичный, ребята, скоро будут стримы на YouTube. Будем писать базу данных, осталось выбрать язык программирования. — Ну, ты же хотел Zig выучить, мне кажется, тут ответ очевиден. — Ну вот, Zig; но я хочу понять Rust. Я просто на нём писал всякие маленькие штучки — типа Advent of Code. — Что ты решал, естественно, прочитал всё это дело. Да, слушай, тогда у меня прямо челлендж есть. Во-первых, это точно Rust, потому что вообще я бы не рекомендовал людям программировать на Zig, C++ и C, если они не знают Rust, — потому что можно, короче, посадить ужасных багов».

[47:01] Ну вот, я пишу базу данных на Rust. Более 30 стримов я уже провёл, и вот что могу сказать. Во-первых, для пет-проекта выбирать базу данных — это была огромная ошибка. Это настолько большая и необъятная тема, что у неё нет скоупа, нет такого пространства, в котором я бы сказал: «Вот когда это выполнено, задача решена». Базу данных, по сути, можно разрабатывать бесконечно — огромные компании с огромными ресурсами тратят по 5 лет на разработку первой версии. У меня, естественно, нет таких целей, но, чтобы хотя бы называть свою программу базой данных, нужно сделать огромное количество действий, написать много кода. И этот код, если ты делаешь хоть чуть-чуть нормально, — сложный. Поэтому это было ошибкой — коммититься на базу данных. Но что сделано, то сделано: слово не воробей, вылетит — не поймаешь. Ну и в целом мне это интересно, мне это нравится.

[48:02] Я сейчас расскажу про те штуки, которые мой профессиональный мир принёс Rust и вот этот опыт написания базы данных на Rust на стримах. Про саму базу данных, про то, как она работает, — пока что эту программу у меня язык не поворачивается назвать базой данных. Там, по сути, есть только лексер и парсер, более-менее чуть-чуть нормальные, хоть похожие на что-то такое. Дальше есть пустой анализатор, пустой оптимизатор, storage in memory поверх хешмапы и terminal user interface — TUI, как я его называю, — который запускает кусочек как бы Vim’а, где можно писать запросы и, нажимая Enter, видеть результат. Но результаты этих запросов пока что, на момент записи выпуска, фейковые. Планируется добавить CREATE TABLE statement и INSERT INTO table, и после этого данные уже будут вставляться в таблицу и читаться реальнее. То есть будет такое интерактивное приложение, в котором можно создавать таблицы, вставлять данные и писать к ним простые селекты — без всяких GROUP BY, JOIN и так далее. Такое сейчас состояние у этого проекта.

[49:22] Естественно, это пет-проект, я это делаю just for fun, как говорится. Не Линус Торвальдс, конечно, — говорил ли я «напишу операционную систему just for fun», — но это просто весело. Программировать на Rust в Neovim реально весело. Вот это первый такой поинт: это прикольно. Дальше, что из прикольного? Ну, я до этого как бы Rust типа знал — мог сказать, что знаю Rust. В зависимости, конечно, от того, в какой компании и кто меня спрашивает, но в целом я говорил: «Ну, на Rust могу». А что я реально умел до того, как начал этот пет-проект? Я решил, наверное, штук 50 задач на LeetCode на Rust. Тогда я решил порешать LeetCode, просто чтобы немножко быть в тонусе. Ну а раз уж решать, то зачем на знакомом тебе языке, зачем на Java писать в LeetCode? Никакого интереса в этом нет, поэтому я решал на Rust.

[50:20] И в какой-то момент, уже под конец, я прям проходил собеседования — просто ради себя, ради интереса, во всяких компаниях, которые любят спрашивать эти лидкодовые задачи, — посмотреть, как я справляюсь. И я заметил, что на Rust программирую эти задачи вживую и чувствую себя комфортно. Справедливости ради, решение LeetCode-задач ограничено очень маленьким подмножеством языка: по сути, вам нужны ифы, циклы, три структуры данных — и всё. Большинство задач уровня medium решается этими инструментами, поэтому довольно быстро я их освоил, и они были у меня на кончиках пальцев — я спокойно мог всё это написать в блокноте без автокомплита. Но я всё ещё чувствовал, что я не Rust-программист: я не могу написать программу на Rust, я не знаком с экосистемой, не могу взять и написать веб-сервис — просто сесть и написать. Потому что обычные программы я как-то программировать могу, но не знаю, как нормально работает cargo, как добавить dependency, какие dependency добавить, что такое Tokio. Короче, была куча вопросов, которые предстояло изучить, и вопрос был — а как их изучать?

[51:31] Ну, работу на Rust мне никто не предлагал. Писать что-то своё — вариант. И вот я решил писать базу данных. Главнейшая плюшка, которую мне это всё принесло, — то, что теперь, когда я говорю «я программирую на Rust», я действительно программирую и не вру, я могу написать на нём код. Да, он не идеальный, не самый красивый, но я могу — и это правда. Посмотри, у меня есть GitHub. Поэтому в этом плане мне очень сильно добавилось внутренней уверенности, что второй язык программирования у меня теперь — Rust.

[52:04] И есть кейс, в котором я недавно оказался, понял, что вот я это сделал — и сделал, скажем так, в полуавтомате, полуинтуитивно. Сейчас расскажу, что было. Короче, захотел я написать телеграм-бота для себя, для близкого человека: отправляешь ему фотографию еды, или состава, или блюда, или меню — а он проверяет фотографию на наличие в составе, в тексте подсолнечного масла. У моего близкого человека есть аллергия на подсолнечное масло, или, по крайней мере, подозрение на это, и его употребление для этого человека под запретом. Проблема в том, что тебе постоянно приходится читать составы, а иногда на некоторых блюдах они написаны очень мелким шрифтом, и реально нужно читать внимательно: если вы аллергик и ищете аллерген, вы не можете его пропустить глазами, поэтому очень внимательно читаете эти тоненькие-маленькие строчки, и это не очень удобно. Я подумал, что могу написать телеграм-бота, которому отправляешь фотографию состава, он засылает её в OpenAI, тот отвечает, есть там подсолнечное масло или нет, и бот говорит «есть» или «нет». Удобная штука, по крайней мере, для первого быстрого скрининга полки продуктов.

[53:24] Короче, решил я такого бота написать, и вот с чем столкнулся. Во-первых, он где-то должен хоститься — ну ладно, там, для Claude купили себе вемку, окей. Дальше — я не хотел писать код. Принципиально. У меня был профессиональный интерес немножко поизучать, как можно очень быстро написать такого бота с помощью no-code-решения, потому что, очевидно, в том флоу, который я описал, кода нет: там не надо писать никакой логики. А даже если бы и была логика, она очень простая — по сути, просто принять фотографию, отправить её в OpenAI с промптом, получить результат, отправить результат. Проще некуда. На самом деле, довольно удивительно: когда ты показываешь это людям, которые не особо понимают, как это работает, они такие: «Вау, круто! Наверное, ты долго времени потратил, программировал, ты программист». А я понимаю, что ни строчки кода не написал. И это сейчас, в 25-м году, — просто такое интересное отступление.

[54:24] Короче, я подумал, что буду использовать no-code-платформу. В качестве неё я выбрал n8n — очень много звёздочек, очень много плагинов; платформа для no-code, или где можно и код вставить, — такой, знаете, Zapier, только open source. И там, чтобы сделать триггер от телеграм-бота, нужны веб-хуки: он работает только с помощью веб-хуков. То есть модели, когда ты отправляешь запрос в Telegram API и получаешь результат в виде апдейтов, там нет. Оно синхронно запускается самим Telegram’ом с помощью веб-хука. А Telegram для веб-хука требует HTTPS, а для HTTPS нужен свой домен, с Let’s Encrypt и так далее. Короче, история из 20 минут приключений превратилась в 2 дня. За 2 дня я это всё сделал.

[55:22] И такой у меня был технический сетап: виртуальная машина, в ней Docker Compose, в Docker Compose крутится этот n8n, перед ним стоит Traefik. И для того, чтобы Traefik нормально работал и API, который я открываю с помощью Traefik, воспринимался клауд-провайдером как рабочий, Traefik должен отвечать «ок» на запрос рута. То есть клауд-провайдер делает по определённому порту как бы ping на слэш, на пустой, и ожидает 200. А Traefik не может возвращать 200 — то есть можно поприседать и сделать, но концептуально штука такая, что 200 должен возвращать какой-то сервер, а не Traefik.

[56:01] Соответственно, встал вопрос: а какой сервер, откуда? Ну, можно взять какой-нибудь дефолтный Apache и поднять его. Но как-то не очень интересно. И я подумал: да я просто быстренько напишу сервер на Rust, который будет просто отвечать 200, — вот такой простой. И я понял, что меня ничего не останавливает: я понимаю, как это надо делать. Пишу в ChatGPT: «Напиши мне простенький сервер», — параллельно иду гуглить, что там как. Он мне подкидывает фреймворк поверх Tokio, я это всё — cargo new, dependency — сделал, написал, проверил локально, работает. Собрал тоже с помощью ChatGPT очень тонкий, лёгкий докер-образ, запулил его. И через час, — при том что я в целом дилетант во всём этом, — у меня уже был рабочий пингующийся API с Traefik.

[56:50] Короче, к чему я это всё? Вот этот мой опыт написания базы данных, с одной стороны, никому нафиг не нужный, бесполезный кусок продукта, кусок софтины. Но он дал мне скилл, дал возможность, дал в руки инструмент и позволил им овладеть, — так что вот такую, казалось бы, просто задачку я решил. Нужно было, чтобы cloud-провайдер мой API пинговал и 200 возвращал. Есть куча вариантов, как это сделать, но я решил выбрать Rust и написать на нём веб-сервер, потому что теперь это мой инструмент, и я им владею. Тут, конечно, главное, чтобы с молотком в руках всё кругом гвоздями не казалось. Но, мне кажется, конкретно в этом случае использование Rust вполне оправдано: это мой проект, я его буду поддерживать, — и в целом, почему бы и нет? Когда я понял, что сделал это без всяких проблем — я там и shutdown hook зарегистрировал, чтобы по сигналу close, Ctrl-C, всё нормально закрывалось, то есть код я писал, — и не было никаких проблем с самим Rust, я осознал, что не зря занимаюсь чем-то странным на YouTube, на стримах. Поэтому Rust топ, мне очень нравится, хотелось бы на нём больше программировать. А мы идём дальше.

[58:13] Сейчас накину немножечко говна на вентилятор под названием Twitter. Да, это часть про то, как я отказался от Твиттера, социальных сетей, Инстаграма и новостных телеграм-каналов, и какой у меня в связи с этим опыт, какие мысли. Тут, наверное, стоит отметить, что я не хочу осуждать людей, которые сидят в Твиттере. Тем более не хочу осуждать тех, кто сидит в Инстаграме, что-то постит, смотрит. И тем более не хочу осуждать людей, которые читают новостные телеграм-каналы. Я как автор телеграм-канала, наверное, не очень хочу, чтобы вы сейчас все пошли и отписались, но в целом ваше право, вашим временем вы располагаете. Но сейчас — конкретно про мой личный опыт, про то, почему я это сделал и какие положительные (ну и, может быть, отрицательные) эффекты ощутил на себе.

[59:10] Наверное, стоит сделать небольшое вступление про Твиттер. Я узнал про него давно, но никогда не сидел — как-то мне было непонятно, что там делать. Потом появилось мнение: все программисты, вроде ты программист, ты должен там что-то умное твитить про какие-нибудь программы, может быть, нашёл open-source-проект — затвитил, может быть, следишь за какими-то разработчиками, которые твитят последние инсайты, без которых ты и не программист, если не будешь их читать. И там Барух ходил на конференциях, что-то форсил про этот Твиттер: be nice ко всем, подписчики, личный бренд. Как-то было такое, и я подумал: ну правда, что это я без Твиттера? Зарегистрировался, получил свои первые семь подписчиков, друзей. И с этими семью подписчиками мы несколько месяцев читали всех остальных: было интересно, кто-то прикольные шутеечки делал.

[1:00:10] Потом случилось как бы… И после этого находиться в Твиттере для меня лично стало абсолютно невозможным. Он как будто бы сошёл с ума, и люди, которые там сидели, на которых я был подписан… Короче, очень много эмоционального начало происходить, связанного с твитами: человек что-то написал, оторвано от контекста; у меня появились какие-то подписчики, начали отвечать на мои твиты — и эти ответы все такие кислые, токсичные, неприятные, прочитаешь — и прямо хочется всё это выплюнуть. Начались какие-то негативные отношения с Твиттером. Я начал активно банить, блокировать людей, но это особо не помогало — всё равно какие-то странные залетали. И я подумал: а зачем он мне вообще нужен? Что я там узнаю нового и полезного, чего не могу узнать в другом месте? Ну конечно, ничего. Поэтому я намертво перестал туда заходить и заметил, что моё эмоциональное состояние стало сильно лучше. Я стал менее зависим от социальной сети.

[1:01:18] Кто бы что ни говорил, какими бы мы ни были умными, осознанными, контролирующими своё время и свои мозги людьми, — всё-таки это социальные сети, они строятся на социальных механиках. А эти механики работают в нас ещё задолго до соцсетей: это одобрение группы, лайки, просмотры — всё это работает на каких-то низких вещах. И вот мне сейчас, в свои 27 лет, абсолютно всё равно, сколько у меня лайков, сколько подписчиков, сколько вообще людей. Эти социальные механики как будто перестали на меня действовать, я перестал получать от них удовольствие. Знаете, иногда папа спрашивает: «У тебя там на Ютубе столько-то подписчиков», — он меня смотрит, — в том плане, что как-то маловато. Я говорю: «Пап, ну если бы у меня была цель собрать очень много подписчиков на Ютубе, я бы снимал совершенно другие видео. Проблема в том, что мне неинтересно снимать такие видео, поэтому я снимаю те, которые мне интересны, а они не приводят к тому, что на тебя подписываются много людей». Мне стало совершенно неинтересно испытывать на себе эти социальные механики, поэтому Твиттер ушёл.

[1:02:32] Я отказался от него и заметил, что стал спокойнее, и у меня появилось больше времени думать о чём-то действительно важном — а не о той мысли, которую я прочитал от рандомного человека в интернете, с которым не согласен. В очередной раз кто-то в интернете не прав, и ты с ним не согласен, и ты об этом думаешь. А думание — это процесс в голове, который задействует какую-то энергию, каким бы это думание ни было. И когда я перестал этим заниматься, я понял, что энергии стало больше, этого пространства в голове стало больше — и началось больше творчества. Я создал второй сезон подкаста «Тысяча фичей»; это был очень тяжёлый для меня интеллектуальный труд, который стал возможным, потому что пространство в голове освободилось от всякой чуши, от мусора, который я читал в Твиттере.

[1:03:20] Дальше я подумал: как круто, когда ты освобождаешь пространство, — а что ещё я могу освободить? Давайте посмотрим, что у меня в голове находится. И там оказались, как ни странно, новостные телеграм-каналы. Я понял, что чтение новостей прямо здесь и сейчас — не дай бог получить уведомление, если у кого-то стоят уведомления на новости, но даже если не уведомления, даже если в отведённое время пару-тройку раз в день садиться читать новости в телеграм-канале — оно тоже провоцирует то же самое думание и сжигает ту же энергию. И я подумал: зачем мне это думание, зачем эта энергия? Ведь я, к сожалению, вряд ли могу изменить ход событий, которые происходят, — зачем мне об этом думать? Если что-то важное действительно произойдёт, я об этом узнаю; а читать это прямо сейчас в телеграм-канале — какой смысл?

[1:04:09] Я отписался — у меня, кстати, было немного, но было. А сейчас у меня ноль, абсолютный ноль телеграм-каналов, которые пишут какие-то новости. Поэтому я иногда узнаю о чём-то позже остальных, но мне это совершенно не мешает. Зато сколько пространства, сколько свободного места в моей голове появилось — ууу, ребята! И это сложно описать, потому что процесс довольно индивидуальный, но у меня появилось много: я начал много думать о подкасте, о каком-то творчестве, поменял биточек — начал делать что-то своё и думать свои мысли. Для меня это безумно важно, потому что я всё-таки такой автор — я что-то создаю. И если ты что-то создаёшь, то это пространство в голове просто безумно важно. Поэтому отказ от этих вещей пошёл мне максимально на пользу, и ни одного пока негативного опыта — когда я не узнал о каком-то тренде из Твиттера или о новости, которую прям надо знать, выходишь на улицу, а если не знаешь — будет плохо, — такого не было. Мне кажется, новости, которые действительно стоит знать, я узнаю на 100% без телеграм-каналов.

[1:05:26] Ну и, естественно, TikTok тоже не оправдал моих ожиданий: я тогда даже что-то пытался записывать, но понял, что это ещё хуже, чем Твиттер. Инстаграм — так как у меня там много друзей, подруг, одноклассников, однокурсников, — иногда интересно посмотреть, что они делают, но потом думаешь: а зачем, ну что я пропущу? В Инстаграм я тоже не захожу; захожу исключительно, когда мне жена кидает всякие смешные мемы, — вот подборку жены из рилсов я смотрю, раз-два в неделю. Такие у меня отношения с соцсетями. Единственное окно в интернет у меня — YouTube. Ну, не окно в интернет, а место, где я что-то могу посмотреть: есть несколько развлекательных каналов, которые я смотрю. Если хотите референс — это канал District 23 на YouTube: ребята слушают музыку, делятся треками, классно раскачиваются, мне прям очень нравится такой формат. Посмотрите, классный развлекательный контент. И в целом в YouTube есть что посмотреть, а главное — можно бороться с рекомендательной системой этой платформы: можно просто не следовать ей, а смотреть, что ты хочешь. Этим мне тоже нравится. Ну, наверное, это всё про социальные сети.

[1:06:50] Возвращаемся из виртуального мира обратно в физический — и сейчас поговорим про спорт. Позвольте мне познакомить вас с маленьким Сашей, или, как его называли на улице, Пахомом. Чтобы вы просто были в контексте, почему спорт для меня занимает большое место в жизни. Я был с детства очень активным ребёнком, прям на голове стоял — это всегда. Мама всегда говорила: «Саша, ты вот на голове стоишь». Всегда бегал, был активный, любил двигаться; папа всегда выставлял мне руку, как боксёрскую перчатку, и я отрабатывал на ней какие-то детские удары. Короче, была куча активности. Думаю, большинство детей такие, особенно мальчишки, — они вообще с ума сходят.

[1:07:33] Я ещё в детском саду начал — точнее, мама отдала меня в бассейн, где я лет в пять научился плавать и сам уже плавал, как тогда говорили, на глубине. И вот так я пришёл в школу. В школе начал заниматься русскими народными танцами — это там, где всякие трюки делают: коленку-малинку, присядку и так далее. Занимался я ими где-то лет десять. В одиннадцатом классе сфокусировался на экзаменах, на учёбе, и всё свободное время посещал репетиторов, готовился к ЕГЭ, — как оказалось, не зря. Ну а до десятого класса включительно танцы были моей основной деятельностью, раза три в неделю мы ездили с друзьями.

[1:08:17] Дальше, помимо танцев, я занимался плаванием — рядом с домом был бассейн, — и прозанимался им шесть лет, добрался до какого-то третьего взрослого разряда, не очень высоко, любил плавать на спине. Также параллельно плаванию и танцам я года два занимался дзюдо. Был даже момент, когда в один день — по-моему, это был вторник, если не ошибаюсь, — расписание накладывалось так, что у меня было сначала плавание, сразу после школы: я прям после школы бегом бежал в бассейн, только поесть дома успевал. После плавания в том же здании было дзюдо: я спускался из бассейна с мокрой головой, накидывал кимоно и присоединялся к дзюдошной разминке, чуть-чуть опаздывая. А после дзюдо шёл домой, скидывал все эти вещи, менял на танцевальные сапоги и ехал на танцы. То есть в какой-то момент у меня реально было три тренировки в день. И в таком режиме я существовал класса до шестого-седьмого.

[1:09:15] Когда пришлось выбирать, я бросил плавание — просто расписание наложилось, — выбрал танцы. А дальше были ещё какие-то секции, которые я сам выбирал: у нас на районе заниматься танцами — ну такое себе. Слава богу, конечно, не бальные, а то бы совсем было не очень. Но и в целом танцы — не самое лучшее занятие для пацана с Тракторного. Поэтому дзюдо я себе потом сам подобрал, рукопашным боем занимался год-два, тхэквондо пытался заниматься, футболом занимался, на хоккей какое-то время ходил, увлекался турниками — тогда была мода на турникменов, всякие трюки делали. То есть я постоянно был в спорте — это я всё к тому, что спорт и активность всегда были со мной.

[1:10:10] И потом, как раз в 11 классе, когда нужно было упорно учиться, а потом уже в университете, — переехал в замечательный город Воронеж, — спорт немножко пропал из жизни, я очень сильно занимался учёбой. И, работая уже лет пять, — то есть лет шесть моей жизни, с 11 класса, — спорта не было вообще. И вот как-то к 25 годам — даже к 24 — я понял, что прям хочется, не хватает, и начал заниматься футболом в Питере, играли с ребятами. Довольно интересно было, но спорт такой травмирующий. Потом, помотавшись и поняв, что спорт мне важен и нужен, сейчас я хожу просто в спортзал.

[1:10:56] Сейчас расскажу вам плюсы, которые лично для меня, лично для того Пахома, который был суперактивным в детстве, — как сейчас, в 27 лет, на меня влияет спорт. Естественно, это не профессиональный спорт, и профессиональную карьеру в спорте я не уверен, что вообще хочу и хотел когда-либо. Но активность — это, конечно, супер. Давайте расскажу, чем я сейчас занимаюсь. Спортзал у меня рядом с домом, поэтому примерно так: в понедельник силовая со штангой — просто свободная штанга, свободная работа в течение часа. Вторник, скорее всего, растяжка. Среда — часовое кардио и, возможно, кор: пресс, все мышцы кора. В четверг, скорее всего, кикбоксинг, занятие с тренером. В пятницу силовая плюс растяжка. В субботу, скорее всего, бассейн либо отдых. А в воскресенье опять кикбоксинг. То есть почти каждый день я стараюсь заниматься спортом, причём, как видите, не просто прогулка. Разве что растяжка — или йога, которая иногда её сменяет, — это лайтовое, а в остальном довольно серьёзный спорт.

[1:12:13] И что он мне даёт, помимо усталости и дикого желания спать? Во-первых, не болит спина, не болят мышцы головы. Вот в 23-м году, когда я просто очень-очень много работал и не занимался спортом, я замечал, что, когда долго засиживаюсь, у меня начинают болеть продольные мышцы спины и мышцы шеи. Это прям явный симптом, который ни с чем не спутаешь, — точно оно. В остальном вроде чувствовал себя нормально — ну ещё бы в 23-24 года чувствовать себя ненормально. Потом, когда я начал заниматься спортом, подключил его, я понял, что нервная система и в целом психика ощущают себя намного более стабильно, спокойно, когда в жизни присутствует спорт. Естественно, не в таких объёмах, как я сейчас назвал, но в целом когда хотя бы пару раз в неделю есть какой-то нормальный спорт — велосипед, долгий, или пробежка, — то голове сильно-сильно легче и проще.

[1:13:15] Я это, знаете, как для себя представляю — естественно, я не врач, не консультировался с врачом по этому поводу, просто так вижу. Есть мозг, в нём есть какие-то очень важные, активные процессы, и эти процессы оставляют продукты некоторой деятельности, какого-то распада. Они иногда загрязняют мозг и остаются в нём, и тогда новые мысли как будто не так эффективны, не так быстро, не так легко проскакивают. И вот чтобы дать голове просраться — для меня это спорт: я как будто беру кровь, раскачиваю каким-нибудь кардио, насильно, под давлением прогоняю её через голову и вымываю всякую хрень, весь шлак — просто промываю свои мозги. Это для меня такая аналогия, а не рекомендация — не надо промывать свои мозги ничем. Но я это так вижу. И после тренировки, особенно после кардио, я чувствую, что голова прочистилась, и могу сесть подумать над чем-то творческим — например, написать сценарий для подкаста. Просто потому, что до этого я работал, был весь там, и мне сложно было переключиться, а тут сходил на тренировку, переключился — и как будто новый рабочий день, можно чем-то другим позаниматься. Это первое — что голова работает. Хотя это уже второе, кстати: первое было, что спина перестала болеть.

[1:14:38] И третье, наверное, не очень очевидное — такую идею сложно запитчить человеку, которому хочешь продать идею похода в спортзал. Это то, что спорт тренирует волю и лишний раз напоминает тебе как человеку: чтобы чего-то достичь, надо не только что-то уметь, но и уметь чему-то научиться и быть готовым потратить на это какое-то время. Что я имею в виду? В спорте всё очень просто. Вот ты не поднимаешь штангу, например, 100 килограмм. Я, кстати, не поднимаю. И чтобы её поднять, тебе недостаточно одной тренировки, недостаточно пяти. Каким бы ты суперменом ни был и что бы ни употреблял, за две тренировки ты не дойдёшь до 100 килограмм. Ты понимаешь, что это всё-таки путь. И, пройдя этот путь, наблюдая, что ты всё ближе к этой штанге, и подняв её в конце, ты понимаешь, что можешь: не умея чего-то, не зная, не понимая, как это сделать, ты прикладываешь некоторые усилия и некоторое время.

[1:15:46] Вот это важно — понимание времени. Спорт, особенно если вы делаете какие-то достижения, очень чётко показывает, что в процессе важно не только желание, не только упорство или талант. Безумно ключевой момент, без которого ничего не будет работать, — это время. И когда ты понимаешь, что на протяжении некоторого времени, если будешь тренироваться, будешь дисциплинирован, будешь делать то-то, — то по истечении года-двух ты к этой сотке неизбежно придёшь. И когда формируется вот этот майндсет — что если хочешь чего-то добиться, ты подключаешь время, упорство, желание, волю, проходит время, и ты этого добиваешься, — то этот майндсет перекладывается на работу.

[1:16:28] Почему я сейчас в выпуске про эффективность программистов, про свою эффективность на работе, так долго рассказываю про спорт? Да просто потому, что это работает и на работе. Я перекладываю эту модель мышления на то, что если у тебя что-то на работе не получается, или ты хочешь поменять какой-то процесс, или запилить огромную фичу, или сделать свой продукт, — ты понимаешь, что тебе нужно много всего, но и время тоже. И тогда ты не расстраиваешься из-за вещей, которые сразу не получается сделать: сразу ты не можешь поднять 100 килограмм, но сделаешь это через год. Это отношение к вещам, которое формируется у меня лично в спорте, я перекладываю на работу. И в том числе поэтому я начал программировать на Rust по вечерам — просто потому, что понимаю: если наложу эту активность программирования на Rust на время, допустим, на год, то через год я буду совершенно другим программистом. Попрограммировав две недели на Rust и потом ничего не делая, ничего особо не поменяешь; но если я буду консистентно подходить к этому несколько раз в неделю в течение года, то через год будет результат.

[1:17:42] Абсолютно то же самое, например, с подкастингом: выпустив один выпуск, глобально ничего не произойдёт — я не стану подкастером, тем, кем я себя вижу. Но если я накладываю на это время, допустим, два года, регулярно буду выкладывать нормальные выпуски в течение двух лет, то через два года я уже буду другим. И таких примеров может быть огромное количество — наложение времени на деятельность. И на работе я это всегда делаю: есть какие-то большие фичи, надо что-то сделать такое, что думаешь — ну это невозможно просто сделать, особенно нашими силами, — просто забей. Ну давайте просто приложим к этому время, и будет немножко проще. В общем, думаю, вы уловили идею — это, мне кажется, основная идея вообще спорта. Помимо того что есть всякие прикольные бытовые штуки — становишься сильнее, ловчее, чувствуешь себя лучше, — но вот суть, соль и зерно всей этой деятельности, мне кажется, у меня получилось вам передать. А на этом, наверное, нужно уже заканчивать.

[1:18:45] В конце хотелось бы сказать: хоть этот выпуск и про полезные, правильные, здоровые практики, важно помнить, что мы не идеальны. И не всегда, не сразу, да и не всем эти практики нужны. А верите ли вы в что-нибудь такое, что никогда не меняется и является истинным? Чушь. Всё меняется каждый день. Утром человек честный, вечером жулик; вечером добрый, утром злой. У каждого человека свои плюсы и минусы, поэтому не надо создавать никакого фетиша, какого-то жупела. Всё нормально. Это был подкаст «Тысяча фичей». Спасибо, что дослушали до конца.

[1:19:28] — А что вы пожелаете человечеству? — Не скулить и всё воспринимать нормально, спокойно. Ждать худшего — и, когда это худшее не наступает, радоваться тому, что оно не наступило.