Проблемы изучения программирования в школе

Обновлено: 05.07.2024

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

Объём учебной нагрузки

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

Положение не спасает и удвоение учебной нагрузки — её всё равно не будет хватать, уж слишком сложен и объёмен учебный материал даже при изучении одного языка программирования. А ведь школьный курс информатики - это не только программирование!

Цели и задачи курса программирования

Многие проблемы в преподавании информатики связаны с нечётким целеполаганием. Основной целью изучения образовательной области "Информатика" считается подготовка школьников к практической деятельности, а развитие мышления и формирование основ научного мировоззрения как бы отступают на второй план.

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

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

Преемственность школьного и вузовского курсов информатики

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

Вузовские преподаватели, в большинстве, негативно отзываются об этих попытках, так как вчерашние выпускники, поверхностно ознакомившись с основами языка в школе, без должного старания относятся к его изучению в институте, что приводит в итоге к академической неуспеваемости. Поэтому среди преподавателей ВУЗов бытует устойчивое мнение: "В школе учить программированию не нужно!"

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

Выбор языка программирования.


  1. знать основные свойства алгоритмов, типы алгоритмических конструкций: следование, ветвление, цикл, понятие вспомогательного алгоритма;

  2. уметь использовать алгоритмические конструкции, выполнять и строить простые алгоритмы, выполнять базовые операции над объектами: цепочками символов, числами, списками, деревьями;

  3. использовать приобретенные знания и умения в практической деятельности и повседневной жизни при выполнении индивидуальных и коллективных проектов, в учебной деятельности, в дальнейшем освоении профессий.

Олимпиады по программированию.

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

Мне думается что организаторы олимпиад просто немного опаздывают с реакцией на изменения внешних условий. Соревнования по программированию неизбежно займут место среди высокоспециализированных конкурсов типа музыкальных, художественных или спортивных (имею ввиду профессиональные конкурсы).
Мне кажется что содержание общешкольных олимпиад по ИТ - рано или поздно будет содержать вещи типа Интернет-поиска, обработки и компиляции разноплановой медиа-информации, решение на компьютере очень прикладных задач типа подсчетов сложных процентов по кредиту стандартными вычислительными пакетами - что-то в этом духе.

Систематическое построение курса

Несмотря на активную критику и формальное неприятие Бейсика, большинство задач по программированию одинаково решаются — строка в строку — на трёх "официальных" языках: Бейсике, Паскале, школьном алгоритмическом языке. А это свидетельствует о механическом переносе задач, придуманных под Бейсик, в более поздние разработки. Даже в новом обязательном минимуме наряду с упоминанием об объектном программировании присутствует фраза: "Знакомство с одним из языков программирования. Переменные величины: тип, имя, значение. Массивы (таблицы) как способ представления информации".

Интересно, что попытки реализовать курс программирования в одной-единственной, пусть даже самой лучшей программной среде, приводят к значительным методическим затруднениям. Изучение же нескольких учебных сред — роскошь, которую могут позволить себе далеко не все преподаватели.

Одним из путей решения проблемы может стать структурно-модульное разделение курса программирования на три уровня: пооперационный, процедурный, объектный. Каждый уровень может быть представлен собственным программно-методическим комплексом, изучение его может быть формально независимым от изучения других модулей. В зависимости от направленности всего курса информатики (уровень А и уровень Б в терминологии Министерства образования) отдельные модули могут быть расширены или, напротив, вообще исключены из курса.

Содержание курса программирования

Разделение всего курса на уровни, с одной стороны, позволит использовать наиболее удобные средства и приёмы для изучения понятий, характерных именно для этого уровня, с другой же стороны, потребует дополнительных усилий для связывания в единый комплекс отдельных модулей, реализующих каждый уровень.

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

Пооперационный уровень

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

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

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

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

Процедурный уровень

Процедурный уровень интересен тем, что направлен на получение конечного результата, тогда как на пооперационном уровне, в основном, создаются фрагменты программ. Именно с этого уровня начинается структурное программирование. Здесь по-прежнему важно линейное следование, но отдельные команды практически равноправны, а цикл или ветвление представляется как одна операция. Здесь изучается вложенность процедур, в том числе самовложенность (рекурсия). Здесь же вводится понятие параметра как переменной части процедуры, определяющей результат. Текст программы достаточно нагляден даже без применения дополнительных средств.

