?

Log in

No account? Create an account

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

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

Категория: лытдыбр

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

“Have you ever tried not having a diarrhea?”

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

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

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

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


ICFPC 2019
tonsky

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

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

Очень любопытно посмотреть, чего ты стоишь. В голове-то ты мог много себе про себя нафантазировать, а тут вот объективная реальность, ладдер, и ты либо можешь компьютер заставить делать что ты хочешь, либо не можешь. Никаких «если бы», никаких «возможно, наверное, мне кажется». Мы довольно посредственно выступили (на момент закрытия 29 место из 142 участвовавших, в лучший свой момент были на пятом).

Исторический скриншот. Дальше мы сильно сдали
Исторический скриншот. Дальше мы сильно сдали

Участвовали втроем, я в первый раз. Как я понял, средний размер команды ~5 человек, не редкость и восемь встретить. Втроем у нас довольно хорошо делились области ответственности, было бы больше появился бы организационный оверхед (как мне кажется). Восемь человек я бы вообще офигел менеджить и вообще ничего бы не написал, наверное. С другой стороны, больше рук – можно попробовать больше подходов. Можно вложиться в инфрастуктуру. Наверное.

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

Собери бонусы, закрась лабиринт
Собери бонусы, закрась лабиринт

Clojure, несмотря на все плюсы языка высокого уровня и быстрого iteration time, по ощущениям подошла довольно плохо. Потому что все упирается в перформанс. Можно сколько угодно рассуждать про «глобальные оптимизации против локальных», ненавидеть байтоебство, мыслить как стратег с высоты птичьего полета и гордиться тем, что не знаешь, как устроен компьютер, но это все и в императивных языках можно делать. Они же не отнимают способности мыслить и планировать. Да, механика записи мысли чуть более многословна, ну зато оно того стоит. Плюс за три дня вы разницы может и не заметите даже. А вот по перформансу заметите, еще как. Как ни крути, а команда, которая обсчитает за условное время X в два раза больше вариантов, чем ее конкурент, будет в топе выше. КАК НИ КРУТИ. Больше здесь строго лучше. Либо больше итераций, больше вариантов попробовать, либо решения будут более глубокими, а значит и очков принесут больше.

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

Выглядит красиво, жаль вся эта мощь обслуживает всякое говно вроде lazy sequences, primitive boxing, high-order functions вместо того, чтобы решать задачу
Выглядит красиво, жаль вся эта мощь обслуживает всякое говно вроде lazy sequences, primitive boxing, high-order functions вместо того, чтобы решать задачу

Сейчас я думаю, что даже если бы мы выбрали просто Java с unboxed примитивами и примитивными массивами, было бы качественно лучше. C++/OCaml/Rust может быть дали бы еще 1,5-2 раза прирост, но это уже не изменило бы ситуацию качественно. Но может и нет, цифры так, с потолка.

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

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

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

не с этого хакатона, но смысл такой же
не с этого хакатона, но смысл такой же

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

лабиринты, генерируемые нашим алгоритмом, имели хорошо узнаваемый вид
лабиринты, генерируемые нашим алгоритмом, имели хорошо узнаваемый вид

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

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

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

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

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

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

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

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

Как правильно распределять силы я пока не понял. Я выложился по максимуму в первый день (до 6 утра, на следующий встал в 11) чтобы как можно больше впихнуть в Lightning Round (первые 24 часа). В результате весь второй день был как в тумане и работалось как на автопилоте. В третий зашли нормально, я переписал алгоритм даже, но тоже было очень тяжело. Возможно, здоровый сон каждый день (ну ок, кроме последнего) суммарно дал бы больше эффективности за три дня, чем такое.

Перерыв на обед
Перерыв на обед

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


Пациент умер, выносите
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

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

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. Это не стеб, мне правда трудно

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

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

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

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


Не 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 (лет пять уже как, наверное), иначе он был бы полон эмоций. Сейчас же я просто смирился с фактом его существования и могу более спокойно посмотреть на его место в мире.


Принципиальный недостаток 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, это еще один инструмент, еще одна форма существования кода, часть продукта. Вы же следите за кодом? Вот и за историей надо следить.

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


Code highlighting
усы2
tonsky
Многие любят подсветку кода. Жить без нее не могут. Чем больше подсветки, тем лучше. Чем больше разных вещей подсвечено и раскрашено, тем легче читать. Как бы.

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



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



Пример документации, прекрасно себя чувствующей безо всякой подсветки: http://fantom.org/doc/docIntro/Tour.html

