В то время как одни пытаются обосновать, какой язык лучше в качестве средства обучения программированию школьников, посмотрим на вопрос с другого угла. Ведь не только языки бывают разными, также не всегда одинаковы цели обучения, методики (подходы), обучаемые. Поэтому вероятно в одних случаях может быть лучше один язык, в других — иной.

У понятий "обучение" и "образование" как минимум разный смысловой оттенок. Образованный человек — не значит, что обученный что-то делать с целью получения оплаты за содеянное. Образование включает кроме обучения задачи развития и воспитания. Профориентация школьников, реализуемая через увеличение количества часов на предмет, факультативы и отчасти дополнительное образование, — это не профессиональная подготовка.

Поэтому целью обучения здесь может быть не столько дать практические и фундаментально-научные теоретические знания, их системность, сколько привитие базовых навыков, развитие определенных форм мышления, доступное объяснение, создание представления об изучаемом предмете. На занятия приходят не сферические кони в вакууме, а подростки, самомотивация которых может быть недостаточно развита, особенно если это общий поток. Кроме кнута нужен пряник. Согласно принципу "зоны ближайшего развития", учитывающему возраст, опыт и психологические особенности, не следует давать сложность, которую даже с помощью учителя обучаемые не способны освоить до уровня самостоятельной работы.

Выбирая язык для обучения, может более важным учитывать какие-то другие его характеристики (например, простоту, область применения, поддерживаемые парадигмы), а не такие "технические" как статическая/динамическая типизация, строгую ли структуру имеет код, лучше ли явное неявного, компиляция или интерпретация. Потому что в контексте ознакомления с наукой — это скорее дуализм, то есть вопрос подхода, привычки и того, что бывает по-разному, у всего есть свои преимущества и недостатки.

Так в случае динамической типизации типы никуда не исчезают, вы всегда о них помните, от типа данных зависит, в каких операциях они могут участвовать. Просто королем у вас выступает объект–данное, можно представить, что тип привязан к нему. Переменная лишь обслуга, ссылка, временное имя, механизм доступа к данным. С другой стороны, при статической типизации королевой будет переменная, она решает можно в нее положить вот такие данные или нельзя. Благодаря ей происходит предварительный захват участка памяти, размер которого определяется типом. А вот какое именно значение этого типа вы туда занесете, когда поменяете, обычной переменной не важно. Она была, есть и будет в программе в процессе всего ее выполнения.

Итак, отметим какое место, исходя из своих особенностей, могут занять Python, C и Pascal при изучении программирования в системе общего и дополнительного образования детей.

Python разносторонний язык. В нем есть почти все. Изучив "базовый Питон" в средней школе, в старшей можно добавить и структуры данных (в смысле стеки, графы и т.п.), и ООП. Изучение этих тем на Python будет легче, чем с помощью других языков.

Из-за наличия большого количества библиотек и фреймворков Python — идеальный выбор для дополнительного образования: знакомство с базами данных, обработка табличных данных, графики, создание GUI, мобильная разработка (Kivy), даже геймдев и веб-разработка в сочетании с другими языками. Для более младшего возраста есть библиотека Turtle. Широкое практическое использование языка открывает простор для проектной деятельности и межпредметной интеграции.

Однако при изучении алгоритмики (ход выполнения программы, ввод/вывод, условия/циклы, поиски минимума/максимума, сортировки, фильтрации, блок-схемы) практичность Питона оказывает медвежью услугу. Найдется тот, кто воспользуется встроенными функциями Python или срезами, заставив учителя оправдываться: "мы изучаем алгоритмы, а не я — дурак". Pascal ограничит личинку программиста, чтобы не дергалась и развивалась как положено.

Адаптированный под обучение Pascal реализует теорию программирования, не отягощенную областью применения. C Паскалем учат не столько язык, столько базовые принципы и понятия. В случае других языков специфика их практического применения накладывает свой отпечаток. Эти сферы деятельности и подходы в них могут быть еще неизвестны обучающимся, но мы окажемся вынужденными их касаться. Pascal в этом смысле чист и поэтому хорош для последующего изучения языка, которому первым быть не следует, например JS из-за того, что в нем много особенностей, за которой основа структурного программирования теряется.

В Паскале при изучении основ нет нужды касаться ООП и темы указателей. Прослеживается однозначная поэтапность, постепенное усложнение. Есть возможность ООП и динамические структуры полностью оставить на углубленный уровень. В Питоне же все — объекты, игнорировать это сложно, так как уже на списках или строках привет вам скажут методы, надо будет как-то объяснять их существование. Хотя это может быть интересной идеей построить курс так, чтобы понятие объекта вводилось уже в первых уроках, а ООП изучалось в связке со структурным программированием. Однако это уже другая история...

Что касается Си, то до того, как передавать массивы в функции, придется ввести понятие указателя как типа данных. При этом появляется более сложный для понимания синтаксис, предполагающий еще один уровень абстракции. Кроме того, в Си не так прост и однозначен ввод-вывод. Поэтому этот язык в средних классах — скорее плохая идея, или изучать его надо в урезанном варианте.

Сравнение передачи массива в функцию в Паскале и Си
Сравнение передачи массива в функцию в Паскале и Си

Допустим, можно рекомендовать Pascal для средних классов, а Си для старших, если изучение структурного программирования начинается здесь, или мы игнорируем знания полученные ранее. Однако когда речь заходит об углубленном уровне информатики, то кроме темы структур данных понадобится ООП, а его в Си нет. Поэтому он может быть альтернативой Паскалю в старших классах, только если информатика изучается на базовом уровне.

Если в старших классах учитывается предыдущий опыт, то естественно вы зависимы от языка изученного ранее. Паскаль дает вам не только указатели, структуры данных, ООП, но и GUI в среде Lazarus, что в добавок позволяет на практике познакомиться с RAD/визуальным программированием. Если ООП в Питоне со своими особенностями, то в Паскале имеет более "классический вид" (реализовано сокрытие данных, есть отличие между полями и свойствами, виртуальные методы и абстрактные классы). Однако ООП получается более сложным, а среди гирлянды бегин-ендов труднее улавливать суть.

Сравнение ООП на Паскале и Питоне
Сравнение ООП на Паскале и Питоне

Кроме того, углубленный уровень в старших классах — это уже основательная профориентация. Pascal здесь вряд ли уместен, странно к 18-ти годам, зная что пойдешь в IT, не быть знакомым с каким-нибудь практически используемым современным языком.

Резюмируя, получаем такую картину:

  • В средних (7–9) классах, когда при изучении программирования акцент делается на алгоритмах, лучше взять Pascal. В случае Python или С они должны быть правильно (методически обоснованно) "сокращены".

  • В старших класса, если информатика изучается на базовом уровне, Pascal можно заменить на С (и тогда скорее всего придется немного рассмотреть указатели) или на Python (введете некоторые понятия из ООП, как минимум представление об объекте и его методах).

  • Для старших классов на углубленном уровне лучше взять Python.

Что касается дополнительного образования детей, то альтернативой/дополнением к Питону может быть любой другой универсальный практически используемый язык. Однако он должен быть достаточно легким. Можно посмотреть в сторону Lua. Одним из его преимуществ является использование в геймдеве на практике. Если же акцент делается на веб-разработке, то, как уже было отмечено ранее, имеет смысл сначала изучить структурное программирование в Pascal и только потом переходить к связке HTML + CSS + JavaScript.

Си — добротный академический язык, отражает историю развития программирования, дает понимание, как работает ЭВМ. Поэтому его можно изучать факультативно (если такое еще есть в современном образовании) или оставить как мастхэв для ВУЗов.