Когда я только ещё начинал свой неловкий путь девелопера, выдали мне небольшой проект (по сути — импорт данных из одной системы в другую) с заданием «добавить новую фичу». По-хорошему, задание нужно сделать было за два-три дня, я же умудрился по незнанию растянуть всё это дело на неделю с хвостиком. В понедельник, перепроверив всё, что только можно, закоммитил, собрал патч и со спокойной душой ушёл домой.
Утром меня ждало письмо с заголовком «Ни черта не работает». Удивляюсь: кроме меня, на сопровождении этого софта больше никто не работает, вчера всё проверял при тестировщике. Запускаю программу — реально ничего не работает! Точнее, записи по кругу импортируются, как в бесконечном цикле.
Данные источник поставлял в виде XML-сообщений, а уникальность проверялась по дате создания. Почему-то творец логики решил особо не заморачиватся с парсингом и сравнивал записи о дате создания как строки. В источнике формат
dd/MM/yyyy
, в приёмнике —
d/MM/yyyy
. А так как моя работа над всем этим пришлась аккурат под конец месяца, баг только сейчас и всплыл. Закончил бы раньше — так бы и не узнали до продакшна. Как это не выловили за два долгие года работы на продакшне — ума не приложу.
Две вещи, которые я вынес из всего этого:
я никогда не смогу учесть всего, и моё творение обязательно упадёт/зависнет в последнюю секунду 29 февраля високосного года;
данные нужно приводить к виду, с которым нужно работать.
Без общения с единомышленниками обладатель любого хобби действительно зачахнет. А будет ли это общение реальным или виртуальным, не столь важно.
Год был 1996-й. Так получилось, что я оказался единственным ретрокомпьютерщиком на весь свой район и несколько близлежащих. У меня — ZX и БК, у остальных — либо приставки, ретрокомпьютерами тогда не считавшиеся, либо разнокалиберные PC от 286-го и выше. В школе — тоже не первой свежести, но PC. Интернет и Фидонет были недоступны по причине страшной дороговизны модемов. Общаться на тему ретрокомпьютинга было абсолютно не с кем. А хотелось!
Как-то увидел телепередачу о неком клубе-центре для реабилитации шизофреников. Реабилитация была многоплановой: арт-терапия, музыкотерапия, сценическое искусство и… программирование. Увидев класс для последнего вида терапии, я обомлел: стройные ряды величественных Daewoo CPC на Z80!
Я долго кусал локти, что не успел записать координаты клуба, а передачу больше не повторяли. Ради того, чтобы в неформальной обстановке пообщаться на его занятиях по программированию с единомышленниками по ретрокомпьютингу, я был от безрыбья готов на всё. Даже прикинуться шизофреником!
Работал я эникеем около года и решил, что пора расти. Пошёл учиться в некую %academyName%, где обучают всяким IT-специальностям. В группе, ориентированной на программирование и системное администрирование, оказалось, к моему удивлению, две девушки.
Шёл второй день обучения. В ходе разговоров на всякие темы по железу одна из девушек то ли по необходимости, то ли для поддержания разговора задала вопрос.
— А как долго должна заряжаться батарея от UPS?
— Ну, смотря какая батарея.
— У меня бесперебойник неделю стоит пищит, светится индикатор «Батарея заряжается». Сначала, когда его купили, такого не было, а потом я включила в него пылесос…
Дальше все ржали.
Мой интерес взял верх, и я решил узнать подробности. Пылесос проработал около трёх секунд, «очень тихо», после чего бесперебойник умер.
Какой способ насолить конкуренту эффективнее, чем заслать казачка? Заслать дурачка.
Дурачок нечаянно натворит больше бед, чем казачок специально. Не говорите ему, для чего засылаете. Просто зашлите. Дальше он, сам того не ведая, сделает всё сам. Потом его, конечно, выгонят, но перед этим он успеет попортить конкуренту немало нервишек.
И не вздумайте заслать казачка, косящего под дурачка. Так, как у настоящего дурачка, у него не получится.
Вот такие мыли навеяла бригада установщиков, поставивших в нашем универсаме холодильную витрину вверх ногами и долго не понимавших, что они сделали не так.
Пушкин понятия не имел, из-за чего к нему в дверь постучались жандармы. До той дуэли с Дантесом было ещё далеко. С порога они сказали, что долго искали кнопку звонка, которой не было. Как пользоваться колокольчиком со шнурком, они не поняли. Пришлось вспомнить, как стучать.
— Это чтобы патент на электрический звонок не нарушать.
— Угадали, Александр Сергеевич. Мы за этим и пришли. Покажите-ка стол, за которым пишете. Стальных перьев нет? Патент не нарушаете на них?
— Ну, что вы, что вы. Только гусиные, на них нет патента.
— А вот эта лампа? Керосиновая? На неё тоже патент.
— Масляная. Можете снять абажур и убедиться сами.
— Хм. Снимается!
— Да, масляная лампа удобна. Можно разобрать. И пересобрать.
— Колокольчикомаслогусиноид, что ли?
— Так точно!
— Не знали, не знали… А скажите, когда ваши стихи и прозу под керосиновыми лампами читают, проблем с отображением у читателей не возникает?
— Каких ещё?
— Ну, буквы не прыгают?
— А, слышал про такой стереотип. Нет, не прыгают.
— Хорошо, будем знать. К вам больше претензий нет. До свидания!
Новое значение фразы «сделано на коленке» преподнесла мне новая мышка для ноутбука. Зараза оказалась очень привередлива к поверхности, но неплохо работает на тёмной ткани. То есть на штанах. Теперь у меня есть несколько презентаций, свёрстанных буквально на коленке.
Дело было на рубеже веков. Как раз тогда пошла партия компов, у которой как-то неуловимо портился CMOS, и при следующей перезагрузке компьютер показывал чёрный экран. А много времени до этого Windows научился извлекать компакт-диски через правую кнопку мыши — «Извлечь». Эти два факта представляли почву для сеансов магии над рабочими местами сотрудников и клиентов.
Отвлекаем пользователя каким нибудь способом, правая кнопка на сидироме — «Извлечь». Привлекаем его внимание к сидирому и пальчиком так: «Дай, дай, дай, дай». Под округлившиеся глаза пользователя сидиром сам отдаёт диск. Не забываем сказать «Умничка!» для закрепления эффекта. Некоторые модели сами закрывают лоток после этого, но это уже к производителям. Пользователю говорим: мол у него язык сохнет, вот и прячет…
Про чёрный экран. В подавляющем количестве случаев помогает сброс CMOS, для этого надо переткнуть джампер и подождать 15 секунд (так написано в книжке к матери). Перетыкаем, про себя считаем до 15, но при этом полушёпотом говорим совсем другое, прикрываем глаза… Некоторые впечатлительные утверждали, что админ при этом начинает таять в воздухе, но компьютер после установки джампера на место заводится.
На некоторых компах нет лампочки HDD, поэтому работу диска щупаем пальцами, по характерной вибрации корпуса. Вполголоса вспоминаем рецепты из книжки по регулярным выражениям, после чего отдаём системник пользователю. Многие утверждают, что он начинает работать сильно лучше, хотя ты только почистил темпы, куки и посносил мусор по маске файлов
~*.* *.~* *.tmp *.bak
, что само по себе напоминает каббалистическое заклинание. Я уж молчу про кастомные форматы ячеек в Экселе.
Это был рубеж веков, мы развлекались, как могли. Заметьте, с пользой для наших клиентов.
Мы работаем компьютерной помощью с «удалёнными руками». Недавно начальство приказало «рукам» звонить «мозгам» сразу, как прибыли на место, не пытаясь решить проблему собственными силами.
И вот очередной звонок приходит мне. Слышу голос довольно толкового парнишки, котором явно суждено стать «мозгами»:
— Тут в заявке документы пропали. Сейчас, комп загрузится, будем думать.
— Корзину первым делом проверь.
— А, не, уже нашлись. Кто-то включил учётную запись гостя, и так как на компе всего две учётки — «Андрей» и «Guest», то мужик решил, что он точно не «Андрей». Это его сын, кстати.
Всё, проблема решена. Вешает трубку. Через десять минут перезванивает:
— Серёга, объясни, пожалуйста, клиенту, почему он должен мне платить, если я всего лишь вошёл?
Чаще всего среди пользователей встречается подвид «не знаю, чего хочу на самом деле». Такой пользователь составляет техническое задание или полностью соглашается на подготовленное IT-отделом без нареканий; когда же приходит долгожданный момент тестирования написанной для него программы, его осеняет, что это не то, чего он хотел на самом деле! Вот эта формула должна быть не такой, расчёты должны проходить в другом порядке, итоговая информация с точки зрения его специальности не имеет смысла, а итоговая таблица должна выглядеть в его представлении совсем не так. Напомню, что этот чудак ранее подписал техзадание, в котором все эти моменты были подробно описаны.
Приведу пару аналогий.
Инженер разработал проект здания, утвердил его, отдал строителям на реализацию. Строители посмотрели на чертежи, прикинули, как это сделать, уточнили некоторые нюансы с инженером и ушли строить. Несколько раз во время постройки, в какие-то ключевые моменты, приглашали инженера посмотреть, как проходят работы и устраивает ли его. Инженер молча кивал. Момент истины: здание готово! И тут вдруг инженер начинает негодовать и доказывать, что такого у него в чертежах не было, он изначально не мог не возмущаться на этот фундамент, и вообще, нужно сносить и строить заново по другим чертежам. На его же подписи в изначальных чертежах и документах реагировать каким-либо образом отказывается.
Вызывается такси. Человек разговаривает с оператором и запрашивает маршрут из центра в северную часть города. Приезжает автомобиль. Персонаж садится, водитель уточняет маршрут, персонаж молча кивает, водитель трогается. По приезде в контрольную точку пассажир возмущается, что его привезли не туда, что он заказывал автомобиль из центра на юг, а его тут пытаются жестоко обмануть. Услышав аудиозапись своего заказа, грозит подать в суд за клевету и подделку аудиозаписи с его голосом.
Следующий подвид — «хочу, чтобы оно само и без моего участия». Это те, кто хочет, чтобы написанная программа полностью выполняла за этого человека работу, а он сам в это время будет чатиться и смотреть видеоролики на Тытрубе. Для меня не составит большого труда написать такую программу. Даже более того: для меня не составит труда разобраться в специфике работы такого человека. Пусть это будет долго и пусть мне этого не хочется, но это моя работа. Но потом не удивляйтесь, что вас поставят в список на увольнение. Я не буду скрывать от вашего начальства, что с помощью этой программы вместо трёх человек ту же работу сможет выполнять один. Это из раздела: «Бойтесь своих желаний, а то они могут исполниться». И пусть я останусь для вас моральным уродом, но я сделаю свою работу, и предприятие повысит мне гонорар за сокращение расходов.
И, наконец, самый великолепный и очаровательный подвид (и сюда относятся не только девушки): «не знаю как, но пусть работает». Сюда отнесу тех, кто хочет, чтобы программа в формуле расчётов имела дополнительно ещё пару динамических чисел, которые хранятся у пользователя если не на бумажке, то в голове, и чтобы программа эти числа предугадывала; предложение о всплывающем окне ввода чисел с клавиатуры воспринимается как богомерзкая ересь. Когда я отшутился такому пользователю, что регламент его предприятия не позволяет закупать нейроинтерфейсы для работы с компьютером, он на полном серьёзе написал прошение о закупке оных и разрешении лично ему с ними работать. Почти все сотрудники были в истерике от комичности ситуации, кроме него и тех, кто не понял, в чём юмор. Ещё один такой в другой конторе заявил: «Хочу, чтобы вы написали программу, которая будет предсказывать момент обрыва интернета», — видите ли, чтобы он мог предупредить собеседника в соцсети, что ответить какое-то время не сможет. Для тех, кто не осознал, что он имел в виду: он хотел программу, которая будет выглядеть как таймер, отсчитывающий секунды/минуты/часы/дни до следующего разрыва связи с интернетом.
Жена, ища что-то на антресоли, нечаянно уронила мне на затылок увесистый предмет, оказавшийся блоком питания от чего-то Спектрум-совместимого. С металлическим дном (хорошо, по затылку ударило не оно), с двумя толстыми шнурами. Поднял с пола и прочёл параметры: 5 вольт, 0,8 ампера. Рядом положил современный с теми же параметрами. Оба измерил, взвесил и немного посчитал.
Вес уменьшился в 102 раза, объём — в 78! А одна вилка старого блока без шнура в два раза тяжелее, чем весь нынешний «зарядник» со шнуром и разъёмом.