Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 09.08.05 04:47
Оценка: 2 (1) +2 :)))
Кнут — я благоговею перед его разумом...

Но, загрузив (свободно доступный)
генератор случайных чисел (написан ИМ)

http://www-cs-faculty.stanford.edu/~knuth/programs/rng.c

я был (и с тех пор нахожусь) в шоке от
"весьма необычного" стиля программирования
Великого Мастера.

Неужели это только я такой привереда ?

P.S. НИКОИМ образом не следует считать это
за критику (кто я такой, в самом то деле)

Но неужели такой стиль — ...
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re: Стиль Дональда Эрвина Кнута
От: all-x Россия http://treedl.sf.net
Дата: 09.08.05 05:47
Оценка:
Здравствуйте, SergeCpp, Вы писали:

SC>Но, загрузив (свободно доступный)

SC>генератор случайных чисел (написан ИМ)

SC>http://www-cs-faculty.stanford.edu/~knuth/programs/rng.c


SC>я был (и с тех пор нахожусь) в шоке от

SC>"весьма необычного" стиля программирования
SC>Великого Мастера.

А что не так со стилем? Я бы только в теле цикла присваивания не стал через запятую писать. А в остальном всё должно быть понятно, если прочитать текст, к которому это прилагается.
Re[2]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 09.08.05 06:02
Оценка:
Здравствуйте, all-x, Вы писали:

...

AX>А что не так со стилем? Я бы только в теле цикла присваивания не стал через запятую писать. А в остальном всё должно быть понятно, если прочитать текст, к которому это прилагается.

  for (ss=seed&(MM-1),t=TT-1; t; ) {       
    for (j=KK-1;j>0;j--) x[j+j]=x[j], x[j+j-1]=0; /* "square" */
    for (j=KK+KK-2;j>=KK;j--)
      x[j-(KK-LL)]=mod_diff(x[j-(KK-LL)],x[j]),
      x[j-KK]=mod_diff(x[j-KK],x[j]);
    if (is_odd(ss)) {              /* "multiply by z" */
      for (j=KK;j>0;j--)  x[j]=x[j-1];
      x[0]=x[KK];            /* shift the buffer cyclically */
      x[LL]=mod_diff(x[LL],x[KK]);
    }
    if (ss) ss>>=1; else t--;
  }
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 09.08.05 06:17
Оценка:
Здравствуйте, SergeCpp, Вы писали:

[... skipped ...]

SC>Но неужели такой стиль — ...


Имхо Кнут — "человек, измученный нарзаном" (с), т.е. ассемблером. В своей монографии "Искусство программирования" все примеры у него написаны на ассемблере для типа машины MIX (позже MMIX). Вот и на Си он, видимо, пишет в ассемблерном стиле минимализма.
Re: Стиль Дональда Эрвина Кнута
От: Kubyshev Andrey  
Дата: 09.08.05 06:25
Оценка:
Во первых благоговеть ни перед кем не надо.
Во вторых нормальный стиль 20 летней давности.
Re: Стиль Дональда Эрвина Кнута
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 09.08.05 06:44
Оценка: -1
Здравствуйте, SergeCpp, Вы писали:

SC> Кнут — я благоговею перед его разумом...


Не знаю, не знаю... Из более-менее разумного, наверное, можно выделить его книгу "Конкретная математика", но это учебник/справочник для студентов 1 курса. Да книжка хорошая, но для первокурсников. Если первокурсников назвать детьми, то Кнута тогда можно будет назвать хорошим детским писателем.

SC> Неужели это только я такой привереда?


Кнут и языки высокого уровня — взаимо исключающие друг друга вещи.
Re: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 09.08.05 06:46
Оценка: +2
Здравствуйте, SergeCpp, Вы писали:

SC>http://www-cs-faculty.stanford.edu/~knuth/programs/rng.c


SC>я был (и с тех пор нахожусь) в шоке от

SC>"весьма необычного" стиля программирования
SC>Великого Мастера.

SC>Неужели это только я такой привереда ?


А ты попробуй написать и привести здесь это пример так, как тебе хочется, чтобы он выглядел. Просто так, чтобы сравнить можно было.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 09.08.05 06:54
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Не знаю, не знаю... Из более-менее разумного, наверное, можно выделить его книгу "Конкретная математика", но это учебник/справочник для студентов 1 курса. Да книжка хорошая, но для первокурсников. Если первокурсников назвать детьми, то Кнута тогда можно будет назвать хорошим детским писателем.


А как же "Искусство программирования"? Тяжело переоценить ценность этой монографии, вошедшей в сотню лучших научных монографий 20 века. Это действительно полезный труд, в котором собрано множество также действительно полезных алгоритмов.

Достопочтенный дон с этим не согласен?