В ВУЗах традиционно структурное программирование изучается в среде TurboPascal. Использование этой среды приводит к объединению пооперационного и процедурного уровня в одном курсе. При этом знакомство с процедурами происходит в середине периода обучения. В качестве основы для программирования используются, по преимуществу, математические задачи. Например, при изучении рекурсии любимой задачей почти всех авторов, становится вычисление факториала числа. Обычно авторы оправдывают использование не изучаемого в школьной математике понятия простотой его определения. Есть и другие примеры включения в подобные курсы задач, которые лучше иллюстрируют конструкции и возможности языка, а не способствуют лучшему усвоению базовых понятий. Совершенно очевидно, что модуль, реализующий процедурное программирование и рассчитанный на изучение в 7-8 классе, не может опираться на математическое содержание, особенно когда предполагается самостоятельная творческая деятельность учащихся.

Бесспорным лидером в этом модуле являются курсы, основанные на Лого-технологиях. Метод последовательной детализации алгоритма используется как рабочий инструмент, а не только как объект изучения. К тому же изучать вложенность процедур можно практически с самого начала курса, сразу сделав её основным приёмом работы, приобретая заодно привычку структурировать решение любых задач.

В Федеральном перечне имеется только один учебник, посвящённый Лого-технологии, это "Практикум по программированию в среде Logo-Writer" А. Юдиной. Зато исполнители представлены шире: набор исполнителей в "Алгоритмике" А. Звонкина, кочующие из учебника в учебник Робот А. Кушниренко и Паркетчик А. Гейна.

Объектный уровень

Этот уровень самый молодой и наименее разработан. Объектный подход стал широко применяться в программировании уже после того, как информатика стала школьным предметом. Появляющиеся в периодической печати и всемирной сети Интернет публикации посвящены, в основном, попыткам знакомства школьников с Delphi или VisualBasic. До сих пор этот уровень воспринимается как экзотический и необязательный для массовой школы. Однако только этот уровень направлен на создание полноценных проектов. Именно его изучение позволит ликвидировать в сознании школьника понятийную пропасть между программами, с которыми он постоянно имеет дело и так называемыми программами, которые ему приходится писать на уроках информатики. Если для учительства связь очевидна, то дети зачастую недоумевают: что общего между яркой, динамичной, интерактивной игрушкой и чёрным экраном с белыми цифрами?

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

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

Я думаю, в чистом виде программирование интересует небольшую категорию людей.. Сегодня простому пользователю программировать не нужно.
Зачем всех подряд учить программированию, если это реально нужно нескольким ученикам собравшимся в технический вуз причем на соответствующие специальности?!
В результате данного исследования я пришла к выводу, что в общеобразовательном классе необходимо ознакомительно изучить какой-нибудь один алгоритмический язык (Basic, Pascal ). Изучение данного языка необходимо для формирования знаний, умений и навыков программирования, а также для формирования абстрактного, логического и алгоритмического мышления у учащихся, а в классах профильного уровня учащиеся могут изучать несколько языков программирования, включая объектно-ориентированные языки (Delphi или Visual Basic).

Примерно полтора года назад компания, в которой я работал, приняла решение начать образовательный проект: готовить будущих программистов со студенческой и даже школьной скамьи. Решение было вызвано как нехваткой квалифицированных программистов в нашем регионе, так и тем, что приходящих выпускников приходится очень многому доучивать – получаемое в вузе образование не полностью отвечает современным реалиям индустрии разработки ПО. Проект взаимовыгодный как для студентов, которые получают возможность познакомиться с промышленным программированием на практике, так и для компании, которая получит через несколько лет квалифицированных специалистов.

Но еще интереснее оказалась часть проекта, ориентированная на работу со школьниками. Я принимаю непосредственное участие именно в этой части, поэтому хочу рассказать о ней.

Проблема школьного обучения программированию

Методика И. Р. Дединского

Последовательность задач

Последовательность знаний и умений, получаемых детьми, ориентирована на их практическое использование. Как я уже писал выше, конструкции даются как результат возникающих у детей в процессе обучения проблем. Разумеется, задания подбираются именно так, чтобы проблемы эти возникали в определенном порядке — в этом состоит одна из задач преподавателя. Задачи подбираются по принципу: чем важнее навык, тем раньше он изучается. Важность понимается как частота употребления конструкции в промышленном коде. Именно поэтому функции, важнейший элемент программирования, изучаются как можно раньше.

Зачем нужен баннер (монолог вредного заказчика)

