Столкнулся я с необходимостью перевода материала, касающегося языка Java. Причем, перевод должен быть сделан не для себя, а так сказать, для общего пользования. Поэтому, он должен быть максимально приближен к оригиналу и выполнен в соответствии с требованиями спецификации языка. Как оказалось, эти два требования не всегда означают одно и то же. Ну, во-первых, сам оригинал позволяет себе довольно вольное обращение с терминами, «но это так мелочь», а во вторых, в который раз пришлось столкнуться с разночтениями в русской трактовке Java-язычных терминов. А это, на мой взгляд, уже довольно большая и давно существующая проблема.

Начнем с того, что в языке 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)


  1. fogone
    09.06.2017 20:46
    +4

    operator, operation, operand и statement.

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


    1. yarric
      09.06.2017 22:09

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


      1. vitaliy4us
        09.06.2017 22:29
        +2

        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 есть собственное четко определенное спецификацией значение. И проблема состоит в том, что в переводной литературе они смешиваются, что по сути ведет к искаженному толкованию основ языка.


    1. vitaliy4us
      09.06.2017 22:20

      У терминов operator, operation, operand есть вполне буквальные русские аналоги: оператор, операция и операнд

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

      Можете открыть любую переводную книгу по Java (и не только), чтобы убедиться в том, что именно этим и руководствуются переводчики. И только в 2015 году вышла приведенная мною книга, где эта терминология пересмотрена и приведена в соответствие с англоязычными аналогами.


      1. sshikov
        09.06.2017 22:53
        +1

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

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

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

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

        А если ты начинающий — тебе спецификация языка не особенно и нужна, как правило. Не в первую очередь.


        1. vitaliy4us
          10.06.2017 09:56

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

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


        1. mayorovp
          10.06.2017 14:02

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


          1. vitaliy4us
            10.06.2017 14:31

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

            Вы будете очень удивлены, узнав, что операторами они называются только в русскоязычной переводной литературе. А в соответствии с официальной спецификацией языка, они называются 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


            1. mayorovp
              10.06.2017 14:32

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


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


              1. vitaliy4us
                10.06.2017 14:41
                -2

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

                Тогда обратитесь к единственному опубликованному переводу официальной спецификации: http://www.williamspublishing.com/Books/978-5-8459-1875-8.html и, возможно, Вы не будете столь категоричны.


                1. vitaliy4us
                  10.06.2017 15:04

                  То, что в Вашей любимой книжке сделан именно такой перевод вовсе не означает то, что он является правильным. А порочность такого перевода состоит в том, что термину operator в спецификации дано совершенно иное определение: «Operators are special symbols that perform specific operations on one, two, or three operands, and then return a result». И то, что когда-то, с чьей то «тяжелой руки» в русскоязычном переводе, вопреки их словарным значениям, повелось operator переводить как «операция», а statement как «оператор» противоречит спецификации и вносит путаницу.


                  1. khim
                    10.06.2017 16:33
                    +1

                    Не только в его любимой книжке сделан такой перевод. Возьмите спецификацию хоть на Кобол — и обнаружите там «условный оператор» и «оператор цикла».


                    1. vitaliy4us
                      10.06.2017 16:51

                      Зачем же мне брать? Я это прекрасно знаю. Это то и побудило меня написать данную статью. Лично я против такого толкования, но готов принять его, если оно будет оформлено в виде официальной спецификации. Мне важно, прежде всего, не установить чью-либо правоту, а то, чтобы не было различных трактовок в разных источниках, и чтобы перевод максимально соответствовал оригиналу. А для этого, в разработку подобного документа должны быть включены не только программисты и научные работники из сферы IT технологий, но и лингвисты. Пока же, в единственно изданном русскоязычном переводе спецификации, как я уже говорил, указанные Вами формулировки не используются. А во множестве других книг — используются. Ну это уж я в десятый раз пытаюсь объяснить суть своей статьи…


                      1. khim
                        10.06.2017 17:38

                        Мне важно, прежде всего, не установить чью-либо правоту, а то, чтобы не было различных трактовок в разных источниках, и чтобы перевод максимально соответствовал оригиналу.
                        Не получится. Это как с extended и expanded memory. Википедия считает что первое — это «дополнительная память», а второе — «расширенная память» хотя в большинстве книг во времена, когда EMS была актуальна перевод был противоположным. И ничего — никто не умер.

                        Сделайте так, чтобы у вас внутри одной книги использолись одни и те же термины — и этого будет вполне достаточно.


                        1. vitaliy4us
                          10.06.2017 19:08

                          Да ну? Посмотрите только в этом обсуждении сколько предпринято попыток доказать, что же на самом деле будет правильным. А с другой стороны, если в одной из книг трактовка будет одной, а в другой — другой, то это будет скорее запутыванием, а не обучением.


                          1. khim
                            10.06.2017 19:35
                            +1

                            А сколько их ещё будет — этих попыток. Только вот сомневаюсь я, что вам удастся убедить всех использовать какой-нибудь один вариант…


  1. Siemargl
    09.06.2017 22:19
    +6

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

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


    1. vitaliy4us
      09.06.2017 22:38
      -1

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

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


      1. sshikov
        09.06.2017 23:02
        +3

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

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

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


      1. yarric
        10.06.2017 18:24
        +1

        нужен, нет просто необходим, общепринятый официальны перевод спецификации языка

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


        1. vitaliy4us
          10.06.2017 19:03
          -2

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


          1. yarric
            10.06.2017 22:42

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


  1. vitaliy4us
    10.06.2017 09:54

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

    Реальная проблема для меня состоит в отсутствии общепринятой русскоязычной спецификации языка, на которую однозначно можно было бы опереться. Ну, а примеры, — о них ведь и говорится в статье. Дело ведь не в символе "/", а в том что, в русскоязычной переводной литературе смешаны базовые понятия спецификации — все без исключения операторы (сколько их там, около пятидесяти, кажется?) отнесены к операциям, но с другой стороны, операторами названы инструкции (if-then, switch, while, break и пр., и пр., и пр.). Вот Вам уже и каша в голове и разночтения. Ну а для переводчика — это настоящая головная боль — постоянно держать в голове, что в силу сложившихся традиций, белое — это оранжевое, а коричневое — это голубое. Кроме того, наряду с этими общепринятыми традициями все же существует и буквальный перевод, в том числе представленный и в единственном известном мне переводе самой спецификации, о котором и говорится в статье, но который остался почему то незамеченным. А это еще более смешивает карты. Уверен, что круг недоразумений гораздо шире и касается гораздо большего числа различных аспектов языка, имеющих отношение к спецификации. Это как если бы существовали несколько вариантов словарей, допускающих различное толкование одних и тех же слов — прямой путь к проблеме вавилонской башни.


    1. khim
      10.06.2017 16:37

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


      1. vitaliy4us
        10.06.2017 17:00

        Ну что же, в таком случае, откройте в словаре слово statement и попытайтесь среди его многочисленных значений найти слово оператор.


        1. khim
          10.06.2017 17:25
          +1

          Откройте специализированный словарь и посмотрите. Слово «оператор» там будет на первом месте.


          1. khim
            10.06.2017 17:43

            Обратите, кстати, внимание, что «REM statement» — это «оператор REM», а «RAISERROR statement» — это «инструкция RAISERROR». И всё это — в Visual Studio, не где-нибудь! Потому что первое — это Visual Basic, второе — это SQL, скорее всего.


          1. 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

            Что же касается устоявшейся традиции, то она имеет место быть, что опять-таки является предметом обсуждения в данной статье.


            1. khim
              10.06.2017 19:56
              +1

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

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

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

              P.S. Кстати с цветами, про которые вы тоже говорили как о чём-то простом — та же история. Зелёный (мидори) — для японца является оттенком синего (аои). И, соответствено, там где путаницы нет — будет использоваться более «широкое» слово. Далее буквальный перевод даст вам, скажем, «синие яблоки» — но это будет считаться ошибкой переводчика.


  1. elegorod
    10.06.2017 14:04
    +1

    В повседневной жизни программистов почти никто не пользуется словами «оператор», «операция», «инструкция» и т д — наверное, поэтому не заморачиваются по поводу перевода. Достаточно сказать «в case 2 ты забыл написать break, а результат метода trim забыл присвоить переменной message». Никогда не нужно было задумываться, «case 2» — это оператор, выражение, инструкция или как его ещё можно назвать.


  1. vitaliy4us
    10.06.2017 14:04

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


    1. imikh
      10.06.2017 16:27
      +1

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


      1. vitaliy4us
        10.06.2017 16:37

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


    1. yarric
      10.06.2017 18:29
      +1

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


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


      1. vitaliy4us
        10.06.2017 19:14

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

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


        1. yarric
          10.06.2017 22:45

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


  1. akhmelev
    12.06.2017 09:47
    +2

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

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

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


  1. martin_wanderer
    13.06.2017 11:54

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


  1. Danik-ik
    19.06.2017 19:17

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


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


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