Архивы: по дате | по разделам | по авторам

Ремесленник или ученый?

Архив
автор : Эдсгер Дейкстра   28.10.2002

Эдсгер Дейкстра - известнейший голландский ученый и преподаватель, специалист в области computer science, один из тех классиков программирования, благодаря которым оно в 1970-е годы сделало рывок и перешло из разряда искусства, которым владеет горстка посвященных, в категорию общепризнанных научных технологий.

Эдсгер Дейкстра (1930-2002) - известнейший голландский ученый и преподаватель, специалист в области computer science, один из тех классиков программирования, благодаря которым оно в 1970-е годы сделало рывок и перешло из разряда искусства, которым владеет горстка посвященных, в категорию общепризнанных научных технологий. За свои заслуги Дейкстра получил премию Тьюринга, престиж которой в вычислительных науках, пожалуй, даже выше, чем престиж Нобелевской премии в физике и химии.

Эссе «Craftsman or Scientist?» («Ремесленник или ученый?») написано в 1975 году и прочитано на конференции «ACM Pacific 75» в Сан-Франциско. Кроме того, этот текст был пронумерован Дейкстрой (получил номер EWD480) и, таким образом, вошел в его знаменитую коллекцию, содержащую более тысячи самых разнообразных работ. Некоторые из них впоследствии были переработаны автором и послужили основой для его книг, в том числе и доступных русскому читателю: «Заметки по структурному программированию» вышли в издательстве «Мир» еще в 1975 году, а «Дисциплина программирования» - в 1978-м; еще два эссе - «Притча» (EWD594) и «Как быть, если правда глаза колет» (EWD498) - стали широко известны как «программистские басни». Однако большинство из них на русский язык не переводились. Об эссе «Craftsman or Scientist?» можно рассуждать долго, но нужно ли? Забегая вперед и говоря словами самого Дейкстры: читатель без труда узнает знакомые черты в этом описании…

Константин Кноп [knop@computerra.ru]

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

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

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

На сегодняшний день применяются оба метода: физики, например, являются главным образом учеными, однако врачи больше похожи на членов гильдии. Математики - где-то между ними: математические результаты изданы и преподаются открыто, но студентов очень редко обучают тому, как делать математические открытия, а публикация не только результатов, но и ведущих к ним эвристик расценивается многими как «ненаучная» и потому считается дурным тоном: зачастую редакционная цензура старается не допустить публикацию эвристик.

Я сделал для вас набросок двух крайних точек на шкале образовательных методов, но это только вступление: моя настоящая тема - «куда на этой шкале мы должны поместить обучение программированию?». Как я понял на своем грустном опыте, тема эта весьма рискованна для открытой дискуссии. Я часто обсуждал ее с людьми, имеющими непосредственно отношение к профессиональному программированию, и предмет этот всегда вызывал у них сильные эмоциональные реакции. Давайте попробуем понять эти реакции, и тогда мы сможем попытаться справиться с ними.

Дабы сделать неявное знание явным и описать навыки так, чтобы их можно было передать, необходимо сформулировать некие концепции. Однако мы должны понимать, что переход ремесла в науку и публикация секретного знания всегда вызывает у членов гильдии ощущение угрозы. Для многих виртуозных программистов начала шестидесятых годов научное развитие в прошлом десятилетии было в высшей степени неприятно. Эти люди напоминают средневекового живописца, который создавал шедевры, поскольку опыт позволял ему хорошо соблюдать пропорции, но неожиданно оказался обойденным молодежью, учениками Альбрехта Дюрера и др., которым преподали основы математики, позволяющие гарантированно превзойти интуитивные навыки старого живописца. С ностальгией он оглядывается на добрые старые времена, когда его опыт и ощущения делали его непревзойденным мастером.

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

На другом краю мы имеем чистого ученого: если мы дадим ему власть принимать решения, результат тоже будет плачевным. Он будет видеть свою дисциплину - будь это теория автоматов, рекурсивная теория функций, теория формальных грамматик, логика или теория очередей - с исключительной ясностью, которую мы имеем право ожидать от современного ученого, но одну вещь ему принять почти невозможно: что его красивый формальный аппарат не исчерпывает содержания обучения. Со времен Тьюринга мы имеем полную теорию того, как управлять битами. Разве она не делает лишними все вычисления? К чему интересоваться проблемами «реального мира»? Теория доказала, что все эти проблемы могут быть решены, так зачем беспокоиться о фактическом решении? Вы, несомненно, узнаете в этих тезисах точку зрения настоящего ученого в чистом виде.

Следовательно, обе крайности плохи, и мы должны как-то смешать их. Но теперь мы должны быть внимательными, поскольку «смешивание» - не одномерный процесс. Оно не сводится к «столько-то процентов ремесленника и столько-то процентов ученого», а должно быть описано как «вот это от ремесленника, а это от ученого».

Увы, я вынужден описать вам всю гибельность картины смешивания технологий Ремесленника с подходом Ученого. Ремесленник не имеет никакого сознательного, формального владения предметом, он только «знает», как использовать инструментальные средства. Если объединить это с подходом ученых к созданию явного знания, ремесленник опишет то, что он знает (то есть свои инструментальные средства), вместо описания, как надо их использовать! Если он - живописец, он сообщит ученикам все, что знает о кисточках, а также все, что ему известно о колебаниях цен на холст. Если он - профессор вычислительной науки, он сообщит своим студентам все, что знает о существующих языках программирования, машинах, операционных системах, пакетах прикладных программ, и все уловки, обнаруженные им при непосредственном программировании. Он не просто перечислит указанные в руководстве пробивки 17-го столбца первой перфокарты для установки приоритета вашего задания в очереди, но обязательно упомянет недокументированную пробивку в 17-м столбце, которая обеспечит вашему заданию высший приоритет, а оплату начислит как за низший. Опять-таки, вы несомненно можете узнать знакомые черты в этом описании.

О гибельности такого смешивания нужно специально предупреждать, и не только для того, чтобы продемонстрировать точку зрения, согласно которой выбор пробивки в 17-м столбце перфокарты имеет такое же отношение к программированию, как выбор между карандашом и шариковой ручкой - к математике. Об этом нужно предупреждать, потому что такое смешивание не просто гибельно, оно до сих пор весьма уважаемо! С одной стороны, вы находитесь в сфере проблем реального мира, и никто не может обвинить вас в чрезмерном навязывании студентам абстракций. С другой стороны, вы настолько конкретны, насколько это возможно, а все, что вы сообщаете, является бесспорной истиной. Когда кто-то имеет наглость указывать вам, что знания, которые вы передаете, являются в лучшем случае малополезными и при этом совершенно произвольными, а кое в чем даже запутывающими, вы пожимаете плечами и говорите: «Но это - лучшее из имеющегося, не так ли?» Как будто это оправдывает подобный стиль обучения…

Все же я боюсь, что подобная форма обучения вычислительным наукам преобладает. Ведь как еще мы можем объяснить часто высказываемое мнение, что «период полужизни» специалиста по вычислительным системам приблизительно равен пяти годам? О чем еще говорит это высказывание, как не о том, что ему преподали хлам?

Немного зная человеческую природу, я понимаю, что после вышеприведенной тирады против неправильного смешивания все вы теперь ожидаете, что я скажу о своей симпатии к «обратному» смешиванию. Вы не ошиблись: преподаватели программирования должны пробовать смешать технологию ученого с рецептами ремесленника.

Основа технологии ученого - сделать явными как можно больше аспектов своего предмета. При этом обучение программированию включает обучение фактам - о системах, машинах, языках программирования и т. д. - и все это очень легко сделать явным. Но неприятность состоит в том, что эти факты составляют всего лишь 10 процентов. То, что должно преподаваться в оставшихся 90 процентах, - это «как решать задачи», «как избежать непреодолимых трудностей», - короче, это обучение умению мыслить, не больше и не меньше. Явное обучение мышлению - нетривиальная задача, но кто сказал, что обучение программированию проще? В нашей терминологии: чем более явно преподавать мышление, тем больше доля Ученого в будущем программисте.

Это, конечно, приводит нас к вопросу о том, как обучать мышлению. Чтобы сделать этот вопрос более реалистичным, мы несколько уточним его: знание, как преподавать мышление, не будет подразумевать, что каждый студент способен научиться этому. Это не должно нас смущать: в этом отношении «мышление» не отличается от любой другой темы, которую мы преподаем. Можно ли преподавать мышление? Реклама на последней странице обложки моего издания книги Пойа «Как решать задачу» звучит весьма обнадеживающе: «Пойа, как умелый преподаватель, показывает нам, как снять шоры, мешающие думать, и ведет нас к ясному и продуктивному образу мыслей».

Звучит отлично, однако это всего лишь реклама… Между тем другая большая работа Пойа по этой же тематике - «Математика и правдоподобные рассуждения» - была прохладно встречена математическим сообществом и оказала крайне незначительное влияние на обучение математике в университетах. Однако после некоторого размышления понимаешь, что прохладный прием книги Пойа математическим сообществом не означает неправоты автора. Напротив! Такое отношение может интерпретироваться и как реакция математической гильдии, которая, как и все другие гильдии чувствует угрозу раскрытия тайн ремесла. Впервые изданная тридцать лет назад, книга Пойа о процессе математических открытий была сочтена ересью, и таковой она остается в глазах многих математиков и сегодня. Процитирую книгу «Менеджмент и Макиавелли» Энтони Джея: «В корпоративных религиях, как и в остальных, еретик должен быть изгнан не из-за вероятности того, что он ошибается, а из-за возможности, что он прав». Другими словами, неприятие работ Пойа говорит больше об интеллектуальной инерции математического истеблишмента, чем о качестве книг, так что на сей раз я предлагаю вам поверить рекламе!

Я рассматриваю книгу Пойа «Как решать задачу» в качестве первого шага в нужном направлении. Он рассматривает эвристику как своего рода контрольный список стандартных вопросов, которые могут быть полезны, чтобы не упустить простого, хотя и неожиданного решения, если оно существует. Когда я прочитал книгу в первый раз, я был несколько разочарован. Мое разочарование было прямым следствием того, что я уже был глубоко вовлечен в программирование: я чувствовал, что мои проблемы как программиста лежали в основном вне области, рассмотренной Пойа. Сначала я не хотел говорить так категорично, потому что те, кто заявляет об исключительности собственной сферы исследований, как правило, выглядят крайне смешными. Но после внимательного анализа я сделал вывод, что интеллектуальный вызов, представленный задачей программирования, на самом деле столь же беспрецедентен, как и высокоскоростной компьютер. Это вызвало в моем сознании сдвиг внимания от вопроса «как открыть неожиданное» к вопросу «как избежать непреодолимых трудностей», а затем к «как уменьшить объем запросов к количественно ограниченным ресурсам нашего мышления».

Вы должны поверить мне на слово, что именно опыт сделал меня сторонником этого нового аспекта мышления. Вопрос «как избежать непреодолимых трудностей» действительно может быть предметом преподавания. Возможно, это заявление шокирует вас, поскольку вы знаете, что я обычно не впадаю в немотивированный оптимизм.

Однако следует помнить, что существуют некоторые пределы того уровня, на котором методы мышления можно преподавать явно, «в научной манере». Как сказано у Пойа, «первое правило открытия - иметь мозги и удачу. Второе правило открытия - напрячься и ждать, пока не придет озарение. Следует также помнить, что некоторые стремления безнадежны. Безошибочные правила, ведущие к решению всех возможных математических проблем, были бы еще более желательны, чем философский камень, безуспешно разыскиваемый алхимиками. Такие правила работали бы как волшебство; однако волшебства не бывает. Находить неизменные правила, применимые ко всем видам проблем - старая мечта философов; но она никогда не станет больше чем мечтой». И это - в книге, где обучение размышлениям напоминает обучение ремеслу, где, как в добрые старые времена цехов и гильдий, Мастер творит чудеса и может создать Школу своим примером.

К тем из вас, кто преподает в университетах и колледжах, у меня есть только одна просьба: пожалуйста, не стыдитесь, что ваше обучение размышлениям «ненаучно»! Помните, что вся непонятая глубина человеческой мысли - всего лишь игра ума в процессе человеческого общения. Мы - несмотря на то, что думают по этому поводу психологи, педагоги и т. п. - очень слабо понимаем, как происходит передача знаний, понимания и навыков. Весьма вероятно, что передача знаний в виде фактов - всегда всего лишь имитация, и что все явное обучение в научной традиции не больше, чем сообщение студенту вербальных подпорок, которые просто-напросто помогают его памяти. Если это так, то все «научное обучение» - то есть явные правила и ничего более - должно быть навсегда отброшено как бесплодное и непродуктивное занятие.

Я хотел бы закончить маленькой историей, приоткрывшей мне абсолютную тайну человеческого общения. Однажды я пошел к фортепиано с намерением сыграть сонату Моцарта, но у клавиатуры внезапно передумал и вместо этого заиграл Шуберта. После первых тактов моя удивленная мать прервала меня словами «я думала, что ты собирался сыграть Моцарта!» В тот момент она читала книгу и всего лишь краешком глаза видела, что я иду к фортепиано. Однако выяснялось, что всякий раз, когда я шел к инструменту, она уже знала, что именно я собирался играть! Как? Единственным объяснением является то, что она знала меня в течение семнадцати лет. С тех пор я думаю, что тщетно пробовать понять то, что происходит в классной комнате между тем, кто преподает, и тем, кто узнает новое. Следовательно, не иметь никакой модели этого процесса безопаснее, чем, имея такую модель, забывать о ее погрешностях. Спасибо за внимание.

© ООО "Компьютерра-Онлайн", 1997-2024
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.