Skip navigation.
Home

На опережение.


Дао, которое можно выразить словами, не есть постоянное дао; имя, которое можно назвать, не есть постоянное имя"

(c) Лао-цзы. «Дао-дэ-дзин»

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

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

Любой заказчик описывает проблему в меру своей компетентности. При этом масса вещей для него проходит по категории "само собой разумеющиеся вещи, о которых и говорить-то смысла нет". Ну вода кипит при 100 градусах, а прямой угол - 90 градусов, чего тут обсуждать? Но за почти 13 лет работы контрактником я ни разу в своей жизни не встречался с заказчиком, который понимал бы, например, что такое граничные условия и исключения. Нет, на бытовом уровне они понимают, что это такое, но вот когда речь идет об их проблеме, это понимание исчезает напрочь, то есть совсем. Когда ты начинаешь рисовать диаграмму состояний системы и при этом беседовать с этим самым заказчиком, то открываются бездны оттенков и смыслов. Я люблю иллюстрировать те или иные вещи примерами, этот раз не будет исключением:

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

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

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

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

- Уважаемый Херр Ку, я вижу здесь проблему.
- А... где проблема?
- Существуют конечные остановки.
- А что там?
- А там люди выходят, дверь закрывается, водитель глушит двигатель и идет обедать. И "уже никто никуда не едет" (с). А потом он возвращается, дверь открывает, снова заходят люди и только потом начинается движение. Это первая проблема. Вторая проблема - у нас в системе нет сигнала "началось движение". Нет, я конечно могу снимать данные с GPS-антенны и самостоятельно принимать решение о том, что мы вроде бы как движемся, но это нездоровая идея: не должен подсчет пассажиров зависеть от функционирования модуля, который ни к дверям, ни к пассажирам ни ухом ни рылом.
- Хм... и чо будем делать?

Я обожаю этот вопрос. Он мне всегда напоминает о судебных процессах против табачных компаний: я курил по две пачки в день каждый день, теперь у меня рак в четвертой стадии, но виновата табачная компания. Или, как было в одном сериале: мне 16 лет, я трахалась, как кролик (без кондома) nый дятел заразил меня ВИЧ, а виновата школа, которая мне об этом не рассказала.

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

Читаю спецификацию дальше. Все на тот же сенсор. Но чтобы дальнейшее было понятнее, небольшое отступление:

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

- Херр Ку, вот такая нездоровая тема имеется.
- Хм... да, согласен, в этом нет Будды. А давай после каждой команды спрашивать датчик о его состоянии? На этот вопрос у датчика точно есть обратный ответ.
- Можно, но не очень хорошо.
- Почему?

И тут я рассказываю херру Ку историю, случившуюся во времена моей работы на Известный и Уважаемый автомобильный концерн, чью эмблему знают по всему миру. А там было так:

В автомобиле, на котором красовалась эмблема этого самого концерна, был GPS-сенсор. Среди прочих для этого сенсора была команда "расскажи нам, ты там живой или как". По причинам, которые обьяснять долго, сенсор на этот вопрос отвечал после достаточно долгого раздумья (и я его понимаю, иногда сложно ответить на этот вопрос однозначно). Кроме того, любой новый вопрос "ты там живой или как" прерывал процесс осознания себя сенсором и цикл начинался по-новой: сенсор снова впадал в самадхи и начинал заниматься нездоровым солипсизмом. Догадываетесь, что произошло дальше? Ага, именно оно: никто не сказал нам, сколько именно времени сенсору нужно на осознание себя в этом мире, но было сказано, что если не отвечает, то спросите еще раз. На это еще наложился еженедельный апдейт прошивки, поступавший от Известного и Уважаемого концерна, так что извращенного секаса там было с лихвой.

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

И вот из такого добра состоит примерно 70% рабочего времени контрактника в начале проекта и около 15-20% времени в его середине. Воистину, "если бы бы дома строились так же, как пишется код, первый же дятел разрушил бы цивилизацию" (с).

Как в этом выжить? Исключительно опыт и телепатия. Идеальный вариант - это когда ты видишь Бездонную Жопу еще до того, как она показалась на горизонте.

Да, чтобы два раза не вставать:

Если раньше все пособия для разведчиков рекомендовали уходить и растворяться муниципальным транспортом, то теперь это не работает. Sapienti sat. (с). :)

> Если раньше

> Если раньше все пособия...
Хочешь сказать, что эта хрень не только меня от чемодана может отличить, но и запомнить что это был именно я?

По поводу документации - ничего личного, только бизнес. Я никогда не напоминаю клиенту, что ему может понадобиться документация :)
А если клиент настаивает - включаю отдельным прайсом, который почти всегда вычёркивается самим же клиентом.

"но и запомнить

"но и запомнить что это был именно я?"

не эта. Другая. Но ты думаешь в правильном направлении.

"А если клиент настаивает - включаю отдельным прайсом, который почти всегда вычёркивается самим же клиентом."

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

>Хорошо у вас

>Хорошо у вас там...
А вот хрен там. Недавно один так без головы остался.

Поведай, потому

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

Фиг знает, на

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

а можно

а можно предысторию?

Посмотри блог,

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

Интересно, а в

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

Когда я в

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

Как я люблю

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

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

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

"сколько

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

А вот за такое ноздри рвать, бить смертным боем кнутом и в Сибирь на вечное поселение, в рудники и пожизненно в кандалы.

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

Мне никак низзя не читать документацию: это спецификация протокола. Он по жизни кривой (достаточно хотя бы того, что надо отрезать \0 в конце строки при посылке сообщений, не жрем мы на железке "\0", нам впадлу), так у него еще работоспособность от наличия "\n" в сообщениях зависит.

Я полностью

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

"— Куда

"— Куда сдадите?
— В участок. А потом вас там публично выпорют, как бродяг, и отправят в Сибирь убирать снег!
— Весь?
— Да! Снега там много"

Вечная история

Вечная история на тему "сделайте мне синий шар из металла, но чтобы он был квадратный, желтый и пластиковый".

Понимаешь, тут

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

Есть проекты,

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

Была у меня

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

....а если эти

....а если эти трое - сильно загорелые... Вот тут-то самое шоу и начинается.

Не-не, там

Не-не, там состав был 100% славянский. Если бы был сильно-загорелый, я б и не взялся вовсе, опыт работы с этими ребятами на тот момент уже был.

ну я бы не был

ну я бы не был так совсем категоричным в сторону страны, где коровы священны. 85% "спецов" из страны,где 5000 сортов пива грешат даже больше.Ибо,они свято уверенны в том, что они священны, как эти коровы в стране реки Ганг.Пример из сегодня: Томас, почему ты в воскресенье, производил апдейт системы и не задокументировал, что ты "кройцеруешь" (с)." (В САП нельзя просто деинсталлировать один пакет. надо восстанавливать всю систему.) Это вот..создание из Бонна говорит мне: " мне надо было срочно идти гулять с ребёнком" Документации нет, что он делал неизвестно, клиент имел начальство всеми подручными средствами. Вывод: тут не степень загорелости, тут отношение к клиенту и к коллеге через стол. Веришь ему? уважаешь его - ты сделаешь документацию.

Хорошо когда

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

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.