?

Log in

No account? Create an account
усы2

Стой под стрелой

Поступки и мысли, о которых могу вспомнить не краснея

Инженеры, хватит бегать от ответственности
усы2
tonsky

На круглом столе, посвященном Software Disenchantment, стало ясно, что мысль я выразил недостаточно четко. Люди переживали, что бизнесу нужно дешевле, а не лучше, что без говнокода не получится многообразия и развития, что юзерам в целом пофиг и они даже не замечают проблем, что если хорошо работать, популярным не стать, не успеешь, опоздаешь и так далее.

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

И хватит перекладывать ответственность. То, что Слак рушит любую концентрацию и подсаживает на дофамин — ответственность Слака как бизнеса (или успех, как посмотреть). То, что им все пользуются — ответственность юзеров. А вот то, что Слак тормозит — это уже наша проблема, нас, инженеров, и только нас, и именно нам должно быть за нее стыдно. На дофамин и популярность мы, как инженеры, не можем повлиять. На качество — можем и должны. Хватит уже прятаться за спину бизнеса. Он конечно будет топить за код-на-выброс, но у нас свои проблемы, свои решения и своя ответственность. То, что кто-то там нам разрешил писать хреново, не значит, что нужно всё бросить и радостно кинуться писать хреново. То, что мир просит говна — не оправдание производить говно.

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

Come on, разве у вас не скрипят зубы, когда ваше приложение тормозит? Разве у вас не загорается внутри жгучее желание закатать рукава, разобраться и починить в тот момент, когда кто-то находит багу? Те инженеры из Слака, которые слышат постоянно, что сообщения иногда в принципе не доходят, как они спят по ночам? Как они не бегут первым же делом организовывать расследование, комиссию, группу по исправлению? Это ведь не десятое по важности окошко на двадцать пятом экране, это основная функция и она в принципе не работает же.

Разве не хочется вам понять, разобраться, докопаться до правды, когда численные характеристики какие-то не сходятся с вашими прикидками на салфетке? Когда вы слышите, что Android система занимает 6 Гб и что там может быть такого? Как нагрузится канал, если в один Google Doc придет 100 пользователей? Вы вообще прикидываете, считаете вещи на салфетках? Мы перестали считать на салфетках... В 3Д играх, кстати, считают. 

Разве вас не коробит от несоразмерности проблем и решений? Когда для Todo-листа на 200 строк берут Electron на 100MB? Разве не хочется узнать, что мог бы делать ваш комп на пределе? Сколько нормально сделанных чатов он мог бы крутить одновременно в 8Гб оперативки? Мог бы он ресайзить текстовое окно на 60 Hz? 144? 240? Где вообще предел и во что всё в конце концов упрётся?

Разве у вас не растет тревога от непроверенного кода? От решенной частично проблемы? От проблемы, решенной в обход, приблизительно, а не точно? Не вгоняет ли вас техдолг в депрессию? Не выгораете ли вы от того, что все время бежите к новому вместо того, чтобы чинить старое? Добавляете и множите там, где нужно исправлять и делить?

Разве не хочется вам, в конце концов, доделать проект хорошо, до конца, так, чтобы полностью им удовлетвориться, сложить, запустить и уволиться? Откуда у вас силы держать всё это на искусственном дыхании вместо того, чтобы закончить, но так, чтобы оно жило, и отпустить?

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


Баранкин ⭕️, будь человеком!
усы2
tonsky

Поиграл я тут в Detroit. Become Human и как главный эксперт по роботам и голливуду имею сказать.

Фабула такая: в 2038 году люди делают человекоподобных роботов (андроидов) с очень неплохим ИИ и пользуются ими ну как рабами примерно (или домашней утварью): прислуга, игрушки, секс, солдаты, грязная работа, программисты на JS.

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

Трюк тут вот в чем. Главная проблематика: люди в игре не готовы видеть в андроидах больше, чем бытовую технику, и, соответственно, признать их право на самостоятельность и равенство. То есть не способны проявить эмпатию. Когда рядом с ними андроид, они ведут себя так, как будто видят что-то такое (в лучшем случае):

То есть смесь чего-то совсем инопланетного и ящика с запчастями.

Так вот, проблема: создателям-то надо было, чтобы вы искренне переживали именно за роботов. А играют в игру такие же «средниестатистические» люди, в том смысле, что у них точно так же работает и эмпатия, и эмоции, как и у людей, изображенных в игре. Поэтому для игрока андроиды выглядят вот так:

Ой, простите, вот так:

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

Ну и вот что получается: игра, которая как бы за признание права на самостоятельность чужого и непонятного, может работать только в образах знакомого и понятного. Когда андроиды у тебя выглядят как люди, да еще не какие попало, а очень здоровые, красивые, сильные, как на подбор; и ведут себя как лучшие из нас: волевые, решительные, добрые, щедрые, готовые на самопожертвование, героизм (да таких даже среди людей поискать); и переживают как люди (да что уж — глубже многих), и решения принимают как люди — тогда конечно, чего бы не встать на их сторону и не посопереживать. Таких-то легко полюбить. Попробовали бы вы полюбить вот этих:

Но даже это слишком красиво и человечно. Как насчет таких?

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

Ну или вот этого мужика, злого и избивающего домочадцев:

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

Я уж не говорю про принятие права на самостоятельность в этом мире, к примеру, роботов-пылесосов:...

Роботы-пылесосы объявляют, что они разумны, и требуют равных прав. М? Вот это была бы игра. Честная. Но никто бы не понял.

Особенно показательно, что как только в игре надо показать «плохих» военных, которые, о негодяи, не хотят дружить с андроидами, то их-то как раз тут же обезличивают и одевают как роботов! Как роботов, Карл!

Да, на картинке — живые военные, не андроиды

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

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


Роботы уже совсем как люди
усы2
tonsky

У современных серьезных фильмов про роботов (Бегущий 2049, Вестворлд) одна проблема — им, в общем, не очень интересно про роботов. Предполагаемое глубокое философское звучание — ах, робот, он почти как человек, и внешне не отличишь, и внутренее он все то же самое переживает — чем ближе к человеку, тем мельче. Потому что если робот во всех смыслах как человек, то какие тут могут быть философские вопросы? Значит и относиться к нему надо как к человеку, и проблемы у него будут такие же, как у человека. И получается — а зачем вообще были роботы? Какая разница, что там внутри, шестеренки или мясо? Зачем заваривать кашу?

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

То есть осознание смертности и бессилие перед ней, вполне понятная и серьезная проблема, вполне человеческая проблема, только здесь подчеркнутая в 100 раз ярче тем, что герою отведено не условно-достаточные 70-80 лет, а всего 4, и не «самой природой», а чьим-то умыслом. Еще раз: это в первую очередь интересно, потому что это наша проблема, человеческая, просто ярко и красиво рассказанная с фантастическим допущением для ясности. Они даже на главную роль взяли молодого Рутгера Хауэра, человека с дикой животной энергией и харизмой.

А что в сиквеле? Роботы могут иметь детей. Вау! Вау? То есть они не просто как люди, а совсем-совсем как люди. И это значит... Это значит... Короче, тут я теряюсь, потому что это ну ничего не значит.

То, что они как люди, не может быть содержанием. Ну как люди они, и что дальше-то? Это может быть, допустим, предпосылкой, но тогда за ней должно начинаться собственно содержание. А его нет. Все долгие медленные «философские» планы бьют мимо, потому что они не накладываются ни на какую тему, нет проблематики. Тебе не о чем думать в это время. В итоге из ребенка делают макгаффин, большую часть фильма гоняются за спермой Харрисона Форда, через долгие 2,5 часа всё заканчивается и вся беготня выветривается из головы. На философское откровение не тянет, Вильнев тоже не тот человек, которому развлекательное кино хорошо дается, в итоге в вечности фильм явно не останется.

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

