Совсем недавно в издательстве ДМК-пресс на русском языке вышла замечательная книга Конрада Кокосы «Управление памятью в .NET для профессионалов».

Это издание примечательно тем, что в переводе участвовали не только люди со стороны издательства, но и члены сообщества DotNet.Ru, практикующие разработчики, для которых эта книга действительно актуальна.

Под катом история о том, зачем мы в это ввязались, как был организован процесс и с какими трудностями мы столкнулись.



Об авторе статьи: Евгений Биккинин, участник DotNetRu, один из редакторов перевода.

Мотивация


Многие из вас спросят: зачем вообще переводить техническую книгу на русский язык? Ведь английский давно уже стал основным языком IT-специалиста, настолько, что некоторые фразы наших русскоязычных коллег приходится в уме переводить — так в них много английских слов.

Я бы выделил несколько пунктов:

  • Недостаточный уровень знания языка. Порой знания нужны быстрее, чем изучение курсов английского.
  • Время и место чтения. Это особенно актуально для бумажных книг, когда поблизости нет словаря или интернета, чтобы быстро перевести фразу. Я, например, часто читаю в метро с электронной книги.
  • Скорость потребления контента. Ты вроде бы понимаешь все слова предложения, кроме одного, от которого часто зависит смысл всей фразы. А еще предложения в книгах обычно сложнее, чем в статьях или документации. Ты реально тратишь время и усилия, чтобы понять, что же сказано в одном предложении. В результате сбивается ритм и чтение в целом становится менее эффективным.

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

Как появился этот проект


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

А с экспертами беда. Есть переводчики, которые последний раз видели настоящий код 30 лет назад. Есть разработчики, которые на любой иностранный термин кричат, что все обязаны знать английский язык. И есть рынок, потребности которого они не способны удовлетворить. В лучшем случае издательства ищут технических корректоров среди практикующих профессионалов. И именно с таким предложением столкнулся наш .NET-стенд на фестивале TechTrain.


Стенд сообщества на TechTrain

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

Прежде всего мы связались с Конрадом Кокосой и получили его благословение на перевод (кстати, в процессе мы не раз обращались к нему за разъяснениями неочевидных мест и всегда получали большую поддержку). Далее мы собрали фанатов творчества автора, людей не понаслышке знакомых с описываемыми процессами. Разбавили их программистами-любителями русского языка и литературы (да, такие есть). И получили отличную команду, готовую на несколько месяцев посвятить себя неизведанным подвигам переводческого дела.

Трудности


Первая же глава показала, что просто техническим корректированием дело не обойдётся. Нам захотелось существенно переделать перевод. И это оказалось не так просто, как кажется. Для издательских домов такая практика отсутствует, потому что они сталкиваются с риском некачественного перевода от непонятных людей. Но нам повезло. После долгих обсуждений издательство ДМК-пресс согласилось устроить эксперимент и отдать перевод в наше полное распоряжение. За что мы им крайне благодарны. Поэтому данный труд — это не только перевод книги, но еще и попытка доказать, что русский вариант может быть не только качественным с технической точки зрения, но и благозвучным со стороны языка.

В большинстве случаев исправления были довольно очевидными. Заменяем «каркас» на «фреймворк», «трассу вызова» на «стек вызова», а «интеллектуальный указатель» на «умный указатель».

Но были и загвоздки. Одним из таких случаев стала парочка plug/gap. С одной стороны, нет какого-то устоявшегося IT-перевода для этих слов. С другой стороны, это не фантазия автора. Эти слова используются непосредственно в коде gc.cpp. Так вот, по смыслу, plug — это непрерывная область в памяти, в которой находятся используемые объекты, а gap — это промежуток между такими областями.



Сперва в качестве перевода этих двух слов использовалась пара «колодка/зазор». Но мы решили, что такой перевод точно не будет восприниматься читателем адекватно. Поэтому нам пришлось пожертвовать краткостью и ввести понятия «заполненный/пустой блок».
Чуть позже в тексте, правда, появились pinned plugs но всё же «закрепленные заполненные блоки», кажется, звучит лучше, чем «закрепленные колодки».

К счастью таких специфических терминов в книге не так уж много. В основном, все же, встречались вполне известные descriptor, handle, value type, reference type и прочие. Казалось бы, все эти термины давно переведены, однако и с ними возникли разногласия.

Descriptor буквально переводится как «описатель». Но и handle тоже часто так переводят. Поэтому пришлось переводить descriptor буквально «дескриптор», а handle стал «описателем» (не переводить же как «ручка» — и такое встречалось в некоторых переводах).

При решении вопросов перевода большой проблемой является отсутствие «референсного» источника. Таким источником мог бы быть сайт docs.microsoft.com/ru-ru. К сожалению, далеко не все статьи на нем переведены и выверены. Поэтому мы старались использовать этот ресурс как источник, только если видели, что конкретная страница переведена вручную.

При редактировании книги объемом почти 1000 страниц отдельный вызов — это добиться одинаковых терминов во всех главах. Поскольку редактированием занималась группа, то главы обрабатывались не строго по порядку, и иногда случалось использовать слегка различные термины в разных главах. Несомненно, общий словарь терминов сильно помогал, но это не отменило необходимости финальной вычитки всех глав подряд и сверки всех терминов.


На фото автор книги с одним из переводчиков

Заключение


Спасибо всем тем, благодаря кому этот проект стал реальностью. Конечно, Конраду за оригинальный труд и за помощь в русскоязычной версии книги. Всем, кто поддержал настоящую революцию внутри издательства и готов идти на эксперименты.

Нашей дружной команде, безвозмездно делающей мир лучше, а именно:

  • Игорь Лабутин
  • Ирина Ананьева
  • Максим Шошин
  • Елизавета Голенок
  • Евгений Биккинин
  • Ренат Тазиев
  • Анатолий Кулаков

И конечно вам, читатели, ради которых всё это и затевалось.

Промокод на скидку 25%: DotNet25.

Заказать книгу можно на сайте издательства.

А еще мы создали телеграм-чат. Здесь вы можете пообщаться с редакторами перевода, задать свои вопросы, объяснить, в чём и как сильно мы были не правы, либо просто подискутировать на тему переводов и участия сообщества в подобных активностях.