Pull to refresh
10
-0.1
Антон Беляев @Avvero

Software Developer

Send message

Почему нам стыдно верить в астрологию, а в программирование — нет?

Вот вам два примера:

  • Это Сергей. Он — архитектор, скорпион с асцендентом в раке и Кету в первом доме. Уверен, что ретроградный Меркурий влияет на то, когда нужно проводить встречи.

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

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

Из этих двоих чаще оказывается прав именно Сергей — по крайней мере, он точно знает, когда не стоит катить на прод. А Николай… он не может объяснить, почему всё падает после его деплоя.

Но в общем и целом: Николай знает, как работает код — пока он работает. А вот почему он не работает, когда падает — уже нет. Сергей знает, как система должна работать, но не знает, как она работает на самом деле. И все мы делаем вид, что во всём разбираемся и только Меркурий — честно ретрограден.

Tags:
-2
Comments0

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

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

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

Поначалу шло бодро: за первый месяц 30% задач закрыто — утепление, 3 из 4 стен покрашены. Но как водится, наступил кризис ресурсов - внезапно вышел Kingdom Come: Deliverance II и съел все капасити ведущего разработчика. Прогресс застопорился.

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

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

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

Tags:
+1
Comments3

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

Что происходит дальше? Ничего хорошего. Первый сюрприз — вас никто не похвалит. Бонуса нет, промоушена тоже. Менеджер лениво листает ваш performance-review, хмурится и спрашивает: «А что ты делал весь квартал?» Ты отвечаешь: «Я избавил нас от багов». Он пожимает плечами: «Так они и раньше вроде не были критичными».

Кто-то бросится чинить метрики, и начнётся новый головняк, потому что вы уж слишком постарались. «Багов не может не быть, значит, сломана метрика», — уверены все. Предлагаете метрику «отсутствие багов» — слышите в ответ: «Недоказуемо, выборка мала!»

Вы думали, что победа откроет двери в рай, а распахнули портал в лимб, где невозможно доказать собственную полезность. Пару поколений инженеров мы упорно объясняли бизнесу, что «баги бывают, это нормально». Благодаря нам продакт-оунеры научились бравировать SLA с допуском на косяк. Мы воспели «умеренное количество дефектов» как здоровый холестерин IT-организма — и вдруг вы свели холестерин к нулю.

Парадокс: все процессы настроены на борьбу, а не на мир. Метрике нужен враг, а процессу — вызов. Без них графики плоские, алерты молчат. Добро пожаловать туда, где ваши достижения стоят ровно ничего. Вся организационная религия строилась на борьбе с багами. Уничтожив последний баг, вы «убили бога» процесса. Всё, что давало смысл (defect-метрики, ретро-ритуалы, баг-баунти), обесценивается; наступает инженерный нигилизм. Великая битва окончена, триумфаторов нет, система сломана. Баг умер — и ты его убил!

Совет: в следующий спринт оставьте пару багов — ради здоровья экосистемы.

Tags:
0
Comments0

В обсуждениях тестирования микросервисов часто всплывает статья Мартина Фаулера Testing Strategies in a Microservice Architecture. Опубликованная в 2014 году, она опирается на концепцию тестовой пирамиды, сформулированную ещё в 2009-м. С тех пор ландшафт тестирования заметно изменился — в первую очередь за счёт появления и широкого распространения Docker и Testcontainers, которые существенно повлияли на практики и экономику тестирования.

Эта трансформация хорошо отражена в более современных источниках:

Сам Мартин Фаулер также в более поздней статье On the Diverse And Fantastical Shapes of Testing отмечает, что трактовка "юнит-тестов" далеко не однозначна и зависит от контекста.

В контексте вашего проекта это означает, что использование интеграционных тестов в 2025 году оказывается существенно проще, дешевле и эффективнее, чем это предполагалось в рамках модели 2009 года.

Tags:
+1
Comments0

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

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

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

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

И самое обидное - у него совершенно не хватает времени на задачи, потому что 90% времени он самоотверженно тушит пожары, разгоревшиеся от искры говнокода других.

Tags:
Total votes 7: ↑7 and ↓0+7
Comments15

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

Tags:
Total votes 1: ↑0 and ↓1-1
Comments0

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

Отрывок из "Современные идолы разработки".

Tags:
Total votes 3: ↑2 and ↓1+4
Comments0

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

Что такое петушиные релизы?

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