СГ>Кнут и языки высокого уровня — взаимо исключающие друг друга вещи.


+1
Re[2]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 09.08.05 06:58
Оценка: :))
Здравствуйте, Сергей Губанов, Вы писали:

SC>> Кнут — я благоговею перед его разумом...


СГ>Не знаю, не знаю... Из более-менее разумного...


Премию Тьюринга — ДЕТИ ему дали ?
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[2]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 09.08.05 07:02
Оценка:
Здравствуйте, eao197, Вы писали:

SC>>Неужели это только я такой привереда ?


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


Можно, но это — ловля на "слабо"...
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[3]: Стиль Дональда Эрвина Кнута
От: Трурль  
Дата: 09.08.05 07:26
Оценка:
Здравствуйте, SergeCpp, Вы писали:

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


SC>Можно, но это — ловля на "слабо"...


Нет, это — попытка разобраться, что же именно не нравицца.
Re[4]: Стиль Дональда Эрвина Кнута
От: SergeCpp Россия http://zoozahita.ru
Дата: 09.08.05 07:32
Оценка:
Здравствуйте, Трурль, Вы писали:

...

Т>Нет, это — попытка разобраться, что же именно не нравицца.

  for (ss=seed&(MM-1),t=TT-1; t; ) {       
    for (j=KK-1;j>0;j--) x[j+j]=x[j], x[j+j-1]=0; /* "square" */
    for (j=KK+KK-2;j>=KK;j--)
      x[j-(KK-LL)]=mod_diff(x[j-(KK-LL)],x[j]),
      x[j-KK]=mod_diff(x[j-KK],x[j]);
    if (is_odd(ss)) {              /* "multiply by z" */
      for (j=KK;j>0;j--)  x[j]=x[j-1];
      x[0]=x[KK];            /* shift the buffer cyclically */
      x[LL]=mod_diff(x[LL],x[KK]);
    }
    if (ss) ss>>=1; else t--;
  }
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[3]: Стиль Дональда Эрвина Кнута
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 09.08.05 07:37
Оценка: +1 -1
Здравствуйте, SergeCpp, Вы писали:

SC>>>Неужели это только я такой привереда ?


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


SC>Можно, но это — ловля на "слабо"...


Нет, не так.

Во-впервых, как уже сказал Трурль, хотелось бы увидеть, что именно ты считаешь нормальным стилем. Просто интересно.

Во-вторых, по моему опыту, попытка записать математический алгоритм с использованием красивых и распространненых нотаций приводит к коду, который выглядит красиво, но смысл алгоритма в нем теряется. Иногда гораздо проще записать операции с матрицами используя переменные i, j, k, Kk, Lm и т.п., чем row, column, median, lowest_index и пр. Может быть, когда ты сделаешь свой вариант, ты увидешь, что математический алгоритм в нем виден гораздо меньше, чем в реализации Кнута.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Стиль Дональда Эрвина Кнута
От: Кодт Россия  
Дата: 09.08.05 07:53
Оценка:
Здравствуйте, SergeCpp, Вы писали:

SC>http://www-cs-faculty.stanford.edu/~knuth/programs/rng.c


Сдаётся мне, что это — результат трансляции с MIX-ассемблера на Си...
Перекуём баги на фичи!
Re[3]: Стиль Дональда Эрвина Кнута
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 09.08.05 08:03
Оценка: 2 (1) +3 :)
Здравствуйте, Oyster, Вы писали:

O>А как же "Искусство программирования"? Тяжело переоценить ценность этой монографии, вошедшей в сотню лучших научных монографий 20 века. Это действительно полезный труд, в котором собрано множество также действительно полезных алгоритмов.


O>Достопочтенный дон с этим не согласен?


Да, действительно, там собраны описания алгоритмов, но это не главная заслуга этих книг. Более ценно то что там собраны исторические справки и ссылки на оригинальные работы. Что же касается просто алгоритмов самих по себе, то думаю никто не будет спорить, что Кормен и д.р. в этом преуспели значительно сильнее и им потребовалось для этого всего одна книга. А однажды я был сильно удивлен купив тоненькую книжку по алгоритмам автора по фамилии Иванов, в которой были описаны практически все основные алгоритмы, и была она сильно меньше книги Кормена с сотоварищами и в несколько раз дешевле. То есть по соотношению цена/качество Кнут с Корменом сильно проиграли Иванову . Это даже не будет шуткой если исходить из того, что программирование — это все-таки наука, а не искусство.

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

Тут есть Шень с его бесплатно распространяемой книгой на русском языке "Программирование: теоремы и задачи". В некотором смысле эта книга "рвёт всяких Кнутов и Корменов, как Тузик грелку".

Опять же, не надо забывать об Algorithms and Data Structures (Oberon version: August 2004) — N. Wirth ( http://www.oberon.ethz.ch/WirthPubl/AD.pdf (1'241 KB))

Короче, на фоне того что есть, книги Кнута "Искусство программирования" представляют скорее литературный или даже культурный интерес больше чем чисто научный. Ну а собственно науки в них, как я уже говорил, как раз наскребется только для студентов первокурсников. То есть перед Кнутом можно преклоняться как перед писателем, но не как перед ученым — его книги более литературны, чем научны.
Re[4]: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 09.08.05 08:36
Оценка: +5
Здравствуйте, Сергей Губанов, Вы писали:

O>>Достопочтенный дон с этим не согласен?


СГ>Да, действительно, там собраны описания алгоритмов, но это не главная заслуга этих книг. Более ценно то что там собраны исторические справки и ссылки на оригинальные работы.


Да, Кнут не всё придумал сам. Это же монография — именно основная его заслуга в том, что он собрал великое множество алгоритмов в одном месте — в своих книгах.

СГ>Что же касается просто алгоритмов самих по себе, то думаю никто не будет спорить, что Кормен и д.р. в этом преуспели значительно сильнее и им потребовалось для этого всего одна книга.


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

Маленький пример — писал давеча класс для работы с длинными целыми. У товарищей Кормена, Лейзерсона и Ривеста на месте оптимизаций операций над длинными числами польшой жирный пробел. В то же время Кнут достаточно полно раскрывает эту тему — там вам и быстрое умножение несколькими методами (разделяй и властвуй, Карацубы, с использованием модулярной арифметики, с использованием БПФ etc) и быстрое деление за время, сравнимое с умножением. И это всего лишь небольшая часть второго тома — где-то 20 страниц.

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

СГ>А однажды я был сильно удивлен купив тоненькую книжку по алгоритмам автора по фамилии Иванов, в которой были описаны практически все основные алгоритмы, и была она сильно меньше книги Кормена с сотоварищами и в несколько раз дешевле. То есть по соотношению цена/качество Кнут с Корменом сильно проиграли Иванову . Это даже не будет шуткой если исходить из того, что программирование — это все-таки наука, а не искусство.


Вот тут поподробнее. Что такое "основные алгоритмы" в вашем понятии? Просто очень интересно — может это очередная книженция о графах...

СГ>Опять же просто на алгоритмах самих по себе мир клином не сошелся. Оказывается не менее важна еще и самая элементарная техника кодирования. То есть когда алгоритмы преподносятся не сами по себе, а уже безупречно реализованными на языке программирования высокого уровня.


Почему именно высокого? Вот Кнут так не считает он не настаивает ни на каком языке высокого уровня — он описывает алгоритм.

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

СГ>Тут есть Шень с его бесплатно распространяемой книгой на русском языке "Программирование: теоремы и задачи". В некотором смысле эта книга "рвёт всяких Кнутов и Корменов, как Тузик грелку".


Читал (в олимпиадный период). Не был впечатлён.

СГ>Опять же, не надо забывать об Algorithms and Data Structures (Oberon version: August 2004) — N. Wirth ( http://www.oberon.ethz.ch/WirthPubl/AD.pdf (1'241 KB))


Вирт с его "Алгоритмами и структурами данных" — всё-таки немножко совсем не то по обхвату, что "Искусство программирования". Сами спросите у Вирта — он подтвердит

СГ>Короче, на фоне того что есть, книги Кнута "Искусство программирования" представляют скорее литературный или даже культурный интерес больше чем чисто научный. Ну а собственно науки в них, как я уже говорил, как раз наскребется только для студентов первокурсников.


"Не смешите мои подковы" (с) Кнут представляет самый что ни на есть практический интерес, особенно для тех программистов, кто действительно хочет разобраться, "почему оно работает" и "почему оно лучше, чем вон то".

СГ>То есть перед Кнутом можно преклоняться как перед писателем, но не как перед ученым — его книги более литературны, чем научны.


Литературны? Это скорее можно сказать про того же Кормена, но никак не про Кнута. Вы вообще Кнута читали? Или "просматривали"?
Re[5]: Стиль Дональда Эрвина Кнута
От: Сергей Губанов Россия http://sergey-gubanov.livejournal.com/
Дата: 09.08.05 09:00
Оценка:
Здравствуйте, Oyster

Все что я хотел сказать о моем отношении к творчеству Кнута я сказал. Спорить на эту тему не хочу.



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

Согласен-то я согласен, но техника кодирования сама по себе тоже важна и с потолка просто так она не свалится, ей тоже нужно обучаться. Сравните пожалуйста два слайда:
http://www.inr.ac.ru/~info21/texts/2005-06-27-MGU/national.slides/slide13.html
http://www.inr.ac.ru/~info21/texts/2005-06-27-MGU/national.slides/slide14.html
Re: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.08.05 09:04
Оценка: 12 (1) +5 -5 :))) :)
Здравствуйте, SergeCpp, Вы писали:

SC>Кнут — я благоговею перед его разумом...


SC>Но, загрузив (свободно доступный)

SC>генератор случайных чисел (написан ИМ)

SC>http://www-cs-faculty.stanford.edu/~knuth/programs/rng.c


SC>я был (и с тех пор нахожусь) в шоке от

SC>"весьма необычного" стиля программирования
SC>Великого Мастера.

Он просто слишком рано родился. Если он в начале своей корьеры прочитал наши правила форматировния, то проблем бы не было.

Кстати, само форматирование это еще ерунада. Его можно автоматически изменить. А вот переменные с именами MM, aa и т.п. — это точно ужасный стиль.

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

В общем, я вообще не понимаю почему многие молятся на Кнута. Надо отдать ему должное за полноту его работы и несколько алгоритвов введенных им литчно. Но как пособиям по изучению алгоритмов я бы его книгам поставил твредую двойку. Обяснения запутанные. Дурацкая вымышленная машина. Алгоритмы плохо сформулированные. Моря goto. И это при том, что есть тонны более достойных книг объясняющие все намного более доходчиво.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Стиль Дональда Эрвина Кнута
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.08.05 09:04
Оценка: 23 (2) +4 -1
Здравствуйте, eao197, Вы писали:

E>Во-вторых, по моему опыту, попытка записать математический алгоритм с использованием красивых и распространненых нотаций приводит к коду, который выглядит красиво, но смысл алгоритма в нем теряется. Иногда гораздо проще записать операции с матрицами используя переменные i, j, k, Kk, Lm и т.п., чем row, column, median, lowest_index и пр. Может быть, когда ты сделаешь свой вариант, ты увидешь, что математический алгоритм в нем виден гораздо меньше, чем в реализации Кнута.


Да? Ну, просто век живи, век учись... все равно дураком помрешь.

Попробуй меня разубедить в обратной мысли на базе вот этих примеров.
Быстрая сортировка написаная господином Кнутом:
Q1:    if (N<=M) goto Q9; S=0; l=1; r=N;
Q2:    i=l; j=r+1; K=R[l]->K;
Q3:    i+=1; if (R[i]->K<K) goto Q3;
Q4:    j-=1; if (K<R[j]->K) goto Q4;
Q5:    if (j<=i) { swap(R[l],R[j],Rt); goto Q7; }
Q6:    swap(R[i],R[j],Rt); goto Q3;
Q7:    if (r-j>=j-l>M) { push(j+1,r); S+=1; r=j-1; goto Q2; }
       if (j-l>r-j>M) { push(l,j-1); S+=1; l=j+1; goto Q2; }
       if (r-j>M>=j-l) { l=j+1; goto Q2; }
       if (j-l>M>=r-j) { r=j-1; goto Q2; }
Q8:    if (S) { pop(l,r); S-=1; goto Q2; }
Q9:    for (j=2; j<=N; j+=1) {
           if (R[j-1]->K > R[j]->K) {
               K=R[j]->K; Rt=R[j]; i=j-1; R[i+1]=R[i];
                   while (R[i]->K>K && i>=1) i-=1;
                   R[i+1]=Rt; } }

Быстрая сортировка записанная по человечески (в соотвествии с правилами форматирования РСДН):
template <class T> 
void QuickSort(T & item, int left, int right)
{
    int i = left;
    int j = right;  
    typename T::value_type center = item[(left + right) / 2];

    while(i <= j)
    {
        while (less(item[i], center))
            i++;
        while (less(center, item[j]))
            j--;

        if (i <= j)
            Swap(item[i++], item[j--]);
    } 

    if(left < j)
        QuickSort(item, left, j);
    if(right > i)
        QuickSort(item, i, right);
}
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Стиль Дональда Эрвина Кнута
От: Oyster Украина https://github.com/devoyster
Дата: 09.08.05 09:05
Оценка:
Здравствуйте, Сергей Губанов, Вы писали:

СГ>Все что я хотел сказать о моем отношении к творчеству Кнута я сказал. Спорить на эту тему не хочу.


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


СГ>Согласен-то я согласен, но техника кодирования сама по себе тоже важна и с потолка просто так она не свалится, ей тоже нужно обучаться. Сравните пожалуйста два слайда:

СГ>http://www.inr.ac.ru/~info21/texts/2005-06-27-MGU/national.slides/slide13.html
СГ>http://www.inr.ac.ru/~info21/texts/2005-06-27-MGU/national.slides/slide14.html

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