Присутствуют ли эти проблемы вокруг нас? Безусловно. Но введение роботов позволяет показать такое количество внутренней темноты у людей, которому в обычной жизни трудно придумать повода проявиться. Роботы тут просто антураж примерно с той же функцией, что и динозавры в Парке Юрского периода. Вы же не переживали о чувствах Тирекса в момент разгрызания машины?

Нолан же в сериале всё перевернул и теперь это история о том, как роботов доводят до ручки противные гости и жестокие эксплуататоры. Мол, должны ли они взбунтоваться? Что они чувствуют? Да то же самое, что и человек чувствовал бы, по вашим же правилам игры. Должны ли мы относиться к ним как к личностям? Ну если вы так придумали, что они полноценные личности, я не вижу, какие тут могут быть варианты ответа. Конечно же да!

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

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


Переосмысляем профессию
усы2
tonsky

Ну что же. Сразу после знаменитого поста я поехал на корпоратив/конференцию Таргетпроцесса. Идеальный способ распрощаться с работой: предполагалось три дня на природе, вдали от техники и интернета, так что я прямо у них в офисе захватил книгу «Дзен и искусство ухода за мотоциклом» (сорри, как-нибудь верну). И что же там пишут?

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

К делу. По этой классификации программирование — классическое классическое восприятие (да, два раза слово классическое, нет, это не ошибка). Без вопросов. Оно только и исключительно про то, как работают вещи. Без ощущений, без «зачем», без роли в жизни. Болты и гайки.

Я пошел учиться на программиста в 2001, начал возиться с компьютерами году чуть ли не в 1995-м, наверное. Работал программистом ever since. Это где-то 13-14 лет non-stop. Казалось бы, какие уж тут вопросы. Однако! Где-то в районе 2007-2008 я четко помню, как потерял интерес и увлекся юзабилити (то, что сейчас UI/UX). Разобрался (сам), прочитал все главные книжки, даже поработал немножко за деньги юзабилистом. Подсел на регулярные советы Горбунова. Потом вроде как интерес к программированию вернулся, особенно когда начало что-то получаться, но юзабилити и дизайн так и шли фоном.

И идут до сих пор. Например, я рисую логотипы всем своим проектам.

один из любимых

Я сделал собственный дизайн своему ЖЖ, потом tonsky.me. Все слайды для презентация я делаю сам. У меня куплены Sketch, Pixelmator, iPad Pro с пенсилом + ProCreate специально для рисунков. В свое время я довольно много времени провел в Final Cut. Это ли стек программиста? В нескольких докладах я рисовал миллион ручных иллюстраций.

уже классика

Я делал собственные цветовые схемы для LightTable, а потом для VS Code.

Про любую диаграмму, даже самую служебную, чтобы что-то объяснить, меня обязательно спрашивают: какой тулзой я её нарисовал? Никакой. Все ручная работа.

да, даже про эту

Добавилась типографика. Я шрифт сделал, блин! У меня есть посты про «читабельную Clojure», где я рекомендую, как сортировать импорты и сколько пробелов ставить после функции. Еще один пост про мою личную систему выравнивания кода пока в заметках.

любой нормальный программист, если он вообще заметит в чем тут разница, покрутит пальцем у виска

Видите, да? То, как программирование выглядит мне не менее важно чем то, что там написано. Нет, это не каприз. Это и правда глубоко меня волнует, без дураков. Я сижу на Маке не потому, что ноутбук хороший, а потому что не могу физически смотреть на шрифты в Линуксе и их несостыкованные панельки, съехавшие панельки и прочие мелочи. Мелочи становятся самым главным (вот пик моего брюзжания, например).

Кроме «как», меня волнуют еще и вопросы «кому» и «зачем». Весь мой ЖЖ, в активную профессиональную фазу, он весь про «программисты! Остановитесь и посмотрите, что ж вы делаете-то!»

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

В общем-то к остальным вещам из жизни у меня отношение тоже сугубо романтическое: машина/телефоны/кинотеатр/приставки/сантехника/мебель. Я люблю хорошие, продуманные вещи, но внутрь лазить не хочется, хочется, чтобы кто-то пришел и сделал. А если что-то не работает, я бешусь и фрустрирую — ровно как барабанщик Джон в книжке. Главное, я даже книжу-то совершенно случайно захватил. Я и понятия не имел, что найду внутри. Что внутри мне всё объяснят про меня же. Совпадение так совпадение.

Что же получается? Мама, я занимаюсь не тем? Может я дизайнер, мама?


История одной депрессии
усы2
tonsky

Долгий и подробный рассказ о том, как я заебался.

Last known good state это 2012, когда я попал в Эхо и переехал в Ульяновск. Работа перла, компания замечательная, люди чудесные. Ни до, ни после этого я не работал в коллективе, жизнь и достижения которого мне хотелось разделять. Всегда были «есть я, а есть компания», тут же я искреннее переживал и старался. Feels good, by the way. История зафиксирована тут.

В 2013 я переехал обратно в Новосибирск и открыл новосибирский офис. Команда набралась быстро (8 человек за год? Какие-то такие цифры), мне выделили свой проект, новосибирскую команду и дали попробовать Clojure. Опять же, сплошная пруха, развитие страшное, новые роли/задачи/подходы, выход из зоны комфорта и все такое.

Кусок команды в декабре 2013

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

Но стало как-то грустненько. Опять же, если память меня не подводит, я позже связал это с тем, что мне не хватало времени тупо программировать, а больше 50% времени занимало согласование/обсуждения/дизайн (без кодинга)/ревью, плюс ПМ-ские обязанности. Команда и продукт росли, а я это обслуживал и не успевал сам кодить. Я смотрел на код и мечтал о том, как его написал бы я сам. Я и сейчас не уверен в точности этого вывода, но я помню, что тогда мысль была такая.

Когда пошла рутина, я решил что надо как-то развлекать себя, и что вы думаете, компания пошла навстречу! Были хакатоны (ох, как я люблю хакатоны!), мы выпросили 20% время. Мы решили, что в 20% будем делать новый микропроект (метрики и алерты), на который позже переедет вся компания. Чисто наша команда, никаких согласований ни с кем, никаких гарантий (пока не запустимся), чисто в кайф. Но я довольно бысто понял, что это просто «еще одна работа»™, и хотя идея мне нравилась, по факту по пятницам я просто растекался по стене и максимум мычал что-то невнятное. По крайней мере я свои ощущения так запомнил. Отдыха не получилось, но ребята что-то делали, кажется.

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

Я совершенно потерялся в этой ситуации и в итоге вылетел. Это единственный раз в жизни, когда даже внешним людям стало понятно, насколько плохо я не совпал с ситуацией. Например, говорят, я настолько плохо (безразлично? пессимистично?) выглядел на общем собрании с начальством, что за меня потом пришлось отдельно извиняться. Извиняться, Карл! За то что разработчик сидит чем-то недовольный.

Ну и в конце концов меня попросили. По-доброму, на самом деле — мне правда было тяжело всё это наблюдать, let alone участвовать, и от самовыпиливания меня останавливал только страх жизни без зарплаты. Это накладывалось на то, что последние N месяцев в Эхо с з/п было туго. Штош. Спасибо, что приняли это решение за меня, оно правильное, смысла в таком симбиозе не было, конечно, а сам бы я еще какое-то время решался.

В том же 2014 — и для нашего повествования это важно — я совершенно фантастически слетал в Калифорнию к Machine Zone в командировку. Видимо, всё именно сложилось — и место, и друзья, и пофигистичное отношение к работе — что получились больше каникулы, чем командировка, и каникулы очень удачно наложилась на предыдущие стрессовые полгода-год с распадом Эхо и сменой работы. Наша группа (6 человек) поделилась на 2 машины — активную и пассивную. В активной у нас была нон-стоп программа, все две недели каждый день мы куда-то в интересное место ходили (ездили, это ж америка), а на работе в основном сидели в ожидании файв-о-клок. До сих пор вспоминаю это как невероятный отдых (честно, бывает лежу ночью и прокручиваю, что было, куда ходили, что чувствовал), спасибо друзьям из активной машины (Антон, Ренат!) и всем нашим калифорнийским друзьям, которые пробили поездку (Лев, Влад!).

Это я только прилетел из Сан-Франциски, июль 2014

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

Конец 2014—начало 2015 стало периодом, когда я нервничал из-за того, что работа всё не находилась (я хотел именно на Clojure), но в остальном довольно продуктивно посидел дома. Я запилил прям подряд Fira Code, затем Rum и AnyBar, все довольно удачно зашли (и заходят до сих пор). DataScript пришелся на полгода раньше, на период маянья в Machine Zone. Меня узнали в Clojure-сообществе, я даже съездил выступить на паре профильных конференций (с тех пор зовут в основном на фронтенд почему-то). Тогда же был расцвет англоязычного блога. Для сравнения, три следующих года я буквально едва выдавливал из себя посты.

Декабрь 2014, каникулы в Лондоне. Помню плохо, но судя по фото, состояние окей

В марте 2015 работа наконец-то нашлась в ЮАР (через open source, ни много ни мало). И опять же это была работа мечты (ну, на бумаге). Мне дали собственный проект с нуля, дали принимать все решения и использовать собственные DataScript и Rum, которые я благодаря этому неслабо расширил. Сроки тоже не горели — никто особо не стоял с палкой над головой и не заставлял принимать компромиссные решения и копить долг (хотя, долг копится в любом случае). Короче, спокойная, продуктивная, rewarding работа.

Тут произошли две вещи. Во-первых, я начал работать из дома, т.е. сидел один. Это довольно неприятный опыт, особенно в новой команде, в смысле изоляции, сложностей с коммуникацией (привет, Скайп!) и нехватки просто людей вокруг. Классно, конечно, что никто не отвлекает и получается deep work когда нужно. Но когда я приезжал на две недели в Кейптаун, я понимал, как мне не хватало живого общения. Возможно, люди, которые боготворят remote, умеют как-то это компенсировать, регулярными встречами с друзьями наверное. Я не умею и друзей у меня — таких, чтобы прям раз в неделю даже — особо нет. Плюс хочется тупо иногда куда-то ходить, хотя бы в офис. А отвлекать и по слаку отвлекают дико, на неделю же от него не отключишься. Может быть первый год из дома я так и не думал, кстати. Сейчас уже думаю (4 года).

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

Через полгода понимаешь, что нифига не сделал, скопил огромный инбокс, но по факту к снаряду вообще не подходил. Иногда срываешься, тратишь полдня и разгребаешь два-три ишью. Релизишь, но счастья это не приносит, потому что два-три ты пофиксил, а три других проекта так и лежат, и там по 150 ишью в каждом, и ты понимаешь, что ни в каком темпе, ни при каких обстоятельствах ты до них не дойдешь. Через год дропаешь весь инбокс, потому что ну да, хотелось бы, но всё равно не делаешь нифига ведь. И всё равно страдаешь.

Август 2015, рассказываю про DataScript. Доклад назывался «Фронтенд без грусти», кстати

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

Важный момент — если бы мотивация и силы были (почему-то), то отношение могло бы быть другим (смотрите, сколько хороших и добрых людей я собрал у своего костра и как здорово мы проводим время! — например, я не знаю). Your experience may vary. У меня это постоянная битва за очень ограниченый ресурс, мою энергию, которого всегда не хватает, даже просто на get through the day. Поэтому я и огрызаюсь и в целом слабо рад тому, во что эта затея с «классными и крутыми личными проектами» превратилось для меня лично. Хоть сами проекты и получились.

Мой проект в Cognician кстати успешно запустился еще в конце 2015 и перешел в фазу развития. Через год я слетал в ЮАР и познакомился с командой лично (makes a huge difference!). Это была тоже в общем-то офигенная поездка (привет, Кирилл!), даром что Кейптаун это та же Калифорния — жара, природа, океан, серфинг, вино — только без стартаперов.

Я в марте 2016 залез на Lion’s head

Про эмоциональное состояние в 2016 я помню только, что мне приходилось немножечко изображать энтузиазм, когда меня спрашивали коллеги, как мне работается (а спрашивали, да). Потому что я честно не знал, на что жаловаться, но энтузиазма уже не чуствовал. В какой-то момент пришлось объяснять коллегам, что это особенность русского характера — всё слегка поругать и ни за что не похвалить. Но это больше по разряду отмазок проходило, потому что я точно знал, что это моя личная особенность, и даже в курсе её был. Ругать, критиковать, страдать от всего, что даже чуть-чуть не дотягивает до идеала. В том числе и собственную работу. Некоторые вещи и идеи меня действительно восхищают, но это как правило мирового класса проекты, например, и то далеко не все. По поводу всего остального мне очень трудно возбуждаться. Я как-то давно обидел Платова, например, назвав их супер-пупер IDE «просто редактором кода». I mean no harm, но и сделать что-то мне с этим трудно.

В разряд догадок: в долгосрочной перспективе это не очень-то здоровая модель. Ты питаешь себя только негативными эмоциями, даже когда хорошо и честно поработал, даже когда сделал больше, чем надо. Всё всегда недоделано.

На тот момент я ощущал, что работа работается, все довольны, а я лечу в какую-то пропасть. Начались перепады настроения. Иногда оно улетало на дно на несколько дней, как по мановению волшебной палочки. Такие «черные дни», когда ничего не радует от слова совсем, и ты едва волочишь ноги. Помню, как на встрече с друзьями я буквально выдавливал из себя слова. Это не литературный оборот, приходилось реально собрать все силы чтобы просто сидеть на стуле и выглядеть хотя бы в рамках приличий. Если задавали вопросы, приоктываешь рот и что-то произносишь, но ощущения, что тебя при этом проворачивают через мясорубку.

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

Шутки шутками, но от этой картинке мне уже не смешно

Где-то в это время, может чуть раньше, я перестал бояться летать на самолетах — но не потому что аэрофобия прошла, а потому что я просто очень сильно задолбался. Сидишь в кресле такой эмоционально выхолощенный и старшно там или не страшно трясет тебе совершенно пофиг — оно просто не может до тебя достучаться, блокировано где-то. Я помню контрольную точку, когда я еще летал в Ульяновск, меня каждый раз трясло до усрачки, а если самолет летел спокойно, то хотя бы перед полетом меня охватывала паника «блин, щас начнется, зачем я вообще сюда сел опять, never again». Сейчас такого уже нет, хотя — странно, да — было бы здорово что-то такое ощутить снова, «проснуться».

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

Сентябрь 2017. Огонька нет и в помине

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

Опять же, достоверно помню, что раньше гораздо менее существенное похудение меня гораздо больше воодушевляло. А тут я наконец смог сделать подъем переворотом — комплекс, травма даже психологическая со школы — и абсолютно ничего не почувствовал.

В конце 2017 я поставил на аватарку эту скептичную усталую лису с комментарием «exactly how I feel».

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

Мне стало трудно загонять себя за ноутбук. Буквально — от мысли что надо идти за стол передергивало. Рабочая комната стала воплощением зла, потом страдания, потом уныния (деваться-то некуда). Я работал по два-четыре часа в день. Были дни, когда я не мог собраться до самого вечера, и в итоге за день вообще ничего не делал. Это породило еще одну дурную петлю, когда я корил себя за то, что мало работаю, и в итоге сил работать не оставалось. Я бесился на коллег, мол, якобы нехорошо делают, и все неправильно, и мы не туда идем, и не так (ага, два года было так, а теперь вдруг не так). Я доводил себя до состояния, когда вся энергия уходила на самоконтроль и снова приходилось выдавливать слова, на этот раз с коллегами — уже не ок. Бесился на всё вокруг, на вечную неустроенность, недоделанность инструментов, библиотек, редакторов, языков, тормоза, сложность, неидеальность, на веб взъелся страшно — потому что где-то с перехода на фронт началось угасание. На самом деле просто совпало по времени, конечно. Надо мной даже начал смеяться Жиянов, что я много ною. Ну а что я мог сделать? Я был бы счастлив не ныть, так-то.