Ставить неконсистентую подсветку или подсветку, в которой есть ошибки, глупо. Такая больше собъет с толку, чем поможет. Понятно, что в highlight.js или vim не засунешь полноценный парсер языка, но эту проблему надо решать, ограничившись минимумом простейших правил, а не сложными эвристиками, которые промахиваются в 10% случаев, например, выделяя отдельный цвет для всех стандартных функций, входивших в язык 6 лет назад, на момент написания хайлайтера.



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

Сравните подсветку на github:



и мою рабочую:



Github почему-то выделил send-via и constantly разными цветами, хотя и там и там это вызов функции из стандартной библиотеки, а также раскрасил nil как символ, хотя он им не является. Очень сильно выделяется defn (полужирный и контрастный черный) по сравнению с leave-cluster, хотя внимание следует привлекать к имени функции, а не к ключевому слову defn.

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



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

Если туго с эстетикой, возьмите три-четыре соседних цвета из Solarized. Я так и сделал.

На смерть почты
усы2
tonsky
Осуждая смерть Google Reader, я обмолвился, что GMail хоть и хороший сервис, но вредный. Объяснюсь: он достаточно неплох, чтобы всем остальным думать об инновациях не было большого смысла. А почта в них ох как нуждается.

Я, к сожалению, почтой пользуюсь довольно активно. Общаюсь с коллегами по работе и еще получаю на нее письма о регистрации/активации.

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

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

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

Проблема в том, что все держатся за стареющий imap. Удивительно, насколько почта про формат синхронизации, а не про сами письма. У письма нет ссылки. Нет оригинала. Оно физически расположено «нигде», существует, только пока движется. Письмо, которое получил я, и то же самое письмо, которое получил мой коллега — это два разных письма. Это как если бы веб был не про html, а про http. Оффлайновый. В почте немного смысла без интернета, однако именно идея «скачать себе всё» не дает ей развиваться.

И отсюда очевидные сложности:

Качество обработки почты зависит от качества и возможностей клиентов всех сторон, что участвуют в переписке (да, в середине длинной дискуссии обязательно встретится любитель plain text, принудительных переносов строк и цитирования с помощью > > > >)

Письма отлиты в камне. Если ты отправил что-то кому-то — всё, как ушло, так и останется. Письмо нельзя удалить. В Скайпе, к примеру, есть такая функция, у нас ей постоянно пользуются.

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

Нельзя подцепить кого-то в середине дискуссии (можно, конечно, но ему придется знакомиться с историей вопроса в ужасном перевернутом > > > > RE RE RE RE блоке).



Нельзя убрать себя из переписки. На старых форумах, чтобы подписаться/отписаться, нужно было оставить комментарий. В почте хуже — если все жмут Reply All, надо кого-то просить, чтобы тебя убрали из CC.


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

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

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

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



Если все прелюдии убрать (тему, подписи, цитаты), получится, пожалуй, как раз instant messaging. Только с нормальной сервер-сайд историей, нормальными групповыми чатами, поиском…

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

Вспомним Google Wave. Это очень похоже на то, о чем я говорю; его проблема в тяжелых наркотиках. Совместное редактирование? Это вообще письмо или документ? Команда Гугл-докс всерьез недоумевала. Публичные письма? Мне кажется, очень трудная для восприятия концепция.



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

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

Я не помню сейчас, но была ли там двухсторонняя интеграция со старым добрым imap? Это обязательно для завоевания будущего, конечно. Люди с обычной почтой должны иметь возможность участвовать в этих современных, высокотехнологичных дискуссиях через sendmail и mutt. В общем-то я с этим проблем особых не вижу. Разве что результаты редактирования писем не будем доставлять.

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

ААААААААААААААААААААААА
tonsky
АААААААААААААААААААА!!!!!!!!!!!!!!!!!!!!!!!!!!!

Для протокола: ровно 7 месяцев как я мучался с Эклипсом на работе — когда я делал clean проектов, он время от времени ругался на меня «Cannot delete target folder». Всё. И не собирался, понятно. Какая сука Кто блокировал папку, почему — непонятно. На что я только не грешил, но руки разобраться не доходили. Я просто ждал немного и запускал clean снова — авось, сбилдится. Не сильно трудно, но я что-то последнее время нервный, а для нервов такого рода мелочи нехороши.

Вчера случайно наткнулся на этот пост, где все объяснялось. Выключил индексацию, все исправилось.

