Сергей Тарасов - Дефрагментация мозга. Софтостроение изнутри
Итогом истории для меня стал переход на Libre Office, где редактировалась в том числе и эта книга.
SQL Server
Несмотря на предвзято позитивное отношение к этому продукту Microsoft, используемому мною с 1996 года, вынужден отметить, что и здесь, начиная с 2005-й версии, наряду с полезными нововведениями проявилась определённая деградация.
Изменилась концепция пользовательского интерфейса. В версиях 7 и 2000 интегрированные приложения администратора (Enterprise Manager) и разработчика (Query Analyser) были разделены (в 6.х разделение тоже было, но неявное). В 2005 году корпорация решила унифицировать подход и свести всё в одну среду разработки и администрирования. Приложения переписали на. NET, благодаря чему они стали работать медленнее. В процессе переделки разработчики забыли, видимо, в спешке прихватить разные полезные мелочи, вроде множественного выделения объектов в дереве, которые за предыдущие годы были воплощены в версии 2000. Что, например, вы ожидаете увидеть, щелкнув мышью дважды на хранимой процедуре в правом окошке проводника объектов? Правильно, её текст. Но тут вас постигнет разочарование, мы проваливаемся в список параметров.
Если в версии 2000 пошаговая трассировка хранимых процедур и триггеров из консоли Query Analyser была доступна, то в 2005 она исчезла, а программистам порекомендовали дополнительно покупать Visual Studio соответствующей редакции. Хочется надеяться, что победил здравый смысл, а не поток жалоб, и в 2008 году отладка вновь появилась в основном инструментарии.
Поставляемая вместе с продуктом часть Visual Studio, видимая пользователю как BIDS (Business Intelligence Developer Studio), привязана к версии СУБД: OLAP-проекты, отчёты и пакеты ETL[90] для SQL Server 2005 могут разрабатываться только в BIDS 2005. А в BIDS 2008 уже не могут, потеряна обратная совместимость.
При этом многие полезные функции в 2005-й версии были всё ещё сырые. Например, OPENQUERY(), не допускающая конкатенации строк в параметрах, вынуждала писать трудносопровождаемый код внутри строковых переменных. Или новоиспечённая ROW_NUMBER(), не решающая, а создающая проблемы постраничной выборки на относительно больших объёмах. Исправляющая положение инструкция ORDER BY OFFSET появилась только в версии 2012. Форматы резервных копий между SQL Server 2008 и 2008 R2 оказались несовместимы.
Со средствами сетевого доступа к серверу баз данных и вовсе вышла смешная история.
В версии SQL Server 6.5, которая была ещё «почти Sybase 11», родным интерфейсом доступа к СУБД являлась DB-library в виде DLL и статической библиотеки С/C++, а драйвер ODBC[91] шёл как стандартное дополнение. После выпуска полностью переписанной на уровне ядра версии SQL Server 7 в 1998 году Microsoft анонсировала отказ от DB-library в пользу OLE DB, утверждая, что именно он и будет теперь «родным» для СУБД. Сама постановка фразы о том, что универсальный интерфейс, работающий через COM, может быть одновременно «родным», вызвала в сообществе разработчиков недоумение.
Поддержка DB-library была прекращена, в SQL Server 2000 эта библиотека ещё присутствует, но уже работает поверх (!) OLE DB. Библиотека С/C++ поверх COM – яркий пример костыля, подпирающего этаж совместимости. Имевший специфичные расширения ODBC-драйвер был сделан «с нуля», он самостоятельно реализовывал протокол TDS[92] доступа поверх сетевого уровня IP-сокетов и являлся высокопроизводительным и автономным, то есть не требовал установки дополнительных «родных» DLL. SQL QueryAnalyser в версии 2000 и, позднее, SQL Server Management Studio используют ODBC для управления запросами.
Одновременная поддержка OLE DB и ODBC в синхронном функциональном состоянии требовала затрат, которые в 2012 году решили сократить. Microsoft анонсировала отказ от OLE DB в пользу ODBC для работы с SQL Server.
Оказалось, что «родной» интерфейс всё-таки не родной. «Родного» у SQL Server просто нет, но есть ODBC, который теперь объявлен «родным», и SQLClient для. NET. Могли ли в 1995 году немногочисленные разработчики, выбравшие тогда ODBC, предполагать, что к 2012 году они окажутся в числе выигравших?
Vista
Windows 7 ещё находилась в состоянии «кандидат к выпуску», а представители Microsoft открытым текстом стали предлагать отказаться от покупки своего флагманского на тот момент продукта – операционной системы Windows Vista и подождать выхода новой версии.
По сути пользователям сообщили, что мы достаточно потренировались на вас и за ваши же деньги, а теперь давайте перейдём собственно к делу. Судьба Vista была решена – система фактически выброшена в мусорную корзину, так и не успев занять сколь-нибудь значительную долю парка «персоналок» и ноутбуков. Производителям железа была дана отмашка переключиться на Windows 7, корпоративным службам ИТ пришлось в срочном порядке сворачивать проекты по переходу на Vista и ориентироваться на «семёрку».
Не скрою, я изначально был скептически настроен к Vista, вышедшей в конце ноября 2006 года, по двум причинам. Во-первых, ничего существенного по сравнению с Windows XP она не привносила, а во-вторых, первый пакет обновлений, после которого обычно можно начинать работу с продуктами Microsoft, задержали более чем на год, до марта 2008 года. Такие повороты неприятны не тем, что за ними обычно скрывается некий тайный смысл и прочая конспирология, а тем, что, судя по заявлениям для публики, стоит за всем этим нескоординированная работа разных служб и сумбурная техническая политика последних лет.
Интересно также, что Билл Гейтс и Стив Балмер в конце 2000-х годов начали активно продавать свои доли в бизнесе Microsoft.
О материальном
И немного о материальном, про оборудование. Периферия. Широко распространено мнение о том, что Linux на порядок хуже чем Windows поддерживает всякие периферийные устройства. Однако это не совсем так.
Если брать 32-разрядные версии Windows, то, действительно, нетрудно найти драйвер даже к довольно старому устройству. Но Microsoft уходит с 32-
разрядных платформ на десктопах и ноутбуках, навязывая предустановленные 64-разрядные версии своих операционных систем. Некоторые приложения всё чаще требуют 64-разрядной среды, например, для обработки больших объёмов данных или видео высокой чёткости.
Тут-то и выясняется, что по уровню поддержки периферии 64-разрядные Windows отрезают вам путь к использованию ещё совсем нестарых устройств. Если у вас в доме или на работе имеется оборудование 2–3-летней давности, то с большой вероятностью найти драйверы даже под Vista x64 вам не удастся. Не говоря уже о Windows 7. Единственный доступный выход – виртуальная машина с Windows XP.
А что же в Linux? Если оборудование поддерживалось в предыдущих версиях таких распространённых дистрибутивов, как Ubuntu или Mint, то независимо от разрядности новых версий системы оно будет продолжать поддерживаться и в них после обновления. Сканером и лазерным принтер я пользуюсь уже более пяти лет, сначала в 32-битной Windows XP, установив драйверы из комплекта, а затем под 64-разрядными Ubuntu и Mint из дистрибутива, не требующими установки драйверов вообще. Чего и вам желаю.
Проектирование и процессы
«La perfection est atteinte, non pas lorsqu'il n'y a plus rien а ajouter, mais lorsqu'il n'y a plus rien а retirer». (Совершенство достигается не тогда, когда нечего добавить, а тогда, когда нечего убрать.)
Антуан де Сент-ЭкзюпериКорпоративные информационные системы (КИС) прошли долгий путь от полной закрытости сплавленных с аппаратурой монолитов до создания модульных и открытых систем. Однако теперь вместо стандартизации процессов и реализации лучших практик создания базовой функциональности на передний план выходят конкурентные преимущества за счёт дифференциации и специализации. Прежде всего, за счёт обрастания «скелета» КИС «мышцами и кожей» специфичных для данного предприятия программ.
В разделе собраны заметки и наблюдения, касающиеся архитектуры, некоторых практик концептуального и технического проектирования, реализации автоматизированных информационных систем и сопутствующих процессов.
Краткий словарь для начинающего проектировщика
Основная задача проектировщика – поиск простоты. Очень просто делать сложно, но очень сложно сделать просто. Начинающий проектировщик осознает это сам со временем, а пока нужно учиться элементарным понятиям для понимания, что же хотел сказать коллега по проекту на самом деле.
• «Это был плохой дизайн». Это спроектировано не мной.
• «By design» (так спроектировано). Ошибка проектирования, стоимость исправления которой уже сравнима с переделкой части системы.
• «Это не ошибка, а особенность (not a bug but a feature)». Прямое следствие из «by design».
• «Это может ухудшить производительность». Не знаю и знать не хочу ваши альтернативные решения.
• «Нормализация не догма». Потом разберёмся с этими базами данных, когда время будет.
• «Это наследуемый модуль». Этот кусок со многими неявными зависимостями проектировали достаточно давно, скорее всего стажёры.
• «Постановка задачи тоже сложна». Ума не приложу, откуда возникли эти десятки тысяч строк спагетти-кода.