Несмотря на то, что движение по обучению людей программированию имеет благие намерения, основные предпосылки и подход к этому вопросу — ошибочны. Движение основано на идее, что «коддинг — новая грамотность», однако оно имеет узкий взгляд на то, что такое «грамотность» на самом деле.
Если вы поищите в Google понятие грамотности, получите механическое определение: умение читать и писать.
Это, конечно, достаточно точное определение, но ограничивать грамотность лишь формулировкой мыслей и заметками на листке бумаги чрезвычайно некорректно. Чтение и письмо — физические действия, с помощью которых мы создаём внешнее хранилище для мыслей, которым можно поделиться с другими. Быть грамотным — это не умение расставить в правильном порядке слова на бумаге, это значит иметь возможность сформулировать мысль так, чтобы ее можно было записать. Интерпретация и использование мыслей кого-то другого — равнозначно понятию чтения. Познавательные и аналитические способности человека — вот реальная грамотность.
Коддинг не является фундаментальным навыком
Говоря, что коддинг — новая грамотность, мы сравниваем его с грамотностью старой — умением пользоваться карандашом и бумагой. Коддинг, как и письмо, является механическим действием. Единственное отличие — новый носитель данных. Обучение тому, что такое условные выражения и циклы не делает людей более умными. Программирование, как и письмо, требует умения ясно выражать свои мысли. Но в случае программирования, компьютер превращается в нечто большее, чем носитель данных. Он может решать самые разные задачи.
Чтение и письмо дали нам внешнее хранилище и инструмент распространения для данных. Коддинг же дает нам внешнее хранилище и инструмент распространения для выполнения различных вычислений. Это позволяет нам освободить ум, чтобы занять его другими процессами. Чтобы преуспеть в изучении программирования, кажется, нужно всего лишь научить человека давать инструкции компьютеру, что равносильно обучению тому, как помещать слова на странице. А нам нужен эквивалент навыка, который позволит нам придумывать как произвести то, или иное вычисление, чтобы решить поставленную задачу. В этом случае мы будем записывать не просто наши мысли, а модели мира, что поставит сам процесс
Мы строим ментальные модели всего — от того, как завязать шнурки, до того, как работают макроэкономические системы. На их основании мы принимаем решения, делаем прогнозы, и осмысливаем наш жизненный опыт. Если мы хотим, чтобы компьютеры были в состоянии вычислять все за нас, мы должны правильно извлечь эти модели из головы и записать их. Python — не фундаментальный навык, которому мы должны учить людей. А вот моделирование систем — как раз он.
Моделирование — новая грамотность
Так же, как познавательные и аналитические способности человека не связаны с бумагой, моделирование не связано с компьютерами. Оно может быть и физическим и умственным. Оно может быть реализовано и на бумаге, и в Excel, и в виде моделей самолётов из бальсы или Лего. Это невероятно мощный навык, который мы можем сделать еще мощнее, перенеся наши модели внутрь компьютеров. Чтобы понять, как это делать, мы должны глубже рассмотреть понятие моделирования.
Моделирование — это создание представления системы или процесса, которое можно исследовать или использовать.
Это определение охватывает несколько навыков, но самый важный — точность. Чтобы представить систему, мы должны точно понимать все нюансы ее работы, но наше понимание путается в допущениях. Забавная иллюстрация этого — первый раз, когда мой соучредитель, Роберт, пытался сортировать список имен и запутался. Я задал ему простой вопрос: «Что это фактически означает — располагать что-то в алфавитном порядке?» Он никогда не думал о том, что это действительно означало. Это было какое-то смутное понятие, для которого у него была ментальная модель, но он никогда не представлял точный результат (например, что мы делаем с неанглийскими символами?).[1]
Четкое определение системы (или процесса) требует разделение ее на части и выявление тех частей, которые могут быть еще поделены. Это процесс, который помогает выявлять и устранять неопределенности, и это самый важный аспект моделирования. Разбивая даже очень сложную систему на всё более и более мелкие части, мы можем выразить её в терминах, которые мы понимаем, и процессах, принцип работы которых нам известен. Аналогия с программированием здесь очевидна: написание программы — это деление системы на части до тех пор, пока вы не придете к переменным и операциям, которые понимает компьютер. В любом случае нам необходимо четко определить нашу систему, и мы делаем это с помощью итеративной разработки.
Создание — это исследование
Мы создаем модели, используя какой-то материал. [2] Иногда материалом является древесина, металл или пластмасса. В других случаях — данные или информация из нашего сознания. В любом случае, мы начинаем формировать нашу модель постепенно. Это помогает нам избежать проблемы пустой страницы — начав с куска глины (или данных, или простых физических действий, или деталей Лего) мы не должны сразу получить из ничего нечто особенное. Вместо этого, мы можем приступить к работе, умело обращаясь с тем, что имеем. Мы может точить, строгать, сгибать, разрывать и клеить. Мы можем постепенно формировать нашу модель по нашему усмотрению.
Процесс создания модели является актом открытия — мы узнаем, в чем мы нуждаемся, поскольку сами формируем материал. Это означает, что мы не обязаны иметь полное представление о системе с самого начала. Мы можем постепенно постигать её в процессе работы. Мы исследуем систему, создавая её модель, и эта модель не обязана быть полной, прежде чем можно будет начинать ею пользоваться. Мы просто экспериментируем — тут немного отрезаем, там — добавляем, чтобы посмотреть, что происходит. И по пути мы лучше узнаём о том, как ведут себя системы.
Исследование- это понимание
Физическое моделирование демонстрирует нам ценность декомпозиции, будь то полная разборка автомобильного двигателя до винтика на полу гаража или просто демонтаж генератора переменного тока. Разделяя что-либо, мы можем непосредственно исследовать то, что является составными частями целого. Вот почему интерфейсы в фильмах, таких, как Железный человек так востребованы — они позволяют погружаться.
Вообразите то, что мы могли изучить, если бы мы могли разобрать что-нибудь, и понять, что делает каждая из составных частей. Чем больше способов мы находим для сохранения этой способности, тем больше власти мы получим, понимая сложные вещи.
Мы понимаем вещи посредством исследования моделей, «играя с ними» с целью увидеть то, что происходит. Мы можем сделать наши колеса больше или выбрать другое число для процентной ставки и моделировать результат. Посредством этого процесса мы испытываем и воображаем вещи, и чем больше событий с нами происходит, тем больше мы понимаем принцип работы мира в целом.
Цифровая свобода
В то время как свойства физического моделирования полезны для нас как руководящие принципы, мир цифровых технологий предлагает нам возможность отступить от ограничений. Мы можем свободно создать копии частей и их версии. Мы можем внести изменения в отдельные части, и система приспособится к ним. Мы можем моделировать в различных контекстах, и использовать сложные инструменты для проверки своих предположений. Перенося наши модели в компьютер, мы можем разгрузить работу, необходимую для изменения, смоделировать и проверить. Мы также можем дать нашим моделям возможность предлагать различные действия и давать другим системам выполнить их для нас. Мы можем исследовать мир, не хватаясь за физические инструменты в реальной мастерской для внесения любого маленького изменения.
Есть много инструментов, которые уже помогают нам сделать это — от Matlab до Quartz Composer, но Excel, бесспорно, король. Через Excel мы можем смоделировать любую систему, которую мы можем представлять как числа в таблице. Мы смоделировали все — от компаний до рынков семейных отпусков. Миллионы людей в состоянии использовать электронные таблицы для разных аспектов своей жизни, и можно утверждать, что после интернета это единственный, самый важный инструмент, доступный нам на компьютере. Он обеспечивает простой и интуитивный набор инструментов для формирования всего одного материала: таблицы чисел. Если мы хотим работать с чем-то большим, нам придется программировать.
Конфликт намерений
Коддинг требует, чтобы мы разделили наши системы на действия, которые понимает компьютер, что создаёт глубокий конфликт намерений. Большинство программ не пытается определить, как вычисления разделяются между ядрами процессора или как объекты должны быть выложены в памяти. Мы не пытаемся смоделировать, как компьютер делает что-то.[3] Вместо этого мы моделируем человеческое взаимодействие, погоду или космический корабль. Это всё равно, что пытаться рисовать картину сварочным аппаратом. Мы используем ряд инструментов, разработанных для моделирования работы компьютеров, чтобы моделировать системы, которые являются чем-то иным.[4]
Даже в случае, когда мы говорим определенно о том, как должны вести себя машины, наши инструменты не достаточно развиты в контексте моделирования сознания. Наши редакторы и отладчики, например, мешают выбирать части на различных глубинах абстракции. Вместо этого мы должны смотреть на систему, выложенную полностью, и попытаться понять, откуда все винтики. Большинство языков также усложняет исследовательское создание. Исследование системы в процессе разработки дает нам больше понимания того, что мы имеем и в чем мы нуждаемся. Поэтому языки, которые были разработаны с учётом необходимости исследования (LISP, Smalltalk, и т.д.) кажутся волшебными и имеют последователей. Но даже они вынуждают нас моделировать каждый материал при помощи единственного инструмента. Несмотря на наличие различных инструментов для различных физических материалов, в программировании мы пытаемся построить почти все из одного: язык программирования общего назначения.
На первый взгляд кажется желательным иметь «один инструмент, чтобы управлять ими всеми», но в реальности получается, что мы пытаемся ковать металл с помощью поварского ножа.[5] Excel в свою очередь ограничивает нас единственным материалом для работы. Посредством этого ограничения мы получаем инструмент с мощным и в то же время интуитивным интерфейсом для работы с таблицами. Проблема, конечно, состоит в том, что Excel ужасен для работы с чем-либо еще, но это не означает, что мы должны попытаться превратить разделочный нож в молоток. Вместо этого мы должны использовать правильные инструменты для работы и искать клей, который позволяет нам соединять воедино разные материалы.[6]
Программирование вынуждает нас моделировать, но делает это неестественным способом. И в то время как обучение программированию поможет нам изучить, как разбивать системы на части, оно может быть сосредоточено на неправильных вещах.[7] Нам не нужно поколение людей, которые разбираются в нюансах работы с разными кодировками символов или системными элементами интерфейса. Нам нужно поколение писателей, биологов и бухгалтеров, которые смогут по-настоящему использовать компьютеры.
Как мы учим детей
Мы — прирожденные моделировщики, и мы учимся, создавая представления о мире. Наши модели часто начинаются слишком упрощенно или даже очевидно неправильно, но это совершенно приемлемо (и возможно необходимо[8]), в то время как мы можем продолжить обновлять их в процессе. Каждый родитель сможет привести пример своего ребенка, который, возможно, не смог понять, как происходят некоторые вещи, но умеет ими пользоваться. Яркий пример — то, что младенцы изначально осознают существование объектов, только когда видят их. Вот почему неспособность увидеть родителей означает, что они больше не существуют [9], понятие постоянства объекта дети полностью развивают только после пары лет оттачивания модели того, как ведут себя физические объекты.
Получается, что все происходит естественным образом, чему мы тогда должны учить детей? Волшебство инстинкта состоит в том, что мы не должны знать, как это фактически происходит. Мы понимаем мир через модели, но это не означает, что мы знаем, как мы создаем их. Также, мы должны учить детей тому, как происходит моделирование[10], которое можно поделить на четыре отдельных процесса:
Декомпозиция: Как разбирать на части, пока вы не добираетесь до идей и действий понятных вам.
Валидация: Как проверить модель, основываясь на реальном мире или на том, что в наших головах.
Отладка: Как исправлять ошибки в модели. Очень важным уроком является то, что нерабочая модель — не есть неудача, она просто показывает, что некоторая часть системы ведет себя иначе, чем мы смоделировали.
Исследование: Как играть с моделью, чтобы лучше понять возможные последствия и увидеть, как она может использоваться или автоматизировать систему.
Сосредоточение на этих четырех областях охватывает основной процесс, с которым мы создаем, затачиваем и используем модели, и это позволяет детям становиться активными участниками процесса при обучении. Возможно, что еще более важно, сосредоточение на моделировании подтверждает идею о том, что педагогика действительно ведет детей к осознанному созданию и исследованию мира вокруг них.
Как мы должны учить взрослых
Реально, мы должны преподавать себе те же самые вещи, но, к сожалению, обучение взрослых редко допускает ненаправленное исследование (мы просто пытаемся сделать что-то). Вместо этого мы могли описать моделирование с точки зрения того, как мы могли бы использовать модели в контексте. Например, если вы бухгалтер, который совершает одни и те же действия каждый день, чтобы создать отчет, вы могли бы проанализировать их последовательность, чтобы увидеть, как вы могли бы автоматизировать его части. Какие фундаментальные действия необходимы, чтобы создать этот отчет? Есть ли инструменты, которые могут сделать эти действия за вас?
Если когда нибудь будут созданы более совершенные инструменты моделирования, то сама способность создать модель уже будет означать, что мы автоматизировали процесс. Экстремальный пример этого — моделирование всего бизнеса от взаимодействия с клиентами до выполнения. В таком случае вы могли бы автоматизировать значительные части и сосредоточиться на том, как развивать бизнес. Эта задача, в свою очередь, тоже может быть подвергнута исследованию и моделированию.
«Компьютерная революция еще не произошла»
Алан Кей проводил беседу в OOPSLA в 1997, названную «Компьютерная революция еще не произошла», в которой он утверждал, что мы не реализовали потенциал компьютеров. Восемнадцать лет спустя я все еще соглашаюсь с ним — это еще не произошло. Чтобы реализовать потенциал компьютеров, мы должны сосредоточиться на фундаментальных навыках, которые позволяют нам использовать внешнее вычисление. Мы должны создать новое поколение инструментов, которые позволяют нам выражать наши модели, не осваивая новую профессию и новое поколение людей, владеющих ими.
Проще говоря, следующий большой скачок в развитии человечества заключается в способности воплощать умственные модели, на создание которых мы тратим всю нашу жизнь.
Это новая грамотность. И это революция, которую мы все ждали.
Сноски и пояснения от автора оригинального материала, слишком большие для того, чтобы вставлять их в текст:
1. Это используется в качестве аргумента в пользу того, почему программирование никогда не cможет стать проще. В лучшем случае вы могли сказать, что спецификация очень сложна, и моделирование как таковое не может быть упрощено. Программирование в настоящее время требует намного больше, чем просто моделирование, хотя, и существует огромное пространство для улучшений и в других областях. Кроме того, у нас есть примитивные инструменты для моделирования, таким образом, есть много возможностей. ↩ назад
2. Это понятие материала используется во многих местах. Последний разговор Виктора Брета посвящен созданию «динамического материала». Пэйперт также говорит о том, как материалы, которые мы имеем в нашем распоряжении, значительно влияют на то, как мы думаем о мире в начале Mindstorm. Существует важная идея о том, как то, с чем мы должны работать, диктует то, о чем мы можем думать. ↩ назад
3. По крайней мере, это уже не так. Когда мы работали над созданием вычисления, наше внимание действительно должно было быть на этом уровне, но если мы будем говорить о демократизации способности управлять компьютером, то мы не можем ожидать, что люди станут экспертами в архитектуре аппаратных средств. Акцент должен перенестись с, «как мы заставляем эти вещи работать» на «как мы делаем что-либо с ними». ↩ назад
4. Вы узнаете о многом из метафор, используемых в различных областях. Я говорю о материале, но в программировании у нас есть «модули». Модули — игра, что означает, что они или должны предусмотреть каждую возможность, или вы работаете с ними. Во многих отношениях идея, что мы можем снова использовать компоненты, не имея необходимость изменять их (или что мы можем объяснить все различия) принесла больше вреда, чем пользы. Модели сделаны из материала. Это означает, что они могут все еще быть приспособлены и заточены, они — просто отправная точка. Лучшим способом было бы смотреть на повторное использование в системах. Мы начинаем с чего-то, это — большая часть пути и вместо того, чтобы пытаться предвидеть каждую возможность, мы просто даем людям возможность делать то, что они считают целесообразным. ↩ назад
5. Никакой инструмент не удовлетворит каждую модель, которую мы хотим построить, но, может быть, возможно придумать маленький набор механизмов, из которых могли быть построены все другие. Мы видим это в материальном мире с простыми машинами. Почти каждый инструмент, который мы используем для обработки древесины, например, сделан из режущего клина. Проблема состоит в том, что в промышленности программного обеспечения мы никогда не могли прыгнуть от использования клина до пилы. ↩ назад
6. Исследование возможных решений для того, как мы смоделировали бы использование различных инструментов, находится за пределами этого эссе, но это — основная предпосылка нашей работы над Eve. Суть в том, что мы думаем, что клей — язык для исследования и перевода данных из различных областей. Мы соединяем его с системой, способной к восприятию данных и выполнению вычислений (отправка его по сети, показ UI, и т.д.). Инструменты находятся на вершине, и вы моделируете непосредственно в Вашей области. Система сама решает, как использовать результаты моделей. ↩ назад
7. Принуждение детей к посещению уроков, которые сосредотачиваются на программировании, подразумевает очень серьезный риск; оно может закончиться как математическое образование. Программирование значимо только тогда, когда помещено в контекст проблем, которые мы фактически имеем, иначе мы показываем людям моральный эквивалент вычисления — «какой смысл от этого дерьма?» Нельзя сказать, что не должно быть общих программных классов, просто на детях это не будет иметь желаемого эффекта. ↩ назад
8. Есть мнение, что для нас, чтобы действительно изучить что-то, необходимо пройти серию недействительных моделей, чтобы усвоить о мире то, что первоначально было бы неинтуитивно. В то время как большая часть природы представляется простой, есть почти всегда ряд сложных систем, которые не имели бы смысла, базируясь просто на интуиции. Как сказал Карл Саган, «У самой простой мысли, как например у понятия номера один, есть тщательно продуманное логическое подкрепление.» ↩ назад
9. Я увидел прекрасный (и несколько странный) пример этому, гуляя по Сан-Франциско. Это была семья с двухлетним сыном, спускающаяся с тротуара, держась за руки. Отец отпустил руки сына и спрятался за столбом. Как только он больше не был в поле зрения, маленький мальчик начал кричать. Отец вышел из-за столба и ребенок успокоился. Он повторял это несколько раз и каждый раз, когда сын не мог видеть своего отца, он вопил. Как же их мир отличается от нашего.↩ назад
10. Мне сказали, что есть фактически пример этого в современном образовании: в первый раз вы оценены не только для получения правильного ответа в математическом классе, но для того, чтобы также показать Вашу работу. Вынуждая людей показать их работу, вы вынуждаете их усвоить, как их модель работает для некоторого математического принципа. Это не самый прямой способ преподавать моделирование, но это, по крайней мере, нечто похожее. ↩ назад
Перевод публикации подготовлен командой разработчиков проекта Vircities.
Автор: cigulev