Далее следуют ответы заказчика на вопросы школьников, описание, что нужно изобразить и как и т.д. Тут-то дело и доходит до чертежа, размеров и сроков. Если игра происходит в Москве, то этот огромный баннер предлагается прилепить к стене небоскреба — так его будет издалека видно. В моем случае, за неимением небоскреба даже в проекте, пришлось прифантазировать аэростат, на котором реклама будет висеть над городом.

Кто же это сделает?

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

Кратко о дальнейшем обучении

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

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

Почему обучение основам программирования в школах такое ужасное и что с этим можно сделать.

Когда речь заходит о школьном программировании, ученики смотрят на всех как на безумных: о чём вы вообще говорите? Чтобы вы поняли всю глубину проблемы, скажем, что больше половины российских выпускников не знают, что такое алгоритмы и логические операции. Написать программу хоть на каком-нибудь языке могут только ученики профильных классов в школах с углублённым изучением физико-математических дисциплин.

Мы специально не рассматриваем в этом материале квалификацию преподавателя и его педагогические способности. Будем исходить из того, что у нас есть обычный учитель информатики, который знает свой предмет, но действует в условиях, которые часто от него не зависят.

Вот в чём проблема и как тут быть.

Старые компьютеры

В большинстве школ нет современного железа. И речь не о самых новых и навороченных компьютерах, а хотя бы о тех, которые могут запустить браузер Chrome и не зависнуть на пару минут.

На устройствах, которыми обычно располагают школы, сложно преподавать что-то современное, потому что оно банально не запустится. В итоге практическая работа превращается в мучение и проверку терпения учеников. Можно, конечно, поставить какой-нибудь лёгкий Linux и настроить его для необходимых задач, но чаще всего такой квалификации у учителя нет.

Древние языки программирования

  • Паскаль.
  • Бейсик.
  • Алгоритмический язык.
  • Вы имеете в виду английский?

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

С точки зрения кадров это, наверное, правильно, потому что не нужно переучивать учителей и переписывать учебники. Но ни Паскаль, ни Бейсик, ни блок-схемы сейчас не нужны в профессиональном программировании — разработческая мысль давно шагнула вперёд.

Паскаль прекрасно помогает преподавать алгоритмику, но писать современные программы на нём крайне сложно, и вот почему:

  • нет инструмента для быстрого создания интерфейса программы;
  • слабая графическая часть, которая может рисовать только простейшие объекты;
  • ограничения по размеру используемой памяти в переменных и циклах;
  • нет встроенной поддержки web-сервисов и страниц;
  • Паскаль не знает, как работать с современными базами данных, протоколами обмена, облачными хранилищами и сервисами.

Что делать: предлагать ребёнку самостоятельно изучать более современные языки — C, JavaScript, Swift, Go, Python и другие.

Нет единой методической базы

Каждый учитель сам решает, как рассказывать о своём предмете. Один подойдёт к вопросу творчески и заинтересует детей, другой отнесётся формально и прочитает материал по учебнику. Но и здесь есть подвох: учебников по информатике много, все они одобрены Минобром, и все дают разные представления о программировании. Книга авторства Семашко для 10 класса рассказывает про блок-схемы и абстрактный язык, Угринович предлагает изучать Visual Basic, а Босова и Поляков вообще ничего не говорят про программирование в 10 классе.

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

Что делать: воздействовать на руководство школ, чтобы все преподаватели работали по единой программе.

Непонятно, как применять знания в жизни

Когда выпускник начинает изучать программирование глубже, чем в школе, то понимает, что между его знаниями и современными языками — пропасть. Проще начать всё заново или вообще не заниматься этим, чем опираться на старые сведения.

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

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

А теперь посмотрим на код JavaScript, который делает то же самое:

Как видите, код стал компактнее и проще. Это благодаря тому, что современные языки уже умеют сами сортировать массивы, работать с переменными, размер которых заранее неизвестен, и объявлять их в том месте, где они понадобились.

Что делать: стимулировать в детях самостоятельное изучение программирования. На десятке примеров со Stack Overflow можно иной раз узнать больше, чем в целом предлагает школа.

Как разжечь в ребёнке интерес к программированию

Лучший способ привлечь детей к любому занятию, в том числе программированию, — личный пример. Когда в семье мама и папа увлекаются кодом, пусть даже и непрофессионально, ребёнку тоже будет интересно попробовать. Робототехника, программируемые контроллеры, Arduino и Raspberry Pi, программы на Scratch и робоконструкторы — всё это помогает разжечь интерес.

Если просто заставлять ребёнка заниматься, в то время как в семье никто не интересуется кодом, эта затея скорее провальная. Личный пример — лучший путь.

  • Для учеников 1-11 классов и дошкольников
  • Бесплатные сертификаты учителям и участникам

В условиях информатизации и массовой коммуникации современного общества, стремительного вхождения в нашу повседневную жизнь информационных и коммуникационных технологий особую значимость приобретает подготовка подрастающего поколения в области информатики и ИКТ.

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

Выбор Паскаля для обучения программированию объясняется рядом его достоинств. В частности, этот язык полно отражает идеи структурного программирования. Во-вторых, Паскаль предоставляет гибкие возможности в отношении используемых структур данных. Большое внимание в языке уделено вопросу повышения надежности программ: средства языка позволяют осуществлять достаточно полный контроль правильности использования данных различных типов и программных объектов как на этапе трансляции программ, так и на этапе их выполнения. Благодаря перечисленным возможностям, Паскаль широко применяется не только в области обучения, но и в практической работе. Почему PASCAL? Он был создан специально для обучения, соответственно синтаксис и структура языка гораздо проще и хорошо усваиваются учениками, программы очень наглядные.

Второе – какова же должна быть методическая структура изучения программирования? С какого возраста нужно начинать этот процесс? Мы считаем, что учить надо постоянно, начиная с начальной школы.

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


Мнения о том, какой язык программирования лучше преподавать в школе, разнятся: от того, что программирование изучать не нужно, а следует просто поднимать компьютерную грамотность и осваивать офисные программы (как Западе), до того, что нужно изучать операционные системы и несколько языков программирования с различными парадигмами. Это крайние случаи, но золотую середину найти непросто. В первую очередь, нужно определить цель. Научить школьников логически и алгоритмически мыслить? Познакомить с компьютерами на бытовом уровне, чтобы школьники умели пользоваться Интернетом, электронной почтой, текстовым графическим редакторами? Заложить базовые знания, необходимые для будущих инженеров, математиков, физиков и специалистов по информационным технологиям? А может, нужно каждого школьника познакомить с программированием как явлением, чтобы он представлял потенциал компьютерных систем? Много ли школьников станет программистами? Немного. Безусловно, в науке о программировании есть фундаментальная составляющая, но определить её непросто. Некоторые считают, что не так важно, какой язык программирования взять: на уроках информатики нужно учить не языку программирования, а методам программирования и системному подходу решения задач. Нужно развивать алгоритмическое мышление и на примерах знакомиться с принципами построения современных компьютерных систем.

Неужели действительно не так важно, какая среда и какой конкретный язык программирования будет использован для практических занятий? У каждого преподавателя есть свой список требований к учебному языку программирования. Набор требований может быть, например, таким: простой, интуитивный синтаксис, наличие высокоуровневых инструментов для обнаружения и недопущения ошибок и для отладки программ, наличие качественной документации с примерами, наличие дружелюбной среды разработки, кроссплатформенность (наличие версий под различные платформы), …

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

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

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

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

Какие из современных используемых на практике языков годятся на роль первого языка? Наверное, это императивный, строго типизированный, со статической типизацией и строгой семантикой язык. Turbo-Pascal всему этому соответствует, но он уже почти мертв.

Так как объектно-ориентированное программирование (ООП) — это основа всех современных языков программирования, то его необходимо начинать изучать ещё в школе, чтобы учащиеся, придя в высшие учебные заведения, уже имели правильное представление о программировании. Такое утверждение очевидно не является бесспорным, так как для большинства учащихся их дальнейшее образование не связано с разработкой IT технологий.

Вероятно, в этом заключается основная “неудовлетворенность” учащихся, которые решили совершенствоваться в программировании. Для реальной работы им приходится учить более популярный язык (Java, C/C++, PHP, Python и т. д.). Однако использование Си в качестве начального языка программирования имеет ряд проблем: в нём много отпугивающих конструкций даже для интересующихся программированием учащихся. С другой стороны, никто не заставляет учителей показывать все глубины Си. С ним можно работать на том же уровне, что и с Паскалем, используя соответствующие конструкции.

FreePascal — бесплатный компилятор Паскаля, отвечающий современным требованиям и обладающий средой разработки один в один похожей на Turbo Pascal, что делает возможным использования большей части методической литературы, написанной для последнего. Работает под Windows и Linux. Рекомендуется как самый простой способ замены Turbo Pascal. Отсутствуют проблемы с лицензией.

