|
|
|
| /* Русский Вариант */ |
| « Не зачет по тесту Тьюринга | Худшая. Перереализация. Всех времен. » |
Первый день на новой работе почти всегда медленный и не насыщенный событиями. Немного бумажной волокиты, быстрое знакомство с системой, возможно, какое-то тривиальное Первое Задание. Первый день Ника в International Shipping Company (назовем её так) не был исключением. Он даже настолько затянулся, что казалось, готов продлиться целую неделю. Пока в его ячейку не ворвался один безумный сослуживец.
«Эй, новенький, ты знаешь что-нибудь о резервных копиях в SQL?». Не успел Ник хотя бы кивнуть, тот продолжил, «У нас тут резервное копирование не работает в нашей Программе Мониторинга, а это знаешь ли немаленькая проблемка. Кстати я Дэйв».
Ник немедленно проследовал за Дэйвом в серверную комнату. Беглый запрос о физических размерах таблиц, и Ник смог выявить корень зла. Таблица «TBLWEB00» была размером несколько дюжин гигабайт и просто не умещалась в резервную копию.
Ни Ник, ни даже Дейв понятия не имели, что было в той таблице. Ее название, и тот факт, что она использовалась веб приложением, означал, что в ней могло храниться всё, что угодно, а судя по размеру, всё там и хранилось. Взглянув на схему таблицы, он увидел там что-то вроде этого:
TABLE [TBLWEB00] ( [ICSROWID] INT IDENTITY (1, 1) NOT NULL PRIMARY KEY, [LOGDATE0] DATETIME NULL, [URL00000] VARCHAR(500) NULL, [QUERY00] VARCHAR(500) NULL, [QARG0001] VARCHAR(50) NULL, [QVAL0001] VARCHAR(50) NULL, … [CLIENTIP] VARCHAR(50) NULL )Всего одного взгляда на данные оказалось достаточно, чтобы понять, что таблица использовалась для хранения данных о переходах на страницы, вместе с точками перехода, IP адресами, строками запросов, да и на самом деле всем, что уже должно было осесть в журналах web-сервера. Так как таблица на самом деле не использовалась, он смог удалить несколько столбцов, кучу записей и уменьшить размер таблицы в два раза. Но один вопрос насчет этой таблицы не давал ему покоя - Шозанах?
Легенда о Кайле Сöзе
«Ах, та таблица», немедленно ответил Дэйв, «да, это одна из таблиц Кайла. Ты тут еще много подобного увидишь. Все что могу тебе о нем рассказать, тебе повезло, что не пришлось с ним работать!»
Как оказалось, Дэйв тоже не работал с Кайлом. На самом деле никто не работал. Большинство знали Сöзе (как я его буду называть) по его работе и по Легенде.
В стародавние времена, которые ныне уже никто не помнит, Кайл Сöзе был нанят для разработки веб и настольных приложений. Вместе с «годами и годами опыта», репутацией человека, который «заставляет вещи работать», Кайл привнес с собой и свой собственный уникальный стиль ведения дел. В особенности его гениальная методология касалась проектирования баз данных.
Спроектировано Кайлом
Правила проектирования баз данных Кайла просты:
- Все идентификаторы (имена таблиц, столбцов и т.д.) должны быть длиной строго 8 символов.
- Все имена объектов (таблиц, представлений и т.д.) должны состоять из трехбуквенного обозначения типа (“TBL”, “QRY”, и т.д.) и заканчиваться расширением из двух цифр, начиная с «00». Остальные три символа использовались для собственно идентификации объекта.
- Все таблицы должны иметь поле с уникальным ключом под именем ISCROWID (ISC это International Shipping Company)
- Ограничения (включая внешние ключи и проверки на уникальность) не использовались, а обеспечение целостности данных возлагалось исключительно на пользовательский интерфейс.
TBLWEB00 неотступно следовала строгим стандартам именования, впрочем, как и сотни остальных таблиц от Кайла Сöзе:
TABLE [TBLISR00] ( [ABCROWID] INT IDENTITY (1, 1) NOT NULL , [CUSTNMBR] CHAR (16) NULL , [CNTYSTAT] VARCHAR(100) NULL , [CNTYOFIC] VARCHAR(500) NULL , [CONVDATE] VARCHAR(50) NULL , [INSTDATE] VARCHAR(50) NULL , [DATETRNA] VARCHAR(50) NULL , [DATETRNT] VARCHAR(50) NULL , [DATETRNC] VARCHAR(50) NULL , [CONTACT1] VARCHAR(50) NULL , [CONTACT2] VARCHAR(50) NULL , [CNTEMAIL] VARCHAR(50) NULL , [PHONENM1] VARCHAR(50) NULL , [PHONENM2] VARCHAR(50) NULL , [FAXNUMBR] VARCHAR(50) NULL ) TABLE [TBLISR01] ( [ABCROWID] INT IDENTITY (1, 1) NOT NULL , [ISRRECID] INT NULL , [CNTYSTAT] VARCHAR(100) NULL , [TAAGREMT] VARCHAR(50) NULL , [TAAGRECK] VARCHAR(50) NULL , [TTAGREMT] VARCHAR(50) NULL , [TTAGRECK] VARCHAR(50) NULL , ... обрез ... [CLBILLED] VARCHAR(50) NULL , [CLBILDCK] VARCHAR(50) NULL , [CLINVOIC] VARCHAR(50) NULL , [CONVMEET] VARCHAR(50) NULL , [CNVMETCK] VARCHAR(50) NULL , [SITEVIST] VARCHAR(50) NULL , [SITVISCK] VARCHAR(50) NULL ) ... и т.д. ...Принципы кодирования от Кайла были столь же «уникальными». Пользовательский интерфейс был в ответе за реализацию бизнес правил посредством JavaScript, а повторное использование кода осуществлялось традиционным методом копипастинга. Но так как Кайл «заставлял вещи работать», руководство предоставило ему полную автономию. В конце концов, кто такие остальные разработчики, чтобы указывать Кайлу Сöзе?
План
С портфолио из успешных проектов (таких которые дожили до промышленной эксплуатации), Кайла Сöзе было не так легко дискредитировать. Множество молодых, отважных разработчиков пытались и пали, потеряв в итоге большую часть своей репутации (если не всю). Да и как можно было противостоять его коронной фразе, «Я занимался этим двадцать лет и в сотнях случаев добился успеха, но что я знаю? Да, должно быть вы правы».
Однако один сообразительный разработчик придумал план. Если бы они смогли заманить его на большой проект в роли «консультанта-эксперта» (ведущий разработчик наоборот), они бы смогли здорово потрепать ему нервы. Это был безумный план, достаточно безумный, чтобы сработать.
Крах Кайла Сöзе
Чтобы помочь «консультанту-эксперту» побыстрее привыкнуть к новой должности, команда решила применить «демократический» процесс проектирования. Любые конфликтующие идеи должны были выдвигаться, обсуждаться, и по ним должно было поводиться голосование. Любой архитектор – независимо от опыта – получал один голос.
Это был длительный и мучительный процесс. Неделю за неделей Кайл продвигал единственно верное решение какой-нибудь проблемы. Через несколько часов вносилось «альтернативное» решение, которое обсуждалось, по нему проводилось голосование с последующим утверждением. Кайл был единственным человеком, голосовавшим за свое решение, и лишь все время мотал головой, причитая, «Вы ребята неправы, но что я понимаю, я же просто консультант-эксперт!»
Но когда дело доходило до проектирования баз данных, реакция Кайла была совершенно другой. Когда на голосовании победила «реляционная» модель, Кайл просто впал в ярость. Его подход к проектированию баз данных был единственно верным, и эту битву он не собирался проигрывать. Он угрожал довести все до начальства, но руководитель проекта отметил, что все уже было решено голосованием. Взбесившись пуще прежнего, Кайл вылетел с собрания и до конца дня не появлялся.
На следующий день Кайл Сöзе не появился на работе, отправив вместо этого письмо своему начальнику и руководителю проекта. Оно гласило «Я ухожу. Я отработаю последние две недели, если вы хотите, но я не вернусь, если только вы не настоите на этом».
На следующем собрании руководитель проекта передал всем копию письма Кайла и попытался связаться с его начальником, чтобы узнать, что им делать. Так как начальник был в отпуске, он так и не ответил Кайлу, поэтому больше о нем никто не слышал.
Эпилог
Все что осталось от великого Кайла Сöзе в International Shipping Company - это гора кода и, конечно же, легенда о Кайле Сöзе.
Оригинал:http://worsethanfailure.com/Articles/Who-is-Kyle-Soze.aspx
Перевод:Евгений Виговский
| « Не зачет по тесту Тьюринга | Худшая. Перереализация. Всех времен. » |