?

Log in

No account? Create an account

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

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

Категория: общество

pub mod fiasco
tonsky

Лучший язык, в котором правильно сделаны модули (ну или неймспейсы) — Кложа. Один файл === один неймспейс. Неймспейс может называться только так, как называется файл, и никак иначе. И лежать он должен тоже ровно по пути пакета. То есть (ns me.tonsky.hello) может и должен лежать в me/tonsky/hello.clj и нигде иначе. Сначала меня это почему-то напрягло — эй! свободу ограничивают! а как же самовыражение??? Это при том что в остальном Кложа — довольно либеральный язык и позволяет любую другую дичь творить спокойно и вообще говоря это чуть ли не единственное место, где абстракция «как организовать свой проект на файловой системе» протекла в язык, который, вообще говоря, весь такой интерпретируемый, динамичный, код может есть с руки и про файлы ничего не знает.

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

Тут-то судьба забросила меня в Балтийское море, на остров Котлин. У Котлина какой основополагающий принцип? Если где-то что-то запрещают, у нас разрешают! Все обиженные, обездоленные приходите к нам и творите что хотите. Этот же принцип применен и к файловой системе. В Джаве ведь как? Один файл == один класс. Какое расточительство! В Котлине один файл == сколько угодно классов, объектов, функций, констант и чего угодно еще. Более того, файл может объявлять объекты в пакете, в котором он даже не находится. То есть какой-нибудь src/main/kotlin/me/tonsky/hello.kt может спокойно объявлять package go.fuck.yourself; и никому за это ничего не будет!

Что же тут не так? Помимо самоочевидного бардака, становится довольно сложно понять, где что находится. Скажем, ищу я класс me.tonsky.Draggable. Смотрю в me/tonsky/ папку а там layout.kt, main.kt и scene.kt. Ну офигеть! Класс может быть в любом. То есть на самом деле это не один файл содержит множество объектов. Это один модуль размазан на несколько файлов с ничего не говорящими названиями. Разница тонкая, но существенная.

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

Все это, конечно стимулирует продажу IDE от одноименной компании, но почувствуйте разницу! Язык, разработанный на деньги IDE вендора, и язык, который при разработке не предполагал, что у вас вообще будет какой-то редактор (а судя по форматированию классов в clojure.lang писал его Рич в блокноте и пропорциональным шрифтом).

А потом вскрывается еще одна беда — разные файлы-то, получается, срут в общее пространство имен! То есть если ты в oops.kt написал val default = 1, то у тебя вдруг перестал работать wtf.kt про который ты даже не слышал, просто потому что он тоже определил val default = 0 когда-то а в алфавите W идет после O. Никакой изоляции. Не будешь же, в самом деле, по папке с одним файлом заводить на каждый класс. Сомнительное, короче, удобство.

А потом я пришел в Раст. Его систему с модулями я настолько не понял, что специально сейчас сидел перечитывал. Итак:

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

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

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

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

Видимо, по старой доброй C-традиции, в Расте сделали include вместо import. То есть когда ты говоришь use module, ты не просто создаешь некий синтаксический псевдоним, действующий исключительно до конца файла для разрешения имен. Нет, ты буквально добавляешь все что было в module в текущий файл. Не сослался, а скопировал и вставил себе. Это плохо, потому что вместо понятной модели «есть штука, она одна и существует там, где написана, плюс есть способы сослаться на штуку, псевдонимы, они могут быть любыми» мы получаем «одна и та же штука, размноженная N раз в N местах». А я еще удивлялся, почему одни и те же функции и из std::, и из core:: торчат. Вот почему!

Ну и на вишенку, модуль определяется не в том файле, где он написан, а в его родителе! Скажем, если вы сделали govno.rs, и написали в нем код, вы потом идете в lib.rs и в нем уже пишете mod govno;. Или, если хотите, определить его публично, pub mod govno;. То есть понимаете, да? Если вам интересно, торчит ли govno.rs наружу, вы не можете зайти в него и посмотреть. Вам нужно сообразить, кто его родитель, найти в этом родителе (в произвольном достаточно месте) надпись mod govno; и там узнать, есть ли префикс pub у него. Если вы хотите создать какой-то достаточно глубокий модуль, скажем, kak::zhe::vse::zaebalo, вам нужно пойти и создать всех промежуточных родителей и в каждом написать ровно по одной строчке:

lib.rs:
pub mod kak;

kak.rs:
pub mod zhe;

kak/zhe.rs:
pub mod vse;

kak/zhe/vse.rs:
pub mod zaebalo;

kak/zhe/vse/zaebalo.rs:
<your code here> 

В каком-то смысле это все следствие относительности имен и «удобства» их использования. В каком-то — следствие концепции вложенности. Этот пример прекрасно ее иллюстрирует: слишком много возни, слишком много вопросов, а в чем профит не ясно. Скажем, если модуль kak будет публичным, zhe — нет, vse — тоже нет, и наконец zaebalo — публичным. Смогу я его в конце концов заимпортить? Если нет, то в чем смысл pub в pub mod zaebalo;? Если да, то в чем смысл того, что промежуточные модули — приватные? И сколько файлов мне придется посетить, чтобы вычислить, доступен ли zaebalo для импорта?

Короче. Я не очень понимаю, как тут можно запутаться, но опыт показывает что путаются все и постоянно. Модули — плоские. Пути — абсолютные. Один файл === один модуль. Все, что надо знать про модуль, написано в нем самом. Будете делать свой язык — смотрите не объебитесь.



Депрессия год спустя
tonsky

Ровно год назад я написал «Историю одной депрессии». Самое время подвести итоги.

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

И что вы думаете? Он конечно поугарал над самостоятельно поставленными диагнозами в ЖЖ, но согласился что они не неправы — это депрессия. Нормальная, неиллюзорная, медицинская.

Как результат — таблетки. На выздоровление ушло шесть месяцев. Наверное мне повезло, что первые же таблетки подействовали, ну что ж. Я только рад.

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

Через три месяца деньги подошли к концу, я начал брать какие-то небольшие контракты. Работалось конечно с трудом. Особенно угнетал страх, что ты с кем-то договорился, пообещал, а организм подведет тебя и у тебя не будет сил работать. Короче худо-бедно я что-то сделал, хотя в фактическая работа была очень далеко от моего идеального представления о себе.

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

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

Что с интересом к программированию, то он так до конца и не вернулся. Весной я пытался искать работу, пособеседовался в несколько стартапов, в несколько больших компаний, и везде меня охватывало отвращение при одной мысли, что это опять все то же самое, опять это скучное унылое программирование, веб проекты, опять те же тормоза, глюки и люди, которым на это глубоко пофиг, лишь бы продукт вышел поскорее и похуже. Рефлексируя над причинами, которые заставили меня написать Software Disenchantment, я понял что всего этого не хочу. Что просто физически не могу писать очередной медленный отстойный электрон-или-прости-господи-браузер-апп, который к тому же ничего не значит и ничего не изменит. Как бы ни хотелось каждому основателю стартапа, его супер-уникальный-свежий-современный-вылизанный продукт — просто унылое, никому не нужное, высосанное из пальца говно (не пытайтесь это представить), а все эпитеты ничем не подкреплены. Может это конечно со мной что-то не так, или я не там ищу, но ощущение что никто даже не думает пытаться сделать хорошо и качественно конкурентым преимуществом, хотя попиздеть про это любят за милую душу. Устроился, кстати, я пока в JetBrains, но не над самой IDEA работать конечно, а на research-проект, где мы пытаемся научиться делать редакторы быстрыми и легкими. Посмотрим, как пойдет.

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

Ой, простите, это старая фотка. Вот:

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

На что я хочу заметить:

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

Высмеивать психические проблемы ничем не лучше, чем проблемы со сломанной ногой. Вот хорошо показано:

“Have you ever tried not having a diarrhea?”

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

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

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

Так что, как говорит мой терапевт, не болейте!


Пациент умер, выносите
tonsky
Opera Paper Products как-бы-шутка-но-не-такая уж и шутка
Opera Paper Products как-бы-шутка-но-не-такая уж и шутка