Lazarus — среда разработки, использующая компилятор FreePascal, но при этом поддерживающая разработку современных оконных приложений. Позиционируется как, совместимая с Delphi, но учебный материал, написанный для последней, применим не всегда. Интерфейс более сложен по сравнению с IDE FreePascal. Рекомендуется использовать при достаточной квалификации преподавателя.

Использование Turbo/Free Pascal в процессе обучения программированию — это почти идеальный вариант для обучения алгоритмам, без понимания которых дальше лучше не программировать (и не имеет значения дальнейшая специализация — будет ли человек работать на ассемблере под микроконтроллеры, или посвятит себя разработке софта на языках высокого уровня с применением современных парадигм).

Выбор современных систем визуального проектирования (Delphi, Lazarus, Visual Studio и т. д.) на начальном этапе обучения программирования вызывает ряд проблем. При создании проекта система автоматически генерирует большой объем кода, связанный с работой визуальных компонентов и не относящийся к решению поставленной задачи. Всё сразу объектно-ориентированное, а ученику, для начала бы, разобратьсяс циклами, массивами, условными операторами.

На сегодняшний день наиболее удачным выбором, скорее всего, был бы Питон (Python) + приличная IDE (Eclipse или PyCharm), с тестированием приложений во встроенной консоли. Питон был создан более 20 лет назад и по сей день используется и в обучении основам программирования, и в коммерческих целях. На нем можно разрабатывать серверные и клиентские программы, сайты и веб сервисы, мобильные приложения и программировать роботов. Самое главное, что на рынке труда Python-программисты получают широкую востребованность, и она будет расти еще много лет, ведь язык Python используют крупные корпорации в своих коммерческих проектах.

Python — это полноценный язык программирования высокого уровня. Он поддерживает целый ряд парадигм: модульная парадигма, процедурная парадигма, объектно-ориентированная парадигма, функциональная парадигма. Немаловажно, что Python распространяется свободно на основании лицензии подобной GNU General Public License.

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

В ряде школ проводят интересные эксперименты по преподаванию программирования на базе языка Python. Отзывы учителей и школьников очень положительные. За рубежом накоплен большой опыт в преподавании информатики в школах и колледжах с практикой программирования на самых разных языках, в частности и на Python. Конечно переход в школьной информатике на “новый” язык программирования Python связан целым рядом трудностей, в первую очередь отсутствие учебно-методического материала и необходимости самостоятельно изучать особенности языковых конструкций.

Не смотря на то, что в учебниках по информатике есть только один язык программирования Pascal и всё примеры приводятся на нём, наблюдается общая тенденция перехода на Python преподавателей информатики для обучения основам программирования. И всё больше и больше появляется олимпиад, которые предоставляют возможность решать задачи на Python.

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

Нет необходимости знакомить учащихся со всеми тонкостями и техническими подробностями языка программирования. Необходимые детали он сможет узнать сам, если его научат пользоваться документацией. Гораздо важнее познакомить учащегося с различными парадигмами программирования. Но при этом есть опасность того, что учащиеся столкнутся с большими трудностями в написании программы для решения конкретной задачи. Мнений очень много, и нельзя ничего здесь категорично заявлять.

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

  1. Лапчик М. П., Семакин И. Г., Хеннер Е. Г. Методика преподавания информатики: Учебное пособие для студентов педвузов — М.: Издательский центр “Академия”, 2003–624 с.
  2. Захарова И. Г. Информационные технологии в образовании: Учебное пособие для студ. высш. учеб. заведений — М.: Издательский центр “Академия”, 2005–192 с.
  3. Угринович Н. Д. Информатика и ИКТ. Профильный уровень: учебник для 10 класса / 9-е изд., испр. и доп. — М.: БИНОМ, Лаборатория знаний. 2012. — 295с.
  4. Поляков К. Ю. Информатика. Углубленный уровень: учебник для 10 класса: в 2ч. Ч. 2 — М.: БИНОМ, Лаборатория знаний. 2013. — 304 с.
  5. Поляков К. Ю. Информатика. Углубленный уровень: учебник для 11 класса: в 2ч. Ч. 2 — М.: БИНОМ, Лаборатория знаний. 2013. — 304 с.
  6. Авдошин С. М., Ахметсафина Р. З., Максименкова О. В. Информатика и ИКТTU”Учебно-справочные материалы. М.: СПб.: Просвещение. 2012.-252с.

Основные термины (генерируются автоматически): язык программирования, язык, программирование, IDE, основа программирования, паскаль, программа, ученик, алгоритмическое мышление, высокий уровень.

Читайте также: