Любители конструированиябритв сподвигли высказать свои пять копеек. Собственно, чем отличается ПО от материального мира? Отсутствием износа, лёгкостью копирования и большой сложностью создания. Разработать что-то сложно, тиражировать не стоит практически ничего. Как бы в таких условиях происходила разработка автомобиля?
У нас задание: сделать автомобиль. Так, когда-то мы делали лодку, возьмём за основу.
Говорят, у автомобиля должна быть крыша. Так… Ага — вот есть опенсорсный профнастил. Плевать, что для сарая. Если его заточить, сойдёт за крышу авто.
Мотор? У Петровича есть старый авиамодельный движок. Копии ничего не стоят. Берём 150 копий и ставим вокруг дифференциала. Дифференциал и задний мост придётся купить, убив на него половину бюджета. Мы же можем только водопроводные трубы гнуть и стеклопластик клеить.
Говорят, у машины должны быть амортизаторы. Бюджета нет. Варим раму из водопроводных труб и подвешиваем лодку внутри рамы на резинках от трусов. Одну резинку я из собственных трусов пожертвовал, а копирование нам ничего не стоит.
Колёса? У нас есть ролик от коньков. Если сделать обруч из водопроводной трубы и прикрутить к нему ролики — думаю, покатит. С крепежом проблема: есть болты М8 и гайки М20. Искать другое долго и дорого. Надо сделать пробку в гайку М20 и нарезать внутри этой пробки М8. Кажется, это называется «враппер».
Поворотники для сигнализации светом? О, для сигнализации светом есть списанный автомат отстрела тепловых ракет от СУ-27. Если положить в порох добавки для цвета, будем сигнализировать так, что мало не покажется.
Ножовка по металлу (а также по пластику и всему чему угодно) — великая вещь. Сделать из МФУ принтер? Пожалуйста!
Совершенно с той же лёгкостью получилось преобразовать громоздкий музыкальный центр с уже не работающим CD-чейнджером на много дисков во вполне компактный микроаудиоцентрик. Ввиду того, что CD-чейнджер умер от удара чьей-то ноги, «ампутация» нерабочей и совершенно неприглядно смотрящейся «части тела» пошла не только на пользу, но ещё и восстановила утраченную эстетику.
Ну, а нижняя часть дисплея, отвечающая за показ информации о дисках, была просто заклеена широкой чёрной изолентой с обратной стороны защитного стекла. Выглядит музыкальный центр — как только что с завода!
Довелось мне как-то общаться с товарищем. Узнав, что я сторонник открытого ПО, он начал всячески его поносить. Пересказывал содержание дорабатывавшего тогда последние месяцы Get the Facts, приправляя страшилками, которых нет даже там: «опенсорс используют хакеры-террористы», «опенсорс портит железо» и прочее в этом духе. Я пропускал мимо ушей, с трудом сдерживая смех: не первый раз подобное слышал, только в более мягкой форме.
Потом я обнаружил его в одном чате. Там он много говорил об опенсорсе в положительном ключе: консультировал других, сам получал консультации, воодушевлённо делился новостями. Но как-то странно: количество его собеседников не превышало и десятка, обращения остальных он игнорировал.
При первой же встрече я прямо в лицо сказал ему:
— Видел тебя в таком-то чате, ты, оказывается, сам опенсорсник.
— Да, у меня всё ПО опенсорсное, недавно даже BIOS перепрошил.
— А почему ж ты тогда мне проприетарщину пропагандировал?
— Потому что опепнсорс — для элиты, и я делаю всё, чтобы отвадить от него быдло.
Во амбиции! Целая масонская мини-ложа, из него одного и состоящая. Я колебался, куда это запостить, сюда или в «Задолба! ли». Решил сюда: и об IT, и сказать ему тогда хотелось не «задолбал», а «такие, как ты, позорят республику». Но не сказал и этого: такие, как он, существовали в единственном экземпляре. Или ошибаюсь — вы тоже сталкивались? А «существовали» в прошедшем времени — потому что он и сам от этой точки зрения потом отказался.
А мечтам его сбыться было не суждено. Трудно сегодня найти вычислительное устройство, где не было бы хотя бы одного опенсорсного байта.
Что важнее для пользователя — мышь или клавиатура? Детский вопрос; должно быть и то и другое. Но всё-таки, исчезновение чего будет раздражать пользователя больше?
Во времена DOS один программист написал shareware-программу для специфических расчётов. Время её работы в бесплатной режиме было неограниченным, но пользоваться можно было только виртуальной клавиатурой. Чтобы избежать этого неудобства, нужно было купить у автора специальную клавиатуру калькуляторного типа, подключаемую вместо принтера. Взломать программу, чтобы работала с обычной клавиатурой, было, конечно, можно, но пришлось бы переписать половину программы, в которой соответствующий метод ввода не был предусмотрен вообще, и этого никто не стал делать. Специальная же клавиатура состояла из одних резисторов и кнопок, автор из её схемы секрета не делал, но честно предупреждал: поскольку он покупает эти детали оптом, а пользователю пришлось бы в розницу — дешевле купить у него. А в виде набора — ещё дешевле. И, намучившись с виртуальными клавиатурами, люди покупали, тем более что программ для этого вида расчётов тогда больше не было.
На крупном производстве пластиковых предметов народного потребления установлена очень умная и дорогая система обеспечения станков всем необходимым: своя подстанция, резервный дизель-генератор, пара компрессоров, пара насосов для воды. Всё контролируется специальным компьютером, данные идут на пульт охраны и отображаются красивой схемой на большом телевизоре перед дежурным.
Стоит отдельно отметить, что помещение, в котором располагался генератор, подстанция, компрессоры и насосы, было общим и заглублённым: траншея с бетонированными стенами и дном, перекрытая сверху металлической съёмной крышей и не изолированными друг от друга отсеками с оборудованием.
А теперь картина по минутам, как её увидел дежурный у себя на пульте.
12:00:00. Датчик температуры трансформаторной подстанции скачкообразно перескакивает с +60 °С на +176 °C. Видимо, был бракованный. Но в систему не закладывался алгоритм контроля неисправности оборудования, и, громко пискнув в колонки и подсветив на схеме красным, компьютер вырубает трансформаторную подстанцию, написав крупными буквами: «ПЕРЕГРЕВ». Дежурный немного напрягается.
12:00:02. Система видит катастрофическое падение напряжения в сети и, следуя заложенному в него алгоритму, запускает дизель-генератор. Дежурный звонит энергетикам, чтобы посмотрели, что с подстанцией. У генератора прогорает выхлопная труба, выхлоп идёт в помещение.
12:00:30. На пульте раздаётся тревожный писк, помещение с оборудованием отмечается значком и значком «пожар». Сообщение дублируется большими буквами под словом «ПЕРЕГРЕВ». Дежурный напрягается ещё сильнее.
12:00:35. Система, спасая корпоративное имущество, включает умную пожарную систему, переключая насосы в трубы пожаротушения, повышает их производительность и открывает вентили в помещение с огнём, то есть в траншею с оборудованием.
12:00:50. На пульте с тревожным писком отображается иконка о затоплении помещения с оборудованием. Под надписями «ПОЖАР» и «ПЕРЕГРЕВ» появляется ещё одна, соответствующая ситуации. Дежурный уже очень напряжён: в его инструкции ничего не написано о действиях в ситуации, когда одно и то же помещение перегрето, горит и тонет. Всё это время в траншею закачивается вода, приблизительно 10 кубометров в минуту.
12:01:10. В помещении дежурного с грустным писком на пульте появляется сообщение о неисправности пневматической системы и падении давления в воздухопроводе. Местом неисправности предательски обозначается всё то же помещение.
12:01:15. Отрубается второй компрессор. Критически падает давление воздуха. Перекрываются заслонки ресивера. Система отмечает надписью «УТЕЧКА» злосчастное помещение с оборудованием. Дежурный в панике: он не успевает обзвонить всех ответственных за выходящие из строя узлы.
12:01:42. Локальный апокалипсис продолжается. Генератор сообщает на пульт о неисправности системы забора воздуха и отрубается. К этому моменту вода достигает уровня крыши траншеи и начинает переливаться во двор. Аварийная система переходит на UPS.
12:01:45. Насосы сообщают на пульт, что без основного и аварийного питания они работать не будут, и отключаются.
12:01:46. Пожарная система сообщает на пульт, что насосы пали смертью храбрых в бою с пожаром, и врубает системы с СО. Видимо, замечательная германская программа контроля не воспринимает типы аварийных отключений других систем.
12:01:48. Из-под крыши помещения начинается бурление параллельно с резким охлаждением воды.
12:02:00. Оживает датчик температуры, видимо, окрылённый общим охлаждением помещения, и радостно заявляет на пульт: «Ща напруга будет, начальника! Подавать?» — и заискивающе мигает окошечком подтверждения оператору. Дежурный, впав в транс, давит на большую красную кнопку: отключить всё, аварийно остановить производство.
Тестируйте системы даже на гипотетическую возможность самых идиотских и невозможных ситуаций, вплоть до прилёта инопланетян.
Я не айтишник: не сисадмин, не программист, не инженер. Я занимаюсь наружной рекламой — вывески и всё такое. К компу я и близко не подходил уже года два, но во время о́но довелось мне работать скромным наборщиком объявлений в известной в нашем городе редакции.
Там был IT-отдел, имевший три самописные БД для разных изданий, отдельную БД под клиентов и никак не связанную с ними БД (1С? Не, не слышали) для бухов. Естественно, стыковалось всё это добро такими окольными путями, что и представить сложно.
Для начала меня жутко задолбало отсутствие табуляции в форме набора объявления — на каждое следующее поле приходилось тыкать мышью. Попросил айтишных бойцов сделать. Через неделю получил искомое и научил весь отдел наборщиков пользоваться табом. Потом меня достало то, что наиболее часто встречающиеся слова приходилось вбивать полностью. Была придумана система автозамены сокращений на полные слова, причём автозамена срабатывала на пробел — не надо было жать какие-то комбинации клавиш. Снова поход к айтишникам, удивлённые лица (парень, ты откуда такой умник свалился?!), через неделю реализовано. Опять обучил отдел, включая начальницу, повесил список сокращений на стенку. Всем стало хорошо, а через месяц выяснилось, что производительность отдела набора выросла втрое.
Потом был корпоратив, на котором я перезнакомился с нашими менеджерами по продажам, нажрался и узнал много нового и нелестного об их работе. Снова пошёл к айтишникам. Действия менеджера по продаже в случае возникновения нового клиента: открыть базу, залогиниться, нажать кнопку «Новый клиент», вбить в окошечко ФИО, нажать «Далее», вбить телефон в следующее окошечко и так до бесконечности. Потом перекинуть эту инфу бухам в корпоративный чат: пусть они тоже мазохизмом занимаются.
У меня началась война с айтишниками: какого ты, всего лишь наборщик, лезешь к менеджерам, стоящим на две ступеньки выше в иерархии компании? Война продолжалась месяц и закончилась коллективным заявлением менеджеров об апгрейде баз данных.
Решением отца всея издательства я буквально поселился в отделе кодеров, по-прежнему получая жалкую зарплату наборщика, забыв вообще про объявления.
Итогом стало: объединение всех трёх БД изданий в одну и связка с бухами, интеграция клиентской БД в остальные базы, кардинальный рестайлинг интерфейса под менеджеров, бухов, наборщиков и дизайнеров, несколько скриптов, автоматом прикручивающих обработанные в Фотошопе фото к объявлениям, и множество других фишек, включая замену железа на более мощное и кучу всего другого.
Я просто сидел в отделе, пялясь в мониторы с сотнями строчек кода и ничего в этом не понимая, приставая с вопросами: «Как это будет выглядеть?» Новые сборки БД компилировались ежедневно по десятку раз. Я буквально задолбал айтишников.
Наконец был достигнут приемлемый результат. Спустя два месяца мне случайно попался на глаза финотчёт: доходы компании увеличились более чем в два раза. Я по-прежнему получал зарплату наборщика.
Я уволился, заявив, что сделал для компании больше, чем кто бы то ни было (а разве нет?), и попал в чёрный список работодателей. А через две недели меня разыскал начальник IT-отдела, вручил тысячу долларов и ящик пива со словами:
— Хорошо, что ты не айтишник!
Мораль сей басни такова: не стесняйтесь требовать чего-то у айтишников, если понимаете, что вам нужно для того, чтобы работать с большей эффективностью. Если ваши требования логичны и практичны, вам пойдут навстречу.
Прочитав историю «Говорит глас Гугла», где автор приятно удивил меня своей находчивостью, я вспомнил похожую историю общения с клиентом по скайпу.
Я всегда общаюсь в текстовом режиме, так как клиентов много и нужно параллельно отвечать всем. Кроме того, можно одновременно делать свою работу. Но клиент был важный и срочный, писал очень медленно, и я сам предложил ему сделать видеозвонок, дабы ускорить общение. Только когда я подсоединял наушники, я вспомнил, что микрофона у меня нет. Уже звонок от клиента, я принимаю, слышу: «Здравствуйте!» — и не могу ответить.
Признаюсь, было неловко, но в голову сразу пришла идея. Втыкаю штекер наушников в микрофонный вход на передней панели и отвечаю клиенту в снятые наушники: «Здравствуйте, извините, нет микрофона, я буду переключаться. Расскажите подробнее, как это произошло?» Сразу переключаю штекер обратно и жду минуту, пока клиент начнёт говорить, наблюдая, как медленно расширяются его глаза и переосмысливается мировоззрение.
Проблема решилась быстро, а глаза клиента во время нашего забавного общения я помню до сих пор.
Неделька смешных покупателей выдалась. Один спросил, где гнездо для кабеля у MindWave Mobile, другой — прилагается ли дискета с драйверами к 3Doodler. Настоящие ли это ламеры или один тролль, прикидывающийся разными людьми — а шут его знает. Номера разные, голоса тоже.
Автор истории «Безбород 3.7.1» интересуется, почему сделанный программистом бритвенный станок был бы с лазерной указкой и тепловизором? Всё просто.
Вначале программист делает опасную бритву — консольную программу, которая быстро и качественно справляется с задачей, но вешает систему, если в исходных данных есть ошибка. Появляются багрепорты. Отдел юзабилити, стремясь показать свою нужность (отсутствующую, если консольная программа станет популярной), несётся к начальнику. Багрепорты временно аннулируются, программиста вызывают к начальнику:
— Твоя опасная бритва опасна! Надо сделать так, чтобы она была безопасной. Затупи её!
Программист с плохо скрываемой улыбкой тупит бритву. Она больше не бреет. Приказ начальника выполнен дословно, отдел юзабилити готовит вазелин.
Через день из отдела юзабилити приходит список рекомендаций, как сделать бритву менее опасной, но оставить при этом бреющей. На списке резюме начальника: «Сделать до среды!»
Программист вздыхает и по списку добавляет к бритве:
лазерную указку (чтобы бреющийся видел, где себя бреет);
термодатчик (чтобы чей-то ребёнок случайно не побрил ковёр);
телевизор (чтобы не было скучно бриться);
защиту от дураков (надо ткнуть в серию кнопок, чтобы бритва поняла, что бреющийся трезв и старше 18 лет);
Так как в процессе тестирования люди будут пытаться отрезать себе разные части тела, программист немного меняет конструкцию, превратив опасную бритву в бритвенный станок. Едва он всё это заканчивает, как приходят новые требования:
отдел дизайна требует дерево (это сейчас модно);
отдел маркетинговых исследований требует запах канифоли и ручку, перемотанную синей изолентой (это улучшит продажи бритвы среди представителей старшего поколения).
Наступает черёд тестирования.
ребёнок шефа пробует побрить кошку, но не справляется с кодом, и бритва разваливается. Отдел юзабилити ликует;
начальник пытается отрезать палец главе отдела юзабилити. Конструкция станка не позволяет это сделать, отдел юзабилити приписывает достижение себе;
телевизор работает;
термодатчик не дал побрить ковёр;
дерево присутствует — отдел дизайна сурово кивает;
синяя изолента и запах канифоли есть, отдел продаж радостно катается по полу.
А потом какой-то пользователь сравнит этот продукт с другим, над разработчиком которого не стояли идиоты-начальники...