Я занимаюсь веб программированием 15 лет. Когда я начинал работать за деньги (компьютер у меня был и раньше, конечно), IE 6 был самым передовым и инновационным браузером, Firefox должен был вот-вот появиться, разработчики верили, что будущее за XHTML, до первого драфта HTML 5 и запуска StackOverflow оставалось 4 года, а до первого Chrome – пять лет. 

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

Получается вот как. Веб хорош для быстрого прототипирования, простого delivery, но масштаб его роста сильно ограничен. Грубо говоря, он подходит только для прототипов и игрушечных задач. Что-то вроде языка Basic, вроде и программы писать на нем можно, но всерьез его никто не берет. Веб, конечно, не пропадет, но в конечном счете займет место какого-нибудь там питона, на котором будут детей в MIT учить и ученые не слишком требовательные графики рисовать.

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

Ладно, простые статические страницы с текстом — ок, может быть. С адблоком и reader mode жить можно. Хотя и тут есть умельцы, которые умудряются сто слов отрендерить в страницу в 20 мегабайт, потому что технологии, инновации и disruption.

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

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

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

Существует ли версия этой реальности, где веб вырастает во что-то более значимое? А как же WebAssembly?

А что WebAssebly? Эта чехарда имеет смысл только только для людей, которые думают, что компьютеров нигде кроме браузера не существует. Очнитесь, ребята, это еще один никому ненужный слой абстракции. Мы с радостью себя отбросили на N лет назад и теперь с радостью это преодолеваем. WebAssembly — это попытка запихнуть в веб то, что без веба прекрасно работало уже несколько десятков лет как — С++ приложения. Чтобы что? Я не знаю чтобы что. Чтобы условный Вася все равно качал себе Слак, завернутый в Электрон, зато теперь написаный на WebAssembly. Смотри, мам, он почти как нативный, даже иконочка есть! И почти не тормозит. Почти-почти. Еще раз — попробуйте выкинуть говно веб-пропаганды из головы и взглянуть на это трезво. В чем тут достижение-то?

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


Инженеры, хватит бегать от ответственности
усы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

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

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

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

Артемий Лебедев 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

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

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

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

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

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

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

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

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

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

Не 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

Бурная история про Xored (it-компания из Академгородка, Платов — её президент):

Многие кинулись обсуждать конкретную ситуацию — был ли мальчик, где деньги, лебовски, можно ли всё исправить, етц. Мне кажется, это не самое тут удивительное (и поучительное).

Безотносительно того, что там произошло и кто с какой стороны сколько наплел, всё рухнуло, когда Платов добрался до микрофона. Даже если он на 100% прав и невинен в данной конкретной ситуации с Алексеем, никуда уже не деться от комментариев (ищите по нику platoff), из которых получается, что более-менее всех, кому с ним не по пути, он даже за людей не считает. Все программисты и комментаторы у него — долбоебы, лузеры, нищеброды, лохи, пидарасы (в терминологии автора — заднеприводные) по умолчанию. И остаются такими, пока не доказали обратное. Я не придумываю, так и написано. Судя по чуть более раннему твиту («Ксоред сбрасывает жыр. Жыр бежит в Yandex, JetBrains и Tinkoff Bank»), уход с должности это тоже предательство и потеря статуса «обычного» человека и «нормального» программиста.

Там еще феерический катарсис, из которого вообще получается, что человек у Платова остается человеком и имеет право на человеческое отношение только до того момента, пока он выгоден замыслу (компании, проекту, лично). Вне этого интервала о нем не думают, договоренностей не соблюдают, кидают («...за последние годы [через Xored] прошло человек 300, из которых кинули трёх-четырёх»), объяснений не объясняют, оскорбляют, высмеивают, травят и это типа нормально.

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


Панель Шрёдингера
усы2
tonsky

