Найти в Дзене
Экспоненциальная задержка в быту и на работе В распределенных системах разного типа довольно часто встречается подход к повтору какого-то действия с экспоненциальной выдержкой. Суть его проста - между повторениями выдерживается пауза, которая увеличивается в геометрической прогрессии, чаще со знаменателем прогрессии равным 2. Например, этот подход часто применяется в коммуникациях между клиентом и сервером: клиент делает запрос к серверу, сервер возвращает ошибку, клиент ждет одну секунду, повторяет запрос, если опять произошла ошибка - ждет 2 секунды и повторяет запрос, потом 4, потом 8, и так далее, пока запрос не завершится успехом. В сетях Ethernet такой же подход используется при коллизии пакетов. Суть подхода простая - дать возможность получить результат быстро в большинстве случаев, но и не перегружать систему в случаях паталогических. Если бы задержка не увеличивалась, то в случаях, когда количество ошибочных запросов по какой-то причине стало больше, вся пропускная способность может уйти просто на повторные ошибочные попытки. Интересно то, что этот подход вполне полезен и в жизни тоже. Например, если определенный коллега или команда начинают занимать слишком много вашего времени, то можно начать выдерживать такие экспоненциально увеличивающиеся паузы. Частый пример - какая-то переписка или чат, где идет обсуждение какой-то темы и все пишут в минуту по сообщению. Имеет смысл перед отправкой следующего сообщения подождать (с каждым разом подольше) и потратить время либо на что-то более важное, либо хотя бы на более глубокую подготовку ответа - возможно, провести какие-то эксперименты или изложить достоинства и недостатки каждого из обсуждаемых подходов и так далее. А бывают и ситуации, когда дискуссия по большому счету просто бесполезная, но завершить вежливым образом ее сложно. Здесь тоже могут пригодиться экспоненциально увеличивающиеся задержки - как говорится, и волки целы, и овцы сыты.
3 года назад
Перелистывая старые страницы Вчера умер Фредерик Брукс - инженер, известный многим специалистам по программированию по книге “Мифический человеко-месяц”. Книга эта не нова - написана она была в 1975 году по следам работы Брукса в IBM, где он, в частности, руководил разработкой мейнфреймов System/360 и операционной системы для них OS/360. Кстати, именно он ввел в обиход термин “архитектура компьютера”. Произведение вносилось в различные списки важных произведений в области разработки ПО, хотя сейчас, конечно, новаторскими идеи, изложенные там, уже не назовешь. Просто потому, что они уже глубоко проникли во многие методы управлением инженерии программ и не кажутся чем-то необычным. Тем не менее, неплохо вспомнить некоторые из них и тем самым помянуть Фредерика Брукса, по книгам которого мы учились управлять хаосом. Многие из этих идей мы все знаем и не подозреваем, что они были впервые упомянуты именно в “Мифическом человеко-месяце”. Если у вас есть некоторая программа, то нужно в три раза больше начальных усилий, чтобы превратить ее в программный продукт - написать документацию, обеспечить сопровождение и так далее. Точно так же, нужно в три раза больше усилий, чтобы сделать эту программу расширяемой и назвать ее программным комплексом - сделать понятные API, точки расширения и так далее. Если же нужно и то, и другое, то это системный программный продукт, и его создание стоит в 10 раз больше, чем написание просто программы. Если программный проект отстает от расписания, то добавление к нему людей только еще больше задержит его. Связано это с тем, что инженерное дело - работа творческая и сложная, и подключение новых людей требует их обучения, причем обучать будут те, кто уже работает над проектом. Т.е. и новые люди еще толком ничего не делают, и старые отвлекаются. Кроме того, многие задачи легко не параллелятся - цитируя книгу, “чтобы родить ребенка, надо 9 месяцев, сколько женщин к этому не подключи”. Производительность сильных и слабых инженеров с похожим опытом и зарплатой может отличаться в десять и больше раз. К этому сложно что-то добавить. Это применимо и к командам - сильные и слабые команды по выхлопу тоже могут отличаться на порядок легко. Повторю - с похожим опытом и зарплатой. Т.е. это не про сравнением сеньора и джуна. Это снова подчеркивает важность качественного найма и своевременных увольнений - без этого поддерживать высокий уровень команды сложно. “Эффект второй системы” - если вы занимаетесь разработкой новой версии системы, которую создавали раньше, то будьте осторожны и не начните впихивать в дизайн разного рода фантазии. Нередко такой “архитектор с опытом” решает, что теперь он досконально знает требования и сможет разработать отличный дизайн, который позволит эти и будущие требования удовлетворить. Часто это заканчивается тем, что этот техлид оказывается в плену своих старых взглядов и ограничений и не может адекватно оценить изменившиеся реалии, где новая версия системы должна быть другой, а не совершенной. Готовьтесь выбросить прототип / начальную реализацию системы. В этой главе Фредерик пишет, что часто команды пытаются превратить в полноценную программу самую первую ее версию, и это ошибка, потому что единственное назначение этой версии - это проверка гипотез и получение опыта. То есть, нельзя дом из говна и палок превратить в дом, который долго простоит. Его надо разрушить и построить заново. “Постоянны только изменения” - хорошая фраза из той главы. Отставание от графика всегда происходит постепенно. Никакой проект не отстает сразу на год - это происходит через “блин, сегодня не успел, но завтра точно будет” раз за разом.. Чтобы избежать этого, цели должны быть атомарными - либо сделано, либо нет. “Готово на 90%” не подходит и будет самообманом. Также этапы должны быть короткими - несколько недель, не больше. Серебряной пули нет. Никакие отдельно взятые методика или инструмент не позволят ускорить разработку ПО в десятки раз. Комплекс мер и знаний на протяжении многих лет - возможно. Спи спокойно, Фредерик. Ты нас многому научил.
3 года назад
Я к Вам пишу, чего же боле
Я к Вам пишу, чего же боле Уже много лет я веду профессиональный дневник. Иногда реже, иногда чаще. В последние годы стабильно раз в неделю. Дневник - это просто открытый для коллег и партнеров Markdown файл, куда тезисно записывается сделанное за неделю. Так как процесс этот я нахожу ценным, запишу впечатления от процесса и его становления. Почему полезно делать такие записи? Ну, например, это позволяет посмотреть на сделанное и сравнить с запланированным. Важно писать как есть - если что-то не закончено, то не надо обманывать себя и бумагу. Я, например, знаю, что когда есть какое-то важное, но...
3 года назад
Умение обходить препятствия
Умение обходить препятствия Одним из важных гибких навыков инженера является способность преодолевать препятствия при достижении цели. Движение по инженерной карьере предполагает постоянное развитие этого умения. Если в случае с джуном еще может быть нужно периодически спрашивать "ну как идут дела?", то с мидлом и выше ожидается, что работа либо продвигается, либо предпринимаются усилия по преодолению затыков, либо проблема сигнализируется для ее разрешения сообща. Редкий руководитель любит сюрпризы типа увидеть на ревью изменение, мало относящееся к текущему проекту, а в ответ на вопрос “а зачем...
3 года назад
Словари и термины
Словари и термины В любом техническом проекте есть концепции, сущности и действия, которые должны быть поименованы. Особенно их много на ранних этапах. Как известно, в компьютерных делах есть всего две сложные задачи - инвалидация кэша и выбор имен, так что горячие дискуссии на тему выбора названий неизбежны. Cоздание общего “словаря” для команды - одна из важнейших задач технического командира проекта, а подводные камни могут встретиться здесь на каждом шагу. Во-первых, велик соблазн пустить все на самотек. Типа, сами разберутся. Скорее всего, действительно разберутся, но результат вряд ли будет оптимальным...
3 года назад
Если нравится — подпишитесь
Так вы не пропустите новые публикации этого канала