О подражании Кнуту

May 29, 2007 17:08


Один из распространенных сюжетов в фантастике - это землянин за ( Read more... )

psychology, tex, science, computers

Leave a comment

likeabur May 29 2007, 23:07:14 UTC
Вам не кажется, что это обычный эффект разницы между профессиональным и дилетантским мышлением? Я о цепочке решений в развитии ТеХа. В смысле, тут очевидная разница между информатикой и программированием, которая в ту эпоху лишь закладывалась. Кнут занимался информатикой, а обнаружилось программирование, т.е. как раз написание для других. Обнаружилось, что когда проект большой, возникает новое содержание. Но Кнуту можно гордиться, ибо его проект оказался успешным, несмотря на то что растянулся на годы (сейчас считается что время успешного проекта исчисляется месяцами).

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

По поводу марсианскости TeXа --- +1. Но вот вы поражаетесь стилю программирования пакетов к ТеХу, а я скорее удивляюсь силе авторитета и готовности пойти за марсианином. Ведь из достаточно простых примеров ТеХовского кода лезут ушки ООП (я тоже писал и пишу под ТеХ, увы), но где ж волна "а давайте наведем порядок". Скорее идет волна "как здорово, а давайте секретаршу научим"... И наступают люди на те же самые грабли по 33 раза за день, как лемминги. Ведь текущая архитектура (оставим в сторону марсианскость) вынуждает каждого автора текстов чуть-чуть становиться программистом и даже не всякий профессор математики готов продемонстрировать опыт понимания марсианина, куда там секретаршам. Избежать этого можно в подавляющем числе случаев простой сменой архитектуры. И попытки разговора "а давайте переделаем" приводят лишь к замыканию обсуждения по кругу. Что лишь подчеркивает разницу в мышлении и узость круга пользователей: математики не знают программирования (которое не информатика), программисты почти никогда не сталкивались с ТеХом.

Reply

scholar_vit May 29 2007, 23:41:13 UTC
Было несколько попыток переписать TeX "с нуля" - в том числе и на ООП. Посмотрите, например, вот тут http://www.tug.org/teTeX/tetex-texmfdist/doc/help/faq/uktug-faq/FAQ-NTS.html

Это очень сложно. TeX - это одна из самых сложных программ в мире. Её очень трудно изменить. И "сила авторитета" тут не при чём: о недостатках TeXа для программирования все прекрасно знают. Почитайте, например, вот тут: http://www.tug.org/interviews/interview-files/david-kastrup.html. Учтите, что интервьюируемый - один из самых уважаемых TeXпертов на сегодняшний день.

Reply

likeabur May 30 2007, 00:54:56 UTC
Почитал, ага. Спасибо.
Что ответить... я далек от героизма. Сложность и практически невозможность впихнуть в один проект все возможные случаи использования производных ТеХа - осознаю. Как и то, что попытка переписать уже существующее очевидно несет провал: в лучшем случае получится более замудренное старое. Однако считаю возможным существование синтаксиса и среды, _упрощающих_ как сам код, так и усилия потребителя. Ведь в этом природа развития, предлагать достаточно простое решение более сложных проблем. Но в любом случае все это в стороне от темы вашего эссе. Скорее мне интересно что вы думаете насчет профессионализма и дилетантства.

Reply

scholar_vit May 30 2007, 02:17:17 UTC
Я не думаю, что кого-то в истории TeXа: самого Кнута, людей, которые разрабатывали макропакеты, членов TUG, - можно назвать дилетантами. Это люди очень высокого профессионализма. Собственно, несколько крупных расширений TeXа: алгоритмы переноса, pdfTeX микротипографские алгоритмы , - были темами диссертационных работ. TeX, одна из самых сложных программ в мире, не имеет багов и работает на любом компьютере, включая древние 286-е и КПК. Это чудо человеческого гения.

Reply

likeabur May 30 2007, 03:16:57 UTC
ммм, понятие профессионализма привязано к конкретной области, нет? Я ничего не говорил о ком-либо кроме Кнута, а о нем в том ключе что в ту пору просто не было так развитого понятия о программировании как отрасли, какое имеем сейчас.

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

Мне кажется, вы меня приняли за тех, кто требуют обсуждать учение Дарвина наравне с крецианизмом (см. интервью с Зализняком). Отнюдь. Мое уважение к науке глубоко, тем более я сам ей занимаюсь (пытаюсь). (Надеюсь, это чуть сбавит градус патетики)

Идея же проста: более удобный язык дает более удобный инструмент, и им орудовать проще. Смена языка случалась в истории неоднократно, вы вот только что приводили пример Ньютона. В промышленном программировании доминирующий язык программирования сменился несколько раз. То же самое может быть применимо и к ТеХу, разве нет?

Reply

scholar_vit May 30 2007, 05:28:27 UTC
Кнута дилетантом в крупномасштабном программировании к моменту проектирования TeXа назвать никак нельзя. Не забывайте, что он ещё в молодости писал первые компиляторы. Вот в верстке он тогда действительно был дилетантом, и поэтому задача казалась ему простой. Это часто бывает - посмотрите на блоги, где бухгалтера с программистами говорят о климатологии с безапелляционным видомо знатоков. Но в отличие от блоггеров Кнут затем потратил много времени на изучение истории и практики книгопечатания.

Что касается "современного промышленного программирования", то к ситуации Кнута оно действительно не имеет отношения. Современное промышленное программирование - это способ организовать кучу посредственных программистов, чтобы они написали какой-нибудь код. Оно образовалось благодаря исторической случайности: резкого увеличения потребности в компьютерных людях, за которой не успевали университеты, а теперь самоподдерживается, как клавиатура QWERTY. Задача Кнута была совсем другой: как написать безошибочный код, имея одного гения и некоторое количество очень талантливых аспирантов.

Reply

likeabur May 30 2007, 10:27:57 UTC
Мне странно, что разговор пошел в этом направлении. Я пытался сказать, что стиль мышления можно проследить множеством способов, вместо этого теперь должен оправдываться за то, чего не говорил. Вы приводите в качестве аргумента то, что я имел ввиду несколькими постами раньше (насчет климата и дилетантов). Я не обсуждаю степени гениальности Кнута, а вы постоянно ее упоминаете (зачем?). И вы так и не прокомментировали собственно психологическую часть моей догадки. Наверное, мне не следует продолжать обсуждение, неконструктивно получается.

Reply

__const__ May 30 2007, 06:43:10 UTC
У меня есть к вам вопрос: что, по вашему мнению плохо в том же LaTeX и каковы предлагаемые вами концепции? (это я к вопросу, а не будет-ли "лекарство" хуже "болезни"?)

По поводу промышленного программирования и смены языка -- во многом это веяния моды а не удобства... Я с ужасом наблюдаю довольно регулярно вычислительные программы на С или Дельфи (и что только народ не сделает, чтоб Фортран не изучать)...

Опять-таки, что есть "промышленное программирование"? По-моему стоит всегда подбирать инструмент (язык) под задачу. Рассуждая о том же Фортране, я с не меньшим ужасом рассматривал встреченные мною библиотеки для написания графики, или, того хуже, графического интерфейса на Фортране... Но это так, лирика.

Reply

likeabur May 30 2007, 10:22:31 UTC
Пример претензии: при верстке сплошного текста (попробуйте сверстать художественную книжку страниц на 300-500) возникает понимание, что механизма разбиения основанного на штрафах недостаточно: правила верстки формулируются в двух категориях "желательно" и "недопустимо". Иногда необходимо жестко запрещать некоторые ситуации, которые ТеХ, благодаря алгоритму оптимизации штрафов, иногда допускает. Например, недопустимо иметь вдовы и сироты в сплошном тексте (нет выключных формул; варьируя вертикальный пробел между ними и абзацным текстом обычно проблема решается, тут такого финта увы нет).

Возможность появления вдов и сирот накладывается на проблему постраничного вывода на драйвер (нет глобальной оптимизации разбиения на строки). Результат: нужно сначала потратить время на верстку страниц так 50-100, чтобы упереться в принципиально неразруливаемую проблему из-за вдовы/сироты (любая попытка решения на данной странице создает другую запрещаемую правилами верстки ситуацию), для исправления нужно откатиться назад на много страниц назад и принять другое решение (например, там абзац "втягивали", теперь наоборот).

Выставить бесконечно большие штрафы решение плохое: в окрестности такого штрафа алгоритм разбиения на строки иногда начинает себя вести неадекватно (\infty + \epsilon сравнимо с \infty, но не \epsilon). Имей алгоритм разбиения представление о жестко запретных ситуациях, не было бы проблемы. В данном примере возможно другое решение - отменить локальную (постраничную) оптимизацию разбиения на строки.

В ситуации "текст принесли, правки не надо, только сверстать" вам не нужен итеративный процесс работы "быстро скомпиллировал, посмотрел, исправил, все повторил", идеальным является: прошелся один раз по тексту, расставил разметку где она нужна, поставил машину на счет, через несколько часов выплюнула верстку. Бóльшая часть типографских правил формализуема, а остальные и так с компьютеризацией де-факто не выполняются (например, нередко встречаются книги с "лесенкой"). Так что движение к этому идеалу оправдано и, мне кажется, имеет шанс успеха.

Как продукт и инструмент, ТеХ стоит на одной полке с другими: его используют чтобы решить утилитарную задачу. Справляется - хорошо, нет - увы. Мне кажется недопустимым отказ от критики его как инструмента лишь в уважение к труду создателей. Тут могла бы быть критика меня ("сделай - посмотрим"), но пока налицо пытытка запретить обсуждение в целом. Это странно. Словом, мне кажется вы (и автор журнала) обиделись, хотя тут нет причины.

Reply

__const__ May 30 2007, 10:38:57 UTC
Ну, с моей стороны обиды никакой нет. Просто по своему опыту я не сталкивался с задачами, когда TeX был бы плохим выбором... С другой стороны, сплошной текст без формул (или хотя-бы спецконструкций) делать не доводилось, это правда..

С большим интересом прочитал ваши замечания... Собственно ситуацию вдовы-сироты я обычно решаю сверху вниз, иногда добавляя дополнительный отступ после разделов...

Ещё вопросы имеются:
1) Вы можете предложить алгоритмизируемый механизм решения указанных проблем?
2) Увеличение растяжимости/сжимаемости межстрочного клея не помогает вам?

Reply

likeabur May 30 2007, 10:55:11 UTC
я не говорю что ТеХ - плохой выбор даже в этой задаче. При хорошей алгоритмизации он может дать лучший выбор по сравнению с PageMaker, Quark и т.п.
1. а если у вас разделы встречаются редко? Раз в страниц 50-100?
2. пробел между заголовком и абзацным блоком должен быть унифицирован по всему тексту
3. строчки обязаны иметь фиксированный клей. Хотите сделать пробел - он будет длины \baselineskip. Причина: возьмите старую книгу и посмотрите один листик на просвет: строчки с двух сторон листа сливаются по базовой линии. Тот же графический эффект обязан иметь место для любых двух страниц (вы когда глазами по строке водите, невольно задеваете кусок соседней страницы, графический разнобой заметен).
4. да, алгоритмизируемый механизм возможен. Для проблемы со вдовами-сиротами уже сказан: полумера - отказ от локальной оптимизации, настоящее решение - механизм оптимизации штрафов с исключениями (жесткими ограничениями не в терминах штрафов). Пример когда это нужно - запрет ставить заглавный предлог в конце строчки (бубубубу. А [перенос] граф считал...). Если вам интересно, думаю следует продолжить обсуждение в другом месте.

Reply

__const__ May 30 2007, 11:08:49 UTC
1. Такого не было у меня

2. После предыдущего раздела перед новым заголовком

3. Ещё раз показывает, сколь далёк я от серьёзного издательства :)

4. Насколько алгоритм штрафов глубоко запрятан в код? Вопрос в том, надо форкать проект или просто дописывать алгоритм?

Reply

likeabur May 30 2007, 15:31:10 UTC
4. Он в ядре. Форкать, никто вам не даст менять ядро под тем же именем.

Reply

__const__ May 31 2007, 05:30:41 UTC
Ну, форкать-то никто не запрещает, только название смените

Reply

scholar_vit May 30 2007, 15:54:32 UTC
4. Дело НЕ в алгоритме штрафов. Дело в том, что разбиение на строки и разбиение на страницы в TeXе расцеплено, и если первый алгоритм глобален, то второй - локален. И это сидит настолько глубоко, что надо менять и алгоритм, и код.

Reply

scholar_vit May 30 2007, 16:10:53 UTC


На самом деле корень Ваших проблем - пункт 3. Это знаменитый
typesetting to the grid. Когда в тексте много выключных формул,
typesetting to the grid не годится - возможно, поэтому Кнут его и не
сделал. Но в традиционной типографии он очень нужен. В принципе
typesetting to the grid в TeXе возможно: в недавнем TUGboat была
статья на эту тему:

@Article{Bazargan07:VertStretch,
author = {Kaveh Bazargan and CV Radhakrishnan},
title = {Removing Vertical Stretch---Mimicking Traditional
Typesetting with {\TeX}},
journal = {TUGboat},
year = 2007,
volume = 28,
number = 1,
pages = {133--136},
note = {\url{https://www.tug.org/members/TUGboat/tb28-1/tb88bazargan.pdf}}
}

К сожалению, в онлайновом доступе эти статьи появляются для не-членов
TUG только через год после публикации; если у Вас нет доступа к
журналу, напишите, что-нибудь придумаем.

Но из-за того, что разбиение на строки и разбиение на страницы в TeXе
расцеплены, возникают проблемы вдов и сироt. Хитрый Кава о них
ничего не пишет.

Reply


Leave a comment

Up