Как стать автором
Обновить

Комментарии 40

operator, operation, operand и statement.

У терминов operator, operation, operand есть вполне буквальные русские аналоги: оператор, операция и операнд. Все эти слова есть в русском и используются для обозначения идентичных сущностей, что и в английском языке. Оператор — это тот кто производит операцию, операнд — это тот над кем её проводят, ну а операция — это собственно производимое действие. Спутать их при всем желании невозможно. Со statement всё немного сложнее, потому что в русском языке нет прямого перевода этого слова в том значении, в котором его используют в семантике языка программирования. Его можно перевести как «инструкция», что, к слову, не сильно увеличивает понимание этого термина. То, что раньше все это переводилось как оператор — это скорее всего просто не желание переводчика задуматься о сути терминов.

Statement как "выражение" можно перевести.

Statement как «выражение» можно перевести

Отнюдь, поскольку это совершенно самостоятельный термин, имеющий свое четкое определение в спецификации языка:
An expression is a construct made up of variables, operators, and method invocations, which are constructed according to the syntax of the language, that evaluates to a single value. https://docs.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html

Собственно у каждого из терминов operator, operation, operand, statement, expression есть собственное четко определенное спецификацией значение. И проблема состоит в том, что в переводной литературе они смешиваются, что по сути ведет к искаженному толкованию основ языка.
У терминов operator, operation, operand есть вполне буквальные русские аналоги: оператор, операция и операнд

В том то и состоит проблема, что это не так, и собственно говоря, именно этому и посвящена данная статья. Хотя, с этим утверждением я согласен полностью. Но вот, например, толкование Википедии:
Английское слово operator, соответствующее термину «операция», иногда ошибочно переводят как «оператор». На самом деле (по историческим причинам) русский термин «оператор» обозначает то же, что и «инструкция», которой соответствует английское statement

Можете открыть любую переводную книгу по Java (и не только), чтобы убедиться в том, что именно этим и руководствуются переводчики. И только в 2015 году вышла приведенная мною книга, где эта терминология пересмотрена и приведена в соответствие с англоязычными аналогами.
Не совсем так. Оператор — это все-таки как правило +, -, * и т.п. А инструкция — это например if/switch. Но присваивание тоже называют и инструкцией и оператором.

На мой взгляд, то о чем тут говорится (по крайней мере приведенные примеры) — это мелкие и не слишком существенные вещи. И обычно не вызывающие проблем для понимания.

В спецификации Java есть вещи намного более сложные, типа memory model например.

Ну и наконец, присоединюсь к комментарию ниже — на русские переводы вообще не стоит рассчитывать. Если ты программист и профессионал — ты обязан читать в оригинале, потому что имеющийся перевод все равно устареет максимум через пару лет (появление Java 8 сделало многие документы практически бесполезными, с Java 9 похоже предстоит все тоже самое).

А если ты начинающий — тебе спецификация языка не особенно и нужна, как правило. Не в первую очередь.
Не совсем так. Оператор — это все-таки как правило +, -, * и т.п. А инструкция — это например if/switch. Но присваивание тоже называют и инструкцией и оператором.

Ну так об этой проблеме, собственно, и говорится в статье.

Вы слышали хоть раз термин "оператор цикла" или "условный оператор"? Как вы думаете, что они означают?

Вы слышали хоть раз термин «оператор цикла» или «условный оператор»? Как вы думаете, что они означают?

Вы будете очень удивлены, узнав, что операторами они называются только в русскоязычной переводной литературе. А в соответствии с официальной спецификацией языка, они называются statements, что в переводе означает «инструкция». Например:
The while statement executes an Expression and a Statement repeatedly until the
value of the Expression is false.
https://docs.oracle.com/javase/specs/jls/se8/jls8.pdf

Я как раз удивлен не буду — именно на это я и намекал.


оператор — это правильный перевод для statement

оператор — это правильный перевод для statement

Тогда обратитесь к единственному опубликованному переводу официальной спецификации: http://www.williamspublishing.com/Books/978-5-8459-1875-8.html и, возможно, Вы не будете столь категоричны.
То, что в Вашей любимой книжке сделан именно такой перевод вовсе не означает то, что он является правильным. А порочность такого перевода состоит в том, что термину operator в спецификации дано совершенно иное определение: «Operators are special symbols that perform specific operations on one, two, or three operands, and then return a result». И то, что когда-то, с чьей то «тяжелой руки» в русскоязычном переводе, вопреки их словарным значениям, повелось operator переводить как «операция», а statement как «оператор» противоречит спецификации и вносит путаницу.
Не только в его любимой книжке сделан такой перевод. Возьмите спецификацию хоть на Кобол — и обнаружите там «условный оператор» и «оператор цикла».
Зачем же мне брать? Я это прекрасно знаю. Это то и побудило меня написать данную статью. Лично я против такого толкования, но готов принять его, если оно будет оформлено в виде официальной спецификации. Мне важно, прежде всего, не установить чью-либо правоту, а то, чтобы не было различных трактовок в разных источниках, и чтобы перевод максимально соответствовал оригиналу. А для этого, в разработку подобного документа должны быть включены не только программисты и научные работники из сферы IT технологий, но и лингвисты. Пока же, в единственно изданном русскоязычном переводе спецификации, как я уже говорил, указанные Вами формулировки не используются. А во множестве других книг — используются. Ну это уж я в десятый раз пытаюсь объяснить суть своей статьи…
Мне важно, прежде всего, не установить чью-либо правоту, а то, чтобы не было различных трактовок в разных источниках, и чтобы перевод максимально соответствовал оригиналу.
Не получится. Это как с extended и expanded memory. Википедия считает что первое — это «дополнительная память», а второе — «расширенная память» хотя в большинстве книг во времена, когда EMS была актуальна перевод был противоположным. И ничего — никто не умер.

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

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

Вот, я именно об этом и хотел сказать. И именно поэтому нужен, нет просто необходим, общепринятый официальны перевод спецификации языка. Нечто вроде стандарта, как это делается для международных норм и правил, действующих на территории того или иного государства. А то что же получается? Любой мало-мальски серьезный проект обязан иметь спецификацию, а основной инструмент разработки данного проекта спецификации не имеет. В результате и получается то, о чем Вы говорите: неточности, разночтения и неоднозначность. Например, прочитав оригинальную литературу и перевод, а потом еще один перевод в трактовке другого автора можно очень даже просто заблудиться.
А можно показать конкретно, что именно вы поняли неоднозначно? Дело в том, что приведенные примеры (скажем, фразу про символ / для деления) реальными проблемами не являются.

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

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

Звучит как ещё один способ потратить как можно больше времени и денег с как можно меньшей пользой.

Ну это опять старая песня на тему: «Ну они тупые!». Они придумали спецификацию, а мы и так смогем. Если так рассуждать, то и ГОСТы не нужны никому.

Ну, можно вместо этого потратить время на создание в РФ какой-то новой индустрии, которая в будущем станет такой же весомой, как сейчас IT, и центр которой будет в РФ, соответственно всё самое актуальное по этой теме будет выходить по-русски, а другим придётся подтягиваться и переводить с русского или учить русский.

А можно показать конкретно, что именно вы поняли неоднозначно? Дело в том, что приведенные примеры (скажем, фразу про символ / для деления) реальными проблемами не являются.

Реальная проблема для меня состоит в отсутствии общепринятой русскоязычной спецификации языка, на которую однозначно можно было бы опереться. Ну, а примеры, — о них ведь и говорится в статье. Дело ведь не в символе "/", а в том что, в русскоязычной переводной литературе смешаны базовые понятия спецификации — все без исключения операторы (сколько их там, около пятидесяти, кажется?) отнесены к операциям, но с другой стороны, операторами названы инструкции (if-then, switch, while, break и пр., и пр., и пр.). Вот Вам уже и каша в голове и разночтения. Ну а для переводчика — это настоящая головная боль — постоянно держать в голове, что в силу сложившихся традиций, белое — это оранжевое, а коричневое — это голубое. Кроме того, наряду с этими общепринятыми традициями все же существует и буквальный перевод, в том числе представленный и в единственном известном мне переводе самой спецификации, о котором и говорится в статье, но который остался почему то незамеченным. А это еще более смешивает карты. Уверен, что круг недоразумений гораздо шире и касается гораздо большего числа различных аспектов языка, имеющих отношение к спецификации. Это как если бы существовали несколько вариантов словарей, допускающих различное толкование одних и тех же слов — прямой путь к проблеме вавилонской башни.
Это как если бы существовали несколько вариантов словарей, допускающих различное толкование одних и тех же слов — прямой путь к проблеме вавилонской башни.
Для этого даже не нужно разных словарей — в одном и том же вы сможете найти десяток разных переводов (как физический термин, как медицинский, химический и так далее). Почему вдруг программирование должно быть исключением?
Ну что же, в таком случае, откройте в словаре слово statement и попытайтесь среди его многочисленных значений найти слово оператор.
Обратите, кстати, внимание, что «REM statement» — это «оператор REM», а «RAISERROR statement» — это «инструкция RAISERROR». И всё это — в Visual Studio, не где-нибудь! Потому что первое — это Visual Basic, второе — это SQL, скорее всего.
Это не перевод, а констатация того факта, что в русскоязычных переводах это стало общепринятым. Толковые словари, т.е. где терминам дается не «перевод», а толкование на языке оригинала такой вольности не позволяют. Ну, примерно так:

«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

Что же касается устоявшейся традиции, то она имеет место быть, что опять-таки является предметом обсуждения в данной статье.
А чем перевод, по вашему, отличается от «констатации факта»? Когда вы переводите «to dust a cake»
как «посыпать пудрой кекс» — вы не только должны понять: в данном случае «пыль» добавляют или удаляют, но и должны понять, что, в данном случае речь идёт не «пыли», а о «пудре» (сахарной, скорее всего) и сформировать некую фразу, которая нормально «впишется» в русской текст. А ещё там может быть не «кекс», а «торт» — в зависимости от рецепта!

И это мы только одну фразу из поваренной книги перевели! А приготовление пищи — это, как бы, то, чем люди тысячелетиями занимаются!

Так почему вы считаете, что при переводе технической литературы у вас всё должно быть легко и просто?

P.S. Кстати с цветами, про которые вы тоже говорили как о чём-то простом — та же история. Зелёный (мидори) — для японца является оттенком синего (аои). И, соответствено, там где путаницы нет — будет использоваться более «широкое» слово. Далее буквальный перевод даст вам, скажем, «синие яблоки» — но это будет считаться ошибкой переводчика.
В повседневной жизни программистов почти никто не пользуется словами «оператор», «операция», «инструкция» и т д — наверное, поэтому не заморачиваются по поводу перевода. Достаточно сказать «в case 2 ты забыл написать break, а результат метода trim забыл присвоить переменной message». Никогда не нужно было задумываться, «case 2» — это оператор, выражение, инструкция или как его ещё можно назвать.
Разговор идет не о «повседневной жизни программистов», хотя и здесь очень хотелось бы поспорить, ну да ладно, время тратить не буду, а о академическом переводе, призванном дать представление начинающим об основах языка и заложить у них правильное представление о нем.

Зачем начинающим именно академический перевод? Начинать изучение языка со спецификации?

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

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


Трата человекочасов на перевод того, что, скорее всего, уже устарело на момент перевода, бессмысленна.

Не понимаю, в чём здесь проблема

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

Если речь идёт об учебниках для начинающих — не такая уж и проблема. А когда люди уже дорастают до академических вещей вроде спецификации, то они уже читают это по-английски.

Если человек читая «оператор» не в состоянии понимать суть в контексте, то не быть ему программистом, не дано просто. А для хоть немного понимающих отличить инструкцию от оператора никогда проблемой не было.

Вся статья, да и обсуждение по сути об одном слове, а зато в заголовке очень громко стоит «спецификация языка Java». У вас статья некорректно названа, а вы про некий всеобщий стандарт говорить пытаетесь.

Ожидались-то стримы лямбды и прочая лють, а тут четвертьвековой давности топик, еще на фидо эти занудствования помню, не про Java, но суть та же. Не в обиду конечно, переводами все равно нужно занимается, но их неточности не такая большая проблема.

На мой взгляд не так уж важно, какой вариант перевода термина выбрать, лишь бы он был один и тот же на протяжении книги. Ну и, понятно, с оглядкой на устоявшуюся практику применения.

Переводчик Хорстмана (если Вы пр И.В.Берштейна) хорош тем, что не даёт забыть: слова суть ничего не значащая абстракция, и если не видеть за ними сути, то читать умные книжки бесполезно. И ещё читать за ним очень нескучно. Неканонический переводчик, чего уж там...


Абстрагируйтесь от терминов, и наслаждайтесь родной речью. Не всё ли равно, как называется "case", если известно, как оно пишется?


Главное, не забывать о сути, которая прячется за словами.

«Оператор — это тот кто производит операцию, операнд — это тот над кем её проводят, ну а операция — это собственно производимое действие.»

Надо сказать, что Оператор это и тот, кто выполняет инструкцию, а не только операцию…
Вот почему Statment это тоже оператор… инструкция это последовательность операций и других инструкций… но в общем, в разных языках программирования свои нюансы… где-то есть процедуры, а где-то их нет… где-то есть Statments, а где-то одни Expressions…
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории