Microsoft. Аспекты политики

Владимир Каталов

(с небольшими сокращениями)

Когда я впервые увидел, что представляет собой Windows (это была версия Windows/386), ничего кроме разочарования мне испытать не пришлось. Даже для MS-DOS тогда существовали приличные графические библиотеки, позволяющие придать программе неплохой внешний вид и привести её в соответствие с некоторыми стандартами GUI. Впрочем, уже тогда бытовало мнение, что программа не может быть хорошей, если она имеет номер версии меньше трёх.

Фирма Microsoft не обманула ожиданий пользователей и вышла на рынок с версией 3.0 (а затем и 3.1, а также Windows for Workgroups), разругавшись попутно с IBM. Я не буду сейчас останавливаться на недостатках тех версий, а лишь замечу, что для «персоналок» с точки зрения рядового пользователя тогда ничего лучшего не было. Интуитивно понятный интерфейс, многозадачность (пусть и не «настоящая»), масштабируемые фонты, поддержка локальных сетей, низкие требования к аппаратной части, простота установки... Через пару лет рынок был захвачен. Тысячи и тысячи разработчиков бросились писать программы для Windows, ещё больше укрепляя положение Microsoft. А собственная разработка IBM — OS/2 так и не получила признания широких масс программистов и пользователей, хотя во многом превосходила творение Microsoft...

Нет, я не собираюсь пересказывать путь Билла Гейтса к успеху — это уже сделано многими. Я также не буду утомлять вас сравнительным анализом операционных систем и нюансами маркетинговой политики — об этом также позаботилось большое количество как профессионалов, так и любителей. Я лишь хочу остановиться на некоторых аспектах политики фирмы Microsoft — с точки зрения разработчика.

Chicago, Memphis, Detroit, OSR, СЕ, NT...

Даже специалист крепко задумается, если ему задать вопрос, сколько существует версий Windows. Основное хождение сейчас имеют следующие: Windows 3.1, Windows for Workgroups, Windows'95, Windows NT 3.51 и Windows NT 4.0. Не считая различных модификаций типа OSR2, национальных версий и дополнений типа Service Pack и Resource Kit. Плюс большое количество бета–версий, которые, как известно, появляются на Митинском рынке чуть ли ни раньше, чем их получают бета-тестеры. Безусловно, каждая из этих версий имеет право на существование, но...

Для разработчика это сущий кошмар: если он рассчитывает на действительно широкое распространение своей программы, то ему придётся сделать соответствующее количество вариантов своего детища, либо динамически подстраиваться под определённую версию операционной системы уже во время работы программы (что ведёт к её непомерному «раздуванию»). Вы знаете, у меня сложилось впечатление, что программисты из Microsoft не общаются между собой: столько различий между упомянутыми версиями. Правая рука не ведает, что творит левая... Даже некоторые функции API с одинаковым названием и назначением ведут себя в различных системах совершенно по–разному, и нередко это никак не отражено в документации. Дело ещё и в том, что очень часто это совершенно не оправдано. Но для получения логотипа «Designed for...» позаботиться о совместимости придётся. Лично я не понимаю, почему моя программа должна работать под Windows NT, если я разрабатываю её для Windows'95. Хорошо ещё, что обратной совместимости не требуют... Хотя нет, я ведь и «Designed for Windows NT 4.0» уже где–то видел!

Существует, однако, документ под названием «Differences in Win32 API Implementations Among Windows Operating Systems» (White Paper). Нет, полезных советов по написанию «универсальной» программы вы там не найдёте, зато есть список функций API, уникальных для Windows'95 и Windows NT, а также перечислены функции, возвращающие разные значения в разных системах. Хоть какаято помощь... Но очень многое, к сожалению, туда не попало — видимо, посчитали различия слишком мелкими.

С выпуском Windows'98 (Memphis) ситуация, понятное дело, только ухудшится...

Кстати, из уст одного высокопоставленного руководителя Microsoft как–то прозвучало, что следующую версию программы надо разрабатывать одновременно с текущей, причём желательно, чтобы этим занималась совершенно другая — независимая — команда. К чему это может привести, мы с вами и наблюдаем в настоящее время... А мне–то казалось, что новая версия должна стать в полном смысле слова преемником старой, т.е. взять от неё всё лучшее, реализовать по возможности максимальное количество пожеланий пользователей и избавиться от ошибок.