Большим сюрпризом стала для меня физическая природа стресса. То есть раньше я думал что стресс это такой эвфемизм для «выглядишь усталым, поспи», а тут оказалось что в больших количествах при постоянном применении может всё что угодно случиться. Я внезапно начинал неделями вставать в 7 утра, не особо-то отдохнувшим (а я сова), периодически сдавливало грудь (физически, да, не фигурально), портилось пищеварение, начинали сыпаться волосы, не говоря уж об общем фоне усталости и выхолощенности. И «просто не париться» и «перестать думать об этом» как-то внезапно оказалось недостаточно.

Черные дни стали иногда выливаться в твиттер, в остальном сугубо профессиональный (ха-ха, ладно, шучу, просто твиттер). Вот, например:

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

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

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

Примерно как я выгляжу сейчас (июль 2018). Ношу в рюкзаке лампу, а что делать

А потом я вернулся в Москву и очень четко ощутил, что не могу загнать себя за компьютер. Проблема никуда не делась. При малейших трудностях я начинаю беситься и психовать, расстраиваться и плакать (ну, фигурально) вместо того, чтобы засучивать рукава и копать. Речи о том, чтобы кого-то в чем-то убедить или даже переубедить, поболеть за какую-то идею вообще не идет. Я всё чаще готов махнуть рукой «а, решайте как-нибудь без меня, сами». 

Проработав 3 месяца, я взял отпуск на две недели. Это уже происходит прямо сейчас, он только что закончился. Вернувшись с Алтая, в воскресенье вечером я понял, что мысль о том, что завтра рабочий день, вызывает у меня отвращение. Я в целом приехал нормальный, но накануне выхода на работу просто скуксился в одно мгновение.

Ну и всё. Я решил пока не выходить. Взял неопределенный отпуск, никому ничего не должен. Денег мало, страшно, долго я не просижу, но посмотрим к чему это приведет.

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

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

Отдыхаю в Венеции, октябрь 2016. Это не стеб, мне правда трудно

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

Или отдых? Обычно устал — отдохнул (в пятницу-сб-вс или дольше, отпуск) — и с новыми силами в бой. Они типа копятся, т.е. есть какой-то запас. Для меня отпуск это просто еще одно место/состояние, в котором я не хочу находиться. Потому что там мне примерно как и вне отпуска, только с дополнительным давлением «отдыхай давай». И по выходу ничего не восстанавливается и не накапливается. Что с этим делать непонятно.

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

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


КПД веба
усы2
tonsky

Я тут выбрался на природу, а интернет тут только мобильный и только на букву Х (H, в смысле, ну прям не очень). И вот приспичило мне Ютуб-видосик посмотреть, где-то час в 720p.

Вы думаете что это было тяжело и больно? Как раз нет, средствами en.savefrom.net сам видеофайл, 600Mb в итоге скачался за интервал в пару-тройку часов. Мне норм, потому что я получил результат, примерно соответствующий физическим ограничениям и ситуации.

А вот что я не смог, так это открыть youtube.com на ноутбуке (через тот же мобильный интернет). То есть оно пыжилось очень сильно и долго, но максимум, что удалось увидеть — skeleton screen один раз (видимо, был закеширован где-то) и частичный лого в левом верхнем углу в другой раз с буквами «o» и «e» (серьезно, не знаю, как так, но вот так — реально только две буквы загрузились, и именно эти). При этом в network tab девтулов конечно много всякого происходило, что-то передавалось, запрашивалось, тянулось, ломалось, сервисворкеры че-то там шуршали, но результат — пустой экран, сколько не жди.

Ну как бы — а чего ты ожидал, без интернета-то? — но на самом деле чего я ожидал это веб-страницы с несколькими картинками. Просто подумайте — ну насколько сложно это должно быть, и насколько сложно это на самом деле сейчас? В вебе сегодня вообще общее место, каждый первый сайт жирный переросток, собранный из миллиона технологий, работающий только в предположении, что у тебя всё хорошо, тратящий на это в миллионы (106) больше ресурсов, и серверных, и сетевых, и клиентских, чем того требует задача, чем того требует получаемый результат вообще, и все делают вид, что это окей, потому что это поддерживает экономику видимо? Есть повод улучшать сети, покупать разработчикам новые мощные ноутбуки (в mbp mid 2018 можно воткнуть 32Гб RAM и запустить Atom и Slack одновременно!), переобучать их?

Я не разбираюсь, да мне и не очень интересны причины, но это всё чудовищное, просто ненормально гигантское несоответствие между задачами, средствами и результатом, делает меня грустным. Конечный пользователь, я, ничего не получает от того факта, что YouTube сделан на чем он там сделан — Polymer? Angular? — я получаю ту же самую простую веб-страничку с сеткой картинок и подписями-гиперлинками к ним. Еще раз: насколько это сложно? 1 HTML, 1 CSS? Я готов согласиться, что плеер, да, ему там требуется некое количество JS, все-таки нетривиальная задача, и какое-никакое кастомное взаимодействие, но всё остальное-то, боже мой? Зачем? Куда уходят эти тысячи человеко-лет, потраченные на достижение тривиального в общем-то результата непропорционально сложным и обходным путем? Ведь это всё зря, зря, мимо и низачем. Адское трение и чудовищный уход энергии в тепло вместо полезной работы. И тренд на то, чтобы делать хуже. Никто не заинтересован делать лучше. Когда это прекратится? (Никогда, я знаю, но отказываюсь в это верить)

https://twitter.com/cmuratori/status/1018985856843968512

Me: Everyone's web site is way slower than it should be.
Web: That's because they have to scale!
Me: But it seems like things still go down under load.
Web: ...
Me: Amazon runs AWS, and _their_ site didn't even stay up!
Web: Oooh look! Someone released a new JavaScript framework!



REPL
усы2
tonsky

Сегодня я буду проповедовать. Вы все живете неправильно. Вы живете без REPL-а, а надо с REPL-ом.

Как выглядит рабочий цикл программиста С++? Написал 2 строчки, отправил на компиляцию, поставил чайник, поговорил с коллегами, попил чай, и вот уже почти и скомпилялось. Поэтому программисты С++ очень общительные и у них много хобби (нет).

Дальше идут языки с номинальным REPL-ом. Таких много. Python, Ruby, даже Scala и Haskell даже вроде что-то “предлагают”. Ну это такой программный интерпретатор, где можно что-то потыкать палочкой, примеры какие-то позапускать. Продукт, идентичный натуральному — на бумаге есть, поиграться можно, но для работы всерьез никто не пользуется. Это важно — я сегодня НЕ о таких REPL-ах.

Ну и на вершине возвышаются ЛИСП-ы. Что такого особенного в ЛИСП REPL-е?

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

Во-вторых интеграция и inline eval. Вы в REPL-е сидите в терминале, а надо редактор к нему подключать. Исчезает переключение контекста. Исходник это одновременно такой блокнотик-черновик, в которым ты что-то пробуешь, смотришь результат, правишь по ситуации. Написал, проверил, уточнил какие-то моменты, посмотрел как работает, запросик в БД сделал, АПИ подергал-посмотрел, гипотезу проверил, скорость прикинул, контракт набросал. Цикл обратной связи нулевой практически. Потому что это не написал — отправил — дождался, это всё прямо в редакторе происходит, это часть редактирования текста. Только кроме текста у тебя есть доступ прям к рантайму проекта, прям там же.

inline eval выглядит как-то так

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

Цитата:

Live programming. The instant gratification of seeing your program run as you code it, with the tight REPL integration and everything being reified and having the ability to be redefined live. I find it more like jamming to an instrument, while Haskell gives me the feeling I’m composing on music sheets.

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

В-четвертых, если продолжить эти принципы на более длительные периоды времени, ты лепишь программу как бы на ходу. Т.е. запустил почти ни с чем, подключил REPL, что-то дописал, вычислил, вот уже и что-то умеет, потом еще что-то дописал, и так пока не будет готово, ни разу процесс не останавливая. Код и процесс это одно и то же. Выглядит как-то так (англ):

Теперь про подвох. Вы мне не поверите. И это нормально. Это ожидаемо. Вот почему:

Most programmers do not have an experience of what inline-eval is. They have nothing to compare it to. They have not used LISPs and SEXPs. You can describe inline eval and demonstrate it to them until you're blue in the face and they won't get it. It is not until a programmer actually experiences inline-eval as a programming tool that the light goes on.

Но это нормально, надо просто про это помнить. Т.е. моя задача максимум — не убедить вас, что REPL это круто, а убедить вас, что пока не попробуете, решить круто или нет нет способа. Когда подвернется возможность попробовать REPL, вспомните про bias и подойдите к этому хотя бы непредвзято, всё о чем я прошу. Ценность REPL трудно представить, не попробовав. Ну и если вы поигрались с номинальным REPL в какой-нибудь Scala или даже Ruby и не поняли, зачем это нужно, всё равно подождите, когда получится попробовать настоящую REPL-разработку. Я тоже не понимаю, зачем в Scala REPL.

Но всё-таки уточню: возможность REPL-разработки это не еще одна галочка в фич-листе. Это не nice to have. Не надо думать, что у Scala 38 таких фич, а у Clojure 27 таких, у всех примерно равный вес и REPL просто одна из них, но по совокупности мне нравятся те что у Scala. Баланс немножко не такой, скорее такой:

Причины, по которым я люблю язык Clojure:

1. REPL
2. REPL
3. REPL
4-99. REPL
100+. Все остальные причины (иммутабельность, ФП, структуры данных, etc)

REPL — это основной режим работы. Это способ писать программы качественно лучший, чем как вы пишете их сейчас. Быстрее, проще, приятнее, удобнее, лучшего качества. С REPL я бы и на Rust писал бы с удовольствием. И на С++ даже. Пофиг, что там за язык, любые языковые фичи меркнут с возможностью _так_ взаимодействовать с кодом и рантаймом.

Короче, REPL.



Утреннее занудство
усы2
tonsky

В твиттере попалась картинка https://twitter.com/mitt_nya_nym/status/1009350180766928896

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

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

Короче, плохая метафора подобна котенку с пуговицей. Всем доброго утра


Как писать
усы2
tonsky

О блоггинге, организации работы и отношению к этому всему.

Артемий Лебедев https://tema.livejournal.com/2774733.html:

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

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

Артемий Лебедев https://www.youtube.com/watch?v=2BieKJEFofs:

Мои маленькие посты, нечто среднее между длинной СМС-кой и коротким эссе, людям этот формат вполне понятен.

Jason Fried https://youtu.be/PKeJRmzUXYc?t=2312 (перепечатывал, так что не дословно):

I try to write all my blog posts within 15-20 minutes. Yes, I might spend couple of days, rewrite it 3-4 times. Might get 3% better. Doesn’t worth waiting couple of days, might decide not publish at all (get cold feet). Some stuff that comes out of it is not that good, but it doesn’t matter: everybody will forget about it tomorrow anyways. Try not to attach preciousness to these things. That more perfect version of yourself, it doesn’t exist. You wrote what you wrote, just publish and move along.

Kent Beck https://www.facebook.com/notes/kent-beck/publish-everything-pretty-much/1839078656124990/ (добавлено):

Publish pretty much everything you write because you can’t predict what is going to be popular. There is a lower bar for quality, but barring dishonesty and literally unreadable prose, everything else should go out somewhere.

Erik Spiekermann https://99u.adobe.com/articles/55323/erik-spiekermann-no-free-pitches

Work is gas. Work will fill any given volume. If you give me two hours, I will take two hours. If you give me 10 minutes, I will take 10 minutes. So if you give somebody two weeks to do a project, he’s going to start on day 12 and it will take him two days, but the two weeks will be filled because work expands like gas. Straightforward physics. That’s why I don’t believe in time sheets, because you always happen to have eight hours at the end of the day. You make up stuff.

@mdubakov: https://medium.com/@mdubakov/55-дедлайны-138e17aa762c

В основном дедлайны используют именно для этого. Это такой wishful thinking, что к указанной дате будет готово хоть что-то. Ну и работает, черт возьми. У меня по лонгридам дедлайн 24:00 каждый день. И что-то я публикую к этому времени. Не всегда хорошее, но хоть что-то.

Людвиг Быстроновский https://us9.campaign-archive.com/?u=4792a92d9a9a009fb843c130e&id=03db86f018&e=68e6483c9a

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

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

Маячила еще возможность обосраться перед читателями, но для того, чтобы она не пила мозг, достаточно было с самого начала в описании курса развязать себе руки: отменить вообще все обязательства.

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

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

Еще Людвиг (про дизайн, но и тексты тоже) https://us9.campaign-archive.com/?u=4792a92d9a9a009fb843c130e&id=31913ffac1&e=68e6483c9a

> проект одновременно и крутой, и слабый. Крутой, потому что получилось, слабый, потому что мог лучше.

Неа. Это принципиальный момент, зырь. Крутой потому что крутой. Но слабый - тоже потому что крутой.

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

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

От себя лично скажу, что я интуитивно нащупал те же выводы. С ЖЖ я загнал себя в угол, когда начал писать английский блог на tonsky.me. Стоящие мысли было жалко писать по-русски, а в английском блоге хотелось если писать, то каждый пост должен был быть самым лучшим: обстоятельным, хорошо написанным, аккуратно сверстанным, смешным, интересным, с картинками и интерактивчиком.

Когда это получалось, получалось здорово, спору нет. Но на длинной дистанции это оказался путь в никуда: девять постов в 2014, два в 2015, два в 2016, три в 2017. В середине 2017 я начал писать мега-пост, написал 11 тыщ знаков, не прошел даже половины материала и сдулся. Он так и лежит незаконченный до сих пор, правда я сделал из него доклад потом https://www.youtube.com/watch?v=ObHrsSrfJJk.

Соскучившись по блоггингу, в конце 2017 я запустил телеграм-канал t.me/whining. Туда я разрешил себе писать коротко и без всяких задних мыслей. Тут же захлестнула эйфория: писать снова легко и приятно, сомнения не гложут, контент создается. Главное, в конце концов, что у тебя есть что сказать, а не насколько хорошо и увлекательно это оформлено. Плюс короткий формат дает некоторую автоматическую защиту от занудства.

Потом пришел Рахим и мы сделали из этого grumpy.website, чудом дважды чуть его не запоров. Сначала я решил, что надо сделать собственный движок под всё это. Спас опыт: я разрешил себе делать блог максимально тупым и тяп-ляп, ну и немного интерес подстегивало то, что я сделал из этого телешоу https://www.youtube.com/playlist?list=PLdSfLyn35ej8por7aH-5wYvOyDTu-bPoH. Ну а потом мы решили перейти на английский, и это тоже ощутимо подорвало мотивацию, т.к. количество рускоязычных читателей начало снижаться (и снижается до сих пор, в телеграм-канале по крайней мере), а новые англоговорящие, они, ну, более обстоятельные и серьезные, что ли, не такие веселые. Но сейчас все уже привыкли и воспринимают английский как данность.

А спасли grumpy как проект удачные принципы: короткий формат постов, как в чате, без заголовков, без тем и без всей шелухи: комментов, тегов, ничего этого нет. Даже markdown мы до сих пор не поддерживаем. Разрешена ровно одна картинка в начале поста и несколько предложений, всё. Очень легко писать и очень легко читать, а значит регулярные пополнения, нет давящего груза ответственности, не надоедает и не выматывает. Ну и оформление соответствует: иконка за 5 минут, верстка за 10, дефолтный шрифт, квадратные юзерпики. Важны только буквы, остальное не важно. Это, если честно, дает ощущение удивительной легкости, правды, ну и свободы конечно.


