Чтобы выбрать подходящий из них для изучения, нужно ознакомиться с классификацией языков программирования, с достоинствами и недостатками каждого, а также с другими важными характеристиками: назначением, сферой применения, востребованностью и перспективами развития.
Процедурное и непроцедурное программирование
Сначала нужно узнать общие виды языков программирования и их назначение.
Все они подразделяются на две категории:
Процедурная (алгоритмическая) программа — это система формальных предписаний, направленных на решение конкретных задач, которые выполняет ЭВМ. Непроцедурное программирование представляет собой прямо противоположную методологию (парадигму) разработки, когда компьютеру ставится определённая задача в более или менее общем виде, без написания формализованного алгоритма, который отдаётся на усмотрение машины.
Процедурные языки отличаются тем, на кого в первую очередь направлены: на машину или человека. Они подразделяются на две категории:
Низкоуровневые языки ориентированы на конкретные компьютерные архитектуры и учитывают их особенности. Они являются следующим уровнем после машинного кода и следуют конкретным указаниям, исходящим от процессора. Работать с ними тяжело, но созданные с их помощью программы (обычно это системные программы и драйверы) занимают меньше места в памяти и работают быстрее.
Высокоуровневые языки более понятны для человека. Соответственно, программировать на них гораздо проще и удобнее. В них не учитываются особенности конкретных типов процессоров, поэтому такие программы легко переносятся с одной платформы на другую.
Для этого используют специальные программы-трансляторы.
Непроцедурные языки включают две основные языковые группы:
Объектно-ориентированные состоят из ряда независимых объектов, которые функционируют как отдельные компьютеры. С помощью этих блоков можно решать задачи, не вникая во «внутреннюю кухню» их работы.
Работа с декларативным языком подразумевает установление взаимосвязей между исходными информационными структурами и свойствами конечного результата. При этом в нём не существует понятия «команда», а программист не создаёт алгоритмы.
Декларативные языки подразделяются на два семейства:
Логическое программирование описывает проблемы в виде фактов и формул, а система решает их посредством механизмов логического вывода. Функциональное, в свою очередь, формулирует задачу как совокупность определённых функций.
Десять самых популярных языков
Теперь от общей классификации можно перейти к обзору ключевых современных языков программирования, а именно самых популярных и любимых профессионалами.
Их всего десять в списке:
У каждого из них есть свои характерные особенности, недостатки и преимущества, которые можно увидеть в описаниях ниже.
С++ (Си-плюс-плюс)
С++ появился очень давно, но до сих пор пользуется большой популярностью у профессионалов, которые считают владение им практически обязательным. Изучать его как первый язык программирования не нужно, но приобретение профессионализма характеризуется тем, что человек начинает использовать С++ на постоянной основе. Со времени создания он прошёл несколько процедур стандартизации и обновления, поэтому сохраняет актуальность и по сей день.
Главным его плюсом является то, что он полностью универсален. На С++ можно писать всё что угодно, именно это и обеспечило ему любовь профессионалов. Кроме того, он относительно прост в освоении — тому, кто уже изучил С, Python или Java, будет нетрудно разобраться и в С++. Верно и обратное, так что С++ часто представляют как своего рода универсальную формулу и некий ключик к миру программирования вообще.
В то же время критики отмечают неудобный синтаксис и слишком длинный, громоздкий программный код, который часто появляется в результате работы на С++. Однако эта проблема уже отчасти исправлена с помощью дополнительных шаблонов.
Существуют разные точки зрения на этот счёт, но факт в том, что С++ пользуется неослабевающей популярностью на протяжении почти 30 лет.
Python (Пайтон или Питон)
Python — весьма популярный в наше время язык, созданный с целью как можно более простого написания сложных программ. Он был образован на основе ранних разработок и впитал в себя все их достижения. При этом постоянно выходят новые обновления, с каждым из которых он становится всё совершеннее.
К основным плюсам Python относятся простота и многофункциональность. Однако за многофункциональностью скрывается низкая скорость исполнения, а за простотой — невнятный системный код, зачастую содержащий множество ошибок. Но, несмотря на это, у Python сейчас достаточно почитателей.
Visual Basic (Вижуал Бейсик)
Вряд ли найдётся тот, кто не слышал об этом продукте от Microsoft, ведь многие программисты именно на нём познавали азы программирования. Visual Basic простой, многофункциональный и подходит для быстрого прототипирования.
VB даёт широкие возможности по созданию программного кода, а также позволяет разрабатывать UI (пользовательский интерфейс) программ. Именно его чаще всего используют специалисты Microsoft для создания таблиц с данными.
Впрочем, не обошлось и без недостатков, таких как отсутствие комментариев и доступ к памяти компьютера на низком уровне. Кроме того, у этой программы невысокая скорость работы, использовать её можно только на ОС Windows и macOS.
PHP (Пи-эйч-пи)
Расшифровывается как Personal Home Page Tools («инструменты для создания личной странички в интернете»). Чаще всего PHP применяют веб-мастера для разработки сайтов. В настоящее время он наиболее популярен в среде хостов (интернет-провайдеров), которые следуют тенденции использовать и поддерживать PHP, в чём и заключается его огромное преимущество. Но одним интернетом его функциональность не ограничивается.
PHP завоевал большую симпатию у сайтостроителей благодаря многоплатформенности (подходит для любой операционной системы), быстроте работы, простоте и удобству. Кроме того, с его помощью можно создавать GUI (графический пользовательский интерфейс). К его недостаткам относятся несовместимость разных версий и невозможность создания в нём многопотоковых программ, усиливающих производительность компьютера.
Delphi (Делфи)
Delphi — императивный объектно-ориентированный язык, разработанный на основе высокоуровневого Object Pascal.
Он широко распространён благодаря многофункциональности, а также множеству компиляторов и диалектов, среди которых программист найдёт именно то, что подходит под его конкретные задачи.
С помощью Delphi написано много программ, включая плееры, файловые менеджеры, мессенджеры и многое другое. Диалектное богатство одновременно является и достоинством, и недостатком. Дело в том, что программа, написанная на одном из его видов, скорее всего, просто не откроется на другой версии.
Java (Джава)
Java известен своей мультиплатформенностью и тем, что находится в составе большинства современных операционных систем, так как работа многих приложений без него будет недостаточно результативной или вообще невозможной. Практически каждый пользователь сталкивался с необходимостью установить или обновить Java-модуль.
К подводным камням Java относится медлительность написанных на нём программ и их «прожорливость» (то есть они задействуют оперативную память в большом объёме).
Зато у Java есть несколько модификаций, которые характеризуются собственными библиотеками данных и структурой, заточенной под специальные задачи.
JavaScript (Джава-скрипт)
Это язык прост, многофункционален и уже давно стал неотъемлемым атрибутом большинства современных интернет-браузеров. Обычно его используют для придания сайтам большей интерактивности, то есть возможности пользователя взаимодействовать с контентом.
JavaScript применяется где только можно — это браузеры, плагины, прикладное программное обеспечение, офисные и серверные приложения. Дополнительную популярность ему обеспечили специальные высокоабстрактные библиотеки.
Однако JavaScript довольно небезопасен, а написанные на нём приложения обычно пестрят ошибками. Любой пользователь интернета с ними сталкивался, причем не раз. Но стереть его из истории пока что нельзя, ведь браузеры без него попросту перестанут работать.
Ruby (Руби)
Кроссплатформенный и по-настоящему универсальный скриптовый язык, относящийся к сфере объектно-ориентированного программирования. Его синтаксис прост и лаконичен, благодаря чему новичкам будет несложно его освоить. Профессионалы любят его за бережливость по отношению к компьютерным ресурсам.
Ruby часто хвалят за динамизм и хорошую сбалансированность, где красота не принесена в жертву удобству и наоборот. Кроме того, он абсолютно открыт для использования, изменения, копирования и распространения, а ещё у него довольно много разных библиотек, которые обновляются одна за другой и позволяют решать разные задачи.
ActionScript (Экшн-скрипт)
ActionScript — это мультимедийный скриптовый язык, который предназначен для написания объектно-ориентированных программ, а именно Flash-приложений.
Его заточенность под конкретные задачи является одновременно и плюсом, и минусом, так как в пределах Flash он отличается многофункциональностью, но ничего другого на нём написать практически невозможно.
Кроме того, его характеризует гибкость, позволяющая решать задачи разными и порой нестандартными способами, но иногда такой код трудно понять кому-либо, кроме самого автора. Однако даже и он через время может запутаться в своём коде, а ведь это чревато трудностями с отладкой, обновлениями и повторным использованием.
Nemerle (Немерле)
Это высокоуровневый гибридный язык, в котором сочетаются элементы функционального и объектно-ориентированного программирования. Он появился не так давно и вобрал в себя лучшие наработки языков-предшественников, но при этом дал и реальный вклад в программирование — возможность создания метапрограмм.
Этот метод заключается в выработке алгоритмов, которые в процессе своей работы создают возможные сценарии для дальнейшего образования исполняемых файлов. Проще говоря, в Nemerle соединились лучшие и самые полезные черты предыдущих языковых поколений. Это пример языка, который совмещает в себе новизну и универсальность.
Советы для начинающих
Все языки программирования не перечислить, здесь были приведены только самые популярные из них. У каждого есть свои плюсы и минусы, потому что они ориентированы на разные сферы. Какой-то язык подходит для написания Flash-анимации, но не годится для работы с браузерами, какой-то — в точности до наоборот.
Так что нужно крепко подумать перед тем, как браться за изучение определённого языка.
Обычно программисты либо начинают с языков попроще, а потом постепенно выбирают самый подходящий под свои задачи и специализируются в этой области, либо же становятся многоязычными и продолжают потихоньку пользоваться каждым из них.
Эксперты рекомендуют новичкам начинать обучение с Visual Basic, потом переходить на С++, а уже после этого выбирать язык, который покажется самым интересным, удобным и полезным.
Языки программирования
Язык программирования — искусственный (формальный) язык, предназначенный для записи программ для исполнителя (например, компьютера или станка с числовым управлением). Язык программирования задается своим описанием. Описание языка программирования — это документ, специфицирующий возможности алгоритмического языка. Обычно описание содержит:
· алфавит допустимых символов и служебных (ключевых) слов;
· синтаксические правила построения из алфавита допустимых конструкций языка;
· семантику, объясняющую смысл и назначение конструкций языка.
Языки программирования служат для представления решения задач в такой форме, чтобы они могли быть выполнены на ЭВМ.
Машинный язык, который состоит из команд процессора ЭВМ, также является языком программирования. Но алгоритмы, записанные на машинном языке, трудны для чтения даже программисту-разработчику, кроме того, работа с таким языком требует знания архитектуры конкретного компьютера, поэтому в программировании, как правило, используют языки более высокого уровня, чем машинные языки. Язык высокого уровня — это язык программирования, понятия и структура которого удобны для восприятия человеком и не зависят от конкретного компьютера, на котором будет выполняться программа.
Для того чтобы программу, записанную на языке программирования высокого уровня, можно было выполнить на компьютере, ее надо перевести на машинный язык. Программное средство, выполняющее эту функцию, называется транслятором.
Транслятор — это программа, которая считывает текст программы, написанной на одном языке, и транслирует (переводит) его в эквивалентный текст на другом языке (обычно на машинном языке). Трансляторы бывают двух основных видов: компиляторы и интерпретаторы.
Компилятор преобразует текст исходной программы в набор инструкций для данного типа процессора (машинный код) и далее записывает его в исполняемый файл (exe-файл), который может быть запущен на выполнение как отдельная программа. Другими словами, компилятор переводит программу с языка высокого уровня на низкоуровневый язык.
Интерпретатор в результате трансляции выполняет операции, указанные в исходной программе. При этом программа остается на исходном языке и не может быть запущена на выполнение без интерпретатора.
Разделение на компилируемые и интерпретируемые языки является несколько условным. Так, для любого традиционно компилируемого языка, как, например, Pascal, можно написать интерпретатор, а для любого интерпретируемого языка можно создать компилятор, — например, язык Бейсик, изначально интерпретируемый, может компилироваться без каких бы то ни было ограничений.
Некоторые языки, например Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация. Подобный подход в некотором смысле позволяет использовать плюсы как интерпретаторов, так и компиляторов.
Со времени создания первых программируемых машин человечество придумало уже более двух с половиной тысяч языков программирования. Количество языков программирования постоянно растет, хотя этот процесс явно замедлился. Некоторыми языками пользуется только небольшое число программистов, другие становятся известны миллионам людей. Часть из них узкоспециализированны (предназначены для решения определенного класса задач), а часть — универсальны. Профессиональные программисты иногда применяют в своей работе более десятка разных языков программирования.
Классификацию языков программирования можно вести по нескольким критериям: машинно-ориентированные (ассемблеры) и машинно-независимые, специализированные и универсальные.
К специализированным языкам можно отнести язык АРТ (Automatically Programmed Tools) — первый специализированный язык программирования для станков с числовым управлением. Язык был разработан группой американских специалистов в 1956–1959 гг. под руководством математика Дугласа Т. Росса. Язык СOBOL (Common Business–Oriented Language), созданный в США под руководством Грейс Мюррей Хоппер в 1959 г., ориентирован на обработку экономической информации. Математик Грейс Мюррей Хоппер возглавила проект по разработке СOBOL в чине капитана второго ранга, впоследствии она стана контр-адмиралом. Г.М. Хоппер называют “мамой и бабушкой” СOBOLа.
Грейс Мюррей Хоппер
(Grace Murray Hopper)
К специализированным языкам можно отнести и современные языки web-программирования Perl и PHP. Языки Рапира, Е-язык (Россия), SMR (Великобритания), LOGO (США) можно отнести к языкам, предназначенным для обучения программированию.
Самыми распространенными универсальными языками программирования сегодня являются C++, Delphi, Java, Pascal, Visual Basic, Python.
Но, рассматривая языки программирования как самостоятельный объект исследования, можно провести их классификацию по концепции построения языка.
Классификация языков программирования
Языки программирования можно разделить на два класса: процедурные и непроцедурные. Процедурные (императивные) языки — это языки операторного типа. Описание алгоритма на этом языке имеет вид последовательности операторов. Характерным для процедурного языка является наличие оператора присваивания (Basic, Pascal, С). Программа, написанная на императивном языке, очень похожа на приказы, выражаемые повелительным наклонением в естественных языках, то есть это последовательность команд, которые должен выполнить компьютер. Программируя в императивном стиле, программист должен объяснить компьютеру, как нужно решать задачу.
Непроцедурные (декларативные) языки — это языки, при использовании которых в программе в явном виде указывается, какими свойствами должен обладать результат, но не говорится, каким способом он должен быть получен. Непроцедурные языки делятся на две группы: функциональные и логические.
Декларативные языки программирования — это языки программирования высокого уровня, в которых операторы представляют собой объявления или высказывания в символьной логике. Типичным примером таких языков являются языки логического программирования (языки, основанные на системе правил и фактов). Характерной особенностью декларативных языков является их декларативная семантика. Основная концепция декларативной семантики заключается в том, что смысл каждого оператора не зависит от того, как этот оператор используется в программе. Декларативная семантика намного проще семантики императивных языков, что может рассматриваться как преимущество декларативных языков над императивными.
Логические языки
В программах на языках логического программирования соответствующие действия выполняются только при наличии необходимого разрешающего условия на вывод новых фактов из данных фактов согласно заданным логическим правилам. Логическое программирование основано на математической логике (см. “Логические операции. Кванторы”, “Логические выражения”).
Первым языком логического программирования был язык Planner, он был разработан Карлом Хьюитом в Лаборатории искусственного интеллекта Массачусетсского технологического института в 1969 г. В этом языке была заложена возможность автоматического вывода (получения) результата из данных и заданных правил путем перебора вариантов (совокупность которых называлась планом). Но самым известным языком логического программирования является ПРОЛОГ (Prolog), который был создан во Франции в Марсельском университете в 1971 г. Аленом Кольмеро (Colmerauer).
Ален Кольмеро
(Alain Colmerauer)
Программа на языке ПРОЛОГ содержит две составные части: факты и правила. Факты представляют собой данные, с которыми оперирует программа, а совокупность фактов составляет базу данных ПРОЛОГа, которая, по сути, является реляционной базой данных. Основная операция, выполняемая над данными, — это операция сопоставления, называемая также операцией унификации или согласования. Правила состоят из заголовка и подцелей. Выполнение программы, написанной на ПРОЛОГе, начинается с запроса и состоит в доказательстве истинности некоторого логического утверждения в рамках заданной совокупности фактов и правил. Алгоритм этого доказательства (алгоритм логического вывода) и определяет принципы исполнения программы, написанной на ПРОЛОГе.
В отличие от программ, составленных на языках процедурного типа, предписывающих последовательность шагов, которые должен выполнять компьютер для решения задачи, на ПРОЛОГе программист описывает факты, правила, отношения между ними, а также запросы по проблеме. Например, пусть у нас есть следующие факты относительно того, кто является чьей мамой:
Кроме этого, имеется правило, вводящее отношение бабушка:
Теперь мы можем делать запросы на предмет того, кто бабушка того или иного человека, или кто является внучкой (внуком) определенной женщины:
Ответ на этот запрос система ПРОЛОГ выдаст так:
Возможности применения языка ПРОЛОГ весьма обширны. Среди наиболее известных — применение в символической математике, планировании, автоматизированном проектировании, построении компиляторов, базах данных, обработке текстов на естественных языках. Но, наверное, самое характерное применение ПРОЛОГа — это экспертные системы.
На сегодняшний день существует целый класс логических языков; так, от языка Planner также произошли логические языки программирования QA-4, Popler, Conniver и QLISP. Языки программирования Mercury, Visual Prolog, Oz и Fril произошли уже от языка Prolog.
Функциональные языки
Первым языком функционального типа является язык ЛИСП, созданный в Массачусетсском технологическом институте в 1956–1959 гг. Джоном Маккарти, который в 1956 г. на Дармутской конференции (США) впервые предложил термин “искусственный интеллект”.
Джон Маккарти (John McCarthy)
И хотя до сих пор не утихают споры вокруг этого термина и развившегося научного направления в его рамках, исследователи единодушны в использовании функциональных и логических языков для данной области. Значительное число работ по искусственному интеллекту реализовано на ЛИСПе.
После своего появления ЛИСПу присваивали много эпитетов, отражающих его черты: язык функций, символьный язык, язык обработки списков, рекурсивный язык. С позиций сегодняшней классификации ЛИСП определяется как язык программирования функционального типа, в основу которого положен метод 

Программа, написанная на функциональном языке, состоит из неупорядоченного набора уравнений, определяющих функции и значения, которые задаются как функции от других значений. Программы и данные ЛИСПа существуют в форме символьных выражений, которые хранятся в виде списковых структур. ЛИСП имеет дело с двумя видами объектов: атомами и списками. Атомы — это символы, используемые для идентификации объектов, которые могут быть числовыми и символьными (понятия, материалы, люди и т.д.). Список — это последовательность из нуля или более элементов, заключенных в круглые скобки, каждый из которых является либо атомом, либо списком. Над списками выполняются три примитивные операции: извлечение первого элемента списка; получение оставшейся части списка после удаления первого элемента; объединение первого элемента списка L и оставшейся части списка Q.
Тексты программ на функциональных языках программирования только описывают способ решения задачи, но не предписывают последовательность действий для решения.
В качестве основных свойств функциональных языков программирования обычно рассматриваются следующие: краткость и простота; строгая типизация; модульность; функции — объекты вычисления; чистота (отсутствие побочных эффектов); отложенные (ленивые) вычисления.
Кроме ЛИСПа, к функциональным языкам относят РЕФАЛ (разработан в середине 60-х годов В.Ф. Турчиным в МГУ им. М.В. Ломоносова), Haskell, Clean, ML, OCaml, F#.
Приведем пример описания известного алгоритма быстрой сортировки списка на языке Haskell:
qsort (x:xs) = qsort elts_lt_x ++ [x]
++ qsort elts_greq_x where
elts_lt_x = [y | y = x]
Здесь записано, что пустой список уже отсортирован. А сортировка непустого списка состоит в том, чтобы разбить список на три: список элементов, меньших головы исходного списка, голова исходного списка ([x]) и список элементов хвоста исходного списка, больше или равных x.
Объектно-ориентированные языки
Объектно-ориентированные языки — это языки, в которых понятия процедуры и данных, используемых в обычных системах программирования, заменены понятием “объект” (см. статью “Объектно-ориентированное программирование”). Языком объектно-ориентированного программирования в чистом виде считается SmallTalk, возможности объектно-ориентированного программирования заложены также в Java, C++, Delphi.
Структура языка программирования
Между существующими языками программирования есть принципиальные расхождения в концепции построения языков, особенно это справедливо для более ранних языков, но все эти языки потому и называются языками программирования, что они с точки зрения внутренней системы построения имеют одинаковое формальное строение.
Любой язык программирования состоит из предложений (операторов). Предложения (как и слова) определены над неким алфавитом С. Синтаксис языка описывает множество предложений над алфавитом С, которые внешне представляют правильно сформированные программы.
Синтаксис языка — это правила получения слов и предложений этого языка. Синтаксис схематически описывается с помощью определенных грамматических правил.
Знание формального языка (алфавита + синтаксиса) хотя и достаточно для установления синтаксической корректности программы, однако недостаточно для понимания ее назначения и способа действий. Значение и способ действия программы на языке программирования уточняются путем задания семантики.
Семантика языка — это правила интерпретации слов формального языка, т.е. установления значения отдельных языковых элементов.
Для определения формальных языков, в том числе для языков программирования, используют БНФ (формы Бэкуса — Наура) и синтаксические диаграммы. Это два взаимозаменяемых способа описания.
При описании языка программирования через БНФ используются следующие обозначения:
1) — определяемое слово;
2) R — правило из синтаксиса для формирования слова;
Каждое R состоит из терминальных слов или лексем языка и, возможно, следующих символов:
· [..] — данный элемент присутствует в БНФ;
· <..>— данное вхождение может быть использовано в БНФ;
· <..>* — данное вхождение может быть использовано в БНФ конечное число раз.
Пример 1. Приведем пример БНФ-правила, определяющего целое число.
Читается это правило так: “Целое число — это символ 0 или последовательность символов, которая может начинаться символом “–”, а далее следует отличная от нуля цифра, вслед за которой может следовать любая конечная последовательность цифр”.
Специальную, схожую с БНФ, форму описания формальных языков представляют синтаксические диаграммы. В синтаксических диаграммах используются три типа элементов: овал/круг, прямоугольник, стрелки. В овалах помещаются терминальные слова или лексемы, в прямоугольниках — определяемые слова. Графическое представление языка через синтаксические диаграммы делает описание языка наглядным.
Пример 2. Описание целого числа с помощью синтаксической диаграммы.
Методические рекомендации
Согласно Примерной программе, необходимо, чтобы школьники представляли современную классификацию языков программирования, а также ориентировались в областях применения каждого из них. Проще всего изложение данной темы проводить после того, как уже произошло подробное знакомство с одним из языков программирования.
Следует рассказать, почему возникают новые языки и совершенствуются старые: в первую очередь это происходит при поиске средства для быстрого написания сложных программ, которые к тому же не содержали ошибок. Известен пример, когда создание языка АДА (назван так в честь первой женщины-программиста Ады Лавлейс, дочери Байрона) было инициировано в 1974 году в Министерстве обороны США. Американские военные осознали, что они теряют много времени, усилий и денег на разработку и сопровождение встроенных компьютерных систем (например, систем наведения ракет), а трудноуловимые ошибки языков программирования приводят к настоящим катастрофам.
Декларативные языки были очень популярны в конце 80-х — начале 90-х годов прошлого столетия, они были названы языками программирования искусственного интеллекта для компьютеров пятого поколения. Однако надежды на их широкое распространение пока не оправдались. Возможно, потому, что существующие системы функционального и логического программирования не позволяют создавать быстро работающие программы для содержательных задач. Не исключено, что их время просто еще не наступило.
Выбирая стратегию преподавания темы “Алгоритмизация и программирование”, необходимо учитывать, что задача общеобразовательного курса — это в большой степени выработка определенного стиля мышления, формирование наиболее общих навыков, умений и представлений, нежели освоение тех или иных конкретных языков и технических средств программирования. В то же время, такой курс должен служить базой для последующего профессионального изучения программирования в высшей школе или старших классах средней школы (в рамках профессионального обучения).
В настоящее время существуют два наиболее распространенных подхода к преподаванию программирования:
1) преподавание на основе специально разработанного языка учебного языка, ориентированного на обучение основным навыкам программирования;
2) изучение одного или нескольких языков программирования, широко используемых на практике при решении научных и хозяйственных задач (такие языки можно назвать стандартными).
Первый подход часто используется при преподавании основ программирования в младших классах средней школы с использованием специальных языков, например, Рапиры, Е-языка, LOGO. Эти языки учитывают возможности школьников младших классов. Такой подход хорош при углубленном изучении информатики в 5–6-х классах.
Относительно второго подхода можно сказать, что большинство современных реализаций стандартных языков загружено большим количеством технических деталей и сложны в изучении. Тем не менее наиболее приемлемым для общеобразовательной школы, где курс информатики преподается в 8–11-х классах, является обучение теоретическим основам программирования на базе стандартного языка. При этом не обязательно вдаваться в глубины языка. Учащиеся, которых он заинтересует, могут сделать это и сами. Наибольшее внимание следует уделить переходу от алгоритмических структур к их программной реализации на языке программирования.
Здесь стоит отметить, что Pascal первоначально создавался как учебный язык, но со временем получил широкое распространение в качестве стандартного языка и развитие в виде объектно-ориентированного языка с визуальной технологией программирования Delphi. За основу курса в 8–9-х классах можно взять Pascal или Basic, а в качестве расширенного (факультативного) курса в 10–11-х классах ознакомить учащихся с их объектно-ориентированными расширениями (Delphi и Visual Basic). У каждого языка есть свои сторонники и противники, и конечный выбор остается за учителем.
Существует два основных подхода к изучению языка программирования: формальный и “программирование по образцу”. Первый основан на формальном (строгом) описании конструкций языка программирования (синтаксиса языка и его семантики) тем или иным способом (с помощью синтаксических диаграмм, мета-языка или формального словесного описания, в частности, семантики) и использовании при решении задач только изученных, а следовательно понятных, элементов языка. При втором подходе школьникам сначала выдаются готовые программы, рассказывается, что именно они делают, и предлагается написать похожую программу или изменить имеющуюся, не объясняя до конца ряд “технических” или несущественных, с точки зрения учителя, для решения задачи деталей. При этом говорится, что точный смысл соответствующих конструкций вы узнаете позднее, а пока поступайте аналогичным образом. Второй подход дает возможность так называемого “быстрого старта”, но создает опасность получить полуграмотных пользователей среды программирования, т.е. людей, которые используют в своей практике достаточно сложные конструкции, но не могут четко объяснить, почему в том или ином случае нужно применять именно их, и как они работают. В результате рано или поздно такие “программисты” сталкиваются с ошибками, исправить которые они просто не в состоянии — им не хватает знаний.
Одна из задач школьной информатики — научить именно формальному подходу, в частности, при применении различных определений. И формальное изучение языка программирования этому немало способствует. Но и без хороших примеров (образцов) при обучении программированию школьников не обойтись. И чем младше ученики, тем больше примеров необходимо приводить при описании языка (иногда даже заменяя ими строгое определение). Другое дело, что следует добиваться того, чтобы в результате обсуждения примера все его детали оказались понятны школьникам (обязательно нужно объяснить, как и почему это работает, в том числе опираясь на уже изученный формальный материал). В этом случае сильные ученики получат возможность понять все досконально и смогут использовать полученные знания в дальнейшем, а остальные приобретут конкретные навыки и оставят для себя возможность вернуться при необходимости к формальным определениям позже.







