Learnable Programming

15 окт. 2026 г. · время чтения ~7 мин.

Вид: эссе

Коротко

Вопрос: Как сделать так, чтобы люди понимали программирование?
Ответ: Автор считает, что понимать программирование люди смогут, если изменить само программирование: сделать видимым выполнение программы и поддержать способы мышления, подходящие человеку, а не машине.

Тезисы

Против кого пишет:

  • Alan Perlis — утверждал, что для понимания программы нужно стать и машиной, и программой
  • обучающая среда Khan Academy на JavaScript и Processing — живое обновление результата и подбор чисел наугад вместо понимания
  • Fred Brooks, «No Silver Bullet» — по автору, считает программное обеспечение по природе «невидимым и невизуализируемым» и указывает на неудачи визуального программирования

Т1. Программирование, по автору, — способ мышления, а не заученный навык

  • Аргумент: автор открывает ответ двумя мыслями об обучении: программирование — способ мышления, а люди понимают то, что видят. Из них он выводит две цели системы: поддерживать сильные способы мышления и дать увидеть выполнение программы.
  • Цитата: «Learning about “for” loops is not learning to program, any more than learning about pencils is learning to draw.» (раздел «вступление»)
  • Понятия: Программирование как способ мышления

Т2. Если программист не видит, что делает программа, он её не понимает

  • Против: Alan Perlis
  • Аргумент: автор отвергает слова Перлиса, что для понимания программы нужно стать и машиной, и программой: человек не машина и не должен быть вынужден так думать.
  • Цитата: «If a programmer cannot see what a program is doing, she can’t understand it.» (раздел «вступление»)
  • Понятия: Видимость выполнения программы

Т3. Хорошая система спроектирована вокруг определённых способов мышления, а не набора функций

  • Аргумент: автор сравнивает набор функций среды с набором слов в книге: значит послание, а не отдельные слова; хорошая система целиком строится вокруг поддержки способов мышления.
  • Цитата: «Likewise, a well-designed system is not simply a bag of features.» (раздел «The features are not the point»)
  • Понятия: Программирование как способ мышления

Т4. Среда отвечает за прозрачность смысла: подбор чисел наугад — не обучение, а барьер

  • Против: обучающая среда Khan Academy на JavaScript и Processing
  • Аргумент: по автору, учебные материалы Khan Academy предлагают «случайно подбирать числа»; он сравнивает это с микроволновкой без подписей на кнопках и считает, что смысл кода нужно подписывать и показывать рядом с данными, чтобы ученик думал о понятиях программирования.
  • Цитата: «Likewise, guessing the third argument of the “ellipse” function isn’t “learning programming”.» (раздел «Make meaning transparent»)
  • Данные: пример автора — подпись при наведении мыши на аргументы функций и подписи, связывающие код с результатом на экране.
  • Понятия: Прозрачность смысла

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

  • Против: типичная среда «живого кодирования» — код слева, результат справа
  • Аргумент: автор сравнивает такую среду с кулинарным шоу, где показывают продукты и готовое суфле, но не шаги. Ему нужны управление временем (ползунок, шаги вперёд и назад) и шаблоны выполнения во времени (линия времени).
  • Цитата: «We see code on the left and a result on the right, but it’s the steps in between which matter most.» (раздел «Make flow tangible»)
  • Понятия: Видимость выполнения программы

Т6. Главное, что можно сделать для обучающей среды, по автору, — показывать данные

  • Аргумент: код нужен, чтобы обращаться с данными, а их программист не видит; автор опирается на правило Эдварда Тафти «Show the data» и на второе его правило: показывать сравнения.
  • Цитата: «If you are serious about creating a programming environment for learning, the number one thing you can do — more important than live coding or adjustable constants, more important than narrated lessons or discussion forums, more important than badges or…» (раздел «See the state»)
  • Данные: пример со значениями scaleFactor в цикле: не видя данных, на вопросы о нём приходится отвечать, пересчитывая значения в голове.
  • Понятия: Показ данных

Т7. Скрытого состояния быть не должно: его надо либо устранить, либо показать

  • Против: графическая библиотека Processing с неявным «текущим» состоянием (цвет заливки, матрица преобразований)
  • Аргумент: строка кода, меняющая скрытое состояние, не даёт видимого эффекта; автор называет такое проектирование безответственным и неуважительным к ученику.
  • Цитата: «Code that modifies this state produces no visible effect on the canvas.» (раздел «Eliminate hidden state»)
  • Понятия: Скрытое состояние

Т8. Среда программирования должна служить «внешним воображением», где программист постоянно реагирует на то, что уже сделано

  • Аргумент: автор приводит живописца и музыканта, которые реагируют на то, что уже есть на холсте или в звуке; программисты, по его словам, традиционно работают в голове. «Живое кодирование» само по себе, по автору, лишь основа для других возможностей.
  • Цитата: «Working in the head doesn’t scale.» (раздел «Create by reacting»)
  • Понятия: Создание через реакцию

