Шрифт:
Интервал:
Закладка:
Да, это верно, не все задачи программирования кажутся приятными.
Подумайте о хозяйке в домашней «западне», которая должна каждый день убирать один и тот же стол: не всякая ситуация способствует творчеству или артистизму. Однако даже в таких случаях есть возможность улучшения: даже рутинная работа может доставлять удовольствие, если мы имеем дело с красивыми вещами. Например, человеку может быть приятно день за днем вытирать обеденный стол, если это красивый стол из какого-нибудь высококачественного твердого дерева.
Поэтому я хочу адресовать мои заключительные замечания системным программистам и разработчикам машин, которые создают те системы, с которыми мы должны работать.
Пожалуйста, дайте нам инструменты, которыми было бы приятно пользоваться, вместо таких, с которыми нам приходится бороться. Пожалуйста, дайте нам инструменты, которые стимулируют нас писать лучшие программы, увеличивая удовольствие, которое мы получаем при этом.
Разработчики компьютеров могут сделать использование машин гораздо более приятным, если они, например, организуют арифметику с плавающей точкой, которая удовлетворяет простым математическим правилам. Средства, имеющиеся сейчас на большинстве машин, делают задачу точного анализа погрешностей безнадежно трудной. В то же время соответствующим образом построенные операции могли бы помочь программисту создать хорошие подпрограммы, имеющие гарантированную точность.
Что может сделать разработчик софтвера? Один из лучших способов поддержать бодрость духа пользователя – обеспечить его программами, с которыми он может взаимодействовать. Мы не должны делать системы слишком автоматизированными, когда действие всегда происходит за сценой. Мы должны пользователю-программисту дать шанс направить свои творческие способности в соответствующие каналы. Есть одна особенность, общая для всех программистов: им приятно работать с машинами; так давайте держать их в цикле. Некоторые задачи лучше выполняет машина, другие могут быть лучше решены с помощью человеческой интуиции; хорошо разработанная система должна найти разумный баланс. (Я в течение многих лет пытался устранить излишнюю автоматизацию.)
Хорошим примером являются средства оценки программ. В течение многих лет программисты не имели представления о том, как в действительности стоимость вычислений распределена в их программах. Опыт показывает, что почти все программисты имеют смутное представление об узких местах в их программах; неудивительно, что попытки оценить эффективность так часто терпят неудачу: программист никогда не знает распределения стоимости по строкам написанного им кода. Его работа в чем-то напоминает молодоженов, которые пытаются построить сбалансированный бюджет, не зная цен на продукты, одежду и жильё. Всё, что мы давали программистам, – это оптимизирующий компилятор, который таинственным образом что-то делает с программами, которые он транслирует, но никогда не объясняет, что он делает. К счастью, сейчас мы, наконец, наблюдаем появление систем, которые позволяют пользователю поверить в их разумность. Они автоматически анализируют программы и выдают информацию о реальной стоимости. Эти экспериментальные системы – большой успех, поскольку они позволяют оценить усовершенствование программы, и особенно потому, что с ними приятно работать. Таким образом, я уверен, что со временем использование таких систем станет стандартной процедурой. В моей статье в Computing Surveys[69]этот вопрос рассматривается подробнее. В этой статье высказываются также другие идеи, которые могут способствовать удовлетворению программистов.
Долг разработчиков языков – создавать такие языки, которые стимулируют хороший стиль, поскольку мы знаем, что стиль в значительной степени зависит от используемого языка.
Нынешний подъём интереса к структурному программированию показывает, что никакой из наших существующих языков не является идеальным для работы с программами и данными, и вообще не ясно, каким должен быть идеальный язык. Поэтому я надеюсь в ближайшие годы увидеть множество серьёзных экспериментов в области разработки языков.
Заключение
Мы видели, что программирование – это искусство, потому что в нем применяются накопленные в мире знания, потому что оно требует умения и изобретательности, и особенно потому, что оно создает прекрасное. Программист, который подсознательно чувствует себя художником, будет наслаждаться тем, что он делает, и будет делать это всё лучше. Поэтому мы можем радоваться, что люди, которые выступают на конференциях по вычислительным машинам, говорят о State of the Art.
Примечания
1
Статья впервые опубликована в английском журнале «Mind» в 1950 г. (т. 59, стр. 433–460) под заголовком «Computing Machinery and Intelligence». Перепечатана в 4-м томе «Мира математики» Ньюмана (The World of Mathematics. A small library of the literature of mathematics from A’h-mose the Scribe to Albert Einstein, presented with commentaries and notes by James R. Newman, Simon and Schuster, New York, v. 4, 1956, p. 2099–2123). В издании Ньюмана статья озаглавлена «Can the Machine Think?». Перевод сделан по тексту издания Ньюмана.
2
Институт Гэллапа – Американский институт общественного мнения (American Institute of Public Opinion). Основан Гэллапом (George Gallup) в 1935 г. Проводит опросы групп населения по специально разработанной методике с целью определения настроения избирателей перед выборами (президента, депутатов конгресса США и др.) и предсказания результатов выборов, а также по другим вопросам.
3
Мост через реку Форт – известный мост консольно-арочного типа, в два пролета перекрывающий реку Форт (Шотландия) при впадении ее в залив Ферт-оф-Форт. Сооружен в 1882–1889 гг. и в течение 28 лет держал мировой рекорд длины пролетов (длина каждого пролета – свыше 518 м, длина моста – около 1626 м).
4
Очевидно, в смысле «существуют ли абстрактные», т. е. идеализированные машины, которые строятся теоретически с использованием каких-нибудь абстракций, например абстракции потенциальной осуществимости, согласно которой некоторые операции можно повторять сколь угодно большое число раз, некоторые записи могут быть сколь угодно длинными, емкость «памяти» машины может быть неограниченно большой и т. п.
Фактически поставленный здесь вопрос эквивалентен вопросу о том, существует ли (осуществим ли потенциально) алгоритм, решающий некоторую массовую задачу, формулируемую в терминах игры в имитацию. (Вопросам этого рода посвящена брошюра: Трахтенброт Б.А. Алгоритмы и машинное решение задач. М.: Физматгиз, 1957.)
5
Чарлз Бэббедж (1792–1871) – английский ученый, работавший в области математики, вычислительной техники и механики. Выступил инициатором применения механических устройств для вычисления и печатания математических таблиц. В 1812 г. у Бэббеджа возникла идея разностной вычислительной машины (Difference Engine). Строительство этой машины, которая должна была вычислять любую функцию, заданную ее первыми пятью разностями, началось в 1823 г. на средства английского правительства, однако в 1833 г. работа была прекращена главным образом в связи с финансовыми затруднениями. К этому времени у Бэббеджа возник проект другой, более совершенной машины. Эта машина, которую