зачем нужно уметь программировать
Почему программирование — новая грамотность и зачем учить этому детей
Умение программировать также важно как умение читать. Это требования рынка и нового мира. Разбираем доклад НИУ ВШЭ «Универсальные компетентности и новая грамотность» и рассказываем, зачем и как учить ребенка программированию
Почему программирование стало частью новой грамотности
Навыки компьютерной грамотности помогают любому человеку решать повседневные и профессиональные задачи. Согласно результатам исследования Открытого университета Израиля, программирование стимулирует креативное мышление и формирует умения учиться. Авторы доклада «Универсальные компетентности и новая грамотность» сравнивают развитие компьютерной грамотности с этапами развития грамотности как умения читать, писать и считать.
В истории грамотности выделяют два этапа:
На первом этапе текст становится частью инфраструктуры. Они занимают центральное место в жизни людей. Текст использовался как инструмент создания законов и разработки стратегий. Особенно это касается земельных законов, которые стали оформлять в виде письменных текстов вместо персональных свидетельств.
На втором этапе текст становится неотъемлемой частью повседневной жизни. Благодаря массовым кампаниям по ликвидации неграмотности, начиная с XIX века, большинство людей освоили навыки письма и чтения. Грамотность помогала получить доступ к информации в газетах с описаниями событий, в буклетах с рекомендациями для фермеров и счетах для отслеживания задолженностей. Чем больше людей осваивали навыки чтения и письма, тем более массовой должна была становиться грамотность.
В развитии компьютерной грамотности можно выделить те же этапы, только развитие происходит в течение десятилетий, а не веков.
Сначала компьютеры становятся частью инфраструктуры, когда их использует государство для переписи населения. Университеты, авиакомпании и банковский сектор начали использовать компьютеры c 1950-х годов. Примерно в 1980-х компьютеры стали доступными для большинства людей, а знания о компьютерах начали проникать из областей знаний узких специалистов в жизнь обычных людей. Люди чаще пользовались компьютерами при обращениях в больницы, организации данных о государственном управлении и управлении образованием.
Затем компьютеры становятся частью жизни. Способность написать несложную программу или код постепенно становится базовым навыком. Программирование и вычислительное мышление расширяют возможности и становятся обязательным требованием к любому специалисту — от физика до журналиста. Способность читать и понимать компьютерный код становится более востребованной, поэтому программирование переходит из специального знания в универсальную грамотность. Это грамотность использования современных инструментов общения и работы — компьютеров. И если это аспект грамотности, то развивать его нужно с детства.
Как программирование учит решать задачи
Программирование развивает вычислительное мышление. Это набор приемов для решения задач в компьютерных науках, но применимых в любых сферах. Например, вычислительная наука помогает в образовании. Специальная платформа собирает данные об активностях студентах. С помощью данных преподаватель отслеживает неэффективные задания, чтобы составить новую учебную программу.
Вычислительное мышление учит формулировать проблему, искать решение и анализировать его. Программирование — часть вычислительного мышления и самый эффективный способ его освоить. Например, перед программированием мы анализируем и разбиваем задачу на подзадачи. Программирование конкретизирует вычислительное мышление и может стать инструментом получения знаний.
Зачем учить детей программированию
Идеолог конструктивизма в педагогике Жан Пиаже предложил такую идею: дети учатся быстрее, когда сами формируют свои представления об увиденном и делают собственные заключения, а не когда им говорят, как они должны воспринимать мир. Дети оказываются не пассивными получателями знаний, а наоборот, сами их конструируют.
Программист и один из основоположников теории искусственного интеллекта Сеймур Пейперт добавил: эффективное обучение происходит, когда ученик создает значимый для него объект, будь то песочный замок или теория. Конструкционизм объединяет два типа конструирования: дети конструируют вещи в реальном мире и конструируют новые идеи в своей голове. Два типа конструирования создают непрерывную спираль обучения: когда у ребенка появляются новые идеи, он конструирует новые вещи в реальном мире. Программирование помогает детям воплотить эти идеи в жизнь.
Через программирование ребенок развивает вычислительное мышление. Вычислительное мышление помогает детям развивать навыки решения задач, креативное мышление, умение учиться и навыки совместной работы.
Программирование и вычислительное мышление помогают детям учиться сетевым взаимоотношениям: общаться в чатах, видеоконференциях, соцсетях. Решая сложные задачи, дети используют четыре основных компонента вычислительного мышления: декомпозицию, выделение паттернов, автоматизацию и абстрагирование.
Обучать детей программированию нужно не для того, чтобы они в будущем стали программистами. Задача программирования — подготовить детей к вычислительному мышлению, которое поможет им уверенно справляться с комплексными задачами XXI века, которые не имеют однозначного решения.
Дети смогут применять «вычислительные» подходы в разных контекстах и дисциплинах. Если ребенок научился раскладывать большую задачу на маленькие фрагменты, находить сходства в разных элементах, выявлять и устранять незначимые детали, выстраивать фрагменты в единый алгоритм для получения результата, он сможет решить задачи в любой дисциплине.
Митч Резник, руководитель исследовательской группы, которая разработала язык программирования Scratch, уверен, что креативность можно поддерживать, подпитывать и стимулировать.
За компьютером дети потребляют информацию, играют в игры и только малую часть времени придумывают и создают что-то свое. Тенденция начала меняться с распространением инструментов программирования для детей, например Scratch, Alice или Kodu. С помощью таких инструментов дети учатся создавать игры, анимацию, истории и художественные элементы. Программирование помогает поддерживать и стимулировать креативность, открывает источники вдохновения, чтобы выражать свои идеи и раскрывать личность.
Обучаясь программированию, дети учатся мыслить по-новому. Если написанная программа не работает или работает не так, как ожидал ребенок, ему приходится разбираться и придумывать решение задачи. Ребенок начинает понимать новые идеи и учится учиться.
По сравнению с другими видами учебной деятельности программирование — более щадящий и мягкий процесс. Работа с кодом помогает учиться на своих ошибках и не вызывает дискомфорта, если дети их совершают. Например, ребенок может отменить команду, чтобы исправить ошибку в коде, внести правки и попробовать что-то новое. Благодаря программированию дети перестают бояться ошибок. Вот что рассказывала мать девочки, которая работала на Scratch:
«Она набралась храбрости и больше не боится пробовать новые вещи. Даже если первая попытка оканчивается неудачей, дочка воспринимает ее не как “конец игры”, а как напоминание, что стоит попробовать другой путь, что в нужное место можно идти разными маршрутами и что не бывает маршрутов “правильных” и “неправильных” как таковых»
Ребенок начинает ценить обучение программированию, когда выражает себя через продукт, который может показать другим. Такой подход обозначают понятием «вычислительное участие» (computational participation).
Профессора Кафаи и Берк описали вычислительное участие в книге «Связанный код: почему детям нужно учиться программированию». Они считают, что вычислительное участие — это решение задач и разработка интуитивно понятных систем с другими и для других. Изучение культурной и социальной природы поведения человека с применением понятий, практик и подходов компьютерных наук. Например, работа в группах и использование кодов других людей.
Благодаря совместному программированию, в школе можно создать среду, основанную на сотрудничестве. Запрограммированные игры или истории, которые создает ребенок, могут связывать разных детей друг с другом.
В традиционном классе учитель дает задания, а ученики их решают. Если у детей есть внутренняя мотивация к учебе, такой подход будет работать, но не для всех. При этом у детей почти не остается времени и ресурсов для самовыражения. Вычислительное участие помогает решить эту проблему за счет персонализации и опоры на внутреннюю мотивацию.
Персонализация. В программировании дети персонализируют проекты, «добавляя в них самих себя». Например, в программе Scratch можно добавить свою фотографию и запись голоса. Персонализация вовлекает в обучение, делает его более интересным и мотивирующим.
Опора на внутреннюю мотивацию и интересы. Через программирование можно задействовать внутреннюю мотивацию ребенка, а не использовать систему внешних вознаграждений. Например, Scratch выбирает отдельные проекты для показа на главной странице, вместо прямого вознаграждения в виде очков, баллов или звездочек. Дети радуются, когда выбирают именно их проект. Идея такого подхода в том, чтобы мотивировать других, подсказывая им новые идеи. В профиле пользователя не говорят, сколько раз его проекты оказывались на главной странице, а лишь над сколькими проектами ребенок работал.
Обычный результат программирования — это проект. Ребенок сразу видит: работает или не работает программа. Если не работает, он старается понять, что нужно узнать для завершения проекта. Ученик мотивирован, ему интересно искать ответы на вопросы, на которые и учитель не знает ответа, но точно может помочь их найти.
Как учить детей программированию
Согласно исследованию по развитию компьютерного мышления, формальная обстановка развивает систематическое мышление и подходы, а неформальная помогает детям развивать мотивацию и определить сферу интересов. Идеальная обстановка должна совмещать то и другое. Распространение технологий размывает границы между формальным и неформальным образованием. Учителю больше не нужно «пропускать через себя» все образовательные программы — ученики сами выстраивают новые связи с миром.
Профессора Кафай и Берк создали две среды обучения, чтобы оценить различия между структурированным обучением и внеучебной средой. В каждой из них, ученики создавали цифровые истории с одним и тем же преподавателем на протяжении десяти недель.
Согласно результатам исследования, во внеучебной среде меньше детей закончили свои проекты, но сделали их сложнее и больше. Ученики в клубе использовали больше креативных навыков программирования и вдвое активнее сотрудничали со своими сверстниками. При этом для тех, кто только знакомится с программированием, структурированное занятие будет более эффективным.
Авторы доклада «Универсальные компетентности и новая грамотность» предлагают дополнять занятия в классе мейкингом, мероприятиями по программированию и походами в технопарки.
Мейкинг. Педагоги объединяют детей на внеклассных мероприятиях для создания физических или цифровых проектов — мейкинга. Создание реального продукта дает ученикам стимул учиться, возможность применить знания на практике и понять, что еще нужно освоить.
На базе философии мейкинга можно создавать школы. Например, в 2011 году в Сан-Франциско открыли школу Brightworks для детей от 5 до 15 лет. Для обучения детей там используют полностью проектно-ориентированный подход. На уроках ученики делают проекты, например строят «Детский город».
По всему миру создают клубы программирования для детей. Они основаны на движении CoderDojo, которое поощряет сообщества создавать лагеря программирования свободного доступа — додзё. Например, в России работают два международных бесплатных клуба под руководством волонтеров CoderDojo и Code Club.
Мероприятия по программированию. На таких мероприятиях участникам дают материалы, чтобы самим провести занятия по программированию. Учителю, родителю или ребенку остается собрать других детей вместе и начать учиться. Например, некоммерческая организация Code.org проводит три популярных международных мероприятия, посвященных программированию — Час кода (Hour of Code), Неделя кода в Европе (Code Week EU) и конкурс по информатике «Бобер» (Bebras Challenge).
Час кода — часовая учебная программа, разработанная для всех возрастов на более чем 45 языках. Час кода проводят в 180 странах.
Неделя кода — двухнедельные мероприятия для детей, организованные волонтерами по всему миру. Неделю кода проводят в 50 странах. В 2016 году в Европе приняли участие почти 1 млн человек.
Конкурс «Бобер» проводят каждый год в 38 странах для детей от 8 до 19 лет. По условиям конкурса, каждому участнику дают 45 мин на выполнение 18 заданий в области информационных технологий. Организаторы не требуют специальных навыков программирования, поэтому с заданиями может справиться каждый. Конкурс проводят на базе школ при поддержке учителей. Победители получают сертификаты и призы.
Детские технопарки. Это образовательные площадки для школьников. В технопарках устанавливают высокотехнологичное оборудование, чтобы мотивировать детей учиться проектированию и компьютерным технологиям.
Например, «Кванториум» — сеть детских технопарков в России. Сейчас работают 24 технопарка в 19 регионах страны.
Зачем учить детей программированию
Больше информации и новостей о трендах образования в нашем Telegram-канале. Подписывайтесь.
Должны ли все изучать программирование?
Предлагаю вашему вниманию перевод статьи «Should Everybody Learn to Code?», которая показалась мне интересной.
Чтобы проверить, смогут ли профессиональные графические дизайнеры написать простейшую компьютерную программу, Брайан Дорн, в то время студент магистратуры в Технологическом институте Джорджии (Georgia Tech), попросил их прочесть и изменить фрагмент программного кода. Дорн хотел понять, смогут ли они сами разобраться – как автоматизировать работу в Adobe Photoshop. Дизайнеры стали искать информацию в Интернете и, к сожалению, во многих случаях вводили неверные поисковые запросы: например, пытались разобраться с Java, когда на самом деле им был нужен JavaScript для этого конкретного проекта.
Это могло быть связано с «отсутствием общего базового понимания компьютерных и программных структур», писал Дорн в журнале Communications в мае 2011 года.
По мнению его научного руководителя, профессора и директора программы Контекстуализированной поддержки в обучении в Школе интерактивной обработки данных Georgia Tech Марка Гуздайла, результаты этого эксперимента показывают, что «есть много людей, которым нужны знания в компьютерных науках… и которые будут использовать их в жизни, но они никогда не изучали эту дисциплину, и их самообучение проходит неэффективно, что приводит к потере времени и мотивации».
Все специалисты, имеющие дело с анализом и обработкой информации, или «занимающиеся работой, для которой необходимо высшее образование», должны знать, как читать код, который может им пригодиться, и уметь его адаптировать.
Многие уважаемые деятели от бывшего президента США Билла Клинтона до создателя Facebook Марка Цукерберга и физика и космолога Стивена Хокинга публично заявляли о том, что базовые навыки программирования необходимы всем в современном мире. «Умение программировать стало четвертой составляющей грамотности. Каждый должен знать, как наш цифровой мир работает, не только инженеры» – считает Марк Серман, исполнительный директор Mozilla Foundation. Его цитаты, отстаивающие эту позицию, как и похожие цитаты многих других знаменитостей, есть на сайте инициативы code.org.
Согласно прогнозам Бюро трудовой статистики США, рост спроса на ИТ-специалистов и профессионалов с техническим образованием составит 34% к 2019 году. Многие специалисты уже в той или иной степени связаны с программированием. Гуздайл приводит данные исследования Университета Карнеги-Меллон 2005 года, которое предсказывало, что в 2012 году из 90 млн. работающего населения в США более 55 млн. будут использовать электронные таблицы и базы данных, что можно считать элементарным программированием.
Исследование Университета Карнеги-Меллон также показывает, что многие люди занимаются программированием, не осознавая того: например, создавая макросы в электронных таблицах или делая запросы в базах данных c использованием SQL. «Итак, многие специалисты будут иметь дело с программированием» — говорит Гуздайл, — «и данные наших исследований о том, как люди учатся программировать, и об их типичных ошибках, показывают, что базовые знания компьютерных наук были бы им очень полезны для дальнейшего самообразования».
Многие из тех, кто избегал курсов по естественнонаучным дисциплинам и математике в колледже сейчас испытывают большие трудности при самостоятельном изучении программирования, говорит он. «На сколько больше людей использовали бы программирование в своей работе, если бы мы им немного помогли? Вот интересный вопрос».
Что вам надо изучить
Каждый должен освоить «computational thinking» (1) – так считает Жанетт Винг, корпоративный вице-президент Microsoft Research и в прошлом – профессор компьютерных наук в Университете Карнеги-Меллон. «Computational thinking» помогает людям мыслить абстрактно и разделять задачу на небольшие части. Программирование – это один из способов научиться этому навыку, считает Винг.
«Это не значит, что каждый должен освоить какой-то язык программирования, как Python или C++, хотя многие ставят знак равенства между программированием и набором кода,» – говорит Винг. Напротив, стоит сконцентрироваться на изучении навыка решения задач в компьютерных науках, аналогично тому, как мы учимся решать математические и инженерные задачи. Написание программы – это способ явно выразить действия, которые человек или машина могут выполнить. «Более фундаментальный навык, связанный с критическим мышлением, – это computational thinking, необходимый для того, чтобы понять, какой код требуется написать».
Другая точка зрения
Совсем иначе смотрит на вопрос изучения программирования разработчик ПО Чейз Фелкер, автор статьи в журнале Slate «Возможно, не все должны учиться программировать». «Если честно, одна мысль о том, что можно научиться программировать за год вызывает у меня содрогание: я был бы в ужасе, если бы для меня писал программы кто-то, кто закончил всего несколько классов. Не потому что он (к сожалению, большинство программистов – мужчины) изучил что-то не так, но потому что слишком многого он еще не знает».
Признавая, что некоторые его коллеги успешно изучили программирование самостоятельно, и что для изучения программирования необязательно учиться в университете, Фелкер считает, что людям требуется нечто большее, чем просто запоминание основ, им необходимо развить определенный тип мышления.
«Если вы не мечтаете стать программистом – и значит не готовы посвятить много времени его изучению, не важно самостоятельному или в учебном заведении – я не понимаю, зачем вам учиться писать код». – пишет Фелкер. «Да, это интересное занятие, в основе которого лежит умение решать задачи, и элегантные решения этих задач, которые со временем начинают у вас рождаться, принесут вам много удовольствия». Тем не менее, Фелкер считает, что все, кто изучают программирование поверхностно, вряд ли смогут применять эти знания в жизни.
В ответ на заявление мэра Нью-Йорка Майкла Блумберга в 2012 году, что он начнет изучать программирование, программист Джефф Этвуд, автор блога Code Horror, задает вопрос: «… можете ли вы мне объяснить, почему Майкл Блумберг стал бы более эффективен в своей повседневной работе по управлению самым большим городом в США, если бы он проснулся однажды утром первоклассным Java-разработчиком?». Программирование важно, соглашается Этвуд, однако и многие другие навыки важны. «Я бы не советовал всем изучать программирование больше, чем, например, слесарное или водопроводное дело».
Движение «каждый должен учиться программировать» неверно по нескольким причинам, по мнению Этвуда. Оно базируется на предположении о том, что «чем больше кода в нашей жизни, тем лучше». Код становится самоцелью, таким образом метод ставится выше задачи.
«Общество и правительство получили бы больше пользы от базового понимания того, как работают компьютеры и Интернет… Умение пользоваться Интернетом становится основополагающим навыком, и мы сначала должны позаботиться о таких элементарных вещах, прежде чем придем к гораздо более сложному программированию».
Гуздайл ожидает, что со стороны программистов может быть сопротивление его идеям. «Я не предлагаю всем писать код профессионально. Я бы хотел, чтобы каждый заканчивал университет, будучи способным написать 10 строчек кода, которые нужны именно им». Смысл обучения программированию в высшем образовании – научить студентов определенному уровню компьютерной грамотности, включая способность мыслить в терминах кода и понимать, чем код может быть полезен.
Компьютерные науки в образовании
Специалисты в сфере компьютерных наук считают, что США уже слишком долго откладывают ввод базового образования по дисциплине в среднем образовании. «Многие страны разработали и внедрили национальные программы по обучению компьютерным наукам в школах, чтобы лучше подготовить учеников к новой глобальной экономике. Однако децентрализованная система принятия решений в образовании США сильно сдерживает попытки ввода стандартов программы по компьютерным наукам». – говорится в докладе 2010 года «Addressing Core Equities in K–12 Computer Science Education».
По мнению Гуздайла, самая большая проблема в обучении компьютерным наукам в США – это недостаток учителей. По его оценкам, в стране около 30 000 старших школ, однако только около 2000 учителей, обладающих достаточным уровнем квалификации.
Дети уже в 5 лет могут учиться программированию. Вопрос в том, стоит ли им на это тратить время в таком возрасте. Сомнения вызваны тем, что когнитивные способности, необходимые для обучению программирования, такие как способность к абстрактному мышлению, обычно развиваются у детей к 12 годам.
Гуздайл считает, что компьютерные науки должны преподаваться в школе, но не в возрасте 5-6 лет, учитывая современную ситуацию: только 12% старших школ в США предлагают классы по компьютерным наукам, и гораздо меньше средних и начальных школ, что создает большой временной разрыв. «Дети скорее всего не столкнутся с программированием еще долго после 5летнего возраста, зачем тогда давать им эту информацию в таком раннем возрасте?»
Винг также считает, что изучение программирования в возрасте 5ти лет может быть неуместным, однако дети уже в 5-6 лет могут изучить базовые концепции, точно также как они изучают арифметику. Подрастая, они узнают и другие концепции – что такое алгоритм, как представлять данные, различные подходы к анализу, считает она.
Перспективы
Наряду с чтением, письмом, основами математики и естественнонаучных дисциплин, компьютерные науки могут стать стандартной составляющей школьной программы. По мнению многих экспертов, это будет большой шаг вперед. Сложность проблем в мире возрастает с каждым годом, и системы, которые нам придется создать для их решения, потребуют развитых навыков «computational thinking», таких как абстрактное мышление, декомпозиция и композиция, считает Винг.
«Я бы ввел немного программирования в каждый класс по естественным наукам, математике и искусству, может быть, даже по английскому языку» – говорит Гуздайл. «Изучение компьютерных наук в старшей школе должно быть доступно всем, так же как наука и математика».
(1): Термин computational thinking появился относительно недавно, в 1996 году. В русском языке на данный момент нет его устоявшегося перевода (как правило, для перевода используется более широкое понятие «математическое мышление»). Далее в этом тексте мы будем использовать английский термин.
От переводчика
Лично мне близка мысль, что в современном мире для всех будет полезно учиться программированию. И даже если в будущем программирование не будет вашей основной деятельностью, это позволит сформировать навык computational thinking, который будет полезен для совершенно различных профессий.
Я обучаю программированию и алгоритмам студентов-биологов в Институте биоинформатики. Опыт показывает, что для освоения программирования совершенно необязательно иметь какой-то серьезный математический или технический бэкграунд, главное – начать, и всё постепенно придёт.
В связи с этим, рад анонсировать, что мы с Институтом биоинформатики запустили онлайн-курс на платформе Stepic для обучения программированию «с нуля» на языке Python. Первый дедлайн по задачам будет на следующей неделе, 24 ноября, поэтому записаться на курс еще не поздно! Упор в курсе сделан не столько на конструкции языка Python, сколько на формирование алгоритмического мышления через решение задач на программирование.