С чего начинать программировать в доп. образовании? Или SmallBasic и все-все-все
В этой статье я хочу порассуждать, как люди становятся крутыми специалистами в той или иной области, и каким образом на это влияет дополнительное внешкольное образование. Как строить учебные программы и какой язык выбрать для обучения? Что такое нужно делать с детьми, чтобы из них вырастали крутые мотивированные специалисты?
В ИТ эта проблема особенно актуальна — хороших программистов на рынке не хватает, зато очень много недоквалифицированных людей, которые никогда спецами не станут — просто потому, что у них нет к этому страсти.
Для начала стоит вспомнить, как я сам до этого дошел. Например, я точно помню, что выбор школы в пятом классе был отчасти обусловлен вкусной ромовой бабой в буфете, а в этой самой школе перед уроком английского, в далеком 2006-ом, в класс вбегает мой достаточно маргинальный одноклассник с криком «ребята, я сделал сайт нашего класса на MyLivePage! Записывайте адрес!». Это было настоящим открытием — оказывается, так можно, и это совершенно бесплатно. Тогда я решил сделать свой сайт и, конечно, про компьютеры. Я покупал компьютерные журналы и переписывал из них интересные новости, загружал интересный софт. На сайт заходили мои одноклассники, кто-то что-то комментил. Это было восхитительно! А затем нужно было разместить информер от яндекса, оказалось что это вообще не тривиально — нужно копаться в куче непонятного кода. Я покопавшись, конечно, ткнул его на нужное место, но решил, что с кодом надо бы разобраться. Сказано — сделано! Солнечным зимним вечером я зашел в книжный и купил на накопленные деньги свой первый учебник по HTML.
Спустя пару недель обучения стало понятно, что HTML — это круто, но вот чем обрабатывать формы — совершенно непонятно, но все говорят про какой-то PHP. Базовые вещи получалось делать по книжке, но вот ООП мне тогда не поддался и я решил пойти на курсы.
Я выбрал курс по С++ в «Школе программирования» в ДНТТМ. И вот это был по настоящему поворотный момент. Я оказался в кругу людей со схожими интересами, у меня сразу появилось много новых друзей. Во-первых, стало понятно, что я реально что-то могу, а во-вторых, куда стремиться дальше. Немалую роль сыграла система командных проектов, когда надо было сначала описать ТЗ, разделить работу, а затем регулярно отчитываться о работе. Мы были словно небольшая ИТ компания. А еще мне очень понравилась стажерская программа — благодаря ей я сам в итоге стал преподавателем.
Я поговорил с некоторыми своими знакомыми и учениками и услышал очень похожие истории. Например, такую мне рассказал Леван Квирквелия, сейчас ещё школьник, разработчик популярного мобильного приложения «МРКО — независимый электронный дневник», стабильно удерживающего первую строчку рейтинга AppStore и Play Market:
Во втором классе, когда я спросил учительницу информатики «как сделать сайт?», она сказала: HTML. С этим странным словом я пошел домой, а совсем скоро принял ужасное решение — пошел в книжный магазин. Книги я не любил, да и сейчас не люблю, поэтому выбрал самую тонкую книгу, на обложке которой было это слово, — «HTML и CSS для создания Web-страниц» Э. Кастро. Круто звучит да? Дома я скачал нужные программы, попробовал, поигрался. Свой первый сайт, который был выпущен в «продакшн», я сделал на прекрасном Narod.ru, («Яндекс», без тебя не было бы меня).Дальше пошло развитие. Я постоянно хотел изучить все больше, хотел сделать свой сайт круче, хотел быть нужным, хотел зарабатывать на этом, я хотел быть молодцом. Дальше я развивался как программист: два года искал себя, изучал Java, C++. Еще за два года было много чего создано. Я сделал огромное количество проектов, которые не «выстрелили» (ничего тогда не раскручивал, не было денег), заработал первые 100 тысяч на заказе сайта от родственника. В итоге я нашел себя. Я понял, что больше всего на свете мне нравится:
- делать крутые проекты, связанные с ИТ;
- делать полезное людям;
- быть молодцом (расшифрую: мой продукт лучший, все должны офигевать от него).
А Сева Жидков, девятиклассник, победитель олимпиады НТИ, хакатона Вконтакте 2016 и сотрудник Mail.ru (а еще создатель стартапов LeonardBot и Sheldon.ai) рассказывает:
Во втором классе я пошел на компьютерный кружок в местном университете, там были лого-миры или что-то такое. Потом, через пару лет, я хотел зарабатывать деньги и пытался научиться верстке и всему такому, так что деньги тоже были одной из изначальных мотиваций. Я загуглил «Как создать сайт» и выучил HTML. Первый сайт был для своего класса, хотелось тогда как-то выделиться, «стать крутым»
Прослушав множество таких историй, можно сделать определенные выводы по поводу того, как строить успешный образовательный процесс для школьников в ИТ:
- Движущей силой для развития чаще всего является возможность реализовать собственный проект, который как можно раньше показать друзьям (а лучше — всему интернету) или заработать на нем какие-то деньги. А значит такие проекты нужно делать как можно раньше. Чисто учебные проекты нужно стараться стилизовать под реальные.
- Сложные технологии успешно изучаются тогда, когда они нужны для реализации проекта. А значит сначала задача, а только потом способ ее решения. А в идеале — до него нужно дойти самостоятельно.
- Материал усваивается хорошо, когда он вызывает сильный эмоциональный отклик. А значит если задача не проектная, она должна быть хотя бы веселой и странной, а лучше — очень веселой и очень странной. Сторителлинг про Лунтика, летающие «бугурты», в бою все средства хороши. Главная задача — не превратить процесс в скучное, противное занятие. Я видел множество людей, которые в течение многих лет в с начальной школы учились играть на музыкальном инструменте, но окончив обучение ни разу не брали его в руки — это самое страшное, что может с процессом обучения.
Как же исходя из всего этого оптимально строить учебную программу? Чтобы с одной стороны не утратить естественную мотивацию ребенка, а с другой стороны попытаться дать как можно больше фундаментальной подготовки? А главное — на чем учить?
При выборе технологии я обычно руководствуюсь следующими критериями:
- Возможность решать интересные задачи. Многие преподаватели сходятся во мнении, что лучше всего показывать базовые алгоритмы на рисовании. Рисование — это первый шаг к собственной игре, а собственная игра для школьника — это очень увлекательно. Значит идеальный язык для изучения — это язык в котором можно рисовать как можно раньше.
- Простота и возможность строго последовательного изложения. Язык должен быть понятным, а мир программирования для ребенка в каждый момент времени должен иметь осязаемые границы. С одной стороны на каждом этапе должны быть видны перспективы в обучении — следующие шаги, но при этом арсенал должен на 90% состоять из понятных и знакомые инструментов. Написать поэму и так сложно, но написать ее на языке, где значение половины слов непонятно — скорее всего невозможно.
- Применимость в реальной жизни. Технология или хотя бы результат работы с ней должны быть «взрослыми». Детям хочется работать на равных со взрослыми, чувствовать свою значимость: настоящие сайты, настоящие приложения, и чтобы можно было прочитать программу собеседования на реальную должность и сказать «о, вот это я знаю! Осталось только прочитать остальное!».
Большинство современных преподавателей сходится во мнении, что идеальный первый «настоящий язык» (если не брать в рассмотрение «игрушечные» Scratch или школьный лого) — это Python. И Python правда крут! С одной стороны читаемый синтаксис, а с другой можно делать реальные проекты — хоть веб-сервисы, хоть телеграмм-ботов. Но лично с моей точки зрения Python — это далеко не идеальный выбор именно первого языка. Чтобы рисовать скорее всего понадобится PyGame, а подключение сторонних библиотек приводит к появлению в коде сложно объяснимых на этом этапе конструкций — объектов и модулей. Python — это очень мощный и удобный язык, он прекрасно соответствует первому и третьему критерию, но, кажется, не соответствует второму.
В свое время я прошел годовой курс по С++, и считаю, что это было очень правильным решением. Настолько правильным, что теперь я сам веду такой курс (программа курса на GitHub — первая и вторая часть). Плюсы — это почти латынь в программировании, зная плюсы, можно очень быстро понять любой си-подобный язык (а значит — вообще почти любой). К тому же плюсы выстраивают очень четкое понимание программирования от низкоуровневых аспектов до ООП. Причем каждый алгоритм и структуру данных можно сначала «изобрести» самому, реализовать, а только потом уже узнать о реализации из STL и использовать. Методически это очень правильно. Однако многие преподаватели считают (и они совершенно правы), что давать плюсы как первый язык — это садизм. Плюсы — это по-настоящему «взрослая технология», при изучении очень легко последовательно давать материал так, чтобы в коде отсутствовали неизвестные конструкции, но вот с рисованием (да и вообще с красивыми задачами) тут явные проблемы, как ни старайся сделать задачи веселыми. Либо надо использовать сторонние учебные библиотеки (а это не соответствует третьему критерию), либо ждать Qt —, а это, извините, 36ое занятие в спокойном темпе работы. Выживают только самые стойкие. Значит плюсы на первом этапе отпадают, надо давать их позже.
Есть еще более классические варианты — Basic, Pascal —, но все это в наши дни уже не используется на практике. А значит тоже отпадает по третьему критерию.
Так что же выбрать? На первом этапе нужно с одной стороны что-то яркое и несложное, а с другой стороны похожее на «взрослые языки» и со «взрослыми» возможностями. И по моему опыту — это Microsoft SmallBasic (программа курса на GitHub). Почему именно он?
- Ограниченное количество конструкций, каждая из которых видна при пролистывании.
- Очень дружественная среда, автоматически показывается справка на русском языке.
- Рисовать и начинать делать собственную игру можно начиная с первого занятия.
- Все основные конструкции — условия, циклы, переменные, функции на своих местах и работают как надо. Массивы тоже на своем месте…ну почти.
А главное — этот язык просто ужасен! Все переменные — глобальные, весь код в одном файле, из за чего в определенный момент работы над проектом код становится совершенно неуправляемым и продолжать разработку невозможно… И в этот момент мы мягко намекаем, что пора переходить на питон или плюсы. Алгоритмическая база дана, цели дальнейшего обучения теперь понятны, а значит есть мотивация идти вперед!
Как выстроить курс наиболее оптимально? Как можно быстрее переходить к процессу построения игры. Обычно на первом занятии я даю поиграться с консолью и черепахой, чтобы усвоится с переменными и понятием алгоритма в принципе. Уже на третьем занятии можно давать рисование «абстрактных картин», а на четвертом — переходить к циклам, которыми можно рисовать более сложные изображения. А дальше уже анимации, GUI, файлы и проектная работа — продумывание и реализация собственной игры. За 12 занятий собственная игра будет готова!
Под конец станет ясно, что для реализации всех планов уже не хватает Smallbasic«а, и в этот момент рассказываем про более сложные и «правильные» языки, мотивируем ребят развиваться дальше, чтобы продолжить разработку.
В каком возрасте можно давать SmallBasic? По моему опыту — с шестого класса. Возможно, можно и раньше, но тогда страдает непрерывность обучения — больше, чем на год SmallBasic«а не хватит, а C++ по-моему опыту точно не стоит рассказывать раньше седьмого класса. Есть успешные шестиклассники, но в среднем идет очень туго.
А вот после базовой подготовки на С++ можно развивать в любом направлении: можно за час выучить Python и пилить прикладные проекты, а можно уйти в Java и мобильную разработку. С такой подготовкой в арсенале любая технология будет доступной.
Кстати, именно по такой схеме я действую на курсах по программированию для начинающих ЦМИТ «Геккон клуб». Этим летом мы запускаем насыщенный интенсив по SmallBasic для ребят, окончивших шестой класс.
Комментарии (6)
20 апреля 2017 в 02:33
0↑
↓
Хорошо начинать познавать программирование с ассемблера, так как в таком случае придется хорошо изучить архитектуру ПК и в полной мере понять как все работает. Потом уже осваивать языки высокого уровня.20 апреля 2017 в 05:54
0↑
↓
Я начинал с Sinclair Basic и считаю что лучше ничего не придумать, включил компьютер и он готов к программированию, даже не так — Бейсик в ПЗУ буквально заставлял тебя создавать.20 апреля 2017 в 06:27
0↑
↓
Если говорить о ZX-Spectrum с его Z-80, то там, если что-то и желалось написать, то ничего особо путного, кроме как на ассемблере и не было возможности написать в силу весьма низкого быстродействия. Интерпретатор бейсика содержащийся в ПЗУ не позволял создать мало-мальски серьезное приложение даже по меркам тех времен. О чем собственно и свидетельствует тот факт, что 99% написанного ПО для ZX-Spectrum было исключительно на ассемблере.насколько помнится в 64КБ (ROM+RAM) версии ZX-Spectrum
#0-#3FFF — область ПЗУ
#4000-#57FF — экранное ОЗУ
#5800-#5AFF — область атрибутов экрана
#5B00-#FFFF — ОЗУПри такой организации и объеме памяти, а также скорости работы интерпретатора на бейсике ZX-Spectrum можно осваивать разве что крошечные задачки позволяющие понять отдельно взятые алгоритмы, но не написание какого-либо жизнеспособного ПО.
P.S. и если уже хотелось творить на ZX-Spectrum, то приходилось открывать книжку с описанием модели памяти и ассемблерных мнемоник Z-80 и использовать GENS и MONS, а позднее TASM и STS.
20 апреля 2017 в 05:46
0↑
↓
Плюсы — это по-настоящему «взрослая технология», при изучении очень легко последовательно давать материал так, чтобы в коде отсутствовали неизвестные конструкции, но вот с рисованием (да и вообще с красивыми задачами) тут явные проблемы, как ни старайся сделать задачи веселыми. Либо надо использовать сторонние учебные библиотеки (а это не соответствует третьему критерию), либо ждать Qt —, а это, извините, 36ое занятие в спокойном темпе работы. Выживают только самые стойкие. Значит плюсы на первом этапе отпадают, надо давать их позже.
Есть еще более классические варианты — Basic, Pascal —, но все это в наши дни уже не используется на практике. А значит тоже отпадает по третьему критерию.
Delphi (Object Pascal)!
Есть бесплатная Starter версия, GUI, графика и т.д. доступны прямо из коробки. Используется на практике.
Есть также Open Source Lazarus, у которого кроме всего и русский интерфейс есть из коробки.20 апреля 2017 в 06:24
+1↑
↓
Да без разницы что учить. Просто предупредите, что учиться нужно будет всю жизнь и лёгких результатов не будет. А в общем: программирование — это способ воздействия на компьютер. Поэтому с его устройства и надо начинать.20 апреля 2017 в 07:03
0↑
↓
Я начинал с Бейсика на Спектруме. Годик-два потыкался, потом сразу на ассемблер перешёл, году эдак в 1993-ем. Вполне хороший язык программирования, я считаю :) Зато теперь понимаю, как работает компьютер. А если начинать сразу с QT/PHP/Perl/etc, тогда и начинается говнокод.