Не могу удержаться, чтобы не рассказать интересную историю с Service Pack 2 for Windows NT 4.0. Надо сказать, что даже сама Microsoft не рекомендовала устанавливать этот пакет без особой необходимости — там есть несколько весьма досадных ошибок, из–за которых после его инсталляции очень часто приходится видеть «Blue Screen of Death» (в ситуациях, когда ранее всё работало гладко). Однако он делает доступными несколько API-функций, применение которых может дать очень существенный выигрыш в производительности при работе с большими объёмами данных (раньше эти функции можно было вызывать только из Ring 0 — уровень драйверов устройств). Ну и что, — скажете вы, — недокументированные функции были в Windows всегда. А то, что эти функции с успехом используются в Microsoft SQL Server, давая ему таким образом незаслуженную фору. Правда, «под давлением общественности» (см. http://www.ntinternals.com) их описание всё же появилось в Microsoft Knowledge Base, но оно «почему–то» попало в статью с названием типа «Performance Enhancements in Microsoft SQL Server 6.5», а кому придёт в голову туда заглядывать? Спустя ещё некоторое время (уже после появления Service Pack 3), Microsoft выпустила дополнения к SDK, поддерживающие эти функции, но поезд уже ушёл...

Как делать деньги на ошибках.

В любой программе (если, конечно, она способна на большее, чем печатать «Hello, World») есть ошибки. Они могут быть серьёзными и не очень, разрушающими данные или просто раздражающими, очевидными или редко проявляющимися, но они есть всегда. Нельзя также не отметить, что при переходе к новой версии их количество, как правило, не уменьшается — т.е. обязательно появляются новые «взамен» исправленных старых (а очень часто о старых просто «забывают»). Тестирование программы перед выпуском её «в свет» на суд пользователей — дело сложное и кропотливое, требующее усилий не меньше, чем сама разработка; если фирма–производитель не имеет специального подразделения, занимающегося тестированием, то эта тяжесть ложится на плечи самих разработчиков (а они любят заниматься тестированием не больше, чем написанием документации). Чем меньше программа тестируется, тем больше потом будет проблем у службы технической поддержки; а увеличение цикла «проверка–доработка» ведёт зачастую к задержкам выпуска окончательного продукта, не говоря уже о превышении соответствующей статьи расходов бюджета.

В общем, получается замкнутый круг. И приходится чем–то жертвовать, как это бывает всегда в подобных случаях. Надо отдать должное фирме Microsoft — она нашла блестящее решение, позволяющее не только не потерять ни цента, но ещё и дополнительно заработать, не прикладывая значительных усилий.

Разработчики программ для Windows, наверное, уже поняли, о чём я говорю. Это платная поддержка Microsoft, а также диски TechNet и MSDN. В самом деле, зачем искать ошибки в программе до её выпуска на рынок, когда можно сделать это потом, получая за это деньги? Что–то, безусловно, делается (согласно утверждениям фирмы, бета–версия Windows'98 была разослана по десяти тысячам адресов), но как–то не особенно заметно, чтобы это тестирование давало хорошие результаты (кстати, интересный момент: я уже больше года участвую в программе бета–тестирования новых версий Windows, но все они — OSR2, WDM/USB, Memphis — мне приходят почему–то американские, а не русские и даже не панъевропейские).

Начнём с поддержки. Мне трудно оценить, насколько хорошо работает платная служба поддержки (в Москве этим занимается Digital Equipment, но я не имею чести быть её клиентом). Зато у меня есть опыт общения со «специалистами», оказывающими бесплатные консультации. Общее впечатление следующее: уровень их квалификации оставляет желать лучшего, и получить ответ на вопрос можно только в том случае, если он достаточно простой и/или уже задокументирован самой Microsoft. Шаг в сторону — и вы «провисите» на телефоне достаточно долго, чтобы пожалеть о своём звонке (а ответа так и не получите)... Не говоря уж о том, что ваша работа за это время не продвинется ни на шаг.

Да и с платной поддержкой не всё так просто, как можно было бы предположить. Согласно данным, приведённым на сервере Microsoft (http://www.microsoft.com/supportnet/overview/devprod.htm), один звонок в группу поддержки (по средствам разработки) стоит $95. Можно подписаться сразу на год, но в пределах десяти «инцидентов»; это будет стоить папаше Дорсету уже $895. Если вам денег совсем уж некуда девать, то можете заплатить $20 000 и получить «приоритетную» поддержку (100 «инцидентов»); за эти деньги вы получите также и доступ к некоторым документам, недоступным простым смертным (эх, хоть бы краешком глаза взглянуть, что там есть). Есть и ещё более продвинутый план, но цена даже не указывается (видимо, чтобы не шокировать количеством нулей)...

А вот что подразумевается под «инцидентом» — не совсем ясно. Если я, напр., не могу найти серийный номер Visual С на коробке с диском (мало ли, отклеился) — и за это тоже $95 платить? Или с «простыми» вопросами обращаться в бесплатную службу, а со «сложными» — в платную? А то ведь так никакой бизнес расходов на поддержку не окупит...

Есть другой вариант: можно подписаться (за довольно приличные деньги) на MSDN и прочие программы (кстати, в Москве это сделать не так уж и просто — Microsoft АО почему–то не в курсе, где они есть, так что придётся обзвонить множество фирм). Я помню, какое впечатление на меня произвело то, что в течение всего нескольких месяцев после выпуска Windows'95 фирмой Microsoft было задокументировано несколько сотен ошибок (я думаю, что это лишь малая толика от их реального числа, ну да сейчас речь не об этом). При этом признание существующей ошибки мало что даёт: лишь в очень редких случаях оно содержит workaround, т.е. путь её «обхода» (не всегда, кстати, приемлемый). При этом Microsoft клятвенно обещает, что работа над исправлением ошибки уже ведётся и следующая версия (с исправлениями) уже на подходе, однако слово своё держит не всегда (один пример из DDK — Device Driver Kit — как был «нерабочим» с версии для Windows NT 3.1, так им и остался вплоть до настоящего времени).

И даже не думайте разрабатывать серьёзное приложение, не имея выхода в Интернет. Уж без чего вы точно не сможете обойтись, так это без доступа в UseNet и регулярных посещений сайта Microsoft (плюс ряда других серверов). Рекомендуется также подписаться на ряд списков рассылки, включая платные. А иначе вы так и не узнаете, что можно с чистой совестью «спихнуть» вину на авторов операционной системы)... Правда, вашей программе это не поможет, и всё равно придётся исхитряться, заменяя вызов одной функции несколькими страницами собственного текста. Думаете, я преувеличиваю? Ничуть. Сомневающимся предлагаю проверить, как работает функция GetPrivateProfileSection под Win32s (кстати, в документации указано, что эта функция оставлена для поддержания совместимости со старыми приложениями, однако в SDK для Windows 3.1 её вообще не было).

И что же? Вы платите за звонки, платите за TechNet/MSDN/ чтo-там–ещё, раздражаете своих домашних постоянной занятостью телефона (а ну–ка скачайте 15-мегабайтный Service Pack для Windows NT; и это ещё не предел: недавно вышел Service Pack — уже второй! — для Visual Studio 97, который гораздо объёмнее: около 88 Мбайт, а для инсталляции нужно 300 Мбайт с хвостиком; можно, правда, заказать его по почте на CD, но за $15 + доставка), а в результате получаете лишь слабое утешение: ошибка не в вашей программе, а в чужой. Нет, погодите, это ещё не всё: вам предложат подождать следующей версии и (естественно) купить её. Может быть, с ней у вас будет меньше проблем, а может быть, и нет (заранее это узнать практически невозможно). Вас никто не спрашивает, нужны ли вам дополнительные возможности новой версии (вероятно, совсем нет), но выкладывать свои кровные всё равно придётся. Как вам такая перспектива? Плюс к этому из новых версий зачастую таинственно пропадают некоторые возможности (пример: импорт файлов с русским текстом, набранных в Microsoft Word for DOS, или поддержка Win32s в Visual С++).

Мало того, в продуктах Microsoft есть ошибки, введённые туда специально. Не верите? А зря. Скептиков отсылаю к книжке «Programmer's Guide to Microsoft Windows'95» (Microsoft Press, ISBN 1–55615-834-3; $27.95 (кстати), p. 69 "System Metrics"). По утверждениям авторов, эти ошибки существовали ещё в ранних версиях Windows (имеются в виду то ли 3.1, то ли ранние бета–версии Windows'95); потом их нашли, но к тому времени уже существовало большое количество приложений, их учитывающих. Чтобы никого не обидеть и сохранить «совместимость», их добавили снова. Кстати, даже и не думайте искать сведения об этих ошибках в стандартной документации (к SDK или Visual С++) — их там, естественно, нет и не было.

Как уничтожить конкурента.

Конкуренция — вещь жестокая. Или ты, или тебя... Как выйти из игры победителем или хотя бы выжить? Казалось бы, самый эффективный способ — постоянно изучать рынок, следить за тенденциями его развития, делать то, что не смогли или не захотели сделать другие. Это нелегко, но, тем не менее, все учебники по маркетингу предлагают именно этот путь, выработанный годами.

Фирма Microsoft и здесь пошла своим путём (One Microsoft Way). Если она не может обогнать конкурента, она его просто п окупает. Если купить по каким–либо причинам не удаётся (уж больно мешают антимонопольные законы), то приходится всё-таки разрабатывать собственный продукт и встраивать его в свою операционную систему или раздавать бесплатно (в крайнем случае, по бросовой цене). Неважно, что затраченные деньги не окупятся; главное — это заполучить пользователей, а дальше с ними можно делать всё, что душе угодно.

Мне по–человечески жалко Netscape. Слишком многие, как мне кажется, «переметнулись» в сторону Internet Explorer только потому, что он бесплатный... Кстати, и слухи о давлении Microsoft на провайдеров, поставляющих Netscape Navigator, мне не кажутся беспочвенными, — это вполне в их стиле. Понятно, что на самом Internet Explorer Microsoft ничего не заработает (они ведь обещали его оставить бесплатным: «Was free, is free and will be free», — как сказал вице–президент Microsoft Брэд Силверберг), но тут задумка совсем другая. Они же не альтруисты, в конце концов... Тратить столько денег (начиная с покупки Mosaic и заканчивая покупкой DimensionX и VXtreme, плюс собственные разработки, плюс реклама и т.д.) — и всё просто для того, чтобы «изменить жизнь к лучшему»? Щас!

Нет, Internet Explorer — это всего лишь трамплин, который поможет прыгнуть о–о-очень далеко. Смотрите: уже и Knowledge Base переведена в формат, доступный только Internet Explorer... Это только начало, дальше будет больше. Скажем, если вы попытаетесь установить Internet Explorer 3.02 или более ранний под Windows'98 (Beta 1), то у вас пропадёт Active Desktop (это в лучшем случае). Кстати, это задокументировано в «Release Notes» к Windows'98, но в файле формата Word'97, а сам Word'97, согласно этому же документу, под Windows' 98 практически не работоспособен... Да и Internet Explorer 4.0 (во всяком случае, текущей бета–версией) тоже пользоваться невозможно: некоторые страницы (возможно, оптимизированные под Netscape Navigator) он показывает в совершенно невообразимом виде.

Можно даже ожидать, что стандарт ActiveX завоюет больше поклонников, чем Java. Лично мне Java совершенно не нравится (или, во всяком случае, нравится меньше, чем ActiveX), но дело не в этом. Microsoft берёт деньги за Visual J++, но в то же время раздаёт Visual Basic (Control Creation Edition) опять–таки совершенно бесплатно, а также всячески поддерживает Web-дизайнеров, помещающих ActiveX controls на свои страницы. Они могут себе это позволить: вложения обязательно окупятся в будущем, но вряд ли это можно назвать просто прозорливостью. Это удары н и ж е п ояса. Бизнес есть бизнес, но всегда существуют некоторые неписаные правила, которые принято соблюдать. Есть также такое понятие, как демпинг, и он никогда не считался явлением положительным.

Есть у Microsoft и другие, не менее интересные, средства борьбы с конкурентами. Скажем, не все SDK могут быть использованы с «чужими» компиляторами (без внесения большого количества изменений вручную; пример — Internet Explorer SDK); создавать драйверы для Windows опять–таки можно, лишь пользуясь средствами Microsoft (есть некоторые решения, предлагаемые третьими фирмами, такими как Vireo Inc., но они стоят очень приличных денег).

А ведь конкурирующие продукты не так уж плохи — скажем, Borland С++ обеспечивает лучшую производительность на ряде тестов (напр., на комплексном преобразовании Фурье), да и библиотеки OWL, по оценкам независимых экспертов, превосходят по ряду параметров MFC. А отказ Microsoft лицензировать MFC Borland (этот вопрос, справедливости ради надо заметить, возник перед выпуском Borland С++ 5.0, в который поддержка MFC была введена, но сами из–за конфликта с Microsoft MFC включены не были. К моменту выхода 5.01 проблема нашла своё решение).

Вы, кстати, заметили, сколько у Microsoft появилось новых продуктов за последние пару лет? Здесь есть всё: от игрушек до серьёзных программ трёхмерного моделирования. Причём большинство разработок Microsoft может назвать «собственными» лишь с очень большой натяжкой — они были просто–напросто куплены «на корню» — в основном у небольших фирм.

Раз уж речь пошла об игрушках Microsoft... Я вообще–то по натуре не игрок, но иногда люблю «побаловаться». Как–то решил поставить найденные на CD c Windows 95 OSR2 (beta) trial-версии игрушек Close Combat и Monster Truck Madness (MDM). Чуть не «нарвался».

Дело в том, что обе игрушки требуют драйверы, совместимые с DirectX 2.0. У меня на машине стояли самые свежие драйверы DirectX 3.0, взятые с Web-сервера Tseng, и я был спокоен. Оказалось, зря. Первая игрушка — Close Combat — при установке молчала как партизан, втихаря заменяя мои аудио- и видеодрайверы своими. Вторая — Monster Truck Madness — всё-таки предупредила, что собирается DirectX переустановить, но зачем — я так и не понял; ведь драйверы только что уже были заменены первой игрушкой, в чём я убедился после перезагрузки.

Завесу тайны над этими манипуляциями приоткрыл файл README. TXT от MDM. К сожалению, возможность прочесть его появилась только после полной установки, т.к. вышеупомянутые игры были записаны в виде самораспаковывающихся (и самоустанавливающихся) архивов — эдакий громадный .ЕХЕ–файл. Что внутри — неизвестно. (Windows Explorer на страничке Version свойств этих файлов показывает: Win32 CabinetSelf-Extractor. Однако все имевшиеся в моём распоряжении утилиты, включая оные от самой Microsoft, как «кабинеты» эти файлы не распознали...)

Так вот, что я там нашёл (знал бы, где упасть, соломку подстелил бы):

"DirectX is а system component that allows for more efficient hardware access. То run, Monster Truck Madness requires DirectX 2.0 or later. DirectX is installed on your computer when you install Monster Truck Madness. DirectX 2.0 setup updates your Windows'95 drivers and your DirectX 1.0 driver automatically. In some cases, the latest video drivers from your video card manufacturer have additional functionality that is specific to your video card. If these drivers are marked as DirectX 1.0 drivers, DirectX setup will replace them with а generic DirectX 2.0 driver. In some cases, this may result in а loss of the features that are specific to your video card".

Веселёнькое дело! Что же такое "marked as DirectX 1.0 drivers"? Ну не встречал я такого термина, хотя документации перелопатил немало. Дело в том, что внутри драйвера всегда прописывается номер его версии, и эту величину совсем нетрудно прочитать и правильно интерпретировать. Т.е. драйвер либо версии 1.0, либо нет (прямо как «осетрина первой свежести»). А вот инсталляторы приняли за версию 1.0 сначала мои драйверы версии 3.0 (это я ещё могу понять), а потом уже и свои собственные, которые уж точно должны быть версии 2.0! Напрашивается вывод, что ничего они не проверяют... Так зачем же огород городить?

А игрушки, кстати, оказались весьма посредственные. Только время потерял.

Новые технологии.

Нет, я не буду убеждать вас в том, что «новое — это хорошо забытое старое» (тем более, что это утверждение спорно). Давайте–ка лучше разберёмся, что понимает под этим Microsoft...

Одной из отличительных черт технического прогресса является его «скачкообразность». Количественные изменения происходят до тех пор, пока не настаёт время уступить место качественным. Тактовую частоту нельзя повышать до бесконечности; рано или поздно придётся что–то менять более кардинально (напр., переходить на арсенид галлия). Так и с программным обеспечением: непрерывное добавление новых возможностей в программу улучшает её лишь до поры до времени; наступает момент, когда она разрастается до немыслимых размеров и стремится захватить все имеющиеся в компьютере ресурсы. И тут уже надо искать новые подходы, реализовывать свежие идеи. Вот именно с реализацией идей в империи Билла Гейтса дела и обстоят хуже всего...

С моей точки зрения, всё началось с OLE. Задумка, возможно, была хорошей, но реализовали её из рук вон плохо, чтобы не сказать — отвратительно. Я ещё не видел ни одного OLE-сервера или контейнера, который работал бы, как надо. И это нельзя ставить в вину разработчикам: чтобы обеспечить совместимость своего продукта со всеми остальными (а именно ради этого OLE вроде как и задумывалось), им пришлось бы затратить такое количество усилий, что расходы перекрыли бы доходы во много раз. Даже собственные продукты Microsoft не безгрешны в этом отношении: знакомой мне команде разработчиков из фирмы IzoSoft пришлось «подстраивать» свой OLE-сервер индивидуально под каждую программу из набора Microsoft Office, чтобы обходить имеющиеся там ошибки. А теперь ещё и ActiveX, и DCOM... Новые стандарты — новые ошибки.

Моим основным занятием в жизни является написание программ, и я прекрасно знаю, насколько трудно иногда бывает удержаться от соблазна думать только о себе, т.е. не брать в расчёт то, что многие пользователи любят многозадачность, имея при этом не слишком много памяти и не самый быстрый процессор. Куда как проще и удобнее не утруждать себя оптимизацией, а держать все данные в памяти (часто ещё и забывая её потом освободить). Как гласит один из законов Мёрфи: «Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший дятел уничтожил бы цивилизацию»... Вам понятно, что явилось причиной появления на свет этого афоризма?

А plug'n'play? Тоже вроде бы неплохая идея. Вот только когда в компьютере установлено больше одной платы, соответствующей этой спецификации, обычно начинаются проблемы. Особенно, когда у вас мало свободных каналов IRQ и DMA — Windows'95 начинает их распределять по–своему, руководствуясь мало кому понятными соображениями. Особенно «весело» бывает, когда на последнем этапе загрузки остаются две платы и два прерывания, но драйвер одной из плат хочет получить одно из них — вполне определённое и фиксированное, а его захватывает «успевший раньше» второй драйвер, и в результате у вас одному из устройств прерывания всё-таки не хватает, притом, что остаётся одно лишнее, и исправить эту ситуацию можно, только хорошо разбираясь в тонкостях загрузки драйверов и структуре Registry (которая, к слову, задокументирована очень слабо). Согласен, тут и сами драйверы в какой–то мере виноваты, но и с Microsoft снимать вину нельзя. Так что я с недавних пор полюбил старые добрые legacy-карты и, покупая новую, всегда спрашиваю продавца, можно ли отключить режим PnP и поменять прерывание вручную, переставив перемычку... Экономится куча времени, знаете ли.

Заслуживают «доброго» слова и спецификации Microsoft, якобы призванные облегчить жизнь пользователей. Вот вечно кто–то желает обо мне позаботиться, когда я сам этого совсем не хочу... Чего стоят хотя бы рекомендации Microsoft о том, что программы должны хранить все настройки в Registry, а разделяемые DLL сбрасывать в многострадальную директорию System? Я люблю устанавливать всяческие небольшие утилиты, набранные в Интернете, и каждые несколько месяцев приходится вычищать множество файлов вручную, т. к. даже самый грамотный uninstall (написанный, опять же, согласно вышеупомянутым рекомендациям), не всегда может определить, понадобится ли кому–то ещё какой-то конкретный файл или нет (иногда он спрашивает об этом меня, но я зачастую не в силах ответить однозначно правильно). С Registry ещё хуже: даже собственные продукты Microsoft не любят её после себя «убирать», а чтолибо менять там вручную малоопытным пользователям лучше не стоит. Тем более что и утилита ERU (emergency recover utility) работает крайне плохо.

Документация

Российский программист — существо не избалованное. Ни высокими заработками, ни качественной документацией. Несколько лет назад легальные программные продукты вообще практически не были доступны, и осваивать их приходилось по help-ам, а также методом проб и ошибок.

Если же вы заплатили за программу приличную сумму, то вправе рассчитывать на хорошее и подробное описание. Помню, я как ребёнок радовался документации на свой первый законно купленный продукт — Borland C++ 2.0. Толстые книжки в красивой глянцевой обложке — это завораживало. Там было всё: и как устанавливать продукт, и как его запускать, и как разбираться в ошибках, и как использовать примеры... Блеск!

А недавно приобрели Visual С++. Взвесив в руках коробку, я сразу понял, что что–то не так — уж больно она оказалась лёгкой. И ожидания меня не обманули: внутри (кроме CD) оказалось лишь малополезное руководство пользователя совсем небольшого объёма. Ну–да, справочная система, конечно же, имеется. В формате под новый InfoViewer, интегрированный с Internet Explorer 3.02. Который, в свою очередь, с очень большим скрипом устанавливается под Windows NT 4.0. Кстати, смену InfoViewer представители Microsoft обосновывают тем, что теперь на компьютере можно иметь всего один браузер [Eric Peterson. Our view on the new viewer / MSDN News, р. 2] — догадываетесь какой?

Да, кстати: сама по себе система помощи ни в одном из продуктов Microsoft не выдерживает никакой критики. Ошибок масса (а в новой оболочке появились и новые проблемы: скажем, переход по ключевому слову — простейшая операция — реализован почему–то на Java и не всегда работает, показывая длинное и малопонятное сообщение об ошибке). «Windows Developer's Journal» даже выпускает (регулярно) исправления, описывающие неточности в подсказках. Правда, теперь им придётся туго, т.к. эти исправления были рассчитаны на «старый» формат Windows Help, который Microsoft уже почти не поддерживает...

Так что за хорошей документацией придётся (опять же) идти в Интернет, а то и в книжный магазин, где стройными рядами выстроились книги издательства «Microsoft Press» в ярких обложках, так и жаждущие опустошить ваш карман. Вполне возможно даже, что не удастся обойтись и без покупки дополнительного продукта (наглядный пример: в Access'95 можно использовать Windows API, но описания соответствующих функций, типов данных и пр. предлагается взять в Access Developer's Toolkit, который стоит в несколько раз дороже).

А пробовали найти нужную вам информацию на сайте Microsoft? На редкость увлекательное занятие. Такое ощущение, что его делали профессиональные дизайнеры (сколько там красивых картинок и анимаций — не счесть!), ни сном ни духом не ведающие о проблемах программистов. Как вы думаете, где находится, напр., документация по формату «кабинетов» (файлы с расширением .CAB)? Могу открыть секрет: в разделе «Introduction to Cabinets: А New Way to Distribute Java Classes». Причём располагающийся там же SDK рассчитан на язык C/C++. Кто–нибудь может мне объяснить, причём тут Java? Пример, к сожалению, не единственный.

Очень неплохая документация по Windows'95 и Windows NT, кстати, входит в Resource Kit. Там даже (сюрприз!) описаны многие ключи Registry. Только вот мне кажется, что это не слишком честно — продавать (пусть и за небольшие деньги) то, что, по совести, должно было быть включено в стандартную поставку, ведь без многих утилит, входящих в этот набор, администрировать компьютер и разбираться в тонкостях конфигурирования практически невозможно... То же можно сказать и о пакете Microsoft Plus!: не считая Desktop Themes и бестолковой игрушки PinBall все остальные компоненты очень важны и нужны.

Заключение.

Стремление Microsoft захватить господство на рынке программного обеспечения вполне понятно. Кому не хочется быть первым? Дело даже не только в деньгах, хотя и они играют далеко не последнюю роль. Мне кажется, идёт борьба за почётное звание законодателя мод, и у Microsoft появляются первые симптомы мании величия... Впринципе, даже и это не так плохо: мало кто из пользователей откажется от возможности иметь на своём компьютере все продукты только от одной фирмы; но только при условии, если они надёжны, удобны в обращении, свободны от ошибок, без проблем интегрируются друг с другом и хорошо поддерживаются. А вот этогото продуктам Microsoft как раз и не хватает. Работать надо, господа. Не время ещё почивать на лаврах.

С автором можно связаться по e-mail: kitten@transcom.mipt.ru или посетить http://www.ecsc.mipt.ru/Elcom/.

[Компьютерра. N37(214). — М., 15.09.1997]