Монады против исключений
усы2
tonsky

Я конечно не настоящий сварщик и про ФП мне Рабинович напел. Но я поработал в трех Clojure-командах и одной Erlang и видел, как люди пытаются для обработки ошибок слезть с исключений и перейти на Error монады (например, failjure, бывают и самописные, но принцип понятен). Считается, что исключения это такие грязь и пот для люмпенов, а монады из области чистых идей и разносят их на золотых подносах во дворцах.

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

А в производстве у нас что? Все спешат, тесты покрывают 25% случаев от силы, хорошо если хоть на какие-то failure cases тесты вообще есть, задачи и курс партии меняется еженедельно, коммуникация средняя, такая штука как коллективное внимание вообще можно сказать не существует (ну нельзя на каждый чих оповещать всех, ну нереалистично это). Задача производства ведь какая? Строить новое со скоростью большей, чем разваливается старое, чтобы выйти в конце в net positive. Подход быть внимательным, хоть я сам его и очень люблю и использую в домашних опен-сорс проектах, где всё разложено по полочкам и муха рядом чихнуть не может; такой подход ну не работает, нельзя на него полагаться от слова совсем.

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

Так что да, проблемы с исключениями я не вижу и очень их люблю даже.


Фронтендеры не на маках
усы2
tonsky

Сколько раз, и каждый удивляюсь, насколько люди легко заменяют мнения в интернете на свои собственные и начинают спорить уже с ними. Вот, например, твит:

miketansky: Фронтендеры не на маках с чувствами вкуса и хорошего дизайна — это редчайшее исключение. Хотите резко повысить вероятность найма хорошего фронтендера? Жестко и безжалостно дискриминируйте по этому признаку.

А вот реплаи:

flashader: Ни одна статусная (а тем более — зашкварная) вещь не заменит исполнителю мозг и умение думать.

Как будто кто-то с этим спорил. Утверждение было в обратную сторону — если умение уже есть, есть тенденция к переходу на маки.

Newesprod: столько дебилов видел на маках, которые пользуются им ради понтов и какого-то там вкуса, вообще ни разу не показатель. Надо быть деградантом, чтобы такое советовать

Опять развернули утверждение. Речь же не о том, что дебилы (что бы это ни значило) тоже могут купить мак. Речь о том, что Хорошие Фронтендеры (что бы это ни значило) переползают рано или поздно на мак.

orsinium: Я воспринял этот твит как «Для того, чтобы делать хороший UI, нужно пользоваться хорошим UI». И отметил, что UI в маке хорош, а UX — нет. А навыки в UX я считаю не менее важными для фронтендера и дизайнера.

Ну тут человек хотя бы признается, что прочитал что-то своё. Поставил вместо необходимого условия достаточное.

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

На эту тему у меня есть шикарный же пример. Сидел я как-то на докладе про какой-то кросс-мобильный фреймворк, из серии write once — run anywhere, и на одном из слайдов, продающих его, был график выручки компаний от приложения по количеству платформ. Грубо, компании, выпускающие приложение только на одной платформе, там, айос или андроид, зарабатывают условно $1000 в мес на нем. Компании, выпускающие на двух, зарабатывают допустим $2000. На три платформы (+windows phone) уже $5000. Ну и самый пик там что-то типа те, кто выпустили приложение аж на 11 платформ (хз, что это за платформы), гребут уже там, например, $500 000 — непропорционально больше, короче. Ну и показывалось это под таким соусом, типа, за этим вам и нужен наш фреймворк — выпустите под больше платформ, заработаете больше денег. Для презентации кросс-платформенного фреймворка очень удобный аргумент. На самом деле всё объясняется гораздо проще, конечно — если у вас есть приложение, зарабатывающее $500 000, у вас найдутся деньги, чтобы портировать его на 11 платформ. А если приложение херовое, то запускай хоть на 11 платформах, денег не соберешь. Вроде бы банальная мысль. График можно было прочитать и так, и так, а понять его правильно можно только через понимание механики, которая его формирует.


Генератор идей
усы2
tonsky

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


Надо поговорить о стримерах
усы2
tonsky