Т9. Учиться обобщению надо от конкретного кода к абстрактному, постепенно

  • Аргумент: ученик не учится сразу писать абстрактный код, а начинает с конкретного и постепенно превращает константы в переменные, а затем в функции и циклы; на каждом уровне он управляет параметрами и понимает программу.
  • Цитата: «The learner should start by writing concrete code, and then gradually change it to introduce abstraction.» (раздел «Create by abstracting»)
  • Данные: пример с домиком из фигур: константа становится переменной, затем циклом, затем аргументом функции.
  • Понятия: Создание через абстракцию

Т10. Метафоры языков бывают более или менее подходящими уму; в Logo программист может отождествить себя с черепахой

  • Против: Processing и стандартное императивное программирование с метафорой «присвоения переменным»
  • Аргумент: черепаха Logo позволяет ученику спрашивать себя, как бы он сам выполнил действие; Smalltalk строится на метафоре сообщений; в Processing, по автору, у программиста нет роли в системе.
  • Цитата: «Every programming language is made of metaphors, but some fit the mind better than others.» (раздел «Identity and metaphor»)
  • Понятия: Идентичность и метафора

Т11. Язык должен поощрять разложение задачи и повторное сочетание частей

  • Против: Processing с глобальным состоянием и единичными точками входа
  • Аргумент: автор называет модульность рычагом разума против сложности; Processing, по автору, мешает независимому думанию о частях и склейке чужих программ, а HyperCard, по автору, приспособлен к склейке.
  • Цитата: «Modularity is the human mind’s lever against complexity.» (раздел «Decomposition»)
  • Понятия: Декомпозиция, Рекомпозиция

Т12. Принципы, по автору, нужны не только новичкам, но и опытным программистам

  • Аргумент: опытному программисту не нужно знать, что значит «if», но нужно понимать поведение программы во время её написания; автор предлагает считать принципы требованиями и перепроектировать программирование под них.
  • Цитата: «These design principles were presented in the context of systems for learning, but they apply universally.» (раздел «These are not training wheels»)
  • Понятия: Программирование как способ мышления

Т13. Визуализировать надо данные и поведение, а не код и статическую структуру

  • Против: Fred Brooks, «No Silver Bullet» (по автору, считает программное обеспечение «невидимым и невизуализируемым»)
  • Аргумент: автор не винит Брукса, но считает, что традиционные визуальные среды показывают не то: структуру кода, а понимать нужно, что код делает.
  • Цитата: «Visualize data, not code. Dynamic behavior, not static structure.» (раздел «These are not training wheels»)
  • Понятия: Визуализация данных, а не кода

Пример

К1. Микроволновка без подписей и кулинарное шоу без шагов

Автор сравнивает подбор чисел наугад в среде Khan Academy с микроволновкой, у которой кнопки без подписей, а показ только кода и результата — с кулинарным шоу, где видны продукты и готовое суфле, но не приготовление. Подкрепляет Т4 и Т5.

К2. Домик, который превращают в строку домиков

Рисунок домика из констант сначала переводят в переменную положения, затем в цикл и в функцию с аргументами, на каждом шаге оставляя управление параметрами. Подкрепляет Т9.

Связи

  • Из карточки: Программирование как способ мышления → автор: обучение программированию — это обучение мышлению, а не отдельным конструкциям языка (Т1)
  • Из карточки: Видимость выполнения программы → автор: программист понимает то, что видит и может осязаемо исследовать (Т2, Т5)
  • Из карточки: Прозрачность смысла → автор: среда обязана подписывать и объяснять в контексте, чтобы ученик мог читать программу (Т4)
  • Из карточки: Показ данных → автор: значения, которые вычисляет код, должны быть сразу видны (Т6)
  • Из карточки: Скрытое состояние → автор: состояние нужно устранить или показать на экране (Т7)
  • Из карточки: Создание через реакцию → автор: программист начинает с чего-то на экране и подправляет (Т8)
  • Из карточки: Создание через абстракцию → автор: сначала конкретное, затем обобщение по уровням (Т9)
  • Из карточки: Идентичность и метафора → автор: язык связывает мир компьютера с миром программиста (Т10)
  • Из карточки: Декомпозиция → автор: разбиение мысли на куски по силам ума (Т11)
  • Из карточки: Рекомпозиция → автор: склейка частей программ и обучение друг у друга (Т11)
  • Из карточки: Визуализация данных, а не кода → автор: показывать поведение, а не статическую структуру (Т13)

Частные вопросы

  • В1. Чему должна учить обучающая среда и что ей для этого видеть? → Т1, Т2
  • В2. Какие свойства среды помогают понимать программу? → Т3, Т4, Т5, Т6, Т7, Т8, Т9
  • В3. Какие свойства языка помогают думать о программе? → Т10, Т11
  • В4. Нужны ли эти принципы только новичкам и что визуализировать? → Т12, Т13

Где используется

Оригинал