andrzejn: (Default)
Андрій Новосьолов ([personal profile] andrzejn) wrote2009-07-01 09:05 pm
Entry tags:

Сетевой тетрис по-программистски

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

Один программист. В стакан падают фигурки-требования. На дне стакана лежит "мусор" - недозаполненные ряды кубиков. Это код, над которым программист работает. Завершённые ряды из стакана исчезают. Иногда программист допускает баг с неожиданными побочными эффектами - тогда вместо завершённого ряда на дне образуется ещё несколько рядов мусора. У программиста есть кнопка "рефакторинг" - если нажать на неё, то можно переставлять мусорные ряды вверх-вниз, авось по-новому станет удобнее. Пока программист рефакторит мусор, фигурки продолжают падать. Скорость падения увеличивается не с количеством уложенных рядов, а по мере приближения к очередному дедлайну, потом уменьшается снова.

Это редкий по нынешним временам идеал. Над серьёзными проектами работают команды. Выглядит это так:

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

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

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

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

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

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

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

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

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

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

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

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

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

[identity profile] konstansa.livejournal.com 2009-07-01 06:27 pm (UTC)(link)
Это вы сами написали?) класно!
хочу утащить в свой недавний пост "Словарь юзера". можно?

[identity profile] konstansa.livejournal.com 2009-07-01 06:41 pm (UTC)(link)
ну я всегда ссылки даю) как же без них)
уже утащила, спасиб)

[identity profile] shet.livejournal.com 2009-07-01 07:58 pm (UTC)(link)
По-моему тестер - это не так. Тестер смотрит через плечо и кричит: "У вас дырка на второй строчке на 4м блоке справа! Вы что, вообще ослепли?! Из-за этого мы не можем отдать её заказчику! Закройте немедленно! Сверху еще 4 строчки с дырками? Да я вам про них когда еще говорил! " Потому что тестер никак не меняет код ;)

[identity profile] hildisvini.livejournal.com 2009-07-02 06:32 am (UTC)(link)
Нене, все правильно. Во всяком случае, для инженера тестинга - в самую точку!

[identity profile] ludenus.livejournal.com 2009-07-02 08:07 am (UTC)(link)
во-во..
- чуваки, это говно не работает
- поздно, уже зарелизили

[identity profile] helxen.livejournal.com 2009-07-01 08:21 pm (UTC)(link)
Великолепно!

[identity profile] gressus.livejournal.com 2009-07-01 08:39 pm (UTC)(link)
))

кстати насчет менедежров я тоже эту метафору применяю

[identity profile] amarao-san.livejournal.com 2009-07-02 02:56 am (UTC)(link)
гениально.

спасибо.

[identity profile] ludenus.livejournal.com 2009-07-02 08:05 am (UTC)(link)
> Тестер. Ему в стакан падают собранные ряды, он пробует их разломать.

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

[identity profile] alexartukov.livejournal.com 2009-07-02 11:44 am (UTC)(link)
С душой написано! Спасибо!

[identity profile] vgarnick.livejournal.com 2009-07-02 05:15 pm (UTC)(link)
Класс!

Сразу захотелось поиграть (или написать и поиграть) в такой сетевой тетрис :-)

[identity profile] kuroi-kaze-85.livejournal.com 2009-09-13 09:44 pm (UTC)(link)
Есть tetrisfriends.com (http://www.tetrisfriends.com/) :)