Классическое нытье: куча мобильных приложений и сайтов делает заголовки, которые прячутся по скроллу. Идея, как и все современные тренды, максимально дебильная: типа, пока скроллишь вниз, весь экран занят контентом: текстом там, картинками, не знаю. Но стоит руке дрогнуть и скрольнуть на один-единственный пиксель вверх, как тут же со всех сторон вылетают панели, кнопки, статусы и прибамбасы. Вот они вылезают, скажите мне, что бы что? Просто пораздражать своей анимацией? Или люди что, вверх не листают? Все с первого раза понимают? Штука еще и в том, что если (если!) эти гребаные панели действительно нужны и на них хочется посмотреть, ничто не подскажет, как их достать. Худший вариант интерфейса: вызывается случайно all the time, а когда нужно, то фиг поймешь как достать.

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

А как-же, как-же? Ведь мы хотим создать иллюзию легкого и воздушного интерфейса, в котором много места, в котором content first, зачем человеку пялиться на наши кнопки, пока он читает? Работает это так: мобильник — это уже маленькое окошко, вырезанное в нашей реальности. Ваш сайт/приложение — окошко, зона внутри мобильника. Контент — зона внутри сайта. И тем не менее человек может прекрасно сосредоточиться на любом куске реальности и смотреть только в него. Вокруг меня могут бегать кошки, я могу менять руку, которой держу телефон, и я всё равно буду видеть только то, на чем я сосредоточился: контент.

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

А как делать-то тогда?

Первое: не надо этих ваших анимаций. Хотите чё-то на экране показать — показывайте всегда, не надо случайно вызываемых жестов к нему приделывать. Чего нам точно всем не хватало [сарказм] — еще одного аспекта управления и так уже перегруженными многофасеточными контрольными центрами (мобильниками то есть). Если вы хотите чтобы гребаный хэдер с вашим гребаным лого мазолил мне глаза, ну будьте мужиками, примите решение, показывайте его всегда. Только не надо уменьшать его по скроллу, это их двух зол обе: вы и глаза мозолите, и анимациями заколебете.

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


Boo King dot com
усы2
tonsky

В линче вышла рецензия на интерфейс букинга:

Сергей Кулинкович, арт-директор, пишет:

В таких случаях (большой трафик, неразрывная связь с бизнесом) дизайнерские решения часто продиктованы статистическими данными и результатами многочисленных тестов, призванных добиться максимальной конверсии, возврата, суммы покупки и прочего. Нельзя просто взять и сделать, скажем, форму более «удобной», поскольку за этим могут лежать миллионы долларов упущенной прибыли. Однако раз в несколько лет руководители произносят: «Что же с нами стало?», проводят глобальный редизайн, и все начинается сначала.

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

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

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


Принципиальный недостаток Git CLI
усы2
tonsky

Есть простой способ использовать Git: работаем только в ветке, мержим только в мастер. Если все идет хорошо, то выстраивается простой и понятный ритуал: branch, commit, checkout, merge, push, повторить. GitFlow называется, да?

Для такого сценария Git CLI достаточно. Для всего остального — недостаточно. Странно, что люди до GitFlow вообще пытались как-то по-другому с Git работать через CLI. Ну невозможно это.

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

В таких случаях важно понимать, что происходит. Я, например, читаю историю ветки и пытаюсь воссоздать ход мыслей и направление изменений автора, с которым у меня возник конфликт. Чтобы решить конфликт правильно и осмысленно, мне надо пересмотреть всю историю ветки, прочитать диффы, посмотреть что вообще происходило и в какой последовательности. Просто смотреть на бесконтекстный 3-way diff — не вариант.

Простой и красивый вывод легкозапоминающейся команды git log --pretty=format:"%h - %an, %ar : %s" --graph:

Представьте, сколько нужно действий, чтобы заглянуть в каждый из этих коммитов

К сожалению, CLI в этом никак не помогает. Ты находишься в полной темноте. Единственное, что понятно: что-то сломалось. Сообщение совсем неадекватное, или вообще нет сообщения, просто «конфликт» и предлагается выбрать между двумя непонятно откуда взявшимися альтернативами. Я много раз наблюдал, как люди просто впадали в панику и ступор и не понимали, что делать дальше. У таких случаев всегда есть объяснение, и оно обычно совсем несложное, объяснимое, логичное даже, но только если разобраться. Не ситуация сложная, сложно её понять, сидя в CLI. Черт, во всех компаниях, где я работал, я очень быстро становился негласным экспертом по таким вот нестандартным разбирательствам ¯\_(ツ)_/¯

