Зачем в школах изучать Pascal, если самый популярный язык программирования в мире — JavaScript?
Проблема «учим одно, а на практике требуется другое» хорошо известна. Но не слишком ли большие ожидания связаны с уроками по информатике? Или есть ожидание того, что после уроков музыки дети будут музыкантами, труда — мастерами, а рисования — художниками?
Зачем вообще привязываться к школе? Если кто-то считает, что лучше изучить Питон, то дайте возможность ребенку изучить Питон, если C++, то С++ и т. д. Или «болит душа» за всех детей страны?
Но тогда могут возникнуть вопросы к любому уроку. Зачем на уроках труда шкурить древко лопаты, если на практике с большей вероятностью придётся что-то паять? Зачем на физкультуре ходить на лыжах, если в жизни чаще придётся бегать (чтобы успеть на общественный транспорт). Если считаете, что лучше паять и бегать — занимайтесь с ребенком этим.
Учитель информатики и программист — это две разные профессии. А уроки информатики — это не занятия по программированию, как кто-то может считать, а такая же теоретическая дисциплина для общего развития, как в среднем 90% уроков в школе.
Для понимания этого достаточно открыть рабочие программы и методические пособия. В них заявлен такой объём всего, что нужно дать учащимся, что познакомиться с ним можно единственным образом — сидеть на уроках по информатике и непрерывно читать учебники и специализированную литературу.
Программы и методики пишутся для отчетности, а реальность на пару порядков скромнее. Но что-то же из заявленного нужно воплотить в реальности чтобы соответствовать ФГОС?
В рамках информатики можно заявить изучение основ программирования. Но на практике это большей частью будет решение задач (математических) с использованием компьютера. Можно ли назвать практикой написание кода для решения учебных задач? Можно, с одной стороны. Для их решения используется компьютер, а не листок бумаги. Но, с другой стороны, какого плана задачи предлагается решать, теоретические или практические?
Если на урок информатики выделен 1 час в неделю, то какой язык программирования можно изучить за это время? Никакой. Программа по информатике рассчитана на 36 часов. Да за это время даже играть на компьютере не научишься.
Каким бы простым не был язык программирования, уже через день не вспомнишь, что там на уроке проходили. Программирование — это практический навык, который можно развить, если как минимум каждый день по 1 часу сидеть за компьютером и практиковаться. И много желающих найдётся сидеть каждый день по 1 часу и решать математические задачи на компьютере? Да есть туча более интересных занятий, чем сортировать массивы и умножать матрицы.
Выходит, нужно либо записываться в кружки программирования, либо заниматься самообразованием.
Представьте ситуацию, когда на уроке музыки в классе сидит 30 человек с гитарами. Можно ли сказать, в рамках данных уроков происходит обучение игре на гитаре? Конечно, нет. 2–3 заинтересовавшихся школьника что-то освоят, занимаясь дома. Несколько отличников будут прилежно приносить гитары на урок и перебирать струны (надо — значит надо). А остальным это вообще не интересно и не надо. Зачем что-то делать, если можно не делать?
Кататься на велосипеде — это интересно? Да! Но представим ситуацию, когда на уроке физкультуры всем раздали велосипеды и сказали — 50 кругов вокруг школы. Все радостно поедут? Как бы не так. Все поедут, если вместо велосипеда дать электросамокат, потому что на нём ничего не надо делать. Стой ровно и жми кнопку.
Вокруг можно слышать мнение о том, что информатика, дескать, неинтересная, компьютеры старые, а в учебники лучше не смотреть.
А что вообще значит интересный урок для каждого конкретного школьника? Урок, на котором ничего не нужно делать? Достал смартфон и делай что хочешь — вот интересный урок. А своё время вспомните, какой урок вызывал больше всего положительных эмоций? Не тот ли последний, который отменяли и можно было пораньше пойти домой?
Раньше я тоже думал, что, например, обучение в формате игр — это интересно. Но играть в компьютерную игру и создавать компьютерную игру — это далеко не одно и тоже. Многие хотят программировать и разрабатывать игры, но ровно до того момента, когда узнают, что для этого на самом деле нужно и сколько усилий для этого потребуется. Не, мы лучше видосики прикольные посмотрим и шары в смартфонах погоняем.
На урок информатики дети приходят с разным уровнем подготовки. Кто-то уже программировал, а у кого-то до этого момента вообще не было компьютера. Одни спокойно относятся к математике, а у других это один из нелюбимых и непонятных предметов. В классе 30 человек и как каждому сделать интересно? Да не будет этого.
Когда многие годы занимаешься чем-то и становишься в этом деле профессионалом, то кажется, что это настолько элементарно, что надо программу подготовки ещё расширить и углубить. И накидывают в неё программу ещё разделов и материалов для изучения. В результате дети учатся полный рабочий день, но говорят так: «Нагрузка большая, потому что школьники всего 5 дней учатся». А не раздута ли программа обучения?
Помимо уроков есть дополнительное образование, в рамках которого можно дать практику. Но значительная часть дополнительного образования есть продолжение теоретических уроков.
Получается так, что основная программа пытается как можно больше времени забрать у дополнительного образования, заменяя практику теорией. Хорошо, но может ли школа при этом дать такого же уровня навыки, как специализированные учебные заведения, кружки и курсы? Не лучше ли обратить внимание на то, а какие дополнительные занятия есть у каждого школьника?
Сколько уроков музыки не ставь в неделю, а на пианино не научишься играть. Сколько не ставь уроков физкультуры, а результаты не будут такими, как в спортивной секции. Сколько уроков информатики не ставь, а программировать не научишься так, как на специализированных курсах по программированию.
Организовать кружок по программированию в школе — это неплохая идея. Но, как и у любой сферы деятельности, требующей технических средств обучения, здесь возникает большая проблема — где и на чём проводить занятия? Если для изучения английского языка достаточно стола и стульев, то для программирования — оборудованные рабочие места. Они есть в кабинете информатики, но дадут ли его человеку со стороны? Маловероятно. Значит, дополнительное занятие будет проводит учитель по информатике. А если он не программист или ему интересно что-то другое, а не Python, компьютерная графика, игры и робототехника?
Вспомним свои уроки информатики. По своему опыту скажу так: какой бы язык программирования мы не изучали в школе (а точнее на УПК) и в техническом вузе, результат был бы одинаковым — никаким. Он начал появляться только тогда, когда в доме появился компьютер и стал каждый день часа по два заниматься программированием самостоятельно, а затем на работе.
Представим ситуацию, что на уроках информатике действительно изучают программирование. Подойдёт ли для этого Pascal?
Есть такое мнение, что неважно, какой язык программирования пытаться изучать в школе, потому что главное — понять основы, а они в любом языке одинаковые.
Если следовать данной логике, то, например, можно сказать так: неважно на каком музыкальном инструменте изучать основы музыки, потому что они везде одинаковые. Хорошо, возьмите поперечную флейту и покажите на её примере основы — гармонические интервалы, аккорды и основные гармонические обороты. Не получается?
Но программирование — это же совсем другое. Алгоритмы, переменная, массив, цикл, условные операторы, математические операции и др. — везде одно и тоже.
Не будем ловить автора идеи о равноправии языков программирования на словах и предлагать вернуться к изучению Ассемблера, а попробуем найти аргументы и факты практической целесообразности изучения Паскаля в текущих условиях.
«На Pascal уже давно ничего не пишут» — сильный аргумент, но в ответ сразу услышим россыпь «преимуществ»:
Pascal — предельно простой и понятный язык, который специально разрабатывался как учебный и по нему много метод материалов
Pascal — компилируемый язык. Компилятор сам проверяет наличие ошибок
Pascal — строго типизированный язык с чёткой логической структурой
Да, в Pascal нет ООП, но оно есть в Delphi
Pascal — предельно простой и понятный язык, который специально разрабатывался как учебный
Если говорить о простоте Pascal, то вопрос спорный.
Когда-то давно я сам начинал с Pascal, затем перешел на Delphi и был почитателем данного языка программирования. В те далёкие годы двумя руками голосовал за изучения Pascal, а не Basic и тем более Си. Но развитие web-технологий, мобильных устройств, робототехники и искусственного интеллекта привело к тому что гораздо удобнее, быстрее, гибче и эффективнее многие задачи на практике решаются при помощи скриптовых языков.
Сейчас по работе требуется знание web-технологий и в те редкие моменты, когда открывается Delphi, каждый раз ловлю себя на мысли, что тону в коде и пытаюсь бежать под водой, испытывая сопротивления толщи воды. Это касается не только синтаксиса в виде бесконечных begin и end, операции присваивания и прочего. Это касается, прежде всего, эффективности решения практического круга задач, когда на JavaScript штатными средствами задачи решаются просто без необходимости вспоминать то, какие компоненты могут предоставить базовую функциональность.
Так Pascal предназначен для решения других задач! Да, у каждого языка своя область применения. Разработчики Delphi предлагаю инструменты и для web-разработки, и для мобильной. Но скажите, при необходимости разработать web-сайт, приложение или сервис вы выберите Delphi для серверной части и базы данных или что-то более практичное? А при разработке мобильных приложений FireMonkey или другое?
Pascal сейчас — это не тот Pascal из 80-х годов. Но дело в том, что с появлением оконных операционных систем изменилась вся концепция разработки. Это в операционной системе DOS структурное программирование было эффективным (и единственно доступным до появления ООП). А в оконных ОС вся работа строится вокруг объектов. А мы всё изучаем транзисторы чтобы потом перейти к микроконтроллерам когда нужны уже процессоры.
Pascal — компилируемый язык
Компилятор Pascal действительно хорош. Но является ли наличие компилятора преимуществом при обучении? Без компилятора школьники не в состоянии написать работающее приложение? В состоянии, что подтверждается большим количеством разных обучающих платформ на скриптовых движках. А большое количество успешных web-проектов говорит о том, что получить достаточно надёжную в работе систему можно и без использования компилятора.
Pascal — строго типизированный язык с чёткой логической структурой
Во времена структурных языков программирования это было преимуществом C развитием web и мобильных технологий, а теперь ещё и искусственного интеллекта концепция изменилась. Сейчас требуются гибкость и адаптивность.
Может ли Паскаль выполнить код, заданный строкой, на лету создавать динамические объекты без необходимости перезапуска проекта? Так для другого он был создан. Да, но сейчас-то, в основном, требуется это, а не то другое.
Сколько говорилось, что строгий XML заменит HTML, но этого не произошло. XML используется при написании мобильных приложений и как формат для хранения древовидных структур данных, но он не заменил нестрогий HTML.
Программисты при помощи строго типизированных языков ставили перед пользователями четкие рамки и границы — делать так и так. Но практика показала, что пользователи предпочитают работать по своему разумению. Если их ограничил в чем-то, то сейчас они просто перейдут на другой ресурс, где такого ограничения нет. То есть, акцент сместился с необходимости «строить» пользователей на предоставление им свободы и последующего контроля за тем, что они делают.
Если раньше браузеры пытались как-то учить пользователей писать корректную разметку, то сейчас разработчик бросили эту бесперспективную затею и сосредоточили внимание на то, чтобы браузеры предоставляли хорошую функциональность и были как можно более устойчивыми и к некорректной разметке, и к возникающим ошибкам.
Раньше сайт был вотчиной только их разработчиков и ничего с этим поделать было нельзя. А сейчас можно установить плагины и частично доработать функциональность сайта под себя, если разработчики не собираются этого делать.
Возможно, это будет сказано громко, но изучение Pascal в настоящее время похоже на то, как в кружке робототехники предложить начать занятия с изучения основ электричества. Представьте, перед учащимися лежат робототехнические наборы Лего, а им раздают наборы по электричеству, чтобы сначала они изучили закон Ома как основа основ для всего работающего от электричества. А нельзя сразу приступить к робототехнике? Обязательно нужно сначала учить месяц ноты, чтобы потом показать на гитаре 3 «дворовых» аккорда.
Для чего сначала изучать структуры, если мы находимся в среде объектов? У нас есть возможность делать приложения, выводить графические данные, использовать готовые библиотеки. Для чего паять плату с микроконтроллером, если можно взять готовую и сразу приступить к его программированию для решения практических задач?
Скратч, App Invertor, Roblox и десятки других обучающих систем — это объектные среды. Нас окружают объекты, в браузере объекты, на экране смартфонов — объекты. Без всякого погружения в инкапсуляцию, наследование и полиморфизм можно осмысленно работать с существующими объектами и понимать, вот для чего это нужно и как может пригодиться дальше. А нужно ли это понимать? Мне кажется, что нужно. Иначе получится как в фильме про восточные единоборства: «Учитель, я уже неделю стою на одной ноге. Для чего это? Я хочу пальцем доски ломать, а занимаюсь непонятно чем.»
JavaScript неудобен тем, что в нем есть готовые функции, благодаря которым не требуется писать алгоритмы для их реализации? А нужно ли сейчас вручную писать то, что уже существует в виде готовых функций сортировки, фильтрации и др.? Так алгоритмы же так прокачивают мозг! Да, у тех, кому это интересно или кого заставляют этим заниматься. А для других, что-то упустивших когда-то или предпочитающих другие виды деятельности, а не сидение за экраном перед задачами, — это непонятное и ненавистное занятие.
Так для чего изучать Паскаль в школе? Для соответствия ФГОС. Но никто не запрещает за рамками данного стандарта параллельно изучать любой другой язык программирования.