• Читалка Kindle, продолжение

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

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

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

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

    Вот к каким выводам я пришел за время пользования устройством.

    Читалка идеально подходит как альтернатива монитору. Сервис Send to Kindle отправляет любую страницу в интернете на устройство, удаляя верстку и рекламу. Остается только текст и иллюстрации. Читать с Киндла легче, чем с монитора.

    Киндл подходит для художественной литературы. Я прочитал на нем Оруэлла и Стивена Кинга, впечатления почти как от настоящей бумажной книги.

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

    Даже если вам обещают книгу в формате mobi или epub, она может быть сверстана ужасно. Об этом пишут рецензоры на Амазоне: электронная книга порой бывает днищем, а стоит не намного дешевле бумажной копии.

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

    Читалка это довольно тугое устройство, экран показывает текст с задержками. Частая перемотка утомляет.

    Бумажная книга и закладка показывают прогресс. Это мотивируют закончить книгу быстрее. На электронной читалке цифра 60% ни о чем не говорит. Бумажная книга сигналит – уже больше половины, чувак, поднажми и скорей за новую. Может быть поэтому я читаю настоящие книги быстрее.

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

  • A hidden message in Cognicast podcasts

    Being listening to Cognicast, a series of Clojure-related podcasts, I’ve found a funny thing. Not sure if anybody has ever mentioned it before across the Internet. Each podcast starts with a jingle sound that follows right after announcements and a long pause. And in the end, there is also another weird sound that finishes the issue.

    Those two sounds are borrowed from the Gauntlet 4 video game. It is a great fantasy game where one of the four characters travels through mazes full of monsters to encounter a dragon at the end. I’ve played this game on Sega Mega Drive (Sega Genesis in the US) for a long time being a kid.

    This is the first sound. It appears when a hero picks up a key:

    And this is the second when a hero goes through a portal:

    I may guess there is a hidden message here: before entering a podcast, you pick up a key. And finally, you exit from a maze with the victory.

    The idea of that came to me when I found myself singing a musical theme from the game right after the podcast has finished. I’m not sure if I’m right, but this one is really a great message. Thanks to those guys who are responsible for audio production.

    Bonus: listen to the soundtrack. I hardly can imagine it was written using primitive 8-bit midi-driver.

  • Сны-фильмы

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

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

    Сон первый. Две цивилизации

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

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

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

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

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

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

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

    Сон второй. Охотники за воздухом

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

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

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

    Раскопки ведутся на том месте, где много лет назад потерпела неудачу прошлая экспедиция. По плану с Земли, именно в этом месте залегают богатые месторождения. Но природный катаклизм засыпал карьер, и никто не выжил. Из нынешней экспедиции никто не уверен на 100%, что месторождения действительно здесь. Фактически группа становится участником лотереи, где награда – большие деньги, но в случае неудачи гарантирована смерть, поскольку посылать помощь с Земли слишком дорого.

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

    Герой проверяет данные, и все сходится – там, где они ведут раскопки мало кислорода, но много металлов. Серия экспедиций рассчитана на развитие колонии-рудника, а не свободного поселения. Он созывает группу и пытается донести факты до остальных, но капитан команды грубо обрывает его и изолирует за саботаж. Ученый догадывается, что капитан – доверенное лицо той самой корпорации с Земли.

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

    Главный герой становится новым лидером группы. Перед ним сложный выбор: остаться на старом месте, где есть хотя бы скудные залежи минералов, или двигаться на новое место, указанное в архивах без каких-либо гарантий. Остатков топлива хватит только в один конец.

    Принято решение двигаться. Анализ горных пород на новом месте показывает, что содержание кислорода в минералах более чем достаточно. Герой втыкает лопату в грунт и говорит, что это место будет городом, названным в честь той девушки. Группа начинает усердно работать. Через 100 лет зритель видит очень развитое поселение. Оно живет автономно от Земли и намерено создать новую цивилизацию. В центре города воздвигнут постамент двум ученым – главному герою и девушке, чьи записи помогли найти место. Постамент сделан из минерала, который испаряет кислород.


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

  • Ответы на вопросы читателей Хекслета

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

    Вопрос по поводу прокачки “понимашки” :)

    Проблем с самоорганизацией и мотивацией нет.

    Есть проблема с интеллектом и математической подготовкой: многие сложные вещи не получается переварить самостоятельно. Конкретные примеры такие: задачки из СИКПа (над большинством сижу по неделе, таким макаром я его читать буду года 3, что затормозит мой прогресс в других сферах программирования), некоторые задачи на работе (трачу очень много времени - вместо выделенных 3-х часов на таск, в итоге залогировано 9 часов).

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

    Можно ли, используя правило 80\20, научиться прикладывать усилия в самых “нужных” местах, чтобы получить максимум возможного результата и потратить меньше ресурсов?

    Ориентируйтесь не на исследования, а на ощущения: что говорит тело. Нет смысла тратить адское количество времени на СИКП. В итоге, убухав год, вы станете только одним из тех, кто прорешал весь СИКП. Таких как вы тысячи, но им по-прежнему тяжело найти работу в промышленной разработке и сделать карьеру. Насчет последнего вопроса: если я понял правильно, то да. Не обязательно прорешивать каждую проблему до самых мелочей. Для обучения достаточно понять суть и двигаться дальше, а вот уже на настоящем производстве решать задачу не на 100, а 200 процентов.

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

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

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

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

    1. Здравствуйте, сейчас пытаюсь изучать Machine Learning & Data Science и в процессе изучения возникают некоторые трудности, в частности когда речь заходит о мат. анализе или статистике, приходиться во время прочтения книги или просмотра курса, углубляться в те познания которые отсутствуют или были забыты. На это уходит достаточно много времени ,так как за изучением одной темы, скрывается другая и т.д. Хотелось бы узнать какую стратегию изучения выбрать - гуглить по мере поступления вопросов или сначало набраться нужного бекграунда и после приступать к изучению данной темы. Интересно ваше мнение и как бы вы поступили в данной ситуации.
    1. Сейчас для изучения чего-либо, пишутся много книг, проводят разные курсы, как не запутаться во всех этих материалах и проследовать правильным путем к достижения цели?

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

    Блокчейн (не касаясь криптовалют)- есть смысл погружаться в него? Технология войдёт в нашу жизнь, как смартфоны, или останется “игрушкой” а-ля эфир-зефир-койн?

    Проблема Блокчейна в том, что он оброс толстым слоем всевозможных крипто-аналитиков, мошенников, сомнительных стартаперов. Выражение “крипто-стартап” вызывает тошноту. Скажем так – блокчейн как технология будет иметь место, но не настолько широкое, как заливают упомянутые лица. Просто будет такая технология, будут вакансии, случаи внедрения и отката. Стоит заметить, что за 10 лет Биткоина не появилось ни одного действительно полезного продукта на его базе, а это повод задуматься.

    Как правильно заниматься по СИКП? Решать все задачи подряд, какие главы стоит пропускать? Заметил что между Последовательностями и Программированием, управляемым данными в книге есть немалый раздел про графическую и символьную часть.

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

    Когда по вашему мнению профессия программист исчезнет(как массовое явление)?(только честно). Ведь автоматизация в этом направлении уже идет…

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

    1. Когда спрашивают на собеседовании об ООП, чтобы вы посоветовали отвечать? Классика жанра или по Алану Кею.
    1. ML это мыльный пузырь или тренд на десятиление? Математика была готова как лет 40 назад, инструменты с 2000-х точно (matlab, excell, python), а вот реально доступные большие данные появились с 2010-х (вернее генерация данных для бизнеса). Это ж голый матстат и линалгебра. Откуда хайп? Почему все готовы учить ML? Есть ли реальный спрос на ML или все-таки это спрос на фундаментальных математиков?
    1. Рекурсия. Почему многие языки так и не поддерживают оптимизацию хвостовой рекурсии?

    1) Если вам позарез нужна эта работа, отвечайте по канонам, не нужно что-то доказывать. Вообще, при устройстве на первую работу полноценного мнения у вас и не может быть из-за малого опыта. Отвечайте что написано в книгах, если собеседник не согласен – не спорьте, а спросите прямо: у меня мало опыта, мне интересно ваше мнение. Это даст миллион очков в вашу пользу. Человек, который умеет слушать в сто раз полезней человека, который знает ООП. Собственное адекватное мнение про ООП у вас может быть только после 5-8 лет работы в промышленной разработке, но там и собеседование будет другое. Когда джуниора спрашивают про ООП, это скорее проверка на адекватность и базовую осведомленность.

    2) Пожалуйста, не используйте слово “тренд”. Стараниями маркетологов, сеошников и прочих оно обесценилось до уровня слова “хайп”. Не хватает только банера мобильного оператора со слоганом “МТС это тренд”. Если по делу, ML займет определенную нишу. Оно уже показало, что способно решать важные задачи, поэтому будут вакансии, будут курсы. Тренд – это максималистическое, юношеское понятие (если речь не об экономике или промышленности). Кто-нибудь может сказать, что программирование на Руби это тренд? Мир быстро расширяется, и то, что вчера было “трендом”, становится просто устойчивой его частью. Можно неплохо зарабатывать обычным разработчиком сайтов безо всякого ML. Но если есть время и деньги на изучение – почему бы и нет. Помните, что после курсов нужно запихнуть себя в проект с ML, иначе все будет зря.

    3) Потому что хвостовая рекурсия неочевидна даже опытному программисту. Каждый раз приходится напрягаться и определять, “оптимален” ли этот случай или нет. В императивных языках с изменяемыми переменными и циклами в ней вообще нет смысла. В Кложе специально ввели конструкцию loop-recur потому что это удобно – во-первых, сразу сигнал о том, что это хвастовая рекурсия (под капотом это цикл), во-вторых, она гарантирует жесткие проверки на “хвостовость”. В Скале требуется специальная аннотация. Словом, в императивных языках хвостовая рекурсия даром не нужна, в функциональных она должна быть явно обозначена.

    Сколько оптимально выделять в день времени на труд над решением задач и изучением теории программирования, так чтобы не перегореть и двигаться более-менее эффективно?

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

    Что нужно делать чтобы развить soft-skills?

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

    Я вот на эликсиреСкулл просматриваю текст Основы. Вот что мне делать. Я вот если прочту мне просто это повторять (кодить)? Быстро запоминаются? То есть как программисты работают с документацией?

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

    Эликсир есть смысл учить?(не участвую в конкурсе) Или другие лучше?(Руби, Ява,…) А зачем Язык Racket изучать? С++ толк есть изучать? А язык Go?

    Давайте по-честному, мы изучаем что-то, чтобы доставить мозгу удовольствие. Мы удовлетворяем любопытство – одну из глубинных потребностей нашего мозга. С точки зрения удовлетворения любопытства нет разницы, что изучать. Подойдет и любая экзотика, и промышленные стандарты. Учите что хотите! Мозг взрослого человека всегда сумеет скрестить знания из самых разных областей. Джобс ходил на курсы каллиграфии в монастыре, а через 10 лет сделал лучший по тем временам интерфейс.

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

    Нет, “веб разработчиком сайты” математика не нужна.

    Скажите, пожалуйста, сколько времени в день/неделю вы посвящаете на чтение книг, статей, ведете ли вы какие-либо пет-проекты ?

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

    Используете ли вы язык Go в разработке? Какие плюсы у этого языка, и где он находит применение?

    Плюсы в простоте, высокой производительности, быстрому старту, изначальной ориентированности на сетевое программирование и распараллеливание задач. Применяется для командных утилит, микро-сервисов, сетевых программ. Поддерживается Гуглом, очень популярен в Китае. Из минусов – убогая система типизации, нет дженериков (общих типов, например “любое число”), бедный тулинг (система зависимостей).

    heroku, firebase, gitlab и прочие сервисы - надо/не надо, как использовать, best practice

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

    Добрый день. У меня к вам несколько вопросов:

    1. Какие нерешенные задачи есть сейчас в программировании как в профессии?
    2. Какие неочевидные риски ожидают человека при выборе профессии программиста?
    3. Какие типовые ошибки совершаются при входе в профессию?
    4. Каковы прогнозы по появлению новых направлений в программировании?

    1) Для меня наболевшая проблема – неинформативные сообщения об ошибках, когда что-то не запускается. Почти ни одно сообщение невозможно понять, только поиск в Гугле.

    2) Непонимание того, что в программировании много переговоров с заказчиком. Что вокруг одной строчки может быть обсуждение в несколько дней и десятки писем. Что в 9 случаев из 10 вы редактируете чужой код, а не пишете свой.

    3) Думаю, все то, что следует из предыдущего пункта. А еще излишняя самоуверенность и презрение к чужому коду и языку.

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

    Сейчас в сети можно найти много литературы по компьютерным и математическим темам , переводов иностранных авторов, которые издавались в СССР в 70-80-90-х годах. Некоторые из этих книг, например Алгоритмы + структуры данных = программы Н.Вирта рекомендуют почитать, даже несмотря на возраст книги, мол они действительно полезны в плане развития профессионального кругозора, особенно для начинающих программистов.

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

    Стоит, если это приносит удовольствие. Насиловать себя смысла нет. Удовольстве будет, если вы уже знаете материал и читаете книгу как подтверждение того, что вы крутой. Тогда читать будет ненапряжно. Гораздо хуже, если вы читаете через силу и вдобавок пишете об этом во все чаты. Вспоминается сарказм: если ты бегаешь по утрам, но никто об этом не знает, это не считается.

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

    Если абстактно – нет, деньги это неотъемлемая часть качественного труда. Если в реальности, я бы нашел способ получать за это деньги.

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

    Абсолютная чушь, в тридцать только начинает появляться опыт. Всем моим коллегам по 30 с чем-то лет, у всех проекты. Другое дело, что возраст должен кореллировать с уровнем. Искать работу джуниором в 30 лет весьма сомнительно.

    Расскажите, пожалуйста, каков, в вашем видении, должен быть процесс роста front-end разработчика после Middle-уровня. Я конечно, понимаю, что это все размытые понятие, и в разных компаниях это может обозначать кардинально разный уровень навыков и самостоятельно решаемых задач, но все же - какой путь развития выбрать после 2-3 лет в индустрии (хотя это уже наверное что-то между senior и middle будет)? Дальше развивать свои навыки, расширять стек и улучшать качество кода, становясь полноценным Senior? Подтягивать back-end (ту же ноду, например) и брать курс на full-stack разработчика? Или же плавно перекатываться вообще в менеджмент? Или архитектура?

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

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

    Я достаточно апатичный человек. И это сильно мешает по жизни. С одной стороны, очень хочется выполнять работу в срок, дописать несколько начатых программ, всё успевать. Но с другой стороны, всё время заваливаю сроки, отвлекаюсь на мелочи и просто хандрю :-( Пытался составлять список дел, не хватило собранности ему следовать. Мне 22 года, учусь в университете по технической специальности. Есть опыт работы после колледжа. Как по Вашему опыту, есть выход из ситуации? Что посоветуете? И присоединяюсь к вопросу о soft-skills.

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

    Как вы боролись в ActiveRecord в своем проекте, бодрые советы как не создавать божественные модели (PHP Yii, Laravel)

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

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

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

    Виртуальная реальность сейчас - это как интернет в прошлом? Что вы думаете о перспективах развития этого направления?

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

    Брался за программирование несколько раз в своей жизни, но всегда бросал. Проблемы были из-за мнений других людей. Допустим, негативный комментарий к коду на сайте про IT-тематику, который мог бы написать я (статья и код не мой, просто похожий образ мыслей) мог выбить меня из колеи на несколько месяцев. И всё в таком духе. Из-за этого боязнь задавать вопросы и т. д. Может быть, вопрос не по адресу, но что делать в такой ситуации? Спасибо.

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

    Как не просто быстро, а супер быстро прокачивать скилл и ex. в разработке?

    Запихать себя в проект с упором на то, что вы намерены прокачать.

    Где можно найти достоверные толкования терминов программистких? И онлайн словарь Eng - Rus достоверный?

    Достаточно спросить у коллег.

    Как Находить проблемы которые нужно решить в программировании? В вебе.Или в фрейворках .Или как то еще. Задачи. На чем практиковаться.

    Достаточно собрать отзывы пользователей вашего продукта в свободной форме. Работы хватит на несколько лет.

    Что уже не нужно знать?( к примеру фронтендеру верстку?) Или что не так важно знать в программировании вообщем? пример - не нужно выполнять какие-то действия не из-за их простоты, а из-за того что они под капотом, и снаружи облегченное использование (н/р рельсы). Или полностью автоматическое …?

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

    Как справляться с перегоранием, которое появляется из-за тупикового состояния, которое появляется в результате того, что упираешься в проблему, которую самостоятельно не получается решить (либо освоить что-то)? (Почти все начинания притормаживаются на 50% пройденного пути, продолжаются с новыми силами через месяц-три, либо вообще остаются заброшенными).

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

    С++ нужен для фронтенда? Как считаете он будет для веба популярен? И каковы перспективы ВебАсембли?

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

    Добрый день . не подскажите ,я являюсь системным администратором и хотел бы переквалифицироваться. но глядя на все это со стороны “чайника” вижу и понимаю .что это пучина , озеро в которое бухаться очень страшно и непонятно с чего начинать , дак я о чем . подскажите с чего можно начать программирование ( преимущественно думаю выбрать php/javascript\html5) заранее спасибо.

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

    Вопрос про участие в опенсорс проектах, стоит ли начинать новичку, какие плоды это принесет, как и с чего начать, и участвуете ли вы, если да то в каких? Спасибо!

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

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

    Какие, почему и на каком уровне языки стоит изучить для максимального расширения кругозора? Какие языки изменили ваше представление о программировании или даже образ мышления?

    В моем случае это стала Кложа после 8 лет классических ООП- и императивных языков. Я со студенческих лет увлекался различными лиспами, но Кложа стала поворотным моментом. Замечу, что никакой перемены бы не было, если бы я не поменял работу на ту, где писали на Кложе. Так и осталась бы игрушечными проектами на Гитхабе. Отвечая на вопрос: неплохо развивают функциональные языки без лишних усложнений, это Clojure, Racket, Erlang, Haskell. Не Scala.

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

    Достаточно мысленно поделить проект на множество систем и группировать код согласно этому правилу. У вас есть подсистема авторизации, только она знает как это работает. Остальным модулям запрещено нырять в ее кишки, а только вызывать высокоуровневые функции. То же самое с обработкой оплат, блокировками пользователей и т.д.

    Можете вспомнить и рассказать свой распорядок дня, когда нашли первую работу разработчиком?

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

    Есть много понятий: парадигмы, архитектуры, паттерны/шаблоны, методологии… Можно ли выстроить все понятия в некую структуру, чтобы видеть картину в общем: что есть что, для чего нужно и как все это между собой связано? Например, для чего нужен SOLID, для чего TDD, для чего ООП, что есть общего у этих понятий, в какой последовательности учить?

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

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

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

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

    Ну, Хекслет хорош. Новичку гораздо полезнее будет группа опытных коллег, а не форумы.

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

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

    Есть на хабре интересная статья под названием “Опасности обучения на Java” Если очень кратко, то суть сводится к тому, что сейчас “порог вхождения” низок и слабая “общая база”. Алгоритмическая подготовка, математическая подготовка и т.д. Далеко ходить не надо. Подтверждение этому курсы на каждом углу вроде “Стань Java программистом за три недели”. Вопрос прост и сложен одновременно: что поможет кодеру быть программистом? Как найти то, что будет полезно на этом пути? И кто может в этом помочь.

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

    Хотелось бы чтобы затронули немного вопрос про мотивацию, допустим как себя мотивировать кодить, выполнять таски и в этом роде. Бывает такие моменты когда “штурмуешь” одну задачку несколько дней и падает мотивация дальше делать курсы, ведь подглядывать задачки не ок, а если начнёшь смотреть решение, то за одной задачкой и сразу другая последует. Хотелось бы ещё узнать планируются ли курсы по TypeScript, Angular2 + версии, Vue. Хотелось бы ещё побольше рекомендованной литературы, может какие книги посоветуете для саморазвития, которые можно почитать в свободное время от кодинга. Например Правило 10x. Художественная литература тоже приветствуется.

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

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

    Зависит, извините, от вашей упоротости. Не спать два дня – вредно. Не пользоваться зрением 10 дней – имеет смысл если вы пишете книгу про слепых или снимаете фильм о слабовидящих, то есть пытаетесь вжиться в образ. А так зачем оно вам? Не есть сахар хорошо, а вот соль нужна в малых количествах. Периодически лишать себя чего-то полезно, но у вас полный разброс. Это скорее баловство, и я не вижу смысла.

    Как стать архитектором?

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

    Кирилл упоминал не раз что не стоит о себе говорить как о Java-разработчике или python-разработчике, а надо говорить что мол инженер. Что делать в таком случае если в вакансиях стоят конкретные требования а-ля 5 лет опыта в js или Obj-C, как убедить работодателей что переход на другой язык дело месяцев максимум?

    Чтобы удовлетворить рекрутеров, пишите в резюме одно, а в разговоре с коллегами говорите другое. Хотят они увидеть сеньора – впишите его. Не вижу конфликта. Переход на другой язык – это не дело месяца. Формально вы пишете другой код, но мыслите старыми парадигмами. Я бы не утверждал столь категорично.

    Как нащупать свою нишу для создания IT продукта? Хочу рано или поздно запустить что-то свое, но пока ввиду отсутствия опыта и достаточного кругозора непонятно, как откопать что-нибудь интересное, какую-то острую для отрасли/профессии проблематику.

    Трудно советовать, потому что у меня нет собственного по-настоящему успешного проекта. Мне кажется, он должен быть о том, что интересно лично вам. Например, один чувак забыл флешку когда сел в поезд. Он взбесился и написал то, что потом стало Дропбоксом. А меня бесит читать новости с сайтов, поэтому все, что я пишу в свободное время, так или иначе связано с RSS. Как-то так. Любите игры – делайте сайт об играх, о котиках, и тд.

    По какому пути, по вашему мнению, стоит идти при разработке своего проекта:

    1. Помимо необходимых HTML, CSS, JS освоить как можно больше технологий (Back/Front фреймворки [Django, Vue], базы данных, Nginx, Git, Webpack, Ansible, Docker и пр.), чтобы потом, как говорится в мультике «Лучше день потерять, зато потом за пять минут долететь» и к тому же меньше переделывать в дальнейшем?

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

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

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

    Надо внедрять фичи, которые приносят больше денег.

    что рассказать на вопрос про ООП на собеседовании?

    Уже было выше – не надо отсебятины, рассказывайте то, что написано в Википедии и книгах. Если собеседник не согласен – послушайте его точку зрения. Заодно разведаете обстановку в фирме.

    Как победить закостенелось в команде из разряда “мы всегда так программировали”, когда это явно приносит не самые плохие, но далеко не выдающиеся результаты? И отсрочка проблем вида “сейчас некогда, потом поправим”, а потом никогда не наступает.

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

  • Environ variables are not for configuring software

    The recent project I’ve finished and deployed gave me a strong understanding why using environment variables for configuring is a bad idea. Briefly, I’m going to not use them anymore for setting up my software and maybe clean them out from my previous projects. There is a pile of reasons for that.

    Generally speaking, env vars aren’t bad in general. I’d just like to highlight that they come from the ancient Unix time when people didn’t have suitable development tools. But nowadays we have some. For example, thanks to JSON or YAML, we do not need to parse integers or floats manually. The same about arrays or maps. Some better formats like EDN even provide built-in date support or even custom tags to parse special values. With these great tools, there is no need to roll back for 20 years ago and parse text chunks once again. That’s the routine we’ve successfully passed.

    In short words, a config is usually a structured data. And we’ve got stuff to read data from text without any problems. Why use env vars then?

    You might be a bit wondered reading this since it conflicts with the third section of 12 Factor App Development Manifest. This section clearly says:

    The twelve-factor app stores config in environment variables (often shortened to env vars or env). Env vars are easy to change between deploys without changing any code; unlike config files, there is little chance of them being checked into the code repo accidentally; and unlike custom config files, or other config mechanisms such as Java System Properties, they are a language- and OS-agnostic standard.

    Well, I read this paragraph a number of times but still guessing is there any sense out here. Easy to change? Well, you’ll need to edit some file or config anyway. Little chance to commit them into a repository, really? If you have an ENV file with 30 variables, there is no any difference between it and any other file in your repository, say “config.json”, “settings.prop” or “params.conf”. ENV file is just yet another file without any special properties. You still need to control by your own whether it should be ignored or tracked by your repo.

    The whole #3 section says nothing about what benefits the env vars bring into a project. From my prospective, since the 12 Factor App was initially written by Ruby programmers, there is nothing else then just a cargo cult.

    The idea of getting rid of a regular JSON, YAML, Java .props config file is totally wrong. Of cause, if a program requires one or two arguments, there is no a reason to distribute a separate config file. Especially when those parameters have default values and might be overridden by command line arguments. But the problem is, our modern web apps require up to 30 parameters at once and even more.

    Definitely, you’ll keep them in a text file, say “ENV” or “vars”. So what’s the difference here to have a JSON file?

    If you take cprop, a Clojure library that turns env vars into a map, you’ll see that it provides a bunch of tricky rules for types coercion and splitting nested values. For example, “true” and “false” strings will be converted to a boolean value. A variable with a double underscore will be read as a nested map:

    export FOO__BAR=42
    
    {:foo {:bar 42}}
    

    That tricky logic may let you down sometimes. Imagine you’ve got a secret API key for some service that it a string but consists only of numbers:

    export API_KEY=123123123
    

    In Clojure, the result would be a number, not a string:

    {:api-key 123123123}
    

    There won’t be any error during parsing, but suddenly, in the middle of running an app, you’ll get an exception that says something like “the Long type cannot be cast to a Char Sequence”. It’s because the code tries to act on that API key like it’s a string, but it’s an integer.

    You should have marked that key with double quotes instead:

    export API_KEY='"123123123"'
    

    Well, that’s a known issue and it’s even mentioned in the official readme, but still. I can never remember the proper order: single-double or vice versa. I don’t want to fight with those damned quotes again. It has been enough in shell scripting: single quotes, double quotes, back-ticks. Now again in my Clojure? No way.

    In terms of cprop, there is nothing weird here because it doesn’t know anything about the variable’s semantics. They are all just text and nothing else.

    I’d like to stress that we’ve just invented our own system of rules and wrote plenty of code just for one purpose: to turn env vars into a map. It’s plain to see the code behaves a bit strange and forces us to keep that ugly scenario with quotes in mind.

    Even a dull JSON file that supports a limited number of hard-coded types seems to be a salvation after been using env vars for a long time, really. A string will always be a string and won’t turn into a number. There is no need to add a double underscore in the middle of a name to simulate nested data.

    But the main reason for getting rid of env vars is they tie us to all that legacy that our systems still need to carry. Let’s say honestly, env vars are just another part of Unix shell and related stuff. I do not have anything against them when they are used in the right way. For system administration, for example, but not for web development.

    I mentioned before that a program should never rely on shell commands. Never call mkdir, curl or any other commands. You may think it reduces the code, but in fact, it’s a deal with the devil. Java code that creates a folder will work on any OS or device as expected. But a shell command won’t.

    The same I may say about env vars. They are part of a shell system and that’s why are great for OS environment, but not a web application. They should never affect an app running in production. The codebase should rely only on its own resources. From the app’s prospective, a JSON/EDN config file is something that an app may control. But the env vars are not.

    I think that’s enough said on the subject. Provide your own config based on any structured file format, no matter if it is a JSON, YAML or EDN file. But leave the env vars alone. They are from Unix legacy and have nothing common with modern development.

  • Емакс и парное программирование

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

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

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

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

    Подам пример первым: последние дни я работаю в паре, и когда вижу, что коллега работает иначе, просто молчу. Спросят – посоветую, не спросят – значит, ему так удобней, не мое дело. Если оценивать беспристрастно, львиная часть времени уходит не на набор кода, а обсуждение и эксперименты в консоли. Грамотная навигация в лучшем случае выиграла бы минут 15-20.

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

    Умеешь Вим или Емакс – умей молча. Уважай других.

  • О запретах в семье

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

    • А жена кем работает?

    • Никем, я ей дома сказал сидеть. Все равно мало платят.

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

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

    Дом – это изоляция и отупление. Приятно утром идти на работу, приятно вечером возвращаться домой. Попробуй посиди в четырех стенах весь день.

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

    То, что муж вообще что-то запрещает жене, словно она ребенок или кошка, говорит о пиздеце в отношениях.

  • Дамп Телеграма #4

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


    Оказывается, существует утилита envsubst, которая рендерит файл текущими переменными окружения. А я с sed мучался. И не только я один.


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

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

    Варламов делал замечательные прогнозы насчет курса доллара. “Запомните этот твит”. Запомнили разве что в качестве эпичнейшего фейла.

    Бирман в прошлом году писал, что биткоин вырастет до триллиона. Я не понял триллиона чего — рублей или долларов — но ни того, ни другого не наблюдается.

    И все они пишут и пишут пророчества одно другого хуже.

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

    И хватит это репостить.


    В одной из серий Смешариков происходит такой диалог:

    — И какой расход у этой машины? — Пятьдесят на сто. — Что, пятьдесят литров на сто километров? — Нее, наоборот. — О боже!

    Вопрос, во сколько раз отличаются предпологаемый и фактический расходы топлива?


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


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

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

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

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

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


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

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

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

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


    Настоящая распределенная система, где никто никому не верит — это не биткоин, а российская медицина. Распределена она потому, что нет никакой общей базы не то что в пределах города, но порой даже учреждения. Каждый, кто проходит более-менее серьезную процедуру, сталкивается с тем, что информацию о нем заносят в компьютеры по много раз. Мои учетные данные висят, наверное, в десяти разных базах в Excel, MS Access, DBF, а где-то и просто текстовых файликах. Даже не представляю, насколько адовой была бы задача привести их к общему виду, не просрав данные.

    Система распределена прямо как в биткоине: каждая контора держит свою базу, набивая данные вручную с паспортов и полисов. Синк случается раз несколько лет, на флешке и вручную. Никто друг другу не доверяет, потому что… просто не доверяет. Прямое следствие из первого пункта. Особенно сильно подгорает у гос. врачей, когда к ним приходишь из платных клиник. Там и фейспалм будет, и едкие эпитеты. В платных настоятельно рекомендуюст все пересдать у них. И даже на диск запишут за 500 рублей. На диск, Карл.

    Распознать какой царит разброд в данных о пациетах нетрудно хотя бы по интерфейсам программ. Где-то стоит решение от 1С, в основном в платных клиниках. В госе установлены веб-приложения в Хроме. Бывает что-то нативное, похожее на Дельфи. А бывает и легаси на Досе и псевдо-оконном интерфейсе (Турбо Паскаль & Вижен). Так что рассуждения об общей базе и сквозной авторизации остануться влажными мечтами айтишников.

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

    С конвертацией тоже беда: одно поле стандарта А маппится на два поля Б и наоборот. Одна таблица маппится на три, плоское на вложенное, ня. Обсуждение одного поля может занять день. И тут встает вопрос: а может, и так нормально было, как в России?


    Когда врач просит телефоны родственников – это слегка бодрит. Вдруг и правда понадобятся.


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

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

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

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


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

    Сидим мы как-то раз, и в кабинет заходит гопник. Такой весь каноничный, кепка, треники, табаком разит. Оглядывает кабинет и по высоте стула определят, кто здесь главный (у начальника было т.н. “кресло руководителя”). Без приглашения подсаживается к нему, закинул ногу на ногу и спрашивает — вам программист на 1С нужен?

    А начальник ему — вы нам не подходите. И дальше что-то там кодит. Гопник повтыкал-повтыкал и вышел. Вот как прошло то собеседование, которое я никогда не забуду.


    Максим Ильяхов:

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

    В работу придется инвестировать время. И тут есть интересный момент.

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

    Зато сделать что-то серьезное в работе можно только до 30, дальше ты уже пожинаешь плоды. Терять время опасно.

    Конец цитаты. Источник


    В каждой области есть професиональный жаргон. У моряков корабли не плавают, а ходят. У нефтяников не добыча, а дОбыча с ударением на первый. У инженеров лифтЫ, на последний. Охотники идут нападать. Программисты различают процессор и системный блок, а некоторые даже Java и JavaScript.

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

    В эту же категорию попадают “в\на Украину” и республика Беларус(сия). Ребята, вы можете быть прекрасными людьми, тим-лидами и лапочками. Но, поправляя собеседника в случаях выше, ведете себя как мудаки. От этого мне особенно неприятно: нормально же общались, и тут на тебе. Срочно исправляйтесь.

    Ни у кого в мире нет монопольного права на язык.


    Одному мне кажется, что все эти SOLID, KISS, DRY и прочие аббревиатуры высосаны из пальца? Просто чтобы красиво было, а смысл притянут за уши.


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


    Когда я писал, что у меня нет хобби, а только скоупы (работа, дети), забыл, точнее, отложил написать о еще одном — о сексе.

    Вообще, если мыслить абстрактно, скоуп секса — малая часть более широкого скоупа под названием “познай себя”. Но я решил ненадолго сменить тему и что-нибудь написать про секс.

    Когда кто-то говорит, что интересуется сексом, воображение рисует БСДМ, любовь на троих, игры с едой и прочую шаблонную чушь из интернета и журналов. Интересоваться сексом значит изучать себя и партнера, пытаться выяснить, какие слова и чувства вызывают волнение. Стараться фиксировать прошлый опыт, чтобы в следующий раз было лучше. И конечно, следить за физическим и ментальным здоровьем, чтобы и в 30, и в 40 лет, и до старости уметь получать удовольствие.

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


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

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

    Я читаю книгу “Чего хочет женщина” издательства Манн, Иванов и Фербер. Кто не знает, это крутые ребята, книги у них огонь. Но даже у них отвалились яйца и книжка серьезно просела в названии и обложке. В оригинале она называется “Come as you are”, что если дословно, пусть и топорно “Кончай как тебе удобней”. Там вся книжка о том, что нужно стремитсья к своему, а не чужому удовольствию.

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

    Ссылки:


    Продолжая тему отсталости: как-то раз я сидел в фойе одного заведения, и там работал зомбоящик. Шел российский детективный сериал. Убили девушку, мент осматривает квартиру. В шкафу находит презервативы, лубрикант и кружевное белье. Делает непогрешимый вывод — убитая подрабатывала проституцией!

    Рука и лицо. Из какого средневековья ты вылез, сраный сценарист, что у тебя девушка с лубрикантом де факто проститутка? Еще и белье купила? За вибратор ты бы навернео сжег ее на костре.

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

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


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

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

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

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


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

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

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

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


    Все наше Ай-Ти — это как в Южном Парке, выбор между говном и клизмой. Третьего не дано.

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

    Ладно, смотрю на вариант с сервером GMail. На первый взгляд никаких проблем: ставишь из репозитория SMTP-библиотеку, вбил креды и погнал. Не работает! У Гугла параноидальные настройки безопасности. Кто не знал, с точки зрения корпорации нормальная работа с почтой возможна только по протоколу OAuth2, а голое SMTP-подключение возможно только при особой комбинации параметров, которые вместе образуют своего рода парад планет. Должна быть двухфакторная авторизация и сгенерированный пароль приложения. Это еще легко нагуглить. Но если это аккаунт из домена, то нужная еще одна хитрожопая опция на уровне организации. Последнее нигде не описано, догадаться о ней можно только по косвенным признакам. На расследование ушло два вечера.

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


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

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

    Утренный свет способен разбудить уже в 5 утра, и заснуть без маски трудно. До подъема это будет уже не сон, а в лучшем случае дрема. Оказалось, что с маской можно спокойно заснуть как ни в чем не бывало. Заметил, что качество сна улучшилось, и самочувствие тоже.


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

    Для меня эти любы-ляли звучат как женская версия советского мема “он же Гога, он же Жора”.

  • The Darkest Dungeon

    Год назад я прошел замечательную игру The Darkest Dungeon. О ней и хочу рассказать. Я играю довольное редко: не больше одной игры в год, а то и реже. Может быть поэтому игры оставляют так много впечатлений, что хватает надолго вперед. The Darkest Dungeon запомнилась непередаваемой атмосферой, музыкой, проработанностью во всех деталях. Я до сих пор слушаю официальный саундтрек.

    Игра очень нетребовательна к ресурсам. По словам разработчиков, они использовали собственный легковесный движок. Запускается на Маке со встроенной видеокартой, что очень важно. У меня нет игрового компа и желание покупать его, поэтому увлекательная игра на рабочем Маке без видеокарты – большая редкость.

    The Darkest Dungeon выполнен в двухмерной рисованной графике с характерным стилем. Отсутствие 3D компенсируется превосходной анимацией, необычайной плавностью картинки, текстовым и голосовым сопровождением. Очень напоминает первые два Fallout, когда графика отходит на второй план и настигает полное погружение в мир игры. А когда выключишь – все еще мысленно там.

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

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

    Главная особенность игры состоит в непередаваемой атмосфере ужаса и безысходности. Создатели The Darkest Dungeon вдохновлялись произведениями Лавкрафта. Не помню, писал ли я о нем в блоге или нет, но Лавкрафта я очень люблю, прочел сборник лучших его произведений. В игре действительно много отсылок к его творчеству, попадаются отдельные цитаты. Например, единожды побывав в Темнейшем подземелье, персонаж сходит с ума и отказывается туда идти вновь со словами «The geometry of that place is wrong!». Это точная цитата сумасшедшего моряка из рассказа «Зов Ктулху» о городе, вплывшем из недр океана, где жил Ктулху.

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

    От Лавкрафта игра позаимствовала не только сюжет и отдельные цитаты, но и общую концепцию ментального здоровья и психики. Нечто подобное было в предыдущих играх на тему миров Лавкрафта. Например, в Call of Cthulhu, если долго смотреть на монстров, персонаж сходит с ума, начинает задыхаться и в какой-то момент умирает от разрыва сердца или самоубийства. Но в The Darkest Dungeon процесс психических расстройств смоделирован очень точно и убедительно, и вообще является центральной точкой игры. Недостаточно вывести героев из подземелья живыми: важно, чтобы они сохранили ментальное здоровье.

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

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

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

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

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

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

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

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

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

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

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

    Из этого следует чрезмерная сложность игры. Я далеко не заядлый геймер, но и играю не первый год и имею некоторое чутье к процессу. Уровень в The Darkest Dungeon просто зашкаливает. Игровая механика ревностно следит, чтобы случались факапы: не хватило провианта или факелов, криты врагов выпадали на одного и того же персонажа, герои гибли. Чуть выше я писал о привале. Так вот, с некоторой ненулевой вероятностью ночью на лагерь могут напать монстры, и придется сражаться в полной темноте и потерей инициативы (это когда первый ход делает вражеская сторона). Стоит ли говорить, что один такой неудачный бой может вернуть команду в состояние еще хуже, чем до привала.

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

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

    Разработчики заготовили 8 боссов в обычных подземельях, убить их требуется по ходу выполнения квестов. Еще один босс, ужасный Коллекционер, рыщет по уровням в случайном порядке. Отряд может встретиться с ним, если уровень стресса хотя бы одного персонажа выше 70 очков. Этот товарищ собирает души тех, кто вышел из подземелья. Еще один босс – Шамблер, космический зверь-шатун – остается на откуп игрока. Вступить в бой с ним можно только по желанию. В подземельях высшего, красного уровня встречаются враги-мини боссы, на убийство которых уходит много сил. Уровни Темнейшего подземелья наполнены боссами. Финальный уровень – один сплошной босс. Перечислю несколько колоритных боссов.

    Свиной Лорд. Со слов рассказчика, этот ужасный свин стал продуктом скрещивания свиней с демонами из портала. Для его откорма дед использовал крестьян из ближней деревни. На вражеской стороне два свинтуса: большой и маленький. Хитрость в том, что большой наносит урон, а маленький координирует его действия: указывает, на кого нападать. Если убить мелкого свинтуса (что довольно легко сделать случайно), жирный свин озвереет и начнет наносить двойной урон, с которым команде не выжить. При этом персонажи склоняют игрока к ошибке: в начале боя они переговариваются, мол, давайте грохнем мелкого, а потом жирного. И только потом, словив люлей, кричат: черт, надо было наоборот. Это весьма в духе той самой механики игры: подтолкнуть сперва к ошибке, а потом к исправлению.

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

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

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

    Игроку доступны 16 типов персонажей, каждый из них хорош в чем-то одном: атаке, защите или поддержке. Важно собрать устойчивые команды, где каждый персонаж вносит максимальный вклад. Например, отряд без весталки-целительницы падет от ран. Шут – единственный персонаж, способный снимать стресс прямо на поле боя. Без рыцаря команда не нанесет должного урона врагу, и так далее. Некоторые персонажи обладают способностями, о которых нигде прямо не говориться. Считается, что игрок должен узнать о них сам. Например, женщина-антиквар совершенно бесполезна в бою, зато одно ее присутствие увеличивает вместимость инвентаря и частоту выпадения ценных предметов.

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

    Цель игры, как я писал выше, состоит в том, чтобы спуститься на три этажа в Темнейшее подземелье, ведущее в потусторонни портал. Оно открыто практически с самого начала игры, и в каком-то смысле это роднит The Darkest Dungeon с Fallout. Если знаешь, что и как делать, то проходишь игру за двадцать минут. В случае с Темнейшим игра опять провоцирует игрока на ошибку: сунуться, затерпеть в первом же бою и бежать. Ах да, мелкая деталь: при бегстве из Темнейшего один из персонажей обязан пожертвовать собой, защищая товарищей при отступлении.

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

    В отличие от обычных уровней, генерируемых игрой случайно, уровни Темнейшего подземелья запрограммированы фиксировано. Это несколько облегчает задачу, поскольку в вики и руководстве описаны оптимальные маршруты, по которым нужно вести команду. Но и с подсказками пройти очень трудно: враги невероятно сильны, набегает стресс… Один лишний бой – и команда больше не может продвигаться.

    Милая особенность: герой, вернувшийся, из Темнейшего, со слов игры “has seen to much” и развидеть уже не может, а потому снова туда не пойдет. Это значит, что на каждый уровень нужна отдельная команда. В компенсацию за это мучение герой, прошедший Темнейнее, становится просветленным, и все, кто ходит с ним в команде, получают дополнительный опыт. В недрах настроек есть особая галочка, которая позволяет отправить героя в преисподнюю повторно, однако за это ему начисляется уровень стресса, близкий к критическому.

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

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

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

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

  • Неделя Телеграма #3

    Продолжаю писать в Телеграм, третий выпуск.


    В Твиттере спрашивают, как это я оказался контрибьютором в приватный PHP-репозиторий. Без понятия, наверное, баг Гитхаба. Забавно:


    Блин, как люди умудряются в здравом уме писать “МБОУ ДОШ” или “БУЗ ВО ВОКОБ” или прочую дичь вместо “школа” и “клиника”? Никто же так не говорит, ни родитель, ни директор. Но только открыли Ворд, и сразу беда: не школа, а МОУ ВОУ ВОУ ВОУ.

    Думаю, это вина учителей: десять лет детей учат, что писать нужно “умно”, иначе снижают оценку. Травмируют ученикам мозг. Оно может умно, да непонятно, над вами потешатся будут (с).


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

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

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

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

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

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

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


    Собрался и перенес свой пет-проджект с Digital Ocean на выделенный сервер в Германии. Что могу сказать?

    Облака это дорого. Легкость настройки облака компенсируется ценой. Например, на DO нода на 8 гигабайт оперативки и 6 виртуальных процессоров стоит 80 долларов. А выделенный сервер с процессором i7-6700 Quad-Core, 64 оперативы и 500 гиг SSD стоит 39 евро.

    Основная техническая трудность была в том, чтобы написать длиннющий Ansible playbook, чтобы все развернулось в один прогон. Я даже купил на DO ноду за 5 долларов, чтобы на ней порепетировать.

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

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

    Гуглеж на тему “dedicated server vs cloud” выдает ссылки на Квору и Стек с диаметральными мнениями. Как уяснил для себя, основное преимущество облака – масштабируемость. В любой момент можно поднять больше нод и не просесть под волнами трафика.

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

    Вот и Дропбокс уходит с Амазона на собственную инфраструктуру.


    У Digital Ocean неплохой слоган:


    А между тем Гугл кое-что подшаманил. Теперь в поиске по картинкам пропала прямая ссылка на изображение. Вместо нее появилась “Save” с иконкой закладки, которая сохраняет картинку… нет, не на диск, а в сервис Google Images, то есть прямой ссылки вам не видать.


    Смонтировал видосы с Никитой:

    Эти и другие жгучие видосики у нас на канале: https://www.youtube.com/c/deeprefactoring


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


    Вчера испытал наплыв щедрости от наших американских партнеров (с).

    Во-первых, съехал с Digital Ocean, написал им – парни, сколько я вам дожен? Помню, что не оплатил несколько квитанций примерно на 140 долларов. А они отвечают – да, видим, что ты все поудалял, долги отменяем и вообще заходи, если что. Не пришлось платить.

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

    Всегда можно попросить что-то и надеяться на положительный исход.


    # tor configuration for surfing speed
    ...
    ExcludeExitNodes {ru}
    

    Сначала все идет хорошо, а потом тебе делают корпоративную почту.


    В Чите и Забайкальском крае, откуда я родом, есть локальный мем – багульник. Это кустик с малиновыми листьями, который произрастает исключительно в той местности.

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

    Напечатали сборник стихов, что на обложке? Багульник. С чем подарочный календарь? Тоже с ним. Весенний фестиваль как назвали? Цветущий багульник. Какой-нибудь депутат-пидорас повесил баннер с чем? С багульником, конечно.

    Забавно, что настоящий багульник растет в Канаде, а тот, что Забайкалье – какой-то подвид, и называется он рододендрон сибирский. Но всем как-то пох. Был даже мем “сопки малиновые”, но уже лет семь назад весь лес выжгли и свезли в Китай, сопки лысые.

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

    – Багульник скоро зацветет в тени будистских храмов…

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

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

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


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

Страница 48 из 87