На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: ElcnU, ANDLL, fatalist
  
> Почему я не рекомендую читать переводы книжек по программировнию
    Потому шо их переводят люди не владеющие предметом, т.е. люди владеющие английским языком, но не являющиеся программистами :whistle:

    Возьмем к примеру изветсную книжку Резига "Секреты JS ниндзя" его 1ое издание. Сразу перейду к главе 5 про замыкания.
    Цитирую :D
    Цитата
    По традиции замыкания всегда считались средством языков исключительно функционального программирования, и поэтому особенно приветствовалось их внедрение в практику массовой разработки приложений. Теперь замыкания проникли во многие библиотеки JаvаSсriрt и другие развитые кодовые базы кода благодаря их способности существенно упрощать сложные операции.

    Как вы поняли по выделению красным, я как прилежный читатель делаю вывод, что причина появления замыкания в массовой практике программирования является ее традиционное наличие в функциональном программировании! Как это вапще связано? :wacko:

    Естественно я открываю оригинал и читаю там, цитирую
    Цитата
    Traditionally, closures have been a feature of purely functional programming languages. Having them cross over into mainstream development has been particularly encouraging, and it’s not uncommon to find closures permeating JavaScript libraries, along with other advanced code bases, due to their ability to drastically
    simplify complex operations.

    Где тут слово поэтому? :wall:
    Пардон даже гугл перевел лучше :D
    Цитата
    Традиционно закрытие было особенностью чисто функциональных языков программирования. Их переключение в основное развитие было особенно обнадеживающим, и не редко можно найти закрытие, пронизывающее библиотеки JavaScript, наряду с другими передовыми базами кода, из-за их способности значительно упростить сложные операции.

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

    Из моего перевода видим истиную причину появления замыкания, они упрощают кодинг сложных задач :D
    Ну это я опытный программер могу делать такой анализ, а новички читают как есть и делают неправильные выводы из таких переводов! >:(

    Читаю дальше стр 119
    Цитата
    При объявлении внутренней функции innerFunction() во внешней функции было определено ее объявление, а также образовано замыкание, охватывающее не только эту функцию, но и все переменные, находящиеся в области ее действия на момент объявления.

    Что это за бред вапще при объявлении было определено ее объявление :wacko:
    Ориганал
    Цитата
    When we declared innerFunction() inside the outer function, not only was the function declaration defined, but a closure was also created that encompasses not only the function declaration, but also all variables that are in scope at the point of the declaration.

    Ок Гугл :D
    Цитата
    Когда мы объявили innerFunction() внутри внешней функции, было определено не только объявление функции, но также было создано замыкание, которое охватывает не только объявление функции, но и все переменные, которые находятся в области видимости в точке объявления.

    Песец тут даже исправлять ничего не надо все ясно! Гугл лучше перевел! :D

    Это только начало я прочел много переводов и их оригиналов разных книжек по программированию и везде такое гавнище :D
    По моему наблюдению как правило не корректного перевода много в книжках по определенной технологии, по конкретной библиотеке или фреймворку JS.
    Кстати когда я изучал С++ то такого было мало, я даже если честно не вспомню :unsure:
    Походу переводы книжек по C++ проходят дополнительную проверку специалистами по С++, перед тем как предстать массовому читателю :D
    Сообщение отредактировано: Cfon -
    "What I cannot create, I don't understand" Richard Feynman.
    https://github.com/Cfon/
    :D
      Цитата из перевода книги "Секреты JavaScript ниндзя" 1ое издание стр 118.
      Цитата
      Приведенный выше пример, по-видимому, не особенно впечатляет и даже не удивляет. Внешние переменная и функция объявлены в глобальной области действия, которая вообще не завершается (до тех пор, пока страница загружена), и поэтому не удивительно, что переменная существует в данной области действия и по-прежнему доступна для функции. Но несмотря на наличие замыкания, его преимущества в данном примере пока еще неясны.

      Ориганал
      Цитата
      Not impressed? I guess that’s not surprising. Because both the outer value and the outer function are declared in global scope, that scope (which is actually a closure) never goes away (as long as the page is loaded), and it’s not surprising that the function can access the variable because it's still in scope and viable. Even though the closure exists, its benefits aren’t yet clear

      а тут вапще часть текста выкинули! типо и так понятно? :D
      Нормальный полный перевод :D
      Цитата
      Не впечатлен? Думаю это не удивительно. Поскольку внешнее значение и внешняя функция объявлены в глобальной области видимости, эта область (которая фактически является замыканием) никогда не исчезает (пока загружается страница), и неудивительно, что функция может получить доступ к переменной, поскольку она все еще в области видимости. Хотя замыкание существует, его преимущества еще не ясны.


      Стр. 121
      Цитата
      - Переменные, еще не определенные в той же самой области действия, недоступны по ссылке с упреждением.

      Вы что-нибудь поняли из перевода? :wacko:
      Я нет :D
      Оригинал
      Цитата
      - Within the same scope, variables not yet defined cannot be forward-referenced.

      Нормальный перевод
      Цитата
      К переменным, которые еще не определены (читай не инициализированы) в той же области видимости, нельзя обратиться заранее

      Тоже не очень понятно :lool:
      На самом деле мы тут имеем ошибку в самом оригинальном тексте, автор сделал не точность. Правильно было написать так
      Цитата
      В пределах той же области видимости, переменные, значения которых определены ниже по области видимости, при доступе к этим переменным их значения не определены

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

      Стр. 122
      Цитата
      Следует, однако, иметь в виду, что за такую возможность хранить информацию и ссылаться на нее приходится нести прямые затраты, хотя и не вся эта информация доступна по ссылке непосредственно, поскольку не существует какого-то определенного объекта "замыкания", в котором она хранилась бы.

      Очередная не точность перевода, которая вапще не верно информирует читателя :D
      Смотрим в оригинал:
      Цитата
      It’s important to note that while all of this structure isn’t readily visible anywhere (there’s no “closure” object holding all of this information that you can inspect), there’s a direct cost to storing and referencing information in this manner.

      Корректный перевод :D
      Цитата
      Важно отметить, что, хотя вся эта структура не видна откуда-либо (не существует объекта замыкания, содержащего всю эту информацию, которую вы можете проверить), существует прямая зависимость издержек на хранение и ссылки на данные, хранящиеся таким образом.

      ключевое тут "не видна", тогда как из книжки можно подумать что она видна, но частично! Это ведет к полному противоречию в сознании молодого читателя и как следствие его замыканию моска :D

      Стр. 123
      Цитата
      Далее реализуется метод feint для полноценного контроля над значением переменной fеints (4). В реальном приложении это может быть какой-нибудь бизнес-метод, а в данном случае он просто инкрементирует значение переменной fеints. После установки конструктора сначала он вызывается с ключевым словом new (5), а затем и метод feint() (6)

      Непонятно что за "он", смотрим оригинал
      Цитата
      After the constructor has been established, we invoke it with the new operator (5) and then call the feint() method (6)

      А теперь ясно что "он" это конструктор, ну тогда лучше переводить полностью, а то как то не понятно, это в английском языке понятно, ведь он (какой "он" нафиг :lool:) английский контекстно-зависимый в отличие от русского.
      Цитата
      После установки конструктора, вызываем конструктор с оператором new (5) и затем вызываем метод feint (6)

      ну или хотя бы так
      Цитата
      После установки конструктора, вызываем его с оператором new (5) и затем вызываем метод feint (6)

      Хотя тоже не очень ясно :no-sad: че за "его" :blink:
      Так что лучше предыдущий вариант :D
      Сообщение отредактировано: Cfon -
      "What I cannot create, I don't understand" Richard Feynman.
      https://github.com/Cfon/
      :D
        Перехожу к стр 136 раздел "Запоминание" и сразу с ходу не точность! В оригинале это слово "Memoization", не "Memorization" что как раз означает "запоминание", а вот "Memoization" лучше переводить, точнее даже не переводить, а писать его транскрипцию: "Мемоизация"! :whistle:

        Далее следующий абзац вообще перл, я долго не мог понять, что это означает :wacko:
        Цитата
        В этом методе задействованы только функции, но не замыкания, как станет ясно из дальнейшего

        я думал, что в методе юзаются какие-то еще функции, но просмотрев пример там никаких функций не было!
        Открываем оригинал и все встает на места!
        Цитата
        This implementation doesn’t involve closures — we’ll see that shortly.

        ОК ГУГЛЬ :D
        Цитата
        Эта реализация не предполагает закрытия - мы вскоре это увидим.

        Применяя немного знаний предмета :D
        Цитата
        Эта реализация метода не использует замыкания - как мы вскоре это увидим.

        где автор перевода книжки увидел там функции я хз :lool:

        Далее стр 136
        Цитата
        В частности, мы можем создать информационный массив (кеш) для хранения всех предварительно вычисленных значений.

        Тут меня зацепило фраза "информационный массив"! Что это?! Что массив бывает не информационный? :wacko:
        Короче гляжу в оригинал книжки и вижу
        Цитата
        This will allow us to create a data store (cache) in which all of our precomputed values can be saved.

        Аааа... "data store" (хранилище данных) теперь понятно! Надо же было перевести "data store" - информационный массив! :D
        И вообще можно коротко указать "кеш" все будет понятно!

        Далее на стр 137 идет грубая ошибка перевода!
        Цитата
        Но оператор this заключен в операторе return, а это означает, что результирующее значение также возвращается из родительской функции.

        Смотрю на код функции и не никак не въеду чтоб это значило :wacko:
        Ну дальше по схеме открываю естественно оригинал и вижу
        Цитата
        But this statement is within the return statement, meaning that the resulting value is also returned from the parent function.

        И сразу понимаю что "this statement" переводится не как "оператор this", а "этот оператор"!
        Корретный перевод
        Цитата
        Но этот оператор находится в операторе return, что означает, что результирующее значение также возвращается из родительской функции.

        Уфф! И эти ошибки перевода все на одной странице, которую я перечитывал по нескольку раз и не мог понять ее содержание!
        Ну естестнвенно если автор перевода не думал о смысле текста, который он переводит, какой можно смысл из него вынести >:(
        Сообщение отредактировано: Cfon -
        "What I cannot create, I don't understand" Richard Feynman.
        https://github.com/Cfon/
        :D
          Продолжаю работать над разделом "Мемоизация". Вообще должен сказать, что данный раздел нельзя нормально читать практически в каждом абзаце содержаться не точности перевода, которые буквально меняют смысл на противоположный! Так что не доверяйте переводам и читайте оригинал книжки. Ну а если уже у вас проблемы с ангилийским, то Гугл поможет.

          Многим здесь может показаться что я излишне придираюсь к переводу, но это не так, потому что я придираюсь только когда мне не понятен смысл текста. А данный раздел это просто кладезь тупости! :D

          Итак следующий абзац (стр 137)
          Цитата
          Результаты тестирования (4) рассматриваемого здесь кода показывают, что значения можно сначала вычислять, а затем кешировать.

          Вот как раз тот случай когда а не понял, что значит "можно" :blink:, результаты теста показывают, что значения сначала вычисляются и затем кешируются! Т.е. добавление слова "можно" ломает у меня моск! :D
          Проверяю оригинал текста
          Цитата
          Testing the code (4) shows that we can compute values, and that the value is cached

          Гугль переводчик
          Цитата
          Тестирование кода (4) показывает, что мы можем вычислять значения и кешировать значение.

          Ага тут слово "можем", но читая составленое таким образом предложение не вызывает почему то у меня отторжения в голове! :D
          ОК далее.
          Цитата
          Но недостаток такого подхода состоит в том, что там где, вызывается функция isPrime(), нужно не забыть вызвать ее с помощью метода memoized(), чтобы пожинать плоды запоминания, а это никуда не годится.

          Ну тут ваще у меня ступор случился :D Это как понять? Как это вызвать функцию isPrime() с помощью метода memoized()? :wacko: Да и еще потом пожинать плоды! И чего? ЗАПОМИНАНИЯ! :lool:
          Оригинал
          Цитата
          The problem with this approach is that a caller of the isPrime() function must remember to call it through its memoized() method in order to reap the benefits of memoization. That won’t do at all.

          ОК Гугль
          Цитата
          Проблема с этим подходом заключается в том, что вызывающий объект isPrime() должен помнить, чтобы вызвать его посредством метода memoized(), чтобы воспользоваться преимуществами memoization. Это не будет вообще.

          Тоже не читаемо :D. Вношу свои корректировки в перевод и вот что я получаю
          Цитата
          Проблема с этим подходом заключается в том, что нужно помнить, то что, чтобы воспользоваться преимуществами мемоизации, функцию isPrime() нужно вызвать посредством метода memoized(). Это никуда не годиться.

          Совсем другое дело! :D
          Фразу "Это никуда не годиться" я спер у автора руского перевода, поскольку с идиоматическими фразами типа "That won’t do at all." я не знаком и обычно при чтении английских книжек я пропускаю без перевода :D Ну а Гугль сами видите несет чушь! "Это не будет ВАПЩЕ!" :lool:
          Как правило они вносят эмоциональный оттенок в текст, но на суть тескта не влияют и поэтому можно сильно не заморачиваться на их переводе.

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

          Тут первое выделенное красным слово "запоминания" не вызывало у меня каких то непоняток, но как я уже писал "memoizing" это не "memorizing", которое как раз таки переводится "запоминание", а "memoizing" лучше переводит как "мемоизация". А вот следующая фраза "способной автоматически запоминать все свои вызовы" вызвало у меня непонятки. Как это можно запомнить все вызовы функции?! :wacko:
          И все из-за того что изначально был не правильно дан перевод "memoizing"! Читается то все правильно, а вот смысл не понятен. Изменив "запоминать" на "мемоизировать" мы получаем нормальный перевод.
          Цитата
          Имея в своем распоряжении метод мемоизациидля контроля над входящими и выходящими значениями из существующей функции, рассмотрим возможность применить замыкания для получения новой функции, способной автоматически мемоизироватьвсе свои вызовы. Таким образом, там, где эта функция вызывается, уже не нужно будет помнить, что ее следует непременно вызвать с помощью метода memoized().

          Читая такой перевод все встает на свои места и никакой головной боли. Я тут не гуглил, поскольку сам перевод у меня не вызвал сомнений, тупо подставил правильное слово :D
          Такие дела...
          Сообщение отредактировано: Cfon -
          "What I cannot create, I don't understand" Richard Feynman.
          https://github.com/Cfon/
          :D
          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script Execution time: 0,0857 ]   [ 14 queries used ]   [ Generated: 19.07.19, 03:56 GMT ]