В этом году ВКонтакте при поддержке Промсвязьбанка запустила стипендиальную программу VK Fellowship для преподавателей информатики. Совместно мы отобрали 15 преподавателей из регионов России: создателей авторских курсов по программированию, школьных учителей, директоров центров дополнительного образования, тренеров, которые готовят школьников к международным олимпиадам по программированию. Они получили стипендии от ВКонтакте и Промсвязьбанка и теперь участвуют в наших выездных школах.
Все преподаватели имеют большой опыт и являются авторами собственных курсов по основам программирования. В этом посте мы попросили трех стипендиатов ответить на наши вопросы о преподавании программирования и информатики вообще.
— Для начала давайте познакомимся.
Инесса Шуйкова: Я работаю директором и учителем информатики в ГОАОУ Центр поддержки одаренных детей «Стратегия» города Липецк. Преподаю С++ и Pascal в 6-11 классах. | |
Петр Калинин: Живу и работаю в Нижнем Новгороде. Веду занятия в лицее №40, на базе ННГУ им Лобачевского, а также дистанционно, без привязки к конкретному учебному заведению. В основном, на Python, Pascal, C++. С отдельными ребятами занимаюсь на Java, C# и более экзотических языках. Большая часть ходит в 9-11 классы, но некоторых веду уже с 4 класса. | |
Сергей Беляев: Я живу в Красноярске. Работаю педагогом дополнительного образования в Красноярском краевом Дворце пионеров. Языков в работе много — C++, Pascal, Python, Basic, Java Script, Perl. Возраст у учеников разный — обычно от 12 до 18 лет. |
О преподавании программирования
— Как нужно организовать обучение программированию в школах?
Инесса: Каждому школьнику нужно дать основные навыки использования программных продуктов общего назначения, научить цифровой гигиене, безопасной работе в интернете и основам программирования. Для детей с соответствующим интересом и способностями — добавить алгоритмы и структуры данных. Продвинутые курсы программирования должны проводиться в виде спецкурсов. Каждый школьник на уроках информатики должен включаться в проектную команду по выполнению школьного IT-проекта.
Петр:Я не считаю себя специалистом именно в массовом обучении школьников в общеобразовательных школах, но полагаю, что обучение нужно адаптировать к потребностям школьников. Заинтересованным школьникам надо давать углубленные знания, остальным достаточно поверхностных представлений о программировании.
Сергей: Общая программа в рамках предмета информатики должна быть такой, как сейчас: программирование поверхностно и в ознакомительных целях. Более содержательный курс — для профильных классов с физико-математическим уклоном. Профессиональное обучение разумно лишь в рамках дополнительного образования.
— Главные проблемы обучения программированию в России? Как их решить?
Инесса: Вообще, общее образование у школьников ассоциируется со скучным, ненужным, насаждаемым процессом. В этом процессе информатике отводится малое количество часов — она не является основным предметом, которому уделялось бы внимание со стороны администрации школ. Зачастую учителя информатики приглашаются по остаточному принципу.
Решением могло бы быть введение нормы закона, позволяющей учитывать дополнительное образование в качестве дисциплины общего образования. Дети с удовольствием учатся на курсах программирования в центрах дополнительного образования. Возможность зачесть освоение курса в качестве результата общеобразовательной программы позволит привлечь внимание еще большего количества школьников к освоению навыков программирования.
Петр: Если не брать в расчет разные бюрократические проблемы, то, наверное, главная — это очень устаревшие знания (или вообще отсутствие таковых) у большинства учителей.
Сергей: Думаю, проблемы преподавания информатики сочетаются с общими проблемами образования в России, с тем, что профессия учителя не является престижной. И учитель, обучающий программированию, здесь не исключение.
— Стоит ли пробовать обучение программированию до школы? В какой форме это стоит реализовать?
Инесса: До школы нужно развивать общие математические способности, интерес к чтению, мотивацию к познанию как таковому. А давать детям то, к чему они еще психологически не готовы, считаю нецелесообразным.
Петр: Четкого ответа у меня нет, но полагаю, что имеют право на существование развивающие игры и задания программистского направления. Например, я купил своей трехлетней дочери игру «Такси» от Мосигры.
Сергей: Думаю, что до школы изучать программирование все-таки рановато. Неплохо бы перед этим сначала научиться читать, писать и считать.
— Есть расхожее мнение, что программирование сегодня — это такой же необходимый навык, как водительские права и английский язык. Что скажете?
Инесса: Да, это так! Даже если вы не будете программировать на работе, то понимание того, как устроены программы и информационные системы, позволит вам уверенно чувствовать себя в будущей цифровой среде.
Петр: Категорически не согласен. Во-первых, права и язык (последний — слегка в меньшей степени) нужны 90% людей не только для работы, но и для личной жизни. Программирование за пределами работы нужно относительно небольшому количеству людей, и в подавляющем количестве случаев — лишь в качестве хобби. На работе же программирование нужно также далеко не всем — в этом оно не сильно отличается от водительских прав или языка.
Сергей: Конечно же нет, иначе многие бы чувствовали себя дискомфортно, не имея необходимого навыка. Программирование — достаточно узкая специальность, которую осваивают лишь немногие. Английским языком и тем более вождением автомобиля люди овладевают гораздо чаще.
Об особенностях изучения языков программирования
— Какие задачи по программированию самые сложные и интересные?
Инесса: Думаю, это зависит прежде всего от идеи задачи, а не от темы. Иными словами, от того, насколько изящна и красива идея, лежащая в основе задачи, насколько потом можно восхититься необычностью задачи или легкостью идеи, которая лежала в основе и требовала пройти нелегкий путь.
Петр: Интересней всего непростые задачи, которые требуют необычным образом взглянуть на стандартные алгоритмы или стандартную теорию. Например, задача «K» отсюда.
Сергей: Считается, что наиболее сложные темы — это рекурсия, структуры данных (особенно деревья отрезков и декартово дерево) и теория графов. Конечно, в любой теме могут быть простые задачи. Так же как и в любой простой теме вида «простая математика» может быть вовсе не простая математика, хоть и без программирования. Поэтому все это довольно субъективно, нельзя утверждать, что все задачи одной из тем обязательно сложнее любых других. Для меня лично наиболее сложными кажутся задачи из теории игр, в частности, те, которые используют метод минимакса.
— Можно ли начать обучение С++, минуя Pascal и Basic?
Инесса: Да, однозначно можно. Подтверждение — мой опыт работы с детьми.
Петр: Конкретно на C++ — можно, но не рекомендую. Я бы рекомендовал заменить C++ на Python. Pascal и уже тем более Basic точно не нужны.
Сергей: Конечно. Я так делаю уже 15 лет. Если основная цель — познакомить учеников с элементами программирования в сжатые сроки, а не целенаправленно программированию обучать, то лучше все-таки подойдет Python.
— В каком порядке нужно начать изучение С++, чтобы не заблудиться в дебрях?
Инесса: Советую начинать сразу с решения простейших задач. Пример хорошего курса — «Введение в программирование С++» Михаила Густакашина.
Петр: Я считаю, что в любом языке надо сначала освоить базовые вещи, позволяющие писать простейшие программы (переменные, if, циклы, массивы, строки, вещественные числа). С ними уже можно решать практически любую олимпиадную задачу. Остальное — уже по мере надобности.
Сергей: Я лично к самому языку перехожу только после четырех уроков, направленных на ознакомление с программированием на примерах увлекательных алгоритмов — по типу игр и видеороликов из ежегодной акции «Час кода». Затем я знакомлю ребят с плюсами и минусами профессии программиста, включая свой многолетний опыт. На самом деле не так принципиален выбранный для изучения язык программирования, порядок тем всегда будет примерно одинаковым. Знание синтаксиса языка — это не самое главное, его может освоить любой гуманитарий. Самое важное — это умение алгоритмизировать и писать понятный и безошибочный код.
— Как писать понятный код на С++?
Инесса: Для школьников важно правильное наименование переменных, стилевое оформление. Понятный код — это структурированный код, читабельный для других людей из твоей команды.
Петр: Как и на любом языке, разделяя код на разумные сущности, именуя переменные и т.д. Но на школьном уровне почти ничего из этого не нужно, максимум — ставить адекватные отступы.
Сергей: Это особенно важно в рамках проекта, над которым работает группа программистов. Иногда приходится разбираться в чужих программах, и для этого должны соблюдаться некоторые договоренности. Но в любом случае есть общие принципы, содержательно о которых вряд ли получиться рассказать в рамках одного вопроса. Я выделю лишь некоторые:
- структура программы: логические единицы должны выделяться в отдельные блоки (отступы в тексте программ, функции, библиотеки);
- имена переменных и функций должны говорить сами за себя, что в них содержится;
- обязательно следует использовать комментарии при описании блоков алгоритмов, каждая функция должна содержать полную спецификацию входных параметров и возвращаемых значений.
— Как вы относитесь к использованию Boost в учебных целях?
Инесса: Не использую его в работе
Петр: В принципе, позитивно, но в школе это не нужно.
Сергей: В реальном программировании ничего не имею против этого расширения. Но я обучаю детей олимпиадному программированию, а там школьники им воспользоваться не смогут, поскольку Boost не входит в стандартный набор библиотек ни одного из стандартных компиляторов языка C++. Так что приходится довольствоваться тем, что есть, например, STL (Standard Template Library).
— У вас есть успешный рецепт подготовки учеников на олимпиады по программированию?
Инесса: Теория информатики плюс основы дискретной математики и математические методы обработки данных. А еще постоянные тренировки, возведенные в систему.
Петр: Базовая теория, решение задач, понимание формата олимпиады, аккуратное тестирование.
Сергей: Считаю, что в обучение школьников программированию нужно вкладывать не только опыт, время, но и душу. Только тот учитель, которому самому интересен предмет, способен заинтересовать учащихся. При обучении программированию важно подобрать группу талантливых школьников, и в пределах одного среднего учебного заведения сделать это очень сложно. Поэтому более эффективно работать в учреждениях дополнительного образования, где возможна работа с ребятами из различных школ
— Есть ли в вашей программе что-нибудь, что делает ее уникальной?
Инесса: Ключевой момент в самой методике. Я веду группы детей, сформированные по уровню подготовки и способностей, а не по возрасту. Обучение идет не только по модели учитель-ученик, но и по модели ученик-ученик. Старшие помогают младшим: делают разборы решенных задач, проверяют стиль кода написания программ, ассистируют преподавателю. На занятиях поддерживается среда детского сообщества — настрой на успехи, продвижение, результаты. События олимпиадного характера, внешние тренировки делаем вместе, сообща, с радостью.
Петр: Во-первых, занятия проводятся полностью онлайн, есть возможность заниматься удаленно из любой точки мира. Во-вторых, отсутствие календарного плана, каждый школьник занимается в своем темпе. В-третьих, внимание к тестированию и поиску ошибок в коде. В-четвертых, свободная лицензия разрабатываемых мной материалов.
Сергей: Во-первых, использование авторского ресурса «Школа программиста». Во-вторых, использование авторских печатных методических пособий. В-третьих, весь теоретический материал представлен в презентациях для более наглядной иллюстрации материалов образовательной программы.
О самообразовании
— Самообучение и обычное обучение. Как это лучше сочетать?
Инесса: Обучение с учителем по классической схеме – это для более младшего возраста. Когда ребенок вырастает, на смену классическому обучению приходит самообразование (изучение источников, дистанционных курсов).
Петр: Сочетать так, как, например, у меня в курсе. Школьники изучают материал самостоятельно, но решения задач проверяю я лично, плюс ребята всегда могут со мной проконсультироваться, если им что-то непонятно.
Сергей: Вот именно, что самообучение лучше сочетать с обычным обучением. Это позволяет изучать предмет программирования быстрее, так как талантливый педагог может грамотно направить ученика в нужное русло, подсказать ему что, где и как.
— Говорят, что программированию стоит учиться до определенного возраста, причем возраст этот меньше 30 лет. Потом эффективность сильно падает. Как вы относитесь к таким возрастным ограничениям?
Инесса: Конечно, было бы хорошо до 30 лет научиться всему и сразу, но жизнь меняется, знания совершенствуются, языки развиваются. Поэтому обучение непрерывно в течение всей жизни. Олимпиадное программирование, в котором необходима скорость, психологическая концентрация, многочасовые тренировки — это для молодых. Обучение программированию после 30 лет — не вижу здесь проблем, если есть мотивация и математический склад
Сергей: В принципе, я согласен. Но, возможно, есть исключения. После 30 лет возникают сложности не только с изучением чего-либо, но и с самим программированием. Конечно, это происходит очень плавно и четкой границы нет. Раньше я мог по 10 часов в день заниматься программированием, а сейчас — увольте. Поэтому я планомерно перехожу с программирования на преподавание программирования: все меньше программирую и все больше преподаю.
— Как вы относитесь к многочисленным курсам для программистов, которые открываются сегодня? Не кажется ли вам, что там дают слишком поверхностные знания?
Инесса: Курсы курсам рознь. В процессе выбора курса всегда стоит просматривать первые лекции, чтобы соотнести свой уровень и уровень курса, оценить полезность знаний и так далее. Поэтому считаю, что предварительное знакомство с курсом обязательно.
Петр: Я верю, что есть и толковые курсы, и поверхностные. Плюс многое зависит от самого ученика.
Сергей: Ничего плохого не вижу в том, что существуют курсы, которые дают лишь поверхностные знания. Детям как раз необходимо некоторое ознакомление с этим предметом, прежде чем записываться на серьезный курс, направленный на обучение профессиональному программированию. А профессиональных курсов и не может быть много: столько способных детей обучаться серьезному программированию просто нет, это достаточно узкое направление.
— Что было для вас сложнее всего во время собственного обучения? Какие этапы можете выделить?
Инесса: Первый этап – это первичное освоение, когда кажется, что все ново и малопонятно. Второй этап – это глубокая проработка материала, когда все становится на свои места. На этом этапе важны консультации с коллегами, и если это возможно, дошлифовка преподаваемого материала. Кроме этого, я считаю важным постоянное повторение в процессе преподавания и мотивацию к изучению нового.
Сергей: Если вспомнить, что это был 1989 год, когда не было интернета, домашнего компьютера и учителей, а только один программируемый калькулятор с инструкцией, то да, определенные сложности были. Но я все равно смог освоить базовые принципы программирования. Тогда я учился в девятом классе. Это был первый этап.
Следующий этап — это обучение в рамках УПК в 10-11 классах на компьютерах без винчестеров. Но зато уже с клавиатурой, монитором (в качестве которого выступал черно-белый телевизор) и преподавателем. Тогда я изучил Basic и Pascal. Далее в ВУЗе мои возможности и познания в области программирования сильно расширились. Мы изучали C++, Lisp, Prolog и Assembler. А с пятого курса я сам начал педагогическую деятельность, стал преподавать Pascal школьникам.
Следующий значащий этап в моей жизни связан с освоением мной направления веб-программирования в сайтостроении. Этот шаг, пожалуй, перевернул мою жизнь и привлек ко мне большое число работодателей, от которых я до сих пор отбиваюсь :)
Лишь в 2003 году я заинтересовался олимпиадным программированием и переключился на обучение этому школьников.
— Какие ошибки вы совершили в ходе собственного обучения? Что можете в связи с этим посоветовать?
Инесса: Ошибка в процессе обучения — попытка охватить разрозненную информацию, некоторое количество некачественной информации. Советую использовать качественные курсы с хорошими отзывами, рекомендации от коллег по ним. Также важно четко выделять время для обучения.
Сергей: Пожалуй, основная моя ошибка — это неправильный выбор средств программирования для создания веб-сайтов. Я до сих пор использую технологии от Microsoft: Windows + IIS + ASP + MSSQL. Все разработки требуют не только лицензии, но и больших вычислительных ресурсов. Гораздо лучше отталкиваться от бесплатного ПО. В то время да и сейчас все еще актуально создание программ и разработка сайтов под Unix с использованием Apache + PHP + MYSQL.
Автор: chuvash