Итак, Git CLI работает только когда четко понимаешь, что происходит. Отсюда нужда в GitFlow: он сильно ограничивает пространство возможных ситуаций, поэтому когда shit hits the fan, у тебя ограниченное количество гипотез о происходящем. Паники меньше, шансов угадать и принять правильное решение больше.

Типичный репозиторий, разрабатываемый по GitFlow

Вообще-то все git-овые best practices оттуда же: не юзать rebase, бояться force push, всегда создавать merge commit, не переписывать историю. Если их нарушать, мир не рухнет, ничего страшного не случится. Но — проблема — коллеги не поймут, что происходит. Если бы они в таких ситуациях видели, что происходит, то разобраться с ними — раз плюнуть. Проблема только в том, чтобы их идентифицировать.

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

Макклейн мёржит крупными мазками

Проблемы:

  1. Возможно излишнее количество мержей (по сравнению с четким пониманием ситуации и точным хирургическим вмешательством).

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

Поэтому я так скептически отношусь Git CLI: он устроен так, что пытается «уберечь» вас от сложных ситуаций прямо сейчас, но каждым своим действием усложняет ситуацию на потом. Скажем, git pull по-умолчанию будет мержить, если обнаружит, что ваша ветка разошлась с удаленной. Это «прячет» от вас сложный факт того, что ветки могут расходиться, но мир устроен именно так — они могут и будут расходиться, это нормально. Абстракция, которая пытается это скрыть — дырявая. Зато упрощает ваше существование, потому что у вас якобы всегда будет одна «главная» версия.

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

Фрагмент истории LightTable. Это ещё по-божески

Как тогда жить?

  • Визуальное представление графа коммитов. Многие GUI клиенты неплохо справляются
  • Fetch вместо Pull
  • Не бояться amend, rebase и вообще двигать историю

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

Бывает, люди путают git log с личным дневником и записывают свои мысли, настроения, погоду на улице

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

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


Совет про советы
усы2
tonsky

Съездил на Riga Dev Days, словил новых ощущений.

Во-первых, я оказывается давно не общался с бэкенд-разработчиками и подзабыл, чем они живут. По ощущениям у них все прекрасно, но хочется еще лучше. Ну, из серии, в этом году GC всего на 10% стал быстрее, хотелось бы хотя бы на 15%. Или там, есть две системы сборки, одна хорошо подходит для больших монолитных проектов, а другая — для маленьких стандартизированных. То есть это проблемы, которые они обсуждают: какое из двух прекрасных решений выбрать. Никакого визга, никаких ощущений что мир катится в ад, а ты сидишь на дне колодца и рвешь на себе волосы (это я так себя чувствую с тех пор, как перешел во фронтенд и стал ездить по JS-конференциям). Больше всего похоже на стабильное, каноническое «работаем дальше».

Второе наблюдение проходит по категории накрытий (см. тег) и стимулировано выступлением Егора Бугаенко, но относится не только и не столько к нему, сколько к идее пропаганды вообще. Кратко: со сцены можно говорить что угодно, и люди тебя слушают. Собственно, почему я пишу это именно сейчас, потому что я сидел в зале и видел, как это работает. Что бы ты ни говорил, у зала открыты уши и информация просто записывается на подкорку. Качество информации не имеет значения. Доводы не имеют значения. Логика, аргументы не играют роли. Важен сам факт говорения. Аргументы за, стройная цепочка рассуждений — может быть, может не быть — не играет роли, она все равно пройдет мимо. Что скажешь, в то и поверят. Скажешь умную мысль — отлично. Скажешь глупость — тоже хорошо, еще и вопрос зададут, как её лучше применять.

Есть, впрочем, несколько фильтров, но они стоят не там где нужно. Фильтр авторитетности: чем важнее чувак, тем усерднее его слушают. Фильтр популярности: чем больше углов, из которых звучат ключевые слова, тем больше к ним интереса. Фильтр доступности: чем проще изложена идея, тем больше к ней доверия. Беда в том, что это все социокультурные фильтры, очень далекие и от науки, и от научного метода, и даже просто от рационального мышления.

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

Это всё не только со сцены, конечно: и блогах, и в твиттере, и на курсах, и в книгах, где угодно. Из известных DHH ровно этим занимается (особенно смешно, когда он меняет курс на противоположный), и много персон поменьше. Да что далеко ходить — тот же Design Patterns, задуманный как справочник решения конкретных проблем, постепенно превратился во вполне себе библию. Причем из него выкинули всю контекстную часть (что происходит, где, почему и зачем) и оставили только «советы». Такое ощущение, что широкой аудитории (да, знаю, ужасный прием — обобщение, но речь действительно об общем тренде) нужны не вопросы, а ответы.

При этом я как раз не против открытости к новым идеям. Мне это даже на руку, и мне хочется, чтобы люди охотнее принимали новое. Но только не какое попало, и здесь, конечно, начинается заковыка. Потому что нет никакого внешнего судьи и никто не скажет, что вот этот товарищ несет ерунду, а к этому стоит прислушаться. Единственный способ — 90% всего полная ерунда, пусть цветет 100 цветов, и т.д. и т.п.

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


Ненаучная логика
усы2
tonsky

Илья Бирман в своем блоге разоблачает людей, не умеющих в логику. Собственно, весь пост:

Разоблачение насколько эффектное, настолько же нечестное. Илья смеется над людьми, делающими быстрые выводы, но сам даже не пытается разобраться в том, что происходит. В погоне за вниманием пострадала правда.

Первый пример — обычная задачка. Задачу можно решить, не решить или решить с ошибкой. Ну вот например:

Решили? Уверены в решении? Смешно?

В самом факте ошибки ничего страшного нет. Он показывает лишь поспешность, но не степень владения логическим аппаратом. Ошибаются все.

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

Сам факт спешки с ответом тоже ни о чем специальном не говорит. Это устройство человека (любого!), экономить мозговую энергию. Похожий пример из книги «Thinking fast and slow»:

Бейсбольная бита и мяч вместе стоят $1.10. Известно, что бита ровно на 1 доллар дороже мяча. Сколько стоит мяч?

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

Насчет второй задачи есть несколько интересных моментов. Напоминаю:

Во-первых, обратите внимание, что скриншот в джипеге опрос специально сконструирован так, чтобы подтолкнуть вас к неправильному ответу. Он не про абстрактных мюмзиков и зелюк (что было бы честно), и даже не про равнозначные сущности из нашего мира. В первом варианте специально наукообразные и правдоподобные высказывания, во втором специально сомнительная посылка (Бог). Если вы выберете вариант 2, получится, что вы вроде как за то, что Бог создал Землю и считаете, что она не входит в Солнечную систему. То есть автор опроса по какой-то причине специально хотел, чтобы отвечали неправильно. Согласитесь, поведение, далекое от научной объективности.

Более того, чтобы решить вторую задачу, нужно абстрагироваться от её содержания и сосредоточиться только на форме. Забыть на время рассуждений всё что мы знаем о Земле и Боге, притвориться, что эта информация нам недоступна и что её истинность на время решения задачи может быть подвергнута сомнению. Более того, надо понять, что правильный ответ в тесте может противоречить объективной реальности и всё равно это ответ, который от нас ожидают.

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

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


Не про дебаты
усы2
tonsky

Посмотрел дебаты Лебедева и Навального. Содержание, мне кажется, яйца выеденного не стоит, а вот форма интересна.

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

Если бы у тех спорщиков стояла задача разобраться, эфир бы закончился за 10 минут. На самом деле, в первые 10 минут все вещи которые по существу были сказаны. Как-то так:

— Есть вопрос по А. Как А работает?
— Так-то и так-то.
— А почему именно так?
— Потому что то-то и то-то.
— А могло бы быть по-другому?
— Могло, так и так.
— Плюсы, минусы?
— Я вижу X, Y.
— Нет, Y быть не может. Потому что A, B, C.
— Согласен. Мне кажется, может быть еще Z.
— Да, пожалуй.

Но на самом деле все было даже проще, как мне кажется. Обе стороны понимали положение вещей в полном объеме — и на своей стороне, и на стороне оппонента.

