Алан Кей: как бы я преподавал Computer Science 101

https://www.quora.com/If-you-had-to-teach-%E2%80%98Computer-Science-101%E2%80%99-how-would-you-begin-your-first-lecture
  • Перевод
«Одна из причин, чтобы на самом деле поступить в университет — это выйти за рамки простой профессиональной подготовки и вместо этого уцепиться за более глубокие идеи.»


image

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

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

Отчасти проблема заключалась в отсутствии любопытства, отчасти — в узости личных целей, которые не были связаны с обучением, отчасти — отсутствии представления о том, что из себя представляет эта наука, и так далее.

Я работаю на полставки на кафедре вычислительной техники Калифорнийского университета несколько лет (по сути я профессор, но мне не нужно ходить на заседания кафедры). Периодически я веду занятия, иногда у первокурсников. За эти годы и без того низкий уровень любопытства к Computer Science значительно снизился (но также возрос уровень популярности, поскольку вычислительная техника рассматривается как путь к хорошо оплачиваемой работе, если вы умеете программировать и получили сертификат в лучшей 10-ке школ). Соответственно, ни один студент ещё не жаловался на то, что первым языком в Калифорнийском университете является С++!

Мне кажется, мы столкнулись с ситуацией, в которой оба значения «Computer» и «Science» были разрушены слабыми массивными концепциями, чтобы создать новый термин — своего рода лейбл на джинсах — который хорошо звучит, но достаточно пуст. Связанный с этим термин, который был аналогичным образом разрушен, «программная инженерия», который, опять же, не использовал самые гениальные идеи «программирования» и «инженерии», а просто скомбинировал их (это было намеренно сделано в шестидесятых, когда и был придуман термин).

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

Первоклассники радуются, когда им показывают, как линейка поверх другой линейки становится арифмометром, с помощью которого они могут превзойти ребят из 5 класса при добавлении дробной части. А затем они будут счастливы принимать участие в разработке улучшенных арифмометров. Они прикоснулись к настоящему компьютеру — физическому и ментальному инструменту, помогающему нам думать. Они обучились действительно эффективному способу для представления чисел — более действенный, чем обучают в школах!

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

Они также расширили его. И так далее. Это не цифровой компьютер. И это не компьютер с запоминаемой программой. Но это суть компьютера. Точно так же, как антикитерский механизм — это вообще суть компьютера и вычислений.

image

Антикитерский механизм

Как далеко мы можем зайти и как много сделать перед тем, как все выйдет из-под контроля, и мы потеряемся в абстракциях? Я всегда был неравнодушен к характеристике Алана Перлиса — первого лауреата премии Тьюринга, который, возможно, изобрел термин «Computer Science» — который в 60-х годах сказал: «Computer Science — это наука о процессах». Всех процессах.

Ради компании Quora давайте не будем пытаться загонять это дальше или превращать в религиозную догму. Давайте просто счастливо использовать идею Ала Перлиса, чтобы лучше думать о нашей области. И особенно о том, как этому обучать. Сейчас нам нужно взглянуть на современное значение «науки», и Перлис был довольно уверен, что оно не должно разбавляться старыми значениями (например, таким, как «сбором знаний») и использованиями (к примеру, «библиотечное дело» или даже «общественные науки»). Под «наукой» он пытался понять феномен, создавая модели/карты, которые пытаются показать, «отследить» и предсказать явления.

image

Я дал несколько интервью о том, как лучшие карты и модели зачастую могут подойти для футболки, так, как подходят уравнения Максвелла и другие. Аналогия заключается в том, что существует «наука о мостах», хотя и большинство мостов сделаны человеком. Но как только мост построен, он отображает явления, учёные могут их изучать, из мостов возможно сделать модели многих видов и сформировать всесторонние и полезные «теории мостов». Забава в том, что затем можно спроектировать и построить новые мосты (я уже упоминал, что вряд ли есть что-то более забавное, чем совместная работа ученых и инженеров для решения больших и важных проблем!)

image


Герберт Саймон — лауреат премии Тьюринга и Нобелевской премии — назвал все это «науки об искусственном» (и написал великолепную книгу с таким же названием).

image


Позвольте привести пример. В 50-х годах компании и университеты строили компьютеры с запоминаемой программой и начинали программировать их — и был особый момент, когда в 1956 году появился Фортран — который не являлся первым языком высокого уровня, но, возможно, первым, сделанным настолько хорошо, чтобы его использовали во множестве разных областей, включая многие, которые ранее были сделаны только на машинном языке.

Все это породило «феномены».

image

Джон Маккарти

История Lisp’а более сложна, но Джон Маккарти заинтересовался попыткой найти «математическую теорию вычислений» и был полон решимости сделать так, чтобы всё работало отлично. Функция eval, которая интерпретирует Lisp, запросто помещается на футболке! По сравнению с «системой программирования» — это ничтожно. Что более важно, эта «теория вычислений» имела более мощную концепцию, чем Фортран! Это была лучшая идея моста!

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

Lisp, выступая в роли мощного языка программирования и метаязыка, который способен представить свою собственную теорию, является примером настоящей компьютерной науки. Если вы выучите его и другие подобные вещи, то сможете более глубоко мыслить и быть в большей ответственности за свою собственную судьбу, чем если бы вы просто научились программировать в Fortran’е или его современных эквивалентах (… так вы сможете приблизиться к программистам!).

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

Другая причина выбора определения Перлиса заключается в том, что в целом вычисление гораздо больше связано с созданием систем многих видов, чем с алгоритмами, «данными структур» или даже программированием как таковым. Например, компьютер — это система, вычисления — это системы, локальная сеть и интернет — это системы, и большинство программ должны представлять собой более хорошие системы чем те, которыми они являются (старый стиль программирования с 50-х годов просуществовал до того момента, что кажется, что программирование и должно быть таким — нет ничего более далёкого от истины).

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

Итак, что нам нужно сделать на первом курсе по Computer Science, так это принять во внимание, что конкретно студенты могут делать в самом начале, а затем попытаться остаться в пределах их «познавательной нагрузки», чтобы помочь им добраться до того, что действительно важно. Очень важно «оставаться настоящим» и найти пути, которые бы являлись интеллектуально честными и подошли бы тем, кто только начинает обучение. (Пожалуйста, не обучайте плохим идеям только потому, что они кажутся немного более простыми — множество плохих идей на самом деле более просты!).

Студенты должны начать с создания чего-то, что имело бы множество важных характеристик, которые я здесь обсуждал. Это должна быть система из нескольких динамически взаимодействующих частей и так далее. Хороший способ, чтобы решить, какой язык программирования при том использовать, так это просто сделать что-то, что имеет тысячи взаимодействующих частей! Если же нет, то вам следует найти таковой. Самое ужасное, что можно сделать, это поставить студентов на путь слишком слабой беглости, которая сильно ограничивала бы масштабные идеи. Это просто убивает их — а мы хотим вырастить их, а не убивать.

О школе GoTo


image

  • +10
  • 11,5k
  • 9
Проектная школа программирования GoTo 82,70
Образовательный проект для юных программистов
Поделиться публикацией
Ой, у вас баннер убежал!

Ну. И что?
Реклама
Комментарии 9
    0
    Не очень понял, к чему упомянут C++
      +10
      Это долгая история. В частности, Кей, являясь одним из пионеров ООП, автором первого ООП языка, считает что прежде всего именно C++ извратил само понятие ООП.

      Вообще, у C++ репутация языка, ничего не внесшего в computer scince, а заимствовашего концепции из других крайне неудачным и бессистемным образом. Некоторые вообще сомневаются можно ли считать его одним языком в принципе.
        0
        ППКС!!!
          +2
          Кей был автором объектного подхода, а не ООП. ООП это более поздний выродок Грейди Буча и пр. Но это ничего не меняет. Убогость объектного подхода к вычислениям (и ООП позднее) это сочетание детского наива — ассоциировать состояние программы с объектами реального мира и ограниченности — вычислять следующее состояние передачей сообщений. Без жёсткой типизации и возможности трансформации программ. А С++ просто впитал это (в большой степени благодаря волне бучизма, читай идиотизма) и сейчас слава богу активно от этого избавляется, вводя, прежде всего, возможность работы с системой типов, а не отдельными типами(классами) и плясками вокруг объектов.
          +4
          Думаю потому что C++ на уровне языка это просто бесформенная куча концепций, не побуждающая к поиску толковых абстракций. Сплошные стрельбы по собственным ногам.

          Хотя сейчас С++ сильно меняется на мой взгляд делая сильный упор на метапрограммировании, что уже выглядит как-то более системно.
          +3
          Алан Кей очень умный. Но те вещи, о которых он тут говорит, требуют достаточно долгой работы, чтобы достичь того уровня, когда они начинают доходить до сознания. Благо, что путь открыт и все это можно изучать постепенно: начать с основ (архитектура фон Неймана и расширение понятия «энтропия» на информационный план, что придумал Шеннон), затем понять принцип Тьюринг-полноты (как так получается, что на любом Тьюринг-полном языке можно реализовать любой другой Тьюринг-полный язык) и увидеть схожесть этого принципа с диагональным аргументом Кантора, а потом изучить то, что сделал Джон Маккарти (изобрел функцию eval, которой на вход можно подавать программный код, и это был по сути первый интерпретатор Лиспа), и увидеть, насколько сильно наличие такой функции увеличивает семантическую выразительность языка (по мнению Пола Грэма, эссе которого «Побеждая посредственность» хорошо бы регулярно перечитывать, наличие eval в языке превращает его в диалект Лиспа и после этого он может быть использован как конструктор для разных других DSL, что мы и видим в практике).

          Вот это вот и есть настоящая компьютерная наука. А не «какие аннотации в Spring для чего используются». Спасибо, что переводите такие посты.
            +1
            придумал Шенон

            Я так и не нашел — в каких единицах измеряется сложность, и вообще что такое инженерная (информационная) сложность, абстрактный бред колмогорова не считается, он метрологически несостоятелен. Что почитать из фундаментального? Пока я вижу что наука о сложности как и психология пребывает в зачатке.
            +2
            Вроде всё правильно, логично, не поспоришь. А коллеге в курилке пересказать не можешь. Очень похоже на философский трактат
              +3
              Все науки об искусственном — на самом деле науки о способе, которым функционирует ум. Кроме ума во вселенной ничего нет, и у ума есть свои законы, в чем-то достаточно жесткие, и именно эти законы и определяют инженерные ограничения, паттерны, алгоритмы, структуры данных и проч. Так что на самом деле компьютерные науки — это науки о естественном (уме)

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое