Начнем с того, что в языке Java существуют такие термины как operator, operation, operand и statement. В силу устоявшейся традиции, в русскоязычных переводах термин operator чаще всего переводится как «операция». Например, в первом томе Хорстмана читаем: «Операция / означает целочисленное деление». И это не единичный пример, а общепринятая практика. Хорошо, пусть в русскоязычных переводах объединены понятия operator и operation, хотя это и противоречит требованиям спецификации и словаря: «Operators are special symbols that perform specific operations on one, two, or three operands, and then return a result». Однако пойдем дальше.
Следующим устоявшимся штампом является применения термина «оператор» в качестве перевода понятия statement. И тут уже проблема посерьезнее: у нас переплетаются два совершенно разных понятия, и столь свободное толкование вызывает уже определенные разночтения и противоречия, касающиеся основ языка и потому, влияющих на его понимание в целом.
С точки зрения спецификации: «Statements are roughly equivalent to sentences in natural languages. A statement forms a complete unit of execution» и к ним относятся все наши «операторы» в т.ч. ветвления, циклов и пр. Хотя в спецификации они именуются как statements.
Теперь прочитав, например переводную литературу, вы уже будете несколько озадачены, обратившись к первоисточникам. Но и это еще не все. Обратимся, например к оператору (или все-таки инструкции?) switch:
switch (choice) {
case 1:
. . . .
break;
case 2:
. . . .
break;
case 3:
. . . .
break;
case 4:
. . . .
break;
default:
//неверный ввод
break;
}
Сможете ли вы дать определения используемым здесь понятиям: switch, choice, case n (отдельно для case и отдельно для n), default, break? Вот, например, как представляет себе это переводчик того же Хорстмана:
Выполнение начинается с метки ветви case, соответствующей значению 1 переменной choice, и продолжается до очередного оператора break или конца оператора switch.. Лично меня формулировка
соответствующей значению 1 переменной choiceвводит в ступор, хотя, конечно, догадаться можно. Но не это главное. Тут продемонстрирована устоявшаяся традиция перевода термина statement словом «оператор», вносящая некоторую сумятицу по отношению к его англоязычному собрату. Что же касается поставленного вопроса, то вот как его трактует спецификация:
switch — statement;
choice — expression;
case — switch label;
n — case constant;
break — statement;
> Официальная спецификация языка
Теперь о традициях перевода. Судя по всему, сложились они на заре программирования в Советсвком Союзе, и в дальнейшем кочевали из языка в язык. Насколько известно мне, первая попытка русскоязычного переводя спецификации языка Java была сделана в 1999 году. Но, опять же насколько известно мне, напечатана не была. В ней, действительно, была отдана дань устоявшимся традициям, о которых было сказано выше. Однако, в 2015 году вышел, наконец, печатный перевод. И вот здесь-то, значение терминов оказалось пересмотренным, и на мой взгляд, более соответствует официальной англоязычной спецификации. Хотя, как мне кажется, там тоже есть к чему придраться. В этом издании operator имеет значение «оператор», statement — «инструкция», ну и т.д.
Очень хотелось бы узнать мнение специалистов, поскольку вопрос, на мой взгляд, является непраздным, поскольку касается основ языка, на которых строится его фундамент и правильное понимание. Кроме того, связанные с этим вопросы могут, например, встретиться на сертификационных экзаменах, которые как известно, стараются сдавать на языке оригинала, ну и просто в общении программистов, которые могут представлять себе по разному значения тех или иных терминов. А может быть существует и официальной русскоязычное издание спецификации языка Java? В любом случае, для его выхода накопилось достаточно разночтений. Ведь все вышесказанное касается только отдельных примеров, которых несомненно гораздо больше.
Комментарии (39)
Siemargl
09.06.2017 22:19+6Сколько ни сталкивался с переводами специальной технической литературы — все равно в сложных случаях нужно читать первоисточник — другое мышление и построение фраз приводят к неточной трактовке и в итоге к неверному переводу.
Полезно для новичков, дает возможность прочитать много воды быстро, но вредно в деталях.vitaliy4us
09.06.2017 22:38-1другое мышление и построение фраз приводят к неточной трактовке и в итоге к неверному переводу.
Вот, я именно об этом и хотел сказать. И именно поэтому нужен, нет просто необходим, общепринятый официальны перевод спецификации языка. Нечто вроде стандарта, как это делается для международных норм и правил, действующих на территории того или иного государства. А то что же получается? Любой мало-мальски серьезный проект обязан иметь спецификацию, а основной инструмент разработки данного проекта спецификации не имеет. В результате и получается то, о чем Вы говорите: неточности, разночтения и неоднозначность. Например, прочитав оригинальную литературу и перевод, а потом еще один перевод в трактовке другого автора можно очень даже просто заблудиться.sshikov
09.06.2017 23:02+3А можно показать конкретно, что именно вы поняли неоднозначно? Дело в том, что приведенные примеры (скажем, фразу про символ / для деления) реальными проблемами не являются.
Ну то есть я понимаю вашу цель сделать хороший перевод, и сам всегда старался поступать также, но на практике переводы именно таких документов, как спецификация языка — дело совершенно лишнее. В первую очередь — по причине их устаревания.
То есть, если компания Оракл не заказывает вам перевод каждой очередной версии спецификации языка, причем в идеале — еще до ее выпуска, т.е. синхронно с оригиналом, то эта благородная деятельность вероятно останется неблагодарной и никем не оцененной.
yarric
10.06.2017 18:24+1нужен, нет просто необходим, общепринятый официальны перевод спецификации языка
Звучит как ещё один способ потратить как можно больше времени и денег с как можно меньшей пользой.
vitaliy4us
10.06.2017 19:03-2Ну это опять старая песня на тему: «Ну они тупые!». Они придумали спецификацию, а мы и так смогем. Если так рассуждать, то и ГОСТы не нужны никому.
yarric
10.06.2017 22:42Ну, можно вместо этого потратить время на создание в РФ какой-то новой индустрии, которая в будущем станет такой же весомой, как сейчас IT, и центр которой будет в РФ, соответственно всё самое актуальное по этой теме будет выходить по-русски, а другим придётся подтягиваться и переводить с русского или учить русский.
vitaliy4us
10.06.2017 09:54А можно показать конкретно, что именно вы поняли неоднозначно? Дело в том, что приведенные примеры (скажем, фразу про символ / для деления) реальными проблемами не являются.
Реальная проблема для меня состоит в отсутствии общепринятой русскоязычной спецификации языка, на которую однозначно можно было бы опереться. Ну, а примеры, — о них ведь и говорится в статье. Дело ведь не в символе "/", а в том что, в русскоязычной переводной литературе смешаны базовые понятия спецификации — все без исключения операторы (сколько их там, около пятидесяти, кажется?) отнесены к операциям, но с другой стороны, операторами названы инструкции (if-then, switch, while, break и пр., и пр., и пр.). Вот Вам уже и каша в голове и разночтения. Ну а для переводчика — это настоящая головная боль — постоянно держать в голове, что в силу сложившихся традиций, белое — это оранжевое, а коричневое — это голубое. Кроме того, наряду с этими общепринятыми традициями все же существует и буквальный перевод, в том числе представленный и в единственном известном мне переводе самой спецификации, о котором и говорится в статье, но который остался почему то незамеченным. А это еще более смешивает карты. Уверен, что круг недоразумений гораздо шире и касается гораздо большего числа различных аспектов языка, имеющих отношение к спецификации. Это как если бы существовали несколько вариантов словарей, допускающих различное толкование одних и тех же слов — прямой путь к проблеме вавилонской башни.khim
10.06.2017 16:37Это как если бы существовали несколько вариантов словарей, допускающих различное толкование одних и тех же слов — прямой путь к проблеме вавилонской башни.
Для этого даже не нужно разных словарей — в одном и том же вы сможете найти десяток разных переводов (как физический термин, как медицинский, химический и так далее). Почему вдруг программирование должно быть исключением?vitaliy4us
10.06.2017 17:00Ну что же, в таком случае, откройте в словаре слово statement и попытайтесь среди его многочисленных значений найти слово оператор.
khim
10.06.2017 17:25+1Откройте специализированный словарь и посмотрите. Слово «оператор» там будет на первом месте.
khim
10.06.2017 17:43Обратите, кстати, внимание, что «REM statement» — это «оператор REM», а «RAISERROR statement» — это «инструкция RAISERROR». И всё это — в Visual Studio, не где-нибудь! Потому что первое — это Visual Basic, второе — это SQL, скорее всего.
vitaliy4us
10.06.2017 18:59-2Это не перевод, а констатация того факта, что в русскоязычных переводах это стало общепринятым. Толковые словари, т.е. где терминам дается не «перевод», а толкование на языке оригинала такой вольности не позволяют. Ну, примерно так:
«Operators are special symbols that perform specific operations on one, two, or three operands, and then return a result». https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
«Statements are roughly equivalent to sentences in natural languages. A statement forms a complete unit of execution». https://docs.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html
Что же касается устоявшейся традиции, то она имеет место быть, что опять-таки является предметом обсуждения в данной статье.khim
10.06.2017 19:56+1А чем перевод, по вашему, отличается от «констатации факта»? Когда вы переводите «to dust a cake»
как «посыпать пудрой кекс» — вы не только должны понять: в данном случае «пыль» добавляют или удаляют, но и должны понять, что, в данном случае речь идёт не «пыли», а о «пудре» (сахарной, скорее всего) и сформировать некую фразу, которая нормально «впишется» в русской текст. А ещё там может быть не «кекс», а «торт» — в зависимости от рецепта!
И это мы только одну фразу из поваренной книги перевели! А приготовление пищи — это, как бы, то, чем люди тысячелетиями занимаются!
Так почему вы считаете, что при переводе технической литературы у вас всё должно быть легко и просто?
P.S. Кстати с цветами, про которые вы тоже говорили как о чём-то простом — та же история. Зелёный (мидори) — для японца является оттенком синего (аои). И, соответствено, там где путаницы нет — будет использоваться более «широкое» слово. Далее буквальный перевод даст вам, скажем, «синие яблоки» — но это будет считаться ошибкой переводчика.
elegorod
10.06.2017 14:04+1В повседневной жизни программистов почти никто не пользуется словами «оператор», «операция», «инструкция» и т д — наверное, поэтому не заморачиваются по поводу перевода. Достаточно сказать «в case 2 ты забыл написать break, а результат метода trim забыл присвоить переменной message». Никогда не нужно было задумываться, «case 2» — это оператор, выражение, инструкция или как его ещё можно назвать.
vitaliy4us
10.06.2017 14:04Разговор идет не о «повседневной жизни программистов», хотя и здесь очень хотелось бы поспорить, ну да ладно, время тратить не буду, а о академическом переводе, призванном дать представление начинающим об основах языка и заложить у них правильное представление о нем.
imikh
10.06.2017 16:27+1Зачем начинающим именно академический перевод? Начинать изучение языка со спецификации?
vitaliy4us
10.06.2017 16:37Так академический и означает — следующий принципам академизма, учебный, теоретический (кстати, вот Вам яркий пример того как различное толкование терминов ведет к непониманию друг друга). Именно с азами в виде обсуждаемых здесь примеров, и знакомятся начинающие. Поэтому так важно создать у них с самого начала правильное представление обо всех нюансах. Именно для этого и нужна спецификация. Да собственно говоря, все учебники по языку и являются ее толкованием. И нужна она, в первую очередь, для тех, кто пишет или переводит книги, чтобы и самому во всех деталях разобраться, и до других донести.
yarric
10.06.2017 18:29+1Начинающим освоение языка стоит начать с освоения основ английского. Не понимаю, в чём здесь проблема — английский уже давно стал международным языком науки, как когда-то латинский. Кстати медики до сих пор учат латинский.
Трата человекочасов на перевод того, что, скорее всего, уже устарело на момент перевода, бессмысленна.
vitaliy4us
10.06.2017 19:14Не понимаю, в чём здесь проблема
Проблема в том, что существуют и будут существовать русскоязычные переводы. А существование разных трактовок в разных учебника (и не только) является проблемой. И если «освоение языка стоит начать с освоения основ английского», то можно заметить, что эти переводы несколько не соответствуют нормам этого языка.yarric
10.06.2017 22:45Если речь идёт об учебниках для начинающих — не такая уж и проблема. А когда люди уже дорастают до академических вещей вроде спецификации, то они уже читают это по-английски.
akhmelev
12.06.2017 09:47+2Если человек читая «оператор» не в состоянии понимать суть в контексте, то не быть ему программистом, не дано просто. А для хоть немного понимающих отличить инструкцию от оператора никогда проблемой не было.
Вся статья, да и обсуждение по сути об одном слове, а зато в заголовке очень громко стоит «спецификация языка Java». У вас статья некорректно названа, а вы про некий всеобщий стандарт говорить пытаетесь.
Ожидались-то стримы лямбды и прочая лють, а тут четвертьвековой давности топик, еще на фидо эти занудствования помню, не про Java, но суть та же. Не в обиду конечно, переводами все равно нужно занимается, но их неточности не такая большая проблема.
martin_wanderer
13.06.2017 11:54На мой взгляд не так уж важно, какой вариант перевода термина выбрать, лишь бы он был один и тот же на протяжении книги. Ну и, понятно, с оглядкой на устоявшуюся практику применения.
Danik-ik
19.06.2017 19:17Переводчик Хорстмана (если Вы пр И.В.Берштейна) хорош тем, что не даёт забыть: слова суть ничего не значащая абстракция, и если не видеть за ними сути, то читать умные книжки бесполезно. И ещё читать за ним очень нескучно. Неканонический переводчик, чего уж там...
Абстрагируйтесь от терминов, и наслаждайтесь родной речью. Не всё ли равно, как называется "case", если известно, как оно пишется?
Главное, не забывать о сути, которая прячется за словами.
fogone
У терминов operator, operation, operand есть вполне буквальные русские аналоги: оператор, операция и операнд. Все эти слова есть в русском и используются для обозначения идентичных сущностей, что и в английском языке. Оператор — это тот кто производит операцию, операнд — это тот над кем её проводят, ну а операция — это собственно производимое действие. Спутать их при всем желании невозможно. Со statement всё немного сложнее, потому что в русском языке нет прямого перевода этого слова в том значении, в котором его используют в семантике языка программирования. Его можно перевести как «инструкция», что, к слову, не сильно увеличивает понимание этого термина. То, что раньше все это переводилось как оператор — это скорее всего просто не желание переводчика задуматься о сути терминов.
yarric
Statement как "выражение" можно перевести.
vitaliy4us
Отнюдь, поскольку это совершенно самостоятельный термин, имеющий свое четкое определение в спецификации языка:
Собственно у каждого из терминов operator, operation, operand, statement, expression есть собственное четко определенное спецификацией значение. И проблема состоит в том, что в переводной литературе они смешиваются, что по сути ведет к искаженному толкованию основ языка.
vitaliy4us
В том то и состоит проблема, что это не так, и собственно говоря, именно этому и посвящена данная статья. Хотя, с этим утверждением я согласен полностью. Но вот, например, толкование Википедии:
Можете открыть любую переводную книгу по Java (и не только), чтобы убедиться в том, что именно этим и руководствуются переводчики. И только в 2015 году вышла приведенная мною книга, где эта терминология пересмотрена и приведена в соответствие с англоязычными аналогами.
sshikov
Не совсем так. Оператор — это все-таки как правило +, -, * и т.п. А инструкция — это например if/switch. Но присваивание тоже называют и инструкцией и оператором.
На мой взгляд, то о чем тут говорится (по крайней мере приведенные примеры) — это мелкие и не слишком существенные вещи. И обычно не вызывающие проблем для понимания.
В спецификации Java есть вещи намного более сложные, типа memory model например.
Ну и наконец, присоединюсь к комментарию ниже — на русские переводы вообще не стоит рассчитывать. Если ты программист и профессионал — ты обязан читать в оригинале, потому что имеющийся перевод все равно устареет максимум через пару лет (появление Java 8 сделало многие документы практически бесполезными, с Java 9 похоже предстоит все тоже самое).
А если ты начинающий — тебе спецификация языка не особенно и нужна, как правило. Не в первую очередь.
vitaliy4us
Ну так об этой проблеме, собственно, и говорится в статье.
mayorovp
Вы слышали хоть раз термин "оператор цикла" или "условный оператор"? Как вы думаете, что они означают?
vitaliy4us
Вы будете очень удивлены, узнав, что операторами они называются только в русскоязычной переводной литературе. А в соответствии с официальной спецификацией языка, они называются statements, что в переводе означает «инструкция». Например:
mayorovp
Я как раз удивлен не буду — именно на это я и намекал.
оператор — это правильный перевод для statement
vitaliy4us
Тогда обратитесь к единственному опубликованному переводу официальной спецификации: http://www.williamspublishing.com/Books/978-5-8459-1875-8.html и, возможно, Вы не будете столь категоричны.
vitaliy4us
То, что в Вашей любимой книжке сделан именно такой перевод вовсе не означает то, что он является правильным. А порочность такого перевода состоит в том, что термину operator в спецификации дано совершенно иное определение: «Operators are special symbols that perform specific operations on one, two, or three operands, and then return a result». И то, что когда-то, с чьей то «тяжелой руки» в русскоязычном переводе, вопреки их словарным значениям, повелось operator переводить как «операция», а statement как «оператор» противоречит спецификации и вносит путаницу.
khim
Не только в его любимой книжке сделан такой перевод. Возьмите спецификацию хоть на Кобол — и обнаружите там «условный оператор» и «оператор цикла».
vitaliy4us
Зачем же мне брать? Я это прекрасно знаю. Это то и побудило меня написать данную статью. Лично я против такого толкования, но готов принять его, если оно будет оформлено в виде официальной спецификации. Мне важно, прежде всего, не установить чью-либо правоту, а то, чтобы не было различных трактовок в разных источниках, и чтобы перевод максимально соответствовал оригиналу. А для этого, в разработку подобного документа должны быть включены не только программисты и научные работники из сферы IT технологий, но и лингвисты. Пока же, в единственно изданном русскоязычном переводе спецификации, как я уже говорил, указанные Вами формулировки не используются. А во множестве других книг — используются. Ну это уж я в десятый раз пытаюсь объяснить суть своей статьи…
khim
Сделайте так, чтобы у вас внутри одной книги использолись одни и те же термины — и этого будет вполне достаточно.
vitaliy4us
Да ну? Посмотрите только в этом обсуждении сколько предпринято попыток доказать, что же на самом деле будет правильным. А с другой стороны, если в одной из книг трактовка будет одной, а в другой — другой, то это будет скорее запутыванием, а не обучением.
khim
А сколько их ещё будет — этих попыток. Только вот сомневаюсь я, что вам удастся убедить всех использовать какой-нибудь один вариант…