Перевод поста Стивена Вольфрама (Stephen Wolfram) "How to Teach Computational Thinking".
Выражаю огромную благодарность Полине Сологуб за помощь в переводе и подготовке публикации
Содержание
— Вычислительное будущее
— Что такое вычислительное мышление?
— Знакомство с Wolfram Language
— А что насчет…
— Основы
— Куда может вписаться вычислительное мышление?
— Что дети могут делать?
— Во главе с детьми
— Что такое вычисления и программирование?
— Как все это будет происходить?
Вычислительное будущее
Вычислительное
Врачи, юристы, учителя, фермеры… Будущее представителей всех этих профессий тесно связано с вычислительным
Я заметил одну интересную тенденцию. Выберите любую область X — от археологии до зоологии. Там либо уже есть «вычислительное X», либо скоро появится.
Посмотрите на примеры вычислений из этой статьи в Wolfram Open Cloud »
Так как же нам подготовить сегодняшних детей для этого будущего? Я уже 40 лет связан с темой вычислительного
Я лично очень заинтересован в этом: например, доступ к Wolfram|Alpha в Интернете уже несколько лет бесплатный. А теперь, после запуска сервиса Wolfram Open Cloud, любой человек в любом месте может начать изучение вычислительного
Что такое вычислительное мышление?
Ну, во-первых, давайте попробуем определить, что мы подразумеваем под "вычислительным
Но как «сказать» компьютеру что-нибудь? Нужен язык. Благодаря Wolfram Language мы можем теперь непосредственно общаться с компьютерами о том, что нас интересует. Wolfram Language основан на знаниях: он знает, какие есть города, или специи, или песни и фотографии; и он знает, как проводить с ними вычисления. И как только у нас появляется идея, которую мы можем сформулировать вычислительно, тогда мы с помощью языка можем ее выразить и (благодаря трем десятилетиям развития технологии) максимально автоматизированно реализовать.
Wolfram Language — язык программирования. Поэтому, когда вы пишете на нем, вы занимаетесь программированием. Однако это новый вид программирования. Это такой язык, в котором вы можете максимально непосредственно реализовать вычислительное
Программирование (и соответствующее образование) традиционно заключается в том, чтобы «говорить» компьютеру, что делать. Но благодаря технологиям, встроенным в Wolfram Language, вы можете работать на гораздо более высоком уровне и сосредоточиться на вычислительном
Конечно, в мире необходимо некоторое количество разработчиков программного обеспечения, которые могут писать низкоуровневые программы на языках вроде C++, или Java, или JavaScript, и могут работать с деталями. Но это число очень невелико по сравнению с количеством людей, которые должны быть в состоянии думать вычислительно.
Wolfram Language (особенно в форме Mathematica) широко используется в технических исследованиях и разработках по всему миру уже более четверти века, и с его помощью было сделано огромное количество важных изобретений и открытий. Все эти годы мы постепенно дополняли мое первоначальное видение интегрированного языка, в котором каждая возможная область знаний является встроенной и автоматизированной. И самое интересное заключается в том, что мы на самом деле сделали это для широкого спектра областей — в том числе для всех дисциплин, которые традиционно преподаются в школах.
Семь лет назад мы выпустили Wolfram|Alpha, которую дети (и взрослые) используют для ответов на вопросы. В Wolfram|Alpha в качестве входного сигнала используется повседневный английский язык, а затем производятся сложные вычисления на Wolfram Language с последующей автоматической генерацией страниц результатов. Я думаю, что Wolfram|Alpha — это прекрасная иллюстрация того, что можно делать с помощью Wolfram Language. Правда, речь здесь идет о «быстрых» вопросах, которые могут быть выражены в нескольких словах.
А что насчет более сложных вопросов? Обычного английского языка здесь будет недостаточно Для того, чтобы достичь определенного уровня точности и получить определенные результаты, можно было бы создать очень сложный и непонятный язык. Хорошая новость в том, что есть альтернатива: Wolfram Language, который был создан для того, чтобы с его помощью можно было легко выражать сложные вещи.
Для того, чтобы начать использовать Wolfram|Alpha, не требуется никаких навыков. Но если вы хотите пойти дальше, то нужно научиться формулировать и структурировать. Другими словами, нужно научиться вычислительному
Знакомство с Wolfram Language
На что похоже первое знакомство детей с Wolfram Language? Чтобы понять, как научить вычислительному
Если я занимаюсь с одним ребенком или с небольшой группой, я всегда настаиваю на том, чтобы дети сами вводили данные. Обычно я начинаю с чего-то, что все знают. Например, мы хотим вычислить 2 + 2. Дети вводят это выражение и видят, что, да, компьютер выдает знакомый им результат:
В дальнейшем дети часто будут экспериментировать с некоторыми другими основными арифметическими операциями. Очень важно, что Wolfram Language позволяет им сделать ввод и сразу же увидеть результат.
После этого я обычно предлагаю им попробовать что-то, что в результате выдаст больше цифр:
Часто они спрашивают, нормально ли, что получилось такое длинное число, или это сломался компьютер. Я предлагаю попробовать другие примеры, и дети проводят вычисления, которые мгновенно генерируют многие страницы чисел. Такие большие числа очень впечатляют детей. Я думаю, дело в том, что это позволяет им видеть, что, да, компьютер действительно может вычислять подобное (только подумайте, сколько времени вам понадобится, чтобы получить все эти цифры)…
После того, как они совершили некоторые арифметические действия из числа основных, пришло время попробовать некоторые другие функции. Самая распространенная функция, с которой я обычно начинаю, это Range:
Range — хорошая функция в том смысле, что она несложная, и при этом очень наглядная и позволяет быстро получить ощущение того, что действительно можно заставить компьютер делать то, что хочется. Функция Range хороша также и потому, что ее легко использовать для создания чего-то большого. Часто я предлагаю им попробовать применить эту функцию к [1000]. Потом обычно кто-то спрашивает, можно ли построить диапазон чисел от 1 до 10000. Я предлагаю попробовать и это.
С каждым ребенком или с группой детей я взаимодействую по-разному. Однако чаще всего следующим шагом является визуализация списка, который мы сделали:
Если дети знакомы с математикой, я предлагаю им попробовать получить список состоящий из простых чисел:
А потом — построить график:
Для детей, которые думают, что не любят математику, вместо цифр я использую цвета:
Можно смешать красный и синий цвета, чтобы получился фиолетовый:
Можно использовать текущее изображение с камеры:
И найти все «границы» элементов на нем:
Можно также придумать с цветом кое-что посложнее:
Дальше можно было бы пойти в другом направлении, составив список общеупотребительных слов на английском языке (можно попробовать сделать то же с другим языком):
Если у ребенка есть лингвистические способности, мы могли бы попытаться выбрать некоторые случайные слова:
Можно использовать функцию StringTake, чтобы взять первую букву каждого слова:
Затем с помощью функции WordСloud можно сделать облако из первых букв слов и посмотреть относительную частоту их встречаемости:
Некоторые дети спрашивают: «а как насчет первых двух букв?».
Еще можно поговорить некоторое время о том, сколько слов начинается с «не-» и т.д. Можно пойти дальше и посмотреть на переводы слов:
На самом деле, можно легко нескольких часов просто заниматься всем тем, о чем я говорил до сих пор. Но давайте посмотрим на некоторые другие примеры. Важной особенностью Wolfram Language является то, что в него заложено много реальных данных о мире. Вот пример изготовления коллажа из флагов стран Европы, где размер каждого флага соразмерен текущему населению страны:
Так как мы говорили о цвете, интересно посмотреть, в какой точке цветового пространства находятся флаги (например, не так уж много «розовых стран»):
Wolfram Language позволяет не просто проводить абстрактные вычисления, но вычисления, основанные на реальных знаниях. Он охватывает огромный спектр областей: от традиционных STEM-областей до искусства, истории, музыки, спорта, литературы, географии и так далее. Детям часто нравится делать что-то с картами.
Мы могли бы начать с того места, где мы находимся (функция Here). Или отталкиваться от какого-то ориентира. Вот, например, карта с окружностью радиуса 100 миль вокруг Эйфелевой башни:
Вот еще изображения:
А что насчет истории? Как может Wolfram Language взаимодействовать с этой областью? На самом деле, в Wolfram Language полно исторических знаний. О странах (
), или кино (
), или, например, о словах.
Вот, к примеру, сравнение использования слов «лошадь» и «автомобиль» в книгах за последние 300 лет:
Попробуйте сделать то же самое для названий стран, или изобретений, или чего угодно другого.
Можно пойти дальше по одному из множества направлений. Вот одно из них: символьная графика. Давайте сделаем шар:
Детям всегда интересно сделать что-то подобное в 3D и повертеть. Можно также создавать 3D-графики, — например, как этот, состоящий из 100 сфер раскрашенных в случайные цвета:
Детям всех возрастов нравится создавать интерактивный материал. Вот простой «глаз циклопа», который можно легко поэтапно построить:
Иногда с помощью Wolfram Language я создаю мелодии. Вот случайная последовательность из музыкальных нот:
Есть много интересных направлений. Для начинающего врача есть анатомия в 3D — вы можете взять геометрию кости и напечатать ее в 3D. И так далее.
А что насчет…
Я бы никогда не стал всерьез пытаться работать с детьми (хотя у меня четверо своих) до начала моих занятий вычислительным
С детьми работать приятно хотя бы потому, что, если вы дадите им шанс, они очень быстро дадут вам понять, как именно с ними нужно взаимодействовать. Так что же происходило дальше? Ни одна из потенциальных проблем не стала реальной. Но причины этого весьма интересны.
Что касается ввода кода, необходимо понять одну вещь: в современном мире большинство детей среднего школьного возраста привыкло к использованию клавиатуры. Иногда, когда они начинают набирать код, им приходится сначала посмотреть, где находятся клавиши [ ] или +. Но никаких фундаментальных проблем с вводом у них нет. Кроме того, они вполне привыкли к изучению точных правил («i идет перед e ...» в английской орфографии; порядок операций в математике, и т.д.). Таким образом, запоминание нескольких правил вроде "в функциях используются квадратные скобки" или "имена функций начинаются с заглавной буквы" не составляет большого труда. И, конечно, в Wolfram Language нет всех тех исключений из правил, которые существуют в естественном языке.
Я увидел, что автоматические подсказки (элементы становятся красными, если они находятся в неправильном месте, предлагаются различные автодополнения, и т.д.) очень важны для детей, набирающих код. Суть в том, что, несмотря на теоретические опасения взрослых, реальным детям, кажется, легко дается набор синтаксически правильного кода в Wolfram Language. На самом деле, я был поражен тем, как быстро многие дети «схватывают» его. Увидев лишь несколько примеров, они сразу же начинали обобщать. А главное заключается в том, что, поскольку Wolfram Language разработан очень последовательно, придуманные ими обобщения на самом деле работают. Для меня, как для создателя языка, это трогательный момент.
ОК, дети могут вводить код Wolfram Language. Но чего они хотят? Многим детям нравится играть в игры на компьютере, и взрослые часто думают, что им понравится создавать их. Однако, по моим наблюдениям, это не так. Для большинства детей самым главным в Wolfram Language является то, что они могут сразу сделать с его помощью что-то реальное. Они могут ввести код, и компьютер сразу же сделает то, что они хотят. Они могут создавать изображения, звуки или тексты. Они могут заниматься искусством. Они могут заниматься наукой. Они могут исследовать языки. Они могут анализировать покемонов (да, в Wolfram Language встроены большие данные о покемонах). И, если они действительно хотят, они могут делать игры.
Если вы спросите детей о том, что им может быть интересно в программировании, до того, как они познакомились с Wolfram Language, чаще всего ответом будет «игры». Но как только они узнают о возможностях Wolfram Language, они перестают говорить об играх и хотят делать вместо этого что-то «реальное».
Основы
Несмотря на свою тридцатилетнюю историю, Wolfram Language только недавно достиг такого уровня, при котором можно быстро и убедительно продемонстрировать детям, что представляет из себя вычислительное
Концепция документов Wolfram, которую мы изобрели почти 30 лет назад, — это хороший способ взаимодействия с языком как для детей, так и для взрослых. Документ Wolfram — это прежде всего интерактивный документ, который свободно смешивает коды, результаты, графику, текст и все остальное. Можно проводить вычисления, набирать код и получать результаты прямо в документе. Результаты могут быть динамическими с собственными автоматически сгенерированными пользовательскими интерфейсами. И записывать и читать пояснения или инструкции можно непосредственно в документе. На то, чтобы довести до ума документы, потребовалось несколько десятилетий. Зато теперь у нас есть чрезвычайно эффективная среда, в которой удобно работать и думать (и, конечно, изучать вычислительное
В течение многих лет документы и Wolfram Language были доступны только в качестве настольного программного обеспечения. Теперь они также стали доступны в облаке прямо с вашего мобильного устройства. Это значит, что любой ребенок может просто открыть браузер и сразу же начать взаимодействовать с Wolfram Language, создавая или редактируя любой документ или код.
Чтобы сделать это возможным, требуется большой стек технологий. Чтобы построить его, потребовалось много лет моей жизни. Было очень приятно наблюдать, как на протяжении многих лет с помощью наших технологий создавались самые замечательные вещи. И я очень рад, что с его помощью становится возможным распространение вычислительного
Когда мы создали Wolfram|Alpha, я принял решение сделать ее бесплатной в Интернете по всему миру. И было здорово видеть, что множество людей (и особенно детей) пользуются ею ежедневно. Когда технология была готова, я решил также предоставить свободный доступ ко всему Wolfram Language в нашем Wolfram Open Cloud и настроить его таким образом, чтобы дети (и взрослые) могли бы обучаться там вычислительному
Wolfram|Alpha настроена таким образом, что любой желающий может задавать ей вопросы на разговорном английском языке. Это хороший способ поддержки образования. Однако если вы захотите углубиться в изучение вычислительного
Так с чего же начать взаимодействие с Wolfram Language? Вероятно, существует много ответов на этот вопрос, которые, помимо всего прочего, зависят от особенностей окружающей среды и ресурсов, которые доступны разным детям. Хочется верить, что лично я неплохо поработал с детьми в нашем летнем лагере Wolfram для старшеклассников: я видел очень неплохие результаты, полученные благодаря личному наставничеству над каждым ребенком.
Важно также иметь решения для «самообслуживания». Мой вклад в это — книга (см. статью на Хабре), которая называется Элементарное введение в язык Wolfram Language. Это книга о вычислительном
Книга доступна в Интернете бесплатно. Там также есть упражнения. Я первоначально намеревался написать книгу для средней школы и выше. Закончилось все тем, что пришло довольно много учеников средней школы (от 11 и старше), которые с энтузиазмом занимались по ней.
Скоро будет доступен бесплатный онлайн курс, основанный на моей книге, и еще довольно много курсов находятся в стадии разработки.
Ну хорошо. Когда ребенок открывает браузер, чтобы изучать вычислительное
У Wolfram Programming Lab есть две основные ветви. Первая представляет собой набор Explorations, каждый из которых представляет собой документ с кодом, который вы можете редактировать и запускать. Затем документ предлагает варианты, куда двигаться дальше, чтобы самостоятельно заниматься исследованиями.
Explorations позволяют почувствовать вкус к Wolfram Language и вычислительному
Но у Wolfram Programming Lab есть и вторая ветвь: интерактивная версия моей книги, которая позволяет людям двигаться шаг за шагом, начиная с очень простого и постепенно создавая все более и более сложный код.
Вы можете использовать Wolfram Programming Lab в полном объеме как через браузер, так и через облако. Однако есть и версия для стационарных ПК, которая работает на любом стандартном компьютере. Если у вас есть Raspberry Pi, значит, у вас уже есть и настольная версия Wolfram Programming Lab, которая поставляется в комплекте прямо с операционной системой, в том числе — специальные функции для получения данных от датчиков, подключенных к Raspberry Pi.
Мне хотелось убедиться, что Wolfram Programming Lab подходит для любого ребенка в любой точке земного шара независимо от того, включен ли он в образовательную среду. Что точно идет детям на пользу, так это доступ к людям, с которыми они могут совместно работать над чем-то. Мы планируем создать структуру для поддержки этого, включающую в себя, помимо всего прочего, сообщество Wolfram. Wolfram Programming Lab может легко вписаться в существующую образовательную структуру (не в последнюю очередь с помощью Wolfram Language) для создания аналитической системы, предназначенной для анализа успеваемости.
Стоит отметить, что одной из важных особенностей инфраструктуры Wolfram Cloud является то, что она позволяет всем (студентам и преподавателям) публиковать результаты своих исследований в интернете.
Мы находимся еще в самом начале развития Wolfram Programming Lab и продолжаем работать над ее усовершенствованием. Некоторое время назад мне довелось разговаривать с детьми в школе в Корее, и я спросил, считают ли они, что они смогут выучить Wolfram Language. Один ребенок ответил, что единственная сложность заключается в том, чтобы читать названия функций на английском языке.
Это заставило меня задуматься. И в результате мы ввели подписи к коду на различных языках. Вы по-прежнему вводите код Wolfram Language с использованием стандартных имен функций, но при этом получаете мгновенное объяснение в вашем родном языке (кстати, некоторые версии моей книги будут доступны на разных языках).
Куда может вписаться вычислительное мышление?
Итак, я немного рассказал о преподавании вычислительного
Можно подумать, что вычислительное
Одним из способов достижения этого является пересмотр того, что представляет собой «математическое» образование (что и было достигнуто в рамках инициативы Сomputer Based Math). Другой подход предполагает вставить вычислительное
Раньше для изучения низкоуровневых компьютерных языков вроде C ++ и Java вы действительно должны были мыслить как инженер. С Wolfram Language совсем другая история. Конечно, для того, кто хочет знать язык хорошо, нужно узнавать многие вещи. Однако изучать при этом нужно общее вычислительное
Так как же вычислительное
Как это может быть? Суть в том, что вычислительное
Вот история многолетней давности, когда Wolfram Language — в виде Mathematica — впервые использовался для обучения вычислениям. Очень часто студенты испытывают трудности с пониманием понятий и функций. И вот профессора сказали мне, что они стали замечать, что, когда студенты узнавали о возможности проводить вычисления посредством системы Mathematica, никого из студентов функции не смутили. А причина заключается том, что они узнали об этих функциях посредством компьютерного
В частности, в последние десятилетия в выпускаемых учебниках практически по любому предмету наблюдалась тенденция объяснять что-либо формально; в результате объяснения приходилось искать в публикациях. Но, так или иначе, с появлением MathWorld и Wikipedia более прямой стиль подачи информации стал обычным явлением, и у сегодняшних студентов принимается как нечто само собой разумеющееся. Для меня применение вычислительного
Представьте, что вы говорите о разных языковых семьях. Вы можете просто взять некоторые слова и использовать WordTranslation, чтобы перевести их на сотню других языков. Можно сделать дендрограмму, чтобы показать, как формы этих слов кластеризуются в разных языках, и вы можете открыть для себя языки индоевропейской семьи.
Вы могли бы говорить о стилях в искусстве (см. перевод на Хабре "Пропорции в искусстве. Есть ли что-то лучше золотого сечения? Исследование более 1 000 000 старых и современных картин") и использовать множество изображений известных картин, которые встроены в Wolfram Language. Тогда вы могли бы сравнить использование цветов в различных картинах, и, возможно, нарисовать график, демонстрирующий изменение цветовой палитры с течением времени и с появлением новых стилей.
Вы могли бы рассказывать об экономике разных стран, а могли бы сразу же создавать свои собственные инфографики, чтобы увидеть, как лучше всего представить важный материал. Вы могли бы говорить об истории, а могли бы использовать данные исторических карт в Wolfram Language для сравнения завоеваний Александра Македонского и Юлия Цезаря. Или вы могли бы сделать графики для каждого из президентов США с указанием состава администрации для каждого из них, и сравнить их посредством экономических или культурных показателей.
Или, к примеру, вы изучаете грамматику английского языка. Wolfram Language поможет вам в этом, автоматически составляя схемы предложений. Также вы можете позволить студентам попробовать использовать свои собственные правила для генерации предложений. А что насчет правописания? Может ли вычислительное
Можно провести интересное упражнение: проанализировать различные части стандартного учебного плана для различных предметов и задать себе вопрос: «можно ли упростить процесс обучения путем применения вычислительного
Со временем перечень подобного рода примеров будет становиться все больше и больше. В прошлом с математикой результаты были довольно разочаровывающими: работающих примеров было немного. Конечно, существуют понятия вроде экспоненциального роста, которые появляются в куче мест, но со временем каждый понимает, что примеры в книгах о вычислениях не меняются с 1700-х гг. И в случае с программированием картина не намного лучше: последовательность Фибоначчи много где можно обнаружить. Но с программированием на основе знаний в Wolfram Language картина складывается совершенно иная, поскольку язык непосредственно подключается к данным и вычислениям, которые имеют отношение к сути каждого направления.
Как должно быть организовано преподавание вычислительного
Какие же нужны вложения, чтобы студенты могли заниматься вычислительным
Стоит отметить, что вычислительное
Что дети могут делать?
Каждый день множество ученых и технологов используют Wolfram Language для сложных вычислений. А теперь и дети легко могут воспользоваться Wolfram Language. И я не говорю о какой-то упрощенной игрушечной версии. Я говорю о том же самом Wolfram Language, который используют профессионалы (и, да, так же, как и с английским языком, в котором есть неясные слова, которые дети обычно не используют, есть также неясные функции в Wolfram Language, которые дети также обычно не используют).
Но почему это стало возможным? Благодаря автоматизации, которую мы создавали в течение последних тридцати лет. Моя цель состоит в том, чтобы автоматизировать как можно больше всего, чтобы люди, которые используют Wolfram Language (являются ли они профессионалами или учениками средней школы) ставили бы задачу с помощью вычислительного
В прошлом для детей и для профессионалов всегда создавались отдельные системы. Но благодаря автоматизации они слились в одну. В других областях это произошло раньше: например, в редактировании видео. Там, где раньше существовали простые системы для любителей, и сложные — для профессионалов, теперь существуют единые системы для всех: от детей до создателей самых дорогих фильмов в мире.
Вероятно, добиться этого в сферах вычислительного
В соответствии с многими стандартными предметами учебного плана, по которому дети учатся в школе, то, что они могут делать, — это только бледные тени того, что делают профессионалы. Но когда речь идет о вычислительном
Дети тратят много усилий, чтобы в результате получить один ответ по математике или, к примеру, по химии. Если дети пишут эссе, они должны записать каждое слово. Но с вычислительным
Студент может иметь некоторое представление о росте и упадке империй прошлого, и, возможно, понимает, как сформулировать идею с точки зрения временных рядов географических зон не существующих ныне стран. И, как только он оформляет эту идею на языке Wolfram Language, он становится обладателем сложных таблиц и инфографики и чего угодно еще, посредством которых он может затем делать выводы.
Чему же научатся дети, описывая что-либо на языке Wolfram? В первую очередь — вычислительному
Когда у студентов возникают проблемы в математике, или химии, или в чем угодно еще, единственный способ определить, есть ли у них правильный ответ, это «посмотреть его в книге». Но с Wolfram Language происходит совсем другая история. Потому что дети сами могут сказать, находятся ли они на правильном пути.
Весь процесс создания кода немного отличается от всего того, что дети обычно делают. Сначала код разрабатывают, а затем отлаживают. Отладка — очень интересное интеллектуальное упражнение. Так как Wolfram Language — символьный язык, любой фрагмент его кода может работать сам по себе.
Но отладка — это, в конечном счете — о понимании и решении проблем. Что действительно классно в Wolfram Language, так это мгновенная обратная связь. Вы изменили что-то: помогло? Или нужно снова углубиться в код, чтобы выяснить что-то еще?
Часть отладки состоит только в получении куска кода, необходимого для создания чего-то. Но другая часть состоит в понимании того, правильную ли вещь вы создали. К примеру, почему в пьесах Шекспира существует множество персонажей, которые, кажется, ни с кем не контактируют? Давайте разберемся, как мы определяем термин «контакт». Действительно ли это имеет смысл? Есть ли определение получше?
Вычислительное
Во главе с детьми
Когда я демонстрирую детям примеры вычислительного
Большинство предметов, которые преподаются в школе, довольно жестко ограничены. Несмотря на то, что вопросы задавать можно, они больше напоминают «техподдержку»: помогите мне понять эту существующую функцию. Они не похожи на «давайте поговорим о чем-то новом». Несколько раз я проводил с детьми сессии, на которых они спрашивали меня о чем-нибудь. Интересный опыт. Кто-то обязательно задаст вопрос, на который можно легко ответить на языке физики уровня колледжа. Для ответа на другой могут потребоваться знания уровня выпускника. А потом будет задан вопрос, на который, я знаю, непросто ответить даже с помощью новейших исследований. Или, может быть, тот, на который я знаю ответ, но только потому, что только в прошлом месяце мне довелось поговорить об этом с мировым экспертом, который и сам недавно разобрался в этом вопросе. До того, как я применил этот формат «спросите меня о чем-нибудь», я не знал, как это тяжело, когда дети свободно задают вопросы. Зато теперь я понимаю, почему у большинства учителей нет иного выбора, кроме как сделать традиционные школьные предметы гораздо более жестко ограниченными.
Однако с помощью Wolfram Language как инструмента можно сделать много нового. Потому что с Wolfram Language учитель и не должен знать весь ответ на вопрос: он просто должен быть в состоянии сформулировать вопрос вычислительно, а Wolfram Language поможет вычислить ответ. Конечно, чтобы писать код на Wolfram Language, учителю нужно овладеть определенными навыками. Но это действительно интересно и полезно — вместе получать ответы на вопросы.
Я часто делал то, что можно назвать «живыми экспериментами». Я беру какую-то тему (либо ту, что предложила аудитория, либо ту, которая только что пришла мне в голову), — и затем я изучаю эту тему в режиме реального времени с помощью Wolfram Language, и смотрю, что я могу узнать о ней. С каждым годом это становится все проще, поскольку возможности и уровень автоматизации в Wolfram Language растут. И именно живым экспериментом мы открываем нашу летнюю школу Wolfram. В течение примерно часа мы создаем документ, который может стать заделом для статьи. Это довольно нервное занятие. Но почти всегда это хорошо работает. Большинство людей не понимает: всего за час можно с нуля сделать открытие, достойное публикации. Wolfram Language делает это возможным. Понятно, что я всю жизнь нарабатываю опыт в области вычислительного
Когда я был ребенком, мне никогда не нравились упражнения из учебников. Я всегда думал, что не слишком интересно делать то, что было сделано множеством людей до меня. И поэтому я всегда старался думать о различных вещах, в которых я мог бы увидеть нечто, чего прежде не видел никто. Сейчас, когда у нас есть Wolfram Language, это стало гораздо проще. Не у каждого ребенка мотивационная структура такая же, какая была у меня. Но многие люди получают удовлетворение от того, что они в состоянии сделать нечто свое, а не просто повторить многократно сделанное до них. С помощью Wolfram Cloud можно легко поделиться тем, что вы сделали, и, например, создать собственный сайт или приложение, которое можно показать — друзьям или целому миру.
Так где же есть такие открытия, которые могут быть сделаны детьми? Везде! Даже в такой хорошо развитой области, как математика, существует бесконечное поле для экспериментов, где могут быть сделаны открытия. В науке есть небольшое дополнительное препятствие: необходимость работать с фактическими данными. Конечно, много данных встроено прямо в Wolfram Language. И получить больше данных стало проще, чем когда-либо. Может быть, кто-то использует камеру или микрофон, или датчики, подключенные через Raspberry Pi или Arduino, или что угодно еще.
А как насчет гуманитарных областей? Для этого опять необходимы данные. Но, опять-таки, в Wolfram Language встроено множество изображений известных произведений искусства, текстов книг, исторической информации о странах, и так далее. И в современном мире легко найти в интернете подробные данные и импортировать их в Wolfram Language. Удивительно, насколько легко стало в наше время например искать в интернете даже малоизвестные документы многовековой давности (это очень помогло мне в моем хобби — изучении истории).
Вычислительное
И, конечно, даже когда конкретный проект уже делался раньше, в следующий раз результат будет другим. Простой пример: написание кода — творческий процесс, и разные люди будут писать его по-разному. И, если в рамках проекта предполагается работа с визуализацией или пользовательскими интерфейсами, разные люди могут творчески и по-разному подойти к ней.
Творчество — это, конечно, хорошо. Но на практике многое в образовании напоминает производственную линию, когда множество студентов делают одно и то же. У математики есть хорошая особенность: когда люди выполняют упражнения, они получают определенные ответы, которые легко проверить (ну, по крайней мере, вплоть до вопросов эквивалентности алгебраических выражений, для правильного понимания которых необходим весь наш стек математических технологий). При написании эссе у нас, в принципе, нет другого выбора, кроме как отдать их на проверку реальным людям (да, можно сделать что-то посредством обработки естественного языка и машинного обучения, но сутью эссе является все-таки взаимодействие с людьми).
Когда кто-то пишет кусок кода, это, как и написание эссе, творческий акт. Но теперь вы делаете то, что должно быть передано на компьютер. Тогда имеет смысл дать компьютеру прочитать это и оценить. Это по-прежнему нетривиальная задача. Для этого требуются высокие технологии; однако, используя символьный характер Wolfram Language, а также некоторые автоматизированные доказательства и машинное обучение, можно неплохо реализовать это на практике. Например, это позволило нам разместить в Интернете автоматически генерируемые варианты упражнений из моей книги Элементарное введение.
Глядя на конечный код, написанный студентами, можно на каком-то уровне оценить, что происходит. Несмотря на то, что существует бесконечное число возможных программ, можно оценить, какие из них являются правильными, и даже определить, какие из них удовлетворяют определенным критериям эффективности. Но можно пойти гораздо дальше. Потому что в отличие от математики, где студенты обдумывают решение с помощью черновика, в кодировании каждый шаг в процессе написания программы, как правило, делается на компьютере, и каждое нажатие клавиши фиксируется. Я сам уже давно энтузиаст личной аналитики, и время от времени пишу небольшие анализы тех процессов, которые участвуют в написании и отладке программ. Однако для этого в сфере образования есть прекрасные возможности: речь идет, во-первых, о создании образовательной аналитики (для которой Wolfram Language и Wolfram Cloud идеально подходят), а затем для создания путей адаптации к реальному поведению и образовательному процессу каждого студента индивидуально.
В итоге мы хотим получить точную математическую модель каждого учащегося. И с учетом современных технологий машинного обучения, которые есть в Wolfram Language, я думаю, что у нас есть все необходимое для этого. А дальше мы запустили бы моделирование различных ситуаций: например, что произойдет, если студент сказал одно или другое (это нужно, чтобы определить, как именно объяснять материал или какое давать упражнение).
С помощью математики данный вид персонализации довольно легко осуществить с помощью простых эвристик. Когда дело доходит до кодирования и вычислительного
Всегда актуален вопрос о том, как узнать, насколько хорошо некто понял что-то конкретное. С помощью хорошей вычислительной модели для каждого студента можно было бы получить сложный ответ на этот вопрос. Но кое-где по-прежнему придется продумывать различного рода упражнения или тесты.
Одним из основных типов упражнений (которых полно в моей книге элементарное введение) имеют вид «напишите кусок кода, чтобы получилось X». Однако есть и другие. Одно из них — «упростить заданный кусок кода», или: «найти ситуации, в которых эта функция не сработает». Конечно, существуют еще и упражнения вроде «что делает этот кусок кода?». Но в некотором смысле они кажутся глупыми: в конце концов, можно просто запустить код.
Я думаю, что людям может быть полезно сделать что-то «как компьютер». Это способствует пониманию того, что такое вычисления, и как этот процесс вычислений работает. Однако акцент нужно делать на обучении людей тому, что они сами будут делать. Технологии и автоматизация будут только распространяться. Нет смысла обучать людей тому, чтобы они делали работу компьютера; нужно научить их работать с компьютером в качестве инструмента.
Я слышал аргументы, касающиеся обучения детей тому, чтобы выполнять арифметические действия без калькуляторов, в стиле: «что, если бы вы оказались на необитаемом острове без калькулятора?». Теперь я слышу те же рассуждения относительно обучения детей программированию. Но, э-э, если вы оказались на необитаемом острове без компьютера, зачем вам писать код?
Чему же именно нужно учить? Вычислительное
Безусловно, есть факты и идеи, которые стоит знать. Некоторые из них касаются абстрактного процесса вычислений. Некоторые — того, как систематизировать мир вокруг нас. Как определяется цвет? Как определяются точки на Земле? Как можно представить глифы различных человеческих языков? И так далее. Несколько лет назад мы сделали плакат по истории систематического представления данных. Его содержание составило бы полноценный курс.
Основная цель состоит в том, чтобы дойти до точки, в которой вы сможете перевести то, что вас интересует, в вычислительную форму.
Часто речь идет об «изобретении алгоритма». Как сравнить рост Римской империи с распространением монголов? Как это правильно вычислить? Как отобразить? Можно ли сказать, вблизи полюсов Луны действительно есть большие кратеры? Каким образом можно идентифицировать кратер на картинке?
Это аналог таких вещей, которые лежат в основе развития практически во всех областях («вычислительная X»). И есть люди, которые учатся быть успешными в такого рода вещах. В рамках нашей компании многие из проблем уровня «изобрести алгоритм» решаются каждый день, — и это составляет большую часть работы над Wolfram Language и Wolfram|Alpha.
Изобретение алгоритма или эвристики — это, в первую очередь, о понимании того, что мы хотим. Приложив определенные усилия, можно изобрести насколько возможно абстрактные упражнения, но что гораздо более полезно, так это вопросы, связанные с внешним миром.
Ответ на любой вопрос будет зависеть от нашего взгляда на устройство мира. С точки зрения образования хорошо то, что вопросы вычислительного
Что такое вычисления и программирование?
Про обучение написанию кода за последние годы было сказано очень много. Конечно, написание кода — это не то же самое, что вычислительное
В Wolfram Language человек должен быть в состоянии формулировать идеи и преобразовывать их в код. В некоторых простых примерах (которых будет постепенно становиться все больше) можно просто указать желаемое на английском языке. Но обычно все-таки пишут непосредственно на Wolfram Language. А это значит, что на каком-то уровне мы имеем дело с программированием.
Однако это более высокий уровень программирования, чем тот, к которому привыкло большинство программистов. И вот именно поэтому он теперь доступен гораздо более широкому кругу людей, и поэтому имеет смысл вводить его в систему образования.
Но как все это соотносится с обучением «традиционному» программированию? На данный момент существует два типа обучения программированию: то, что можно было бы назвать «уровень старшей школы» и «уровень начальной школы». На сегодняшний день «версия средней школы» — это C ++ и Java. Я был несколько шокирован тем, что даже среди детей, обучающихся в школах с техническим уклоном, очень редко можно найти тех, кто хоть сколько-нибудь серьезно изучал программирование в школе.
Но даже когда дети изучают «программирование», скажем, в средней школе, то что они на самом деле узнают? Обычно речь идет о множестве синтаксических деталей, а также циклах и переменных. Как человек, который большую часть жизни думал о вычислениях, я был разочарован. Безусловно, эти понятия являются частью низкоуровневых языков программирования. Но в том, что мы сейчас в широком смысле понимаем под вычислениями, а также в вычислительном
Что же важно? Вероятно, наиболее важный принцип заключается в том, что все (текст, изображения, сети, пользовательские интерфейсы, и т.д.) может быть представлено в вычислительной форме. Понятия функций и списков также играют важную роль (как и понятие универсального вычисления).
Проблема заключается в том, что то, что преподается в настоящее время, имеет слабое отношение не только к вычислительному
Wolfram Language — действительно язык современности. Его использование не было бы оправдано в 1960-е годы: компьютеры были недостаточно большими и быстрыми, и не существовало ничего похожего на современные облачные системы, предназначенные для поддержания большой базы знаний (хотя на самом деле даже в начале 1960-х гг. были такие языки, как LISP и APL, которые основывались на идеях более высокого уровня, напоминающих Wolfram Language, однако их использование стало возможным только спустя несколько десятилетий).
А что насчет циклов и переменных? Ну, все они существуют и в Wolfram Language. Просто они не являются главными принципами языка. Например, в моей книге Элементарное введение в Wolfram Language я говорил о присвоении значений переменным только с 38 главы, уже после обсуждения развертывания сложных приложений в Интернете.
Например, вы хотите сделать таблицу из первых 10 квадратов чисел. С помощью Wolfram Language это было бы очень просто:
А вот на C, например, это выглядело бы грубо:
Человек, далекий от программирования, может спросить: «какого черта все это нужно?». Но вместо того, чтобы прямо сказать, чего мы хотим, он на низкоуровневом языке говорит компьютеру, что именно он должен делать. Мы говорим ему выделить память для хранения целого значения n. Мы говорим, что начинать необходимо с n = 1, а затем увеличивать n до тех пор, пока он не достигнет значения 10. А затем в каждом конкретном случае мы сообщаем компьютеру, что он должен нарисовать квадрат (справедливости ради отмечу, что в более современных языках вроде Python или JavaScript некоторые из этих особенностей уходят в прошлое, но в этом примере мы до сих пор имеем дело с циклами и переменными).
Далее: важным моментом является то, что циклы и переменные — это просто детали конкретной реализации низкоуровневого языка. Некоторые считают, что детям проще понять, что происходит, когда есть явные циклы и переменные. По моим наблюдениям, это не соответствует действительности. Может быть что-то и изменилось за эти годы, так как люди стали ближе к вычислительным идеям в своей повседневной жизни. Так что сейчас говорить с детьми о деталях циклов и переменных означает только усложнить понимание ими концепции вычислений.
Нужно ли вообще знакомиться с циклами и переменными? Определенно. Они являются частью всей истории вычислений и вычислительного
Одной из важных особенностей Wolfram Language является то, что в нем объединяется большое количество различных вычислительных парадигм: функциональное программирование, процедурное, символьное. И машинное обучение, и так далее. Так что, когда люди знакомятся с Wolfram Language, они сразу же сталкиваются с широким спектром вычислительных идей, которые удобно и последовательно упакованы вместе.
А что происходит, когда человек, который научился программировать на Wolfram Language, хочет заняться низкоуровневым программированием на C++ или Java? Я видел подобное: это было очаровательно. Эти люди не сталкиваются ни с какими сложностями и легко схватывают, как именно нужно кодить на низкоуровневых языках; при этом они постоянно восклицают, что делают странные вещи, и говорят о том, что не работает: «О Боже, мне нужно самостоятельно выделять память!»; или: «ничего себе! Тут есть ограничение на размер целого числа». И так далее.
Переход с Wolfram Language на языки низкого уровня легок. Обратный путь может быть более сложным. Часто бывает так, что легче научить вычислительному
Когда я начал обдумывать идею преподавания вычислительной
А как насчет детей младшего возраста? В современном мире все они пользуются компьютерами или смартфонами и сталкиваются с разного рода вычислительной деятельностью. Может быть, они редактируют видео. Может быть, собирают что-то в игре. И все эти виды деятельности — предшественники вычислительного
Еще в 1960-е годы был начат смелый эксперимент с Logo. Мне сказали, что первоначальная идея состояла в том, чтобы построить 50 «микромиров», где дети могли экспериментировать с помощью компьютера. В начале по экрану перемещалась черепаха, которая в течение полувека превратилась в оранжевого кота. К сожалению, остальные 49 микромиров так и не были построены. И, несмотря на то, что черепаха (или кошка) оказались довольно милыми (и для 1960-х годов впечатляющими), с точки зрения современного понимания и опыта вычислений эта идея выглядит очень узкой.
Тем не менее, многие дети в рамках начальной школы всего 1 час в году изучают этого котика. Раньше в этом был очевидный смысл: показать детям, что они могут управлять компьютером по своему усмотрению. Однако распространение других способов применения детьми вычислений делают это гораздо менее значительным. Так что обучение циклам и переменным в начальной школе в наше время действительно кажется немного странным.
Я подозреваю, что существуют гораздо более эффективные способы обучения идеям вычислительного
И, что еще более важно: вся эта настройка осуществляется силами небольшого количества блоков, по сути дела — микромира. В Wolfram Language есть более 5000 встроенных функций, и превращение их в блоки будет работой не только огромной, но и бесполезной. Смысл в том, чтобы выбрать из всех этих возможных функций несколько (50?) микромиров, каждый из которых включал бы лишь небольшой набор функций, выбранных так, чтобы с ними можно было делать разные интересные вещи.
С помощью наших современных технологий эти микромиры могут легко включать в себя вычисление изображений, или понимание естественного языка, или машинное обучение, — и, что самое главное, могут сразу быть связаны с реальным миром. И я подозреваю, что с помощью включения некоторых изобретений из 1960-ых гг. мы сможем гораздо более полно раскрыть перед детьми основные идеи и принципы вычислительного
Как это все будет происходить?
Процесс воспитания детей в русле вычислительного
Я стараюсь делать все от меня зависящее: я имею в виду мою книгу, а также недавно созданные Wolfram Programming Lab и Wolfram Open Cloud. Но это лишь первые шаги. Необходимо много книг и курсов, ориентированных на различные группы населения. Необходимо определить деятельность онлайн и оффлайн сообществ. Необходимо донести студентам информацию о новых возможностях. И еще нужно обучать преподавателей.
У нас в разработке находится сейчас несколько проектов: готовый курс, основанный на Elementary Introduction; сайт Wolfram Challenges с задачами по кодированию и вычислительному
Но больше всего меня радует тот факт, что другие люди и другие организации также начинают двигаться вперед в этом направлении. Существуют внутришкольные и внешкольные программы, летние программы. В разных странах.
Наша собственные ресурсы довольно невелики. Для обучения человечества вычислительному
Вычислительное
Рано или поздно большая часть населения мира будет иметь возможность взаимодействовать с компьютерами (см. перевод на Хабре "Как говорить с искусственным интеллектом?") с помощью кода так же, как сейчас может читать и писать. Но сейчас мы находимся в самом начале этого пути. Я рад, что вношу свой вклад в развитие технологий. И я с нетерпением жду прогресса в этой области в ближайшие годы.
Попробуйте примеры вычислений из этого блога в Wolfram Open Cloud
Автор: OsipovRoman