Telegram Web Link
Из-за ограничений Телеграма не опубликовал часть фотографий. Больше в альбоме: https://vk.com/album463377_300294407
В этом году я читаю небольшой курс лекций студентам Высшей Инжиниринговой Школы НИЯУ МИФИ, вот на прошлой неделе начал. Тема: архитектура приложений. Сначала SOLID, простые паттерны, а потом сложные паттерны и DDD.

Долго думал над тем, какие примеры приводить. Классические книжные не хотелось, типа вот у нас класс "Животное", у него наследник "Кошка". Это понятно для жизни, но далеко от реального программирования. И примеры со своей работы не хотелось, потому что без знания специфики не будет понятно, что такое "Цифровая ведомость объёмов работ", и почему в ней есть те или иные ограничения.

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

Вроде получилось неплохо, студентам зашло. Обратная связь по лекции пришла положительная, так что будем продолжать :)

#dev
Раз уж взялся за Стругацких, решил перечитать трилогию о Максиме Камерере. Ну, точнее как, перечитать: подростком я с удовольствием проглотил "Обитаемый Остров", затем бросил на середине вторую книгу и не дошёл до третьей. По-видимому, я ожидал буквально продолжения сюжета, а получил совершенно другие произведения, просто с тем же персонажем в главной роли.

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

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

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

Я уже закончил и вторую книгу, она совершенно о другом, напишу на днях, что думаю.

#fiction
Аркадий и Борис Стругацкие, «Жук в муравейнике».

Вторая книга про Максима Камерера, сюжет которой напрямую с первой частью не связан, но связан косвенно, о чём я подробнее расскажу в посте о третьей книге.

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

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

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

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

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

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

#fiction
Меня иногда спрашивают, заменят ли нейросети программистов (или "когда заменят"). Мне на эту тему очень нравится картинка ниже.

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

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

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

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

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

#dev
Два дня был экспертом на хакатоне по разработке для студентов. Участники, как правило, 4-5 курс, бакалавры и магистры. Многие ребята очень сильные, показали отличный результат, получше, чем у некоторых взрослых программистов с резюме и зарплатой.

Так вот, заметил интересный эффект. Студенты — даже очень компетентные — не могут побороть желание переусложнять систему и использовать чуть ли не все известные им фреймворки и технологии. Даже не знаю, какую аналогию привести — представьте что терапевт делает вам 20 различных видов осмотра на приёме и просит сдать 20 анализов на разные виды вирусов и других болезней, которые ему известны. Вроде и плохого ничего, но и не нужно. С архитектурой приложений аналогично: надо не только знать, что и когда применить, но и чувствовать, что и когда НЕ применять. Это, конечно, приходит с опытом.

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

#dev

По теме мне особенно нравится вот эта картинка:
Стругацкие, «Волны гасят ветер».

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

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

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

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

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

#fiction
Что ж, надеюсь, все оценили мою шутку на 1 апреля. Разумеется, в том тексте были "мысли", которые либо слишком примитивны для помещения в такую подборку (как, например, про деньги), либо откровенно ошибочны и деструктивны для общества (про автомобили и тиктокеров).

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

#thoughts

https://telegra.ph/Mysli-za-mart-04-04
Если кто-то думает, что настольные игры это скучное перекладывание жетонов с цифрами для душнарей, то посмотрите на "Неон".

"Неон" — проект от российских разработчиков в жанре Battle Royale и сеттинге киберпанка. Если киберпанк от настолок ожидать можно легко (видеоигра Cyberpunk 2077 основана именно на настолке 1974 года), то батлрояль это что-то сравнительно новое. По меньшей мере, кажется, что настольному ритму это противоречит: если игрок на личной встрече друзей вылетает из игры навсегда и скучает, то это антипаттерн, и в нормальных играх с проработанной механикой такие вещи стараются не делать (одна из причин, по которым "Мафия" бесконечно хуже, чем "Авалон").

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

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

#games
2025/07/05 14:39:21
Back to Top
HTML Embed Code: