Несколько замечаний вместо предисловия
Книга написана по материалам занятий программированием со школьниками математических классов школы №57 г. Москвы и студентами младших курсов (Московский государственный университет, Независимый московский университет, университет г. Uppsala, Швеция).
Книга написана в убеждении, что программирование имеет свой предмет, не сводящийся ни к конкретным языкам и системам, ни к методам построения быстрых алгоритмов.
Кто-то однажды сказал, что можно убедить в правильности алгоритма, но не в правильности программы. Одна из целей книги попытаться продемонстрировать, что это не так.
В принципе, возможность практического исполнения программ не является непременным условием изучения программирования. Однако она является сильнейшим стимулом - без такого стимула вряд ли у кого хватит интереса и терпения.
Выбранный жанр книги по необходимости ограничивает ее "программированием в малом", оставляя в стороне необходимую часть программистского образования - работу по модификации больших программ. Автор продолжает мечтать о наборе учебных программных систем эталонного качества, доступных для модификации школьниками.
Кажется, Хоар сказал, что эстетическая прелесть программы - это не архитектурное излишество, а то, что отличает в программировании успех от неудачи. Если, решая задачи из этой книги, читатель почувствует прелесть хорошо написанной программы, в которой "ни убавить, ни прибавить", и сомнения в правильности которой кажутся нелепыми, то автор будет считать свою цель достигнутой.
Характер лекций различен: в одних предлагается набор мало связанных друг с другом задач с решениями, в других по существу излагается один-единственный алгоритм. Темы лекций во многом пересекаются, и мы предпочли кое-какие повторения формальным ссылкам.
Уровень трудности задач и лекций весьма различен. Мы старались включить как простые задачи, которые могут быть полезны для начинающих, так и трудные задачи, которые могут посадить в лужу сильного школьника. (Хоть и редко, но это бывает полезно.)
В качестве языка для записи программ был выбран паскаль. Он достаточно прост и естествен, имеет неплохие реализации (например, старые компиляторы Turbo Pascal фирмы Borland были выложены для бесплатного скачивания) и позволяет записать решения всех рассматриваемых задач. Возможно, Модула-2 или Оберон были бы более изящным выбором, но они менее доступны.
Неудачный опыт писания "популярных" учебников по программированию учит: никакого сюсюканья - писать надо так, чтобы потом самим было не стыдно прочесть.
Практически все задачи и алгоритмы, разумеется, не являются новыми. (В некоторых редких случаях приведены ссылки на конкретную книгу или конкретного человека. См. также список книг для дальнейшего чтения.) Вместе с тем мы надеемся, что в некоторых случаях алгоритмы (и особенно доказательства) изложены более коротко и отчетливо.
Это не только и не столько учебник для школьника, сколько справочник и задачник для преподавателя, готовящегося к занятию.
Об "авторских правах": право формулировать задачу и объяснять ее решение является неотчуждаемым естественным правом всякого, кто на это способен. В соответствии с этим текст является свободно распространяемым. Адреса автора: shen@mccme.ru, shen@landau.ac.ru Сказанное относится к русскому тексту; все права на переводы переданы издательству Birkhauser.
При подготовке текста использовалась (свободно распространяемая) версия LaTeXа, включающая стилевые файлы, составленные С.М. Львовским (см. ftp://ftp.mccme.ru/pub/tex/).
Я рад случаю поблагодарить всех, с кем имел честь сотрудничать, преподавая программирование, особенно тех, кто был "по другую сторону баррикады", а также всех приславших мне замечания и исправления (специальная благодарность Ю.В. Матиясевичу). Автор благодарит В. Шувалова за хлопоты по верстке, а также издательство МЦНМО и лично главного редактора Юрия Николаевича Торхова Ю.Н. за то, что издательство ограничилось дизайном обложки (немного странным) и не вмешивалось в процесс подготовки оригинал-макета (включая текст на обложке). Благодарю также Институт проблем передачи информации РАН, Американское математическое общество (фонд помощи бывшему СССР), фонд Сороса, университет г. Бордо, фонд " Культурная инициатива", фонды STINT (Швеция), CNRS (Франция), Ecole Normale (Лион, Франция), LIF (Марсель, Франция), университет г. Уппсала (Швеция), Российский фонд фундаментальных исследований (гранты 02-01-22001 НЦНИа, 03-01-00475 и другие), а также Совет поддержки научных школ при Президенте РФ (грант НШ-358.2003.1) за поддержку. Вместе с тем содержание книги отражает точку зрения автора, за ошибки которого указанные организации и лица ответственности не несут (и наоборот).