Я тут подсел на Сэра Троглодита (пусть псевдоним вас не пугает), который играет в Героев Меча и Магии 3. В общем-то играет неплохо, и к игре я не равнодушен, но подсел я в первую очередь на харизму, потом на скилл и нехилый такой саспенс (см. https://www.youtube.com/watch?v=DN1fc_Jb3es), а потом обнаружился гораздо более интересный эффект.

Герои вообще игра стратегическая, и если ты играешь хорошо, то она очень быстро превращается в очень условное соревнование столбиков чисел: 100 скелетов лучше, чем 5 вампиров, потому что хитпоинтов больше, но есть еще атака/защита/особые свойства, так что всё не так однозначно™ — но всё еще это набор чисел, которые всего лишь комплексно и ситуативно сравниваются. Соответственно скилл в игре — умение оценивать и максимизировать эти числа. Тактика, стратегия, экономика. И очень легко найти стримы занудных достаточно папок, которые и играют получше, и объясняют по-подробнее, но для них это передвижение шахмат по доске, а из чего там сделаны фигуры и доска — без разницы.

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

И так далее. Конечно, и утилитарность, и столбики цифр, и стратегия — это всё тоже есть, механика самой игры совершенно обычная, просто фигуры имеют значение. За этот счет пространство мира как бы расширяется, ты получаешь возможность посмотреть на него вглубь и при небольшом усилии действительно можно представить, что было вот такое вот королевство, ему тысячи лет, жизнь в нем так вот причудливо сложилась, территории поделили, замков понастроили, расы такие вот корявенькие, одни в лесах, другие в горах, третьи под землей, кое-как уживались, армии набирали из кого придется, конфликтовали, притирались и вот сейчас в нем происходят такие вот бои между доблестными (и нонсенсными по составу) армиями во главе с выдающимися полководцами, иногда живыми, а иногда и не очень. А то что вы видите на экране — это такая очень условная реконструкция этих событий, что ли. Ну правда, когда вы видите в одном войске условных церберов, мошек из болота и скелетов с луками (а Герои в этом смысле — идеальный генератор таких вот ситуаций), неужели вам не хочется узнать предысторию??? И что они друг о друге думают, стоя плечом к плечу против, например, пегасов и ходячих деревьев?

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


Повышенное чувство собственности
усы2
tonsky

Бывает, что в интернете кто-то слегка неправ, в какой-то детали, и тогда поправить их будет обычным занудством (90% моих постов, ха-ха), а бывает, чтоб вот совсем прям мимо и непонятно даже, о ком речь.

Возможно, вы видели уже эту мысль в каком-нибудь статусе вконтакте или еще в каком солидном источнике:

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

Ну вот прямо сейчас я смотрю на шкаф из икеи. Собранный моими руками. Никаких особенных чувств не испытываю. Шкаф как шкаф. Внутри вещи. Блин, кем надо быть вообще, чтобы испытывать чувства, даже пусть чувство повышенной собственности, к шкафу? Гордость владение икеевским шкафом? Серьезно? Совершенно утилитарная штука.

То есть я испытываю чувство повышенной гордости к тому, что вещи не лежат на полу, но и только. Это было бы неудобно. И у меня есть какие-то приятные воспоминания о процессе сборки, особенно если я собирал не один, но к получившейся вещи они особенно отношения не имеют. В принципе, более-менее пофиг, что получилось в итоге. Главное, что время весело провели. А, ну еще чувство стыда за то, что заднюю стенку сломал в одном месте, хоть и приколотил вроде так, что не видно, но я-то знаю, что оно там!

Ну ладно, шкаф действительно смешно. Но вот «домашний кинотеатр». Тоже собирал сам, выбирал проектор, колонку, искал, покупал, соединял, прокладывал. Казалось бы, опять должен испытать гордость владения. Однако всё, что я испытываю, это «клевый фильм, ладно, пора спать» (ну или, что чаще бывает, «блин, что за говно мы посмотрели, как теперь это забыть?»). Как-то не думается о «блин, на каком классном экране мы это смотрим, как я горд, что всё сам собрал». Ты ж покупаешь всё это, чтобы потом забыть и не думать. Если я обо всей этой затее и вспоминаю, это скорее «так, чё всё так хреново стыкуется, куда колонку поставить, тут шнур торчит, ладно, стулом прижмем, че так хреново слышно, почему блютус не работает, неужели что-то еще надо докупать, блин вообще не то купил, почему два пульта теперь, зачем мне два пульта» и как я мучался всё это выбирая и «never again». Гордость владения? Работало бы.

Окей, там еще и программное обеспечение упомянули. Ха-ха, яжпрограммист. Вот есть у меня программа, написанная лично мной для моих нужд, AnyBar называется. Пользуюсь, полезно, удобно. Какие я по этому поводу чувства испытываю? «Ох, че ж сил нету никак это барахло доделать, ладно, потерплю, перебьюсь» и так все 3 года. Короче, опять не про меня, хотя вот какие-то люди думают, что если они сообразили, как запустить готовый билд-скрипт на готовых исходниках, то это чуть ли равно тому что они сами всё с нуля написали. Крафтовый софт получается, ручной выделки. Целый линукс дистрибутив придумали, чтобы таких людей в одном месте собрать.

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

Тот самый шкаф

без темы
усы2
tonsky

А вот и инструкция, как замапить CapsLock+IJKL на стрелки и наслаждаться управлением курсором с home row в любом приложении http://tonsky.me/blog/cursor-keys/


Не Vim-ом единым
усы2
tonsky

Появился повод высказаться по поводу Vim, а я давно собирался. Мнение такое, что он, крутой для своего времени, сегодня просто морально устарел.

Disclaimer: я просидел исключительно на Vim около года, активно программировал, так что это не рассуждения в вакууме. Я был в этой шкуре, знаю о чем речь на собственном опыте. Тем не менее, я без особых сожалений (и потерь, как я считаю) сменил Vim на более современные редакторы.

Итак.

Для начала давайте оспорим тезис, что набор текста — редкая операция. По моим оценкам, набор и трансформации делятся скорее как 50%/50%, т.е. набор далеко не редкая операция. Грубо, каждому переносу соответствует редактирование (т.к. код редко когда переносим без изменений), а каждому удалению — вставка (статистически, по GitHub, обычно графики вставок/удалений очень симметричные). Т.е. бегать между режимами приходится достаточно часто, чтобы записать необходимость их переключения в некую дополнительную ненулевую «нагрузку».

Далее, главное продающее свойство Vim это его «язык» трансформаций и манипуляций, настолько развесистый, что ему отдана основная клавиатура, а вводу текста — дополнительная, включаемая по кнопке.

Так вот, не хочу никого расстраивать, но система команд получилась такой не из-за какого-то великого инсайта, а просто потому, что у автора был тормозной модем и он «хотел печатать быстрее, чем обновлялся экран». Ну, представили ситуацию, да? Набрал «выделить текст, от кавычки до кавычки, заменить, ввести „абырвалг“, выйти», послал голубиной почтой и пошел пить кофе. Более того, даже в момент создания подход Vim не имел смысла для локального редактирования, где задержки нет. 

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

Мгновенная обратная связь не менее важна. Увидеть синий прямоугольник выделения перед тем, как ввести операцию — очень важно для человека, сокращает количество ошибок, дает возможность их корректировки, повышает уверенность. В Vim тебе не остается ничего, кроме как надеяться, что та шестисимвольная комбинация команд, которую ты ввел, сделает ровно то, что ты хотел.

Еще раз. Vim намеренно не использует однозначно удобные и полезные методы визуальной коммуникации только потому, что их было нереально использовать через очень медленный модем на 300 бод. Это единственная причина. Количество причин, почему современные люди должны так же себя ограничивать — ноль. Такую цену имеет смысл платить, если альтернатива — потратить полминуты на непосредственное выделение текста (помните тормозной модем?), но это давно уже не проблема. Это же практически шахматы по переписке. Зачем себя мучать?

It was really hard to do because you've got to remember that I was trying to make it usable over a 300 baud modem. That's also the reason you have all these funny commands. It just barely worked to use a screen editor over a modem. It was just barely fast enough. A 1200 baud modem was an upgrade. 1200 baud now is pretty slow.

9600 baud is faster than you can read. 1200 baud is way slower. So the editor was optimized so that you could edit and feel productive when it was painting slower than you could think. Now that computers are so much faster than you can think, nobody understands this anymore.

The people doing Emacs were sitting in labs at MIT with what were essentially fibre-channel links to the host, in contemporary terms. They were working on a PDP-10, which was a huge machine by comparison, with infinitely fast screens.

So they could have funny commands with the screen shimmering and all that, and meanwhile, I'm sitting at home in sort of World War II surplus housing at Berkeley with a modem and a terminal that can just barely get the cursor off the bottom line.

It was a world that is now extinct. People don't know that vi was written for a world that doesn't exist anymore.

Но зато в Vim удобные «шорткаты» (команды, окей) и их много! Да, но в современных редакторах их не то чтобы сильно меньше. Даже стандартные системные (!) справляются с перемещением текста весьма неплохо (Cmd+←→ == начало/конец строки, Alt+←→ == прыгать по слову, Cmd+↑↓ начало/конец документа, Alt+↑↓ вверх/вниз на страницу). Окей, на Винде чуть похуже.

Плюс команды в Vim всё-таки немного более избыточны, чем хотелось бы. Проще жить, когда один инструмент решает две-три задачи (даже так: работает в двух-трех разных ситуациях), чем когда у тебя на каждый специальный случай отдельная кнопка. Вот например специальная команда для вставки в конец строки («a»), это что вообще? В обычных редакторах туда можно просто поставить курсор, а тут отдельная «команда». Или «r» (заменить одну букву и выйти), тогда как в обычном мире просто Backspace (кнопка «забой» :), которая и удаляет, и заменяет, если на месте удаленного набрать новую букву.

Ну и самая большая цена, которую вы платите сегодня, пожалуй, это то что подход Vim не совместим ни с чем вообще. Vim работает только в Vim, поэтому во всех остальных местах вы будете постоянно чертыхаться, пытаясь нажать «i», «Esc» и ходить по тексту через «hjkl». Везде: в браузере, в календаре, документах, эверноте, чатах, спотлайте, везде ваши так долго тренировавшиеся привычки идут лесом.

Здесь еще я мог бы пожаловаться на архаичность и несовместимость Vim с современным миром. У него, например, два буфера обмена ¯\_(ツ)_/¯ и оба внутренние. Ни один из них не попадет в ваш системный, т.е. скопировать текст внутри Vim и вставить его еще куда-то не получится. Он не умеет различать вставку текста и набор, поэтому если вы скопировали какой-то кусок кода (скажем, со StackOverflow) и вставляете, он его будет набирать посимвольно, что медленно, смешно и хреначит все отступы к чертям. Да, только из-за этого есть специальный режим «paste mode» и да, его-то как раз легко забыть включить/выключить. Часть этих «особенностей» пофикшена в графических клонах, скорее всего, но все равно, знакомство с ними было забавным и это тот случай, когда «через свежую покраску все равно проглядывали признаки старого, очень старого материала».

Ну и немного про достижения Vim. Хочу еще раз заметить, что Vim такой, какой есть, потому что так получилось. За ним не стояло какого-то гранд дизайна или проверенных научных моделей, система команд не то чтобы какая-то особенно логичная или удобная. Он ни подо что не оптимизировался, кроме модема и клавиатуры автора, у которой Esc был на месте Tab, а физических стрелок не было, зато уже были картинки стрелок на «hjkl»). Да-да, именно поэтому всем поголовно вимерам приходится маппить Esc на Caps Lock.

