Меня зовут Ростислав, вот уже семь лет я веду кружки по программированию для школьников 7-10 классов. Последние несколько лет я вел курсы по С++ в лаборатории робототехники Политехнического музея и ЦМИТе «Геккон клуб», а основная моя основная работа — это веб-разработка и разработка мобильных приложений. Интересней всего мне работать с медицинскими сервисами.
В этой статье я хочу порассуждать, как люди становятся крутыми специалистами в той или иной области, и каким образом на это влияет дополнительное внешкольное образование. Как строить учебные программы и какой язык выбрать для обучения? Что такое нужно делать с детьми, чтобы из них вырастали крутые мотивированные специалисты?
В ИТ эта проблема особенно актуальна — хороших программистов на рынке не хватает, зато очень много недоквалифицированных людей, которые никогда спецами не станут — просто потому, что у них нет к этому страсти.
Для начала стоит вспомнить, как я сам до этого дошел. Например, я точно помню, что выбор школы в пятом классе был отчасти обусловлен вкусной ромовой бабой в буфете, а в этой самой школе перед уроком английского, в далеком 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 для ребят, окончивших шестой класс.
Автор: roctbb