Перевод рассказа об опыте обучения программированию группы школьников с использованием языка Go. Оригинальный текст в списке рассылки здесь
( ориг.
Фото ) Привет, суслики! Я хотел бы описать свой опыт использования Go в качестве первого языка программирования для группы молодых программистов.
Я знаю, что на эту тему уже были посты ( здесь И здесь ), но они в основном касались обучения студентов или, по крайней мере, взрослых.
А также есть Презентация GopherCon Одри Лим о своем первом опыте программирования и Go. Также недавно Мартин Купманс спросил совета на эту тему для моего сына.
И это первый подобный пост, который я нашел, который напрямую связан с обучением детей.
Моя ситуация была похожа на ситуацию Мартина.
У меня была группа из двенадцати 11-летних школьников.
За весь 7-недельный курс, примерно 12-13 часов, я смог научить их Го настолько, что они смогли написать фрактальный генератор Мандельброта.
Но, что гораздо важнее, они поняли и поняли код. Из этого опыта я узнал, что Go — это не только хороший язык для изучения, но и отличный язык для новичков в программировании, включая детей.
Я попытаюсь обрисовать те аспекты Go, которые действительно важны, когда вы имеете дело с молодыми программистами, и то, как я пришел к этим выводам.
Первым аспектом, который помог, был синтаксис, который читается слева направо.
Если вам одиннадцать, то это воспринимается интуитивно, потому что код Go читается естественно, как текст. Это становится очень ясно, когда вы спрашиваете детей, что они думают о конкретной строке кода.
Во-вторых, в Go мало ключевых слов.
Если вы ребенок, это становится важным, потому что создает ощущение, что учиться особо нечему.
Первоначально это позволяет детям трансформировать задачу обучения программированию в «Что означают эти слова и как их использоватьЭ» После этого проблема вроде бы решена.
В-третьих, go fmt оказался незаменимым помощником сразу по многим пунктам.
Для детей очень важно знать, что они могут просто писать код и не беспокоиться о правильном форматировании, зная, что редактор, использующий go fmt, обрежет код за них.
Через некоторое время они привыкают к стилю Go и начинают писать самостоятельно.
Go fmt по своей природе заставляет весь код использовать один и тот же стиль, и это имеет интересный побочный эффект. Когда (но не если) дети спонтанно начинали помогать друг другу и сравнивали работающую программу с программой, которая не работала, они не смотрели на форматирование, а ориентировались на логику.
Они фактически сравнили последовательность шагов в каждой программе, чтобы найти различия и устранить проблему.
Go fmt сокращает умственные усилия, необходимые для этого — без него процесс занял бы больше времени, потому что потребовалось бы больше умственных усилий, потраченных на преодоление различий в форматировании.
Таким образом, go fmt оказался фактическим помощником в обучении и понимании.
Это уменьшило барьеры для понимания кода детьми.
Мой вывод из всего этого заключается в том, что 11-летним детям нужно заниматься спортом по тем же причинам, что и нам.
В-четвертых, это инструмент и рабочее пространство go. Инструмент Go значительно упрощает процесс для молодых программистов.
Как только они поймут, что все, что им нужно сделать, это «бежать бежать», они никогда не будут спрашивать, как запустить другую программу.
Я показывал им это буквально 2 или 3 раза.
Я просто не могу представить, чтобы это можно было сделать с помощью Makefiles или параметров командной строки.
Это настолько просто, что дети сразу схватили это.
Рабочее пространство тоже помогло.
Знание того, что все, что им нужно было сделать, это поместить код в $GOPATH/src, чтобы все заработало, очень помогло, потому что заставило всех это сделать.
Детям не приходилось сталкиваться с ситуацией, когда их программа не запускалась из-за того, что она (или зависимости) находилась не в том месте.
Когда я начинал этот проект, я верил, что у детей будет хороший шанс быстро выучить Го.
Но все же оставалось несколько тем, объяснение которых, по моему мнению, было бы проблематичным.
Интересный случай здесь — типы данных.
Я думал, что детям будет очень сложно понять эту концепцию, потому что она довольно абстрактна.
Именно по этой причине для обучения программированию чаще всего используются «бестиповые» языки программирования.
Но все было с точностью до наоборот. Ребята сразу схватили его.
Им достаточно было один или два раза ошибиться, присвоив строку числовой переменной, чтобы понять, что компилятор не позволит им этого сделать.
Здесь очень помогла статическая проверка типов компилятором, потому что он останавливал детей и говорил — здесь проблема.
Но, конечно, шрифты тоже очень помогли.
Дети должны были обосновать, какой тип они выбрали, когда впервые объявляли переменную.
Они говорили о том, для чего им нужна конкретная переменная, а затем выбирали нужный тип.
Почти незаметно для них это расширило их способности к логическому мышлению.
Вместо IDE я использовал редактор Atom и командную строку для обучения детей.
Меня беспокоило, что отсутствие пользовательского интерфейса и кнопки «Пуск» может стать проблемой для детей.
Но они доказали, что я ошибался.
Имея редактор с подсветкой синтаксиса, интеграцию с go fmt и зная, как собирать/запускать свои программы, это вообще не было проблемой.
Использование командной строки также не составило проблем.
Кроме того, им не нужен был отладчик.
Когда их программы делали что-то не так, они просто возвращались к редактору, меняли код, пересобирали его и пробовали снова.
Цикл исправления/сборки/запуска в Go настолько быстр, что отладчик просто не нужен.
Использование отладчика каждый раз сильно замедляло бы их работу.
Хотя, возможно, отчасти это связано с небольшим размером написанных ими проектов.
Фигурные скобки для обозначения блоков также не были проблемой для детей.
Дети просто никогда об этом не спрашивали.
Частично это может быть связано с тем, что go fmt всегда корректирует выравнивание скобок.
Или, возможно, это произошло потому, что они никогда раньше не программировали и не имели предвзятых представлений о наличии или отсутствии фигурных скобок.
На данный момент я сама не до конца поняла, что первопричина здесь в детях.
Когда они забывали поставить скобку, то очень быстро вспоминали об ошибке компилятора, сообщавшей об этом, и искали, где они пропустили скобку.
Какие выводы я могу сделать из этого? Я не думаю, что команда Go когда-либо позиционировала этот язык как хороший язык для обучения с нуля, но, по счастливой случайности, у нас, похоже, есть и хороший системный язык, и хороший язык для обучения программированию.
Редкий подвиг, конечно.
Единственный способ объяснить это — сам процесс разработки языка.
Отбросив больше, чем оставив, и сохранив простоту и ортогональность в качестве главного приоритета — как языка, так и инструментов — это окупилось сполна, причем так, как мы изначально даже не предполагали.
Как сказали Расс Кокс и Эндрю Джерранд на GopherCon в этом году, мы, как сообщество, не должны упускать из виду эти первоначальные принципы Go по мере развития языка.
Если мы забудем о них, мы рискуем испортить жизнь как будущим программистам, так и себе.
И, наконец, если кто-нибудь еще пробовал Go в качестве первого языка программирования, особенно для детей, я был бы очень рад услышать ваш опыт. У меня также есть планы преподавать большую группу в течение более длительного периода, начиная с сентября этого года.
Искренне, Оуэн.
Теги: #Go #обучение #дети #программирование #Go
-
Советы, Как Записать Vob На Dvd С Меню?
19 Oct, 24 -
Курс По Буквам «Как Писать На Хабр»
19 Oct, 24 -
Распаковка: Загрузчик Dridex
19 Oct, 24 -
Легче, Чем Кажется. Главы 4–5
19 Oct, 24 -
Черный Рынок Вновь Открылся
19 Oct, 24 -
Как Нейронные Сети Рисуют Картинки
19 Oct, 24 -
У Google Теперь Есть Штатный Астронавт
19 Oct, 24