СЛОВАМИ НЕВОЗМОЖНО ПЕРЕДАТЬ ТУ БУРЮ ЭМОЦИЙ, ЧТО ИСПЫТАЛ Я К WINDOWS, MICROSOFT, ГОРЕ-РАЗРАБОТЧИКАМ, БИЛЛУ ГЕЙТСУ ЛИЧНО И КОМПЬЮТЕРАМ ВО ВСЕМ МИРЕ. Говорю же, нервы пошаливают.



Ну и чтобы два раза не вставать, хроники разработчика. Написал для Google Chorme расширение, включающее/отключающее прокси для сайтов, т.к. ЖЖ на работе запрещен, а он бывает нужен. Естественно, писал в рабочее время. Спрашивается, кто кого перехитрил? Я уже рассказывал, что у нас (Сибирьэнерго-Биллинг) программистов держат за что-то вроде секретарей: не дают самим устанавливать программы, блокируют сайты, не покупают нужный софт? Такая вот забавная организация.

Трамвай
tonsky
В детстве, этот журнал взорвал мой мозг. И взрывал каждый раз, когда я его перечитывал. Я просто не мог понять, что там происходит. Где они издеваются, где острят, а где серьезно. Взрослому человеку не объяснить, у него всегда есть почва под ногами, он может себе представить, что за любым текстом, даже за текстами Хармса, стоит вполне определенный человек -- его автор, который сидит и высасывает всё это из пальца. А у меня этой почвы не было. И вот как воспринимать, например, ситуации, когда первый стих подписан "Тим. Собакин", второй текст подписан "Ника Босмит", третий -- "Тим. Собакин, который и есть Ника Босмит (если прочитать наоборот)", а в четвертом эти двое сами -- герои текста!!! Я просто не понимал, что происходит. Никак. Я не знал, что думать. То ли это автор, о котором написали рассказ. То ли это герои рассказа, которые пишут рассказы (как? они же герои). Я не мог представить себе ситуацию, в которой это было бы возможно и уместно. "Перевел с шотландского, хотя на самом деле с норвежского...". Да уж. И еще сквозные аллюзии с экипажем трамвая. В каждом втором тектсе кто-нибудь нет-нет да упоминался, типа, он тоже пассажир Трамвая. И все читатели тоже. А я никак не мог взять в толк -- куда ж там столько народу? И обозрим и конечен ли вообще этот Трамвай как транспортное средство? Как все это выглядит? Как представить его?

Сами тексты не отставали

---

Задача на асфальте

Дано: Летят по небу
кошки.
Одна -- пингвин
другая -- слон.
На них напали
две картошки.
одна -- тюльпан
другая -- клен.
Но их разняли
две вороны:
одна -- кулик
другая -- грач...

Найти: С какого же балкона
упал, рассыпавшись по ветру,
смешав заданья и ответы,
довольно странный сборник этот
"Арифметических задач"?
Еще найти: КОМУ ЖЕ СБОРНИК
ВЕРНУТЬ ИЗ ЛУЖИ
ДОЛЖЕН ДВОРНИК?

Пример характерный (стих, кстати, отличный), но, конечно, этим разнообразие материалов не ограничивалось. Там много было, много разного. Они умели рассазывать о интересных вещах интересно. Это был очень познавательный журнал (если, опять же, ты мог отличить, что серьезно, а о чем они шутки шутят). Что они только не писали: о строении вещества, древнегреческих философах, анимации, букве "Ё", троянском коне, поиске кладов, о Носе ("не по Гоголю"), о сне (как Пушкин во сне писал стихи, а химик Кекупе придумал формулу бензола), о графологии и об изгнании тараканов из квартиры.

---
Слон-любящий-отвечать-на...

Как научить кузнечика плавать?

* Нужно лечь в лужу и показать, как это делается (Катя Маслова, 11 лет, г. Чебоксары)
* Надо бросить в воду его любимое лакомство (Андрей Гончар, 11 лет, г. Севастополь)
* Надо, чтобы его проглотила лягушка и пошла купаться (Дима Вагин, г. Орел)

Откуда берутся мысли?

* Мысли берутся из зависти перед другими мыслями (Лида Зайцева, 11 лет, г. Волгоград)
* Мысли прилетают из далекой страны Мысляндии (Паша Волченко, 9 лет, г. Донецк)
* Они лезут изо всех щелей! (Таня Свистунова, 12 лет, г. Горький)

---

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

Архив номеров лучшего в мире детского журнала. (90-91 год, как говорят, лучшие).