Пишу страницу для сайта. Ничего особенного: внесение данных, впоследствии — минимальная их правка, а в основном просмотр. Единственное ограничение: одно поле должно быть уникальным, не повторяться в пределах таблицы. Поле текстовое, так что надо проверять и при повторе выдавать предупреждение. Ничего сложного, в движке есть готовая функция для такой проверки — выдаёт количество записей, соответствующих определённому условию.
Написал. Вношу тестовые данные, заведомо неправильные, чтобы посмотреть предупреждение. Позволяет вносить. Проверяю свой код. Всё верно. Немного меняю условие. Всё равно повторы вносятся. Проверяю ещё раз. Пауза. Перерыв на кофе. И ещё раз. Лезу в код функции.
შენ მოგიტყან ტრაკი! Спасибо товарищу, который научил ругаться по-грузински — окружающие не понимают смысла. Ну почему в функцию имя поля должно передаваться в виде (field_name), а не field_name — без скобок?
И пофиг, что автор этого кода британец. Всё равно он индус.
Разбираю архивы своих исходников с 87 года. С каждым связаны какие-то воспоминания.
Вот 89 год. Волшебный язык CLIST. Фреймворк ISPF/PDF + CLIST + немножко PL/I = рабочее место бухгалтера по учёту машинного времени на ЕС-1066. Банальщина. Но с приколом. CLIST — язык без типов с целочисленной математикой. Если a = 2 и b = 2, то a + b = 4, а вот a and b = 22. Точность была нужна до второго знака.
Где наша не пропадала? И вот вам имитация деления столбиком путём добавления нулей к строке и последующим делением полученного числа. Это уже потом выборки из логов я переписал на PL/I — там было округление. Зато первоначальное ТЗ было закрыто за три недели. Конкурент за это время написал на ASM/360 модуль выборок и только-только дошёл до стадии отладки — даже не до deep alpha.
* * *
Вот 91-й. Рабочее место заместителя директора НИИ по науке. Интерфейс к базе научных работ. База лежит в СУБД ADABAS. Обработчик на PL/I. Интерфейс — всё тот же ISPF/PDF. Ну, и CLIST — как же без него? Обработчик ошибок диагностировал две ситуации. Ничего не нашли — «Х%ЙНАНЫ». Потеряли связь с базой — «П#$ДЕЦ». Каждая буква набиралась из звёздочек матрицей 10×16 и выдавалась на экран терминала 7927 со всеми доступными атрибутами: инверсно, с миганием и писком.
Сел замдиректора, д. т. н., профессор и вообще хороший человек за терминал, набрал данные для выборки, а ему — опа! Замдиректора в шоке. Техническим нутром он догадывается, что, возможно, облажался во входных данных, и набирает какую-то полную галиматью. Раза с десятого он получает и второе сообщение.
Я сижу у себя. Предвкушаю премию. Тут до меня доходит, что премии может и не быть, ибо внедрение произошло вместе с моим обработчиком — точнее, с его сообщениями. Ну, ничего, ща поправим — авось замдиректора ещё не успел попробовать. Правлю на что-то приличное. И аккурат в момент, когда я сохраняю модуль, раздаётся звонок от директора НИИ с указанием явиться с вазелином на ковёр и дать объяснения.
Отвертелся. Спасло то, что между звонком и явкой прошло время, явно недостаточное для правки программы. Даже вазелин не понадобился. Но премию дали в половинном размере — на всякий случай.
* * *
Вот 94-й. Крошечная базейка по учёту кадров и распределению отпусков. Даже тестовая база сохранилась: ФИО, должность, примечание. Примерно такая:
Иванов Иван Иванович — Директор — Получает мильён Петров Пётр Петрович — Замдиректора — Главсамец Васильев Дядя Вася — Дворник — Метёт себе и метёт Сидоров Сидор Сидорович — Ракомстоятель I категории — Стоит себе и стоит
Базу эту я забыл занулить. Функции полного просмотра ТЗ не предусматривалось, только выборки. А где-то через месяц на работу приняли Сидорова С. С. — в общем, полного тёзку. Вбивает кадровица нового сотрудника, собирается нажать кнопку «Добавить» — а ему рубрикатор сразу должность подставляет и комментарий…
За замдиректора по АХО надолго закрепилось прозвище из базы.
Работаю в отделе кадров в крупной софтверной компании. Приходит сегодня молодой человек на должность начинающего программиста С++ для разработки БД на SQL.
— Почему вы уволились с предыдущего места работы? — Да вот, приношу ведущему программисту работающую программу. Он смотрит на код, видит описание команд SQL и заворачивает обратно со словами: «Оно так не умеет!» Даже доказывать не стал, что программа работает, и отдел тестирования её уже проверил.
Устроился я на работу в небезызвестную московскую фирму, занимающуюся производством софта. В первый же день мне дали почитать «правила» компании — то, как надо, как принято и как правильно писать код и работать с базой данных в этой конторе. Прочитал — всё разумно вроде, стандартно, как у всех. Но в процессе работы мне дали понять, что правила эти далеко не для всех, что есть такие очень опытные и незаменимые сотрудники, которым в силу их незаменимости и высокоопытности можно писать непонятный остальным говнокод.
Дальше — больше. Оказалось, о нормальных формах тоже никто не слышал. База данных предоставленного мне проекта имела чудовищную структуру, была не нормализована, во многом избыточна и нелогична. Выяснилось также, что самые основы — SQL — эти горе-разработчики не знают: везде и всюду я натыкался на чудовищные, громадные и неудобные запросы. Складывалось ощущение, что на словах SELECT, FROM и WHERE изучение разработчиками SQL закончилось.
Полгода я пытался разобраться в этом бардаке. Полгода я регулярно задерживался на работе, пахал без выходных. Полгода я пытался внести хоть какую-то логику и красоту в то, что они делали, за что постоянно получал по шапке со словами: «У нас так не принято, мы так не делаем». И через полгода этого издевательства над моей логикой и разумом меня уволили с формулировкой: «Ты не справляешься».
Задолбали люди, которые не хотят прислушиваться к конструктивной критике. Достали те, которые считают себя специалистами, но категорически отказываются воспринимать новое. Устал я от тех, кто не старается сделать свою работу хорошо и качественно. Пугают такие конторы: когда к ним устраивается специалист без опыта, они могут научить его только плохому.
Понадобилась нашей немаленькой конторе единая база пользователей. Собрали совещание в IT-отделе, выбрали с каждого бюро по паре штук самых умных и толковых и посадили проектировать. Начались тяжёлые трудовые будни, потому как нюансов было много, и база нужна была не простая, а с причудами и выкрутасами.
Трудятся лучшие умы над правильной базой месяц, второй; начальство всё негодует, что же так долго. И вот настаёт светлый день презентации руководству отдела этого чуда рукотворного. Через проектор на лист А1 (экран у нас, увы, появился чуть позже) выводят красивую схему объектно-ориентированной базы, в которую при желании можно запихать что угодно. Далее — минут на сорок рассказов с горящими глазами, что, для чего и почему, собственно, так долго. Начальство смотрит, слушает и выдаёт замечательную фразу, над которой мы потом несколько дней посмеивались: «А зачем вам эти кучи таблиц и связей? Хватило бы двух таблиц. В первой — ФИО и телефон, а во второй — отдел/бюро/группа. А вы тут накрутили». Посмеялись и забыли.
Отдало базу начальство на доработку, внедрение и ведение одному бюро — как раз двум из тех лучших умов. Но были у умов свои особенности: один — опытный и очень толковый, но периодически ленивый и очень пофигистичный, а второй — молодой, бойкий, но невнимательный и недостаточно опытный. Далее решило начальство, что база секретная, и надобно закрыть к ней доступ для всех разработчиков, кроме этих двух товарищей, а им поручило писать вьюшьки, пакеты и прочие радости, чтобы программисты с базой все же могли работать. Программистов у нас много, потребностей ещё больше, да и фантазия разыгралась, ибо схема позволяла. Но стали умы филонить и спихивали абы что (лентяй) или абы как сделанное (невнимательный). Получив же такие подарки, программисты шли к админу баз данных и просили его помочь.
Надоело админу, и создал он две таблички: в первой — ФИО и телефон, а во второй — отдел/бюро/группа. Связал их по кодам, загрузил данные и велел пользоваться. И вот не знаем теперь: то ли начальство было право, что хватит двух табличек (а их с трудом, но хватает), то ли неправо, что такую разработку нескольких бюро так просто из-за своего непонимания и незнания загубило.
У нас программист один, на котором платёжная база висит, вечно замученный ходит. Помощников нет, кроме него, никто ничего сделать не может в этой базе, поэтому ему даже в отпуске звонят по мобильному и спрашивают, что и как.
Так вот, теперь программист всегда ездит отдыхать в Иран. Спускается в пещеру на 800-метровую глубину и сидит — только там мобила не ловит.
В девяностых пару лет пришлось работать эникейщиком в маленькой торговой фирмочке. Потом жизнь немножко наладилась, и, по-быстрому обучив своего последователя, я вернулся в программирование, конечно же, пообещав оказывать консультации на первых порах.
Буквально через день звонит директор: мой бывший комп, перешедший теперь во владение нового сотрудника, стал зависать при работе с БД, к которой обращаются многие. Приезжаю, чувствую ауру всеобщей подозрительности: дескать, специально подгадил перед уходом, чтобы не забывали. Сажусь, запускаю, провожу операции. Всё пучком. Недоумённо смотрю на парня. Прошу показать, что делает он. Несколько действий, абсолютно идентичных моим, — и всё замирает. О как. Вижу, что не компьютер зависает, а просто умирает мышь. Перезапускаемся — работает, пока новенький не начинает работать с той самой БД. Там мышь отрубается. А у меня — нет.
Помню, проморочился изрядно. Уже заземлять коллегу думал… Оказалось, что у мыши перетёрся проводок в месте крепления, и она коротила, когда провод изгибался вправо. При работе с БД надо было перемещать курсор на небольшое расстояние — в соседнюю ячейку. У меня, как оказалось, была привычка двигать мышь поступательно; новый же сотрудник перемещал курсор на небольшое расстояние вращением кисти, то есть поворотом мышки. Провод изгибался — и вуаля. Потом, после перезапуска, мышь перемещали к полю пароля и тем самым размыкали провода.
С тех пор всякую неисправность в компьютере я ищу по известному принципу диагностики автомобиля: от простого к сложному. Иными словами, перед тем как приниматься разбирать карбюратор и распределитель зажигания, убедись, что в баке есть бензин.
Архивы и бэкапы в автоматическом режиме? От лукавого всё это.
После института я устроился по специальности инженером-электроником на завод. Обслуживаю приличный участок цеха, чтоб он всегда работал в автоматическом режиме. Вся информация и управление завязаны на два сервера под Win2003, установленные на Главном Пульте. Начальство жлобится на нормальный антивирус, но это в порядке вещей («Кроме вас, к нему никто не подходит, вот вы и ставьте»). Поразил меня процесс создания архива.
Каждую ночь (работаем посменно) приходит специально обученный человек и делает архив температурных режимов. Открывает программу, вызывает график температуры заготовок и делает его скриншот, сохраняя это добро в Пейнте. Файлов таких в день — не менее тридцати. Раз в неделю начальник участка просит скинуть эти файлы ему на флешку (серваки не в сети) и отправляет их заказчику: «Режим выдержан!»
И всё бы хорошо, но скриншоты делают в BMP-формате, и полтора гига за неделю легко набирается. Сейчас на сервере только под архив занято уже более 45 ГБ. Вот я и думаю, когда система рухнет от недостатка места? На мои робкие попытки посоветовать сохранять в JPG или PNG был ответ: «Надо делать так, как учили».
Ах да: на серверах стоит база данных под SQL, куда автоматом пишутся режимы, но что их можно оттуда достать и отправить заказчику, кроме меня, боюсь, никто и не знает.