Теперь задача: как в таких условиях выглядеть лучше оппонента? Акцент на выглядеть. И тут меня совершенно вынесло от методов:

  • Например, Навальный много раз повторял «вы не хотите открывать контракт». Ок, первый раз это вопрос. На него ответили. Дальше это же утверждение повторяется много раз после того, как на него ответили и с ним разобрались. Наверное, это из психологии. Что больше звучит, то и запоминается. Если я сделаю вид, что не получил ответа, может, и у слушателей возникнет ощущение, что они его не получили.

  • Кидаться цифрами (буквально кидаться, мне кажется, он в какой-то момент просто в воздух кричал «117 миллионов», просто, без предложения и без контекста). Да, это создает ощущение, что 117 миллионов куда-то запропастились. Даже я его ощущал, заглядывал под диван, но ничего там не обнаружил. Приходилось делать сознательное усилие, чтобы это ощущение развеять.

  • Ставить человеку в вину его цитаты. Это прием по форме, а не по сути. Мало ли кто что когда сказал. Взгляды меняются. Люди владеют языком не в совершенстве. Люди любят производить эффект. То, что человек говорит, и то, что он имеет в виду — как правило, очень разные вещи. С цитаты можно начать, но разбираться надо, что человек имел в виду. «Было бы великой ошибкой думать» — В. И. Ленин (цитата приведена не полностью).

  • Давление на авторитет. «Я в этом разбираюсь» — и дальше идет любая чушь, например. Уловка. Опять же, очень удобный прием.

  • Артемий Лебедев тоже, конечно, не идеал. То есть он не так подло пускал пыль в глаза и вообще не играл в эту игру, но и разобраться и прояснить ситуацию тоже не спешил. Коммерческие фирмы не раскрывают суммы контрактов, потому что это не выгодно. Если сделать метро навигацию за 100 миллионов и об этом будет широко известно, будет труднее продать аналогичный проект, не знаю, Газпрому за миллиард. Это не красиво, но это причина, почему так происходит. Естественно, эту причину Тема не хотел озвучивать, и в том числе поэтому звучал неубедительно. Сказал правду = возразить нечего = все разошлись очень быстро.

  • Запутывание. Когда теряешь нить рассуждений (а её специально оба оппонента постоянно обрывают, путают, плутают), инстинктивно хочется оставаться в контексте, и возникает соблазн просто довериться кому-то, встать на чью-то сторону, решить, что «я пропустил, но он-то наверняка все понимает и концы у него в голове с концами сходятся, поэтому я потом разберусь, а пока буду просто верить». Тут важно помнить, что сторон нет. Миру пофиг, что по его поводу думают два конкретных человека. Он работает, как работает. Есть факты, есть логические заключения, есть в конце концов точки зрения, но даже те не привязаны к человеку. Мнение X существует независимо от того, кто в данный момент в него верит.

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

А теперь внимание: мы посмотрели, каким образом из высосанного из пальца повода (вы не публикуете данные по контрактам, которые по закону не нужно и даже нельзя публиковать, следовательно вы злодей) Навальный создает на ровном месте драму и забирает 70% телезрителей. Очень прозрачный пример, проблему видно, приёмы видно.

Внимание: это он только на данных конкретных дебатах так поступает или вообще везде? Вот вам цитата из Майкла Крайтона на подумать:

Briefly stated, the Gell-Mann Amnesia effect is as follows. You open the newspaper to an article on some subject you know well. In Murray's case, physics. In mine, show business. You read the article and see the journalist has absolutely no understanding of either the facts or the issues. Often, the article is so wrong it actually presents the story backward—reversing cause and effect. I call these the "wet streets cause rain" stories. Paper's full of them.

In any case, you read with exasperation or amusement the multiple errors in a story, and then turn the page to national or international affairs, and read as if the rest of the newspaper was somehow more accurate about Palestine than the baloney you just read. You turn the page, and forget what you know.


Голые короли IT
усы2
tonsky