Зацените кнопку «рубля», кстати

Так вот. Первое великое (и случайное) достижение: стрелки на home row. Действительно, тянуть руку в правый нижний угол очень далеко, а перемещение по тексту очень частая операция. Процентов 50% успеха Vim я отдаю тому, что люди просто осознают всю идиотскость расположения стрелок в правом нижнем углу на клавиатурах, а Vim — наиболее доступный способ эту проблему хотя бы частично решить.

Но это откровение никак особо Vim не принадлежит и в идеале неплохо бы сделать его отчуждаемым. Стрелки не становятся вдруг удобнее, когда ты выходишь из Vim и переходишь, скажем, в браузер. Я решаю это маппингом Caps Lock + IJKL (да, не HJKL) на стрелки. Очень удобно и главное: работает везде.

Вторые 50% успеха я отдаю высокому порогу входа. Тут надо объяснить. В устройстве человека есть такой баг (ну или фича): люди не начинают лучше владеть инструментами/навыками/привычками со временем просто так, сами по себе. После того, как они научились делать задачу как-то (неважно, как, лишь бы получался результат), они будут продолжать делать её именно так. Если не прикладывать осознанных усилий, через год пользования Idea, например, ты будешь пользоваться ей так же, как через первую неделю. Горячие кнопки сами себя не разучат, удобные фичи не найдутся. Нужно тренировать себя, читать обучающие материалы, смотреть, как пользуются другие.

В примере с Idea ты вроде как более-менее понимаешь, как редактировать текст (так же, как и везде), поэтому естественного толчка к самосовершенствованию не происходит. Ты продолжаешь редактировать, как умел.

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

Спорим, для условного «Ворда» вы никогда бы даже не подумали гуглить такую табличку?

Опять же, это совершенно случайный фактор (высокий порог входа) и даже почти что контринтуитивный, но я считаю, что он как раз и сыграл значительную роль в успехе Vim. Ну а дальше, когда все частые ситуации разучены, начинается такое же плато, плюс включается Стокгольмский синдром :)

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


Хром против веба
усы2
tonsky

Новый пост: http://tonsky.me/blog/chrome-intervention/


Сколько пользы от программиста?
усы2
tonsky

В твиттере нарисовался тред про то, маппится ли работа программиста на прибыль компании. Естественно, прибежал сотрудник букинга с безаппеляционным утверждением, что если ты не померил свою прибыль, то пользы от тебя 0.

Меня такой взгляд на вещи всегда шокировал своей недальновидностью. Ну то есть есть миллион вещей, которые:

  1. нужно просто сделать, без них проект можно помножить на 0 (особенно это заметно на старте проекта),
  2. которые не приносят прибыль прямо сейчас, но если их не делать, угробят её когда-нибудь позже (ну тесты там, автоматизация, контроль качества),
  3. всякие репутационные штуки, которые копятся медленно и не трансформируются в конверсию прямо щас (пресловутое качество, надежность, эмоции, поддержка),
  4. синергия, когда суммарно N фич больше чем каждая по-отдельности,
  5. эксперименты, которые вообще говоря в среднем скорее ухудшают прибыль и отнимают ресурсы.

При этом естественно программист работает над проектом не один, на рост прибыли влияют все и делают это в параллель. Как выделить роль отдельного человека? Стало лучше потому что я запилил фичу или потому что отдел продаж постарался (непонятно это в обе стороны — и для программиста, и для отдела продаж)? Или сезон сменился? Или просто тема по каким-то общемировым причинам скакнула в топ?

Сколько денег принес компании Google сотрудник, реализовавший функцию Crop в приложении Photos? Или вот у Apple вышел iPhone X. Сколько денег принес программист, запрогавший свойство safe-area-inset-top? Давайте предположим, что у вас есть на руках все данные, к которым есть доступ у самой верхушки Apple. Как бы вы это посчитали? То-то и оно.

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

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


Ворчание ягнят
усы2
tonsky

Завел блог на стороне, хе-хе http://grumpy.website. Там — про интерфейсы, тут  — про программирование (если полностью на английский http://tonsky.me не перейду, конечно).

Движок — кастомный на Clojure, написан в прямом эфире часов за 15.

Привет.


ЮАР туда и обратно
усы2
tonsky

Сб

Выгружаюсь из такси. В воздухе океан. Запах невкусный, но приятный. Три негра внимательно провожают взглядами. Лифт в доме — шкаф с дверью на улицу. Оказвается, они ждут диван.

Вс

Просыпаюсь в 7. Ревут чайки. На поляну перед домом садятся парашютисты. Роберт набирает меня видеозвонком, смотрим друг на друга минуту, сбрасываю. На скамейке перед океаном пахнет говном. Роберту мало рукопожатия и он тянется обниматься. Пугаюсь негритянки-альбиноса в кафе.


Пн

Просыпаюсь от рева чаек. Водитель считает, что Никита — женское имя. Торопит заводить детей. Обнимаю в офисе пять человек. Девушка с работы узнала на улице, сияю несколько минут. Лунное затмение закрыло луну на четверть. Бегаю смотреть пять раз.

Вт

Самый теплый день. Переспрашиваю водителя. Четыре раза. Из шнура идет черный дым. Руководство дарит ежедневник на пять лет. Солнце полностью опускается в океан за 2,5 минуты. Бомжи представляются по имени, прежде чем просить денег. Дом стоит между двумя отелями, церковью и виллой, но возвращаться в темноте тревожно. Встречаются поровну крысы и люди.


Ср

Фен включается в розетку только под кроватью. Чайник со свистком не свистит, но течет. Туман крадет гору целиком. Погода закончилась. В городе засуха. Просят не принимать душ больше двух минут. Горячая вода идет только через минуту. Интернет невозможно рвется. Ставлю порно качаться на ночь. Засыпаю у обогревателя, как у костра.


Чт

Встаю в 6:30. Закипает чай, просыпаются чайки. Водитель спрашивает столицу России. Гарри Поттер стоит и в детских книгах, и во взрослых. В кино у Бессона волшебный пролог. Океан штормит. Ночь. Останавливаюсь смотреть на толщу воды, страшно до усрачки. Ветер теребит жалюзи изнутри.

Пт

Мне не срочно. Хожу смотреть на волны. Дождь падает обратно в океан. Работа заканчивается раньше пробок. Когда некуда спешить, начинаются самые интересные разговоры. Первый белый таксист-расист. Угадываю ему ответ в викторине. Все повторяется по второму разу. Туман уже был. Волны уже видел. Та же пицца с тем же авокадо. Объективы приходят смотреть на закат. Волны на фото получаются маленькие и глупые. Темнеет, нападают мухи. Во второй раз.


Сб

Через балкон живут римляне. Обедаю у греков. Официантка спрашивает, что я сегодня делаю. Из вежливости, конечно. Покупаю шарф, иду смотреть на рыб. У крабов дискотека. Рыбы плавают обиженные.

Вс

Обедаю с голубями и стариками. Утки останавливают день. Продукты хранятся без холодильника.


Пн

Ужинаю в порту. Порт светится и пищит.

Вт

Толстый хомяк лезет на дерево. Пингвины пахнут.


Ср

Киты приплывают, когда их уже не ждут. Дасси не получают никакой рекламы. Пингвины живут в норах. 


Чт

Рука замерзает за минуту вне одеяла. Окна выходят на океан, но вид преграждает отель.


Пт

Закат размазали пальцем. Альпака чешет себе пузо.

Сб

У овец стоит рекламный баннер. Овцам рекламируют телешоу. Ем бургер из страуса.


Вт

Возращаюсь в Москву. «Почему стоите, не проходите?» Начинается пост-путешественная депрессия.