Интересно, читают ли рецензии на книги в издательствах, которые эти книги издают? Если нет, то почему, а если да, то какие именно - все или только хорошие? Право же, мне очень хочется понять, почему в некоторых книгах повторяются одни и те же ошибки.
Недавно я писал отзыв о книге "Visual C++. Книга для программистов" (PC Week/RE, № 6/97, с. 56). В нем я посетовал на то, что у нас мало издается книг о работе с Microsoft Visual C++ 4.0. И вот мне в руки попадается русский перевод книги Дэвида Круглински, выпущенный "Русской редакцией"*. Как написано в аннотации, это - настоящий учебник по программированию на Visual C++ с использованием библиотеки классов MFC. Действительно, лучшего руководства по работе с Visual C++, будь то версия 1.5 или 4.0, мне не встречалось (я имею в виду оригинальные издания Microsoft Press), потому что ее автор один из разработчиков Visual C++. Конечно же я с интересом прочел русский перевод.
Это издание по праву может считаться не просто учебником, но и энциклопедией по Visual C++ 4.0, ведь в нем собрано все - от описания студии разработчика (Microsoft Developer Studio) до основных приемов создания различных типов приложений с использованием библиотеки классов MFC. Здесь можно найти ответ практически на любой вопрос - в книге 29 глав и 3 приложения, богато иллюстрированных рисунками и текстами программ, причем значительная ее часть посвящена OLE, и, самое главное, - к книге прилагается компакт-диск с исходными текстами и программами, приведенными в отдельных главах. Хочется отметить, что это издание - одно из немногих российских изданий, к которому действительно прилагается компакт-диск. В общем, не книга, а клад для программиста, и все было бы хорошо, если бы не+
Да-да, я об ошибках. Почему-то переводные книги по программированию, изданные "Русской редакцией", местами похожи друг на друга, как близнецы-братья: фразы, словосочетания... Понятно, что переводчики пользуются словарем, который принят в редакции, но почему этот словарь содержит такие странные термины? Еще в отзыве о книге "Windows для профессионалов" (PC Week/RE, № 10/96, с. 8), тоже изданной в "Русской редакции", я с недоумением говорил о всяческих "кучах", "жуках" и т. д. и т. п. Открыв книгу "Основы Visual C++", я снова увидел старых знакомых, к которым добавились новые. Именно поэтому я и начал свою статью с вопроса, который кому-то может показаться риторическим.
Понятно, что для некоторых оригинальных терминов иногда очень трудно найти соответствующий эквивалент, но ведь можно и постараться. А то получается так: открываешь титульный лист и читаешь подзаголовок "Стандарты программирования с использованием библиотеки классов MFC". В "Толковом словаре русского языка" С. И. Ожегова стандарт определяется как образец, которому должно соответствовать какое-либо изделие. Очевидно, что переводя таким образом подзаголовок оригинала "Standard reference for programming with Microsoft Visual C++ version 4", переводчик хотел выразить свое отношение к книге как к своду законов для программиста; но согласитесь, что перевод не совсем правильный, к тому же программирование - процесс творческий, хотя и использующий в ряде случаев стандартные приемы.
Чем дальше, тем интереснее. "Старые знакомые" появляются уже в оглавлении: в главе 9 я увидел название раздела, начало которого может порадовать тех немногих, я надеюсь, противников Windows, которые еще остались, "Куча Windows и семейство функций GlobalAlloc". Представьте себе, где-нибудь на пустыре лежит такая большая куча Windows+ Следующий раздел имеет похожее название "Куча библиотеки С периода выполнения+" В общем, без куч программисту никак не обойтись.
Или, например, приложение Б имеет название "Функции карт сообщений в MFC". В принципе это почти дословный перевод оригинала - "Message Map Functions+", хотя не совсем удачный, потому что в приложении описываются Windows-сообщения и прототипы функций, которые этим сообщениям соответствуют и обрабатывают их, но об этом можно узнать только в четвертой главе.
У меня создалось впечатление, что при переводе одним из правил было: "Хочу - перевожу, а не хочу - не перевожу или перевожу, как хочу", иначе чем объяснить, что Web-узел (site) корпорации Microsoft называется калькой "сайт", а в главе 8 при описании характеристик OLE-контейнера для того же термина дан перевод - "поле". Или другой пример: в главе 4 в разделе, посвященном сообщению WM_NCDESTROY, сказано: "Обязательно используйте эту функцию базового класса" (имеется в виду функция OnNcDestroy), хотя в оригинале предупреждают о том, что если приложение обрабатывает это сообщение, то в производной функции надо не забыть вызвать функцию базового класса.
И такие "ляпы" в книге можно встретить не один раз. Понятие COM (Component Object Model) почему-то переводится как "модель многокомпонентных объектов", а не "модель составных объектов" (пусть кто-нибудь покажет мне, где в английском названии есть что-то про "много"!). Ну а если переводчик встречает фразу "it probably indicates a bug in your program", то в переводе без "жучка" не обойдется, и эта фраза будет переведена как "скорее всего, в вашей программе "сидит жучок"".
Конечно, не все так плохо, как кажется. Во-первых, ошибки чаще встречаются в первых главах (наверное, переводчики потом все же "вчитались" в текст), а во-вторых, в книге при переводе были найдены и отмечены ошибки оригинала, о чем свидетельствуют сноски в некоторых разделах. Но, исправляя чужие ошибки, издатели умудрились добавить свои: на стр. 63 вместо строки pDC->SelectObject(&newPen) появилась строка pDC->SelectStockObject(&newPen), а на стр. 154 перепутано назначение полей "Каталог таблиц страниц" и "Таблица страниц" в рисунке 9-2.
В общем, при чтении книги создается впечатление, что ее "сильно быстро делали", ведь оригинал вышел в прошлом году, а его перевод - в начале этого. Конечно, можно сказать, что это досадные недочеты, что их мало и они не снижают ценности книги. Можно, наконец, сказать, что я слишком уж придираюсь и что лучше иметь такую книгу, чем не иметь никакой.
По-моему, это все - отговорки. Книга, как осетрина, не бывает "второй свежести", она должна быть только хорошей и никакой другой.
* Дэвид Дж. Круглински. Основы Visual C++. Стандарты программирования с использованием библиотеки классов MFC/Пер. с англ. - М.: Издательский отдел "Русская редакция" ТОО "Channel Trading Ltd.", 1997. - 696 с., ил.
Алексей Роговцев