Моя программистская карьера началась бесхитростно — там, куда взяли. Взяли делать бэкенд на Джаве. Ладно. Все равно я не знал, о чем надо мечтать. Потом немножно Питона. Распределенные системы. Erlang. Щепотка Perl-а. Последние два года программирую интерфейсы. Расчет был, конечно, что я приду на все готовое — разберусь и пойду дальше. Как бы не так. Готового, на самом деле, нигде не было. Всегда превозмогание. Молодая индустрия. Ладно. Но вот странно, как люди этого не ощущают. Есть метания. Мода. И люди прям всей головой и сердцем отдаются. Может, это только у самых шумных, конечно, но каждое новое веяние как последнее. Не хватает какой-то скромности, умеренного энтузиазма.

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

Hibernate помню, и эти убойные аргументы: а что если мы базу данных захотим поменять? И все верили, и шли на поводу, и полностью всё приложение переписывали, лишь бы не было SQL-я. Да, трудно становилось через какое-то время, и начиналась борьба не за код, а за выживание, с самим Хибернейтом. Но никто трезво на это не смотрел, казалось, что если проблемы, это мы недопонимаем и надо еще бороться. Естественно, консультанты, рекомендации, best practices.

Помню, как мечтали о JavaEE, и я тоже мечтал. Оказалось, что это тот же Хибернейт, только нужно еще раз все переделать. Переделать, чтобы получилось так же. Наивные были, молодые. О чем больше всего говорят, то и используем. Смешно — где сейчас Хибернейт, а где SQL, да?

Помню безумие вокруг Inversion of Control, помню как читал гайд к Guice, в котором писали: «сейчас мы вам объясним, как надо писать программы. Скорее всего, вы обнаружите во время рефакторинга, что одно тянет за собой другое, и чтобы внедрить IoC, вам понадобится переписать весь код. This is a good thing». Это this is a good thing очень въелось мне в память, я отчетливо в тот момент почувствовал, что нас всех дурят. Но где было мое смутное ощущение, и где лидеры индустрии. Оказалось, лидеры тоже бывают голые.

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

Или вот: в ООП меня очень смущал вопрос «Paper.writeWith(Pen) или Pen.writeOn(Paper)». Тогда мне казалось, что ООП пригодно для всего, пóлно, следовательно правильный ответ существует, просто я не до конца разобрался, и нужно напрячься. Сейчас я расслабился, вижу, что у каждой концепции есть границы, когда что-то в нее не лезет, это проблемы концепции, а не того, что в нее запихивают. Это нормально. Даже если очень хочется быть адвокатом какой-то идеи, честность, хотя бы перед собой, важнее. Не надо мутить воду. Если функция удобнее класса — берите функцию. В этом больше честности и смысла, чем в следовании OOP-way. Нет никакого OOP-way. Нет никакого Java-way, Ruby-way, NodeJS-way, FP-way, microservice-way, Docker-way, не надо приносить им жертвы. Концепция это инструмент, а не религия или образ мысли. И не надо доставать ключи из словарей через Promise.

Но крестовый поход длится и по сей день. Концепции новые, адвокаты все такие же. Читал на днях:

How do you approach this problem with Rx? Well, to start with, (almost) everything can be a stream. That’s the Rx mantra.

Then we will have created a beast called “metastream”: a stream of streams. Don’t panic yet. A metastream is a stream where each emitted value is yet another stream.

Flatmap is not a “fix” and metastreams are not a bug, these are really the tools for dealing with asynchronous responses in Rx.

Сравните с гораздо более адекватным:

Note: It is usually best to use signals as little as possible. When it comes to writing nice modular code, you should primarily use normal functions and values. If you find yourself stuck with a signal of signals, ask yourself “how can I model this explicitly with functions and values?”

Вот человек тоже адекватно пишет (лучше всю статью прочитать) про то, что если вы придумали асинхронный IO, то как его не маскируй, получится не очень:

People in the Node community have realized that callbacks are a pain for a long time, and have looked around for solutions. One technique that gets a bunch of people excited is promises, which you may also know by their rapper name “futures”.

But, honestly, it’s like the difference between being punched in the gut versus punched in the privates. Less painful, yes, but I don’t think anyone should really get thrilled about the value proposition.

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