Преимущества подхода:

  • Более высокий когнитивный ресурс у инженера с утра - "утро вечера мудренее"

  • Минимальное влияние на пользователей (они еще спят)

  • Время на "настаивание" релиза перед началом активного использования

  • Возможность быстро откатиться, если что-то пошло не так

  • Предсказуемый график релизов

  • Возможность обновить все сервисы системы одновременно в тихий утренний час (даже если релиз не будет бесшовным, это вряд ли кто-то заметит - все полусонные)

Когда это особенно полезно?

  • Когда бизнесу нужны новые фичи "еще вчера"

  • При работе с микросервисной архитектурой

  • Когда команда распределена по разным часовым поясам

Исторический контекст

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

И помните: лучше регулярные петушиные релизы, чем ждать, пока жареный петух клюнет!

Tags:
Rating0
Comments1

Позвольте представить вам концепцию эллинского подхода в архитектуре.

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

Вот некоторые потенциальные преимущества такого подхода в контексте программной архитектуры:

  • Личное взаимодействие: Устный обмен информацией подразумевает тесное общение, что может способствовать лучшему пониманию и командной работе.

  • Гибкость: Отсутствие строгой документации может сделать процесс более адаптивным и гибким.

  • Быстрое принятие решений: Устное общение обычно быстрее письменного, что может ускорить процесс принятия решений.

  • Фокус на главном: Отсутствие необходимости в документации может позволить команде сосредоточиться непосредственно на разработке.

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

Tags:
Rating0
Comments0

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

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

Я нагуглил некоторое количество философских школ и спешу предложить вам такую аналогию:

  • Киники — просто и минималистично.

  • Платоники — невыносимо сложно и идеалистично.

  • Стоики — надёжно, но рано или поздно всё упадёт.

  • Софисты — красиво, но непрактично.

  • Прагматики — работает, и ладно.

  • Схоласты — бесконечные обсуждения архитектуры, но ни одной строчки кода.

Теперь давайте остановимся подробнее на каждой школе мысли.

Киники

  • «Зачем нам фреймворк? Есть же bash!»

  • Документация? «Читайте код».

  • CI/CD? git push --force решает все проблемы.

  • Docker? systemd нам в помощь.

  • Намеренно пишут неортодоксальный код, чтобы «встряхнуть» команду.

  • Проводят демонстрации багов прямо на проде.

Платоники

  • Реальный код — это лишь несовершенная тень идеального дизайна.

  • Каждый баг — это лишь тень несовершенства реального кода.

  • Нам нужен ещё один слой абстракции между абстракциями.

  • Простое решение не может быть правильным по определению.

  • В идеальном мире каждый метод — это интерфейс.

  • Настоящая архитектура существует только в UML-диаграммах.

Стоики

  • Падение прода неизбежно, а каждая ошибка может стать последней.

  • Стремление важнее результата — «Ничего не получилось, но мы сильно старались».

  • Никто не ощущает баги — о них только думают.

  • Не облекай свой код в пышные абстракции.

  • Люди пишут код с багами невольно.

  • Являюсь ли я частью проблемы или её решения?

Если вы слышите, как кто-то читает молитву о безмятежности, то перед вами стоик: «Боже, дай мне душевный покой принять тот код, который я не могу изменить, мужество изменить тот, что могу, и мудрость отличить одно от другого».

Софисты

  • Красота кода важнее его практичности.

  • На код-ревью больше обсуждают стиль, чем функциональность.

  • «Да, это медленнее работает, зато посмотрите, какая архитектура!»

  • Могут убедить заказчика, что баг — это фича.

  • На код-ревью побеждает не самый правый, а самый красноречивый.

Прагматики

  • «Работает? Не трогай. Не работает? Почини как можешь».

  • Документация? «Код сам себя документирует».

  • Архитектура — это то, что получилось в итоге.

  • Технический долг? «Будущие проблемы решим в будущем».

  • «Лучшее — враг хорошего, а рефакторинг — враг работающего».

Схоласты

  • Команда может месяцами обсуждать «идеальную архитектуру».

  • Создаются сложные диаграммы и документация.

  • Проводятся бесконечные митинги по дизайну.

  • Каждое решение требует согласования на архитектурном комитете.

  • Но реальный код так и не пишется.

Заключение

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

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

Tags:
Total votes 4: ↑4 and ↓0+4
Comments0

Чему может научить сениора разработчика философ Диоген?

Древние греки были великими, и их мудрость помогает нам и по сей день. Возьмите к примеру Диогена. Рукоблудствуя на глазах у всех, он приговаривал: «Вот если бы голод можно было унять, потирая живот!».

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

Tags:
Total votes 1: ↑1 and ↓0+1
Comments0

Information

Rating
Does not participate
Location
Барнаул, Алтайский край, Россия
Works in
Date of birth
Registered
Activity