воскресенье, 8 января 2017 г.


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

Мнения о том, какой язык программирования лучше преподавать в школе, разнятся: от того, что программирование изучать не нужно, а следует просто поднимать компьютерную грамотность и осваивать офисные программы (как Западе), до того, что нужно изучать операционные системы и несколько языков программирования с различными парадигмами. Это крайние случаи, но золотую середину найти непросто. В первую очередь, нужно определить цель. Научить школьников логически и алгоритмически мыслить? Познакомить с компьютерами на бытовом уровне, чтобы школьники умели пользоваться Интернетом, электронной почтой, текстовым графическим редакторами? Заложить базовые знания, необходимые для будущих инженеров, математиков, физиков и специалистов по информационным технологиям? А может, нужно каждого школьника познакомить с программированием как явлением, чтобы он представлял потенциал компьютерных систем? Много ли школьников станет программистами? Немного. Безусловно, в науке о программировании есть фундаментальная составляющая, но определить её непросто. Некоторые считают, что не так важно, какой язык программирования взять: на уроках информатики нужно учить не языку программирования, а методам программирования и системному подходу решения задач. Нужно развивать алгоритмическое мышление и на примерах знакомиться с принципами построения современных компьютерных систем. Неужели действительно не так важно, какая среда и какой конкретный язык программирования будет использован для практических занятий? У каждого преподавателя есть свой список требований к учебному языку программирования. Набор требований может быть, например, таким: простой, интуитивный синтаксис, наличие высокоуровневых инструментов для обнаружения и недопущения ошибок и для отладки программ, наличие качественной документации с примерами, наличие дружелюбной среды разработки, кроссплатформенность (наличие версий под различные платформы), … С одной стороны, школьная программа не предполагает подготовку специалистов и базовые понятия алгоритмизации можно традиционно давать на Паскале. Для школы нет особой разницы, какой именно язык учить, база у всех языков идентична, надстройку над базой дают уже в профильных учебных заведениях. Ученику достаточно знать набор базовых понятий бинарной логики, условий, циклов и т. п. а они присутствуют практически в любом языке программирования. Проблема кроется в том, что в школе стоит задача ознакомить с тем, что такое программирование и дать примерное представление о том, как это делается. С другой стороны IT-технологии развиваются очень быстро, появляются новые платформы, языки программирования (Java, C#, Python…), технологии. Современному программисту приходится постоянно «держать руку на пульсе». Именно поэтому программу обучения школьников программированию нужно тщательно продумывать со взглядом в будущее. Подходы к программированию в частности и информационным технологиям, в общем, постоянно изменяются, но что-то остается неизменным. Эту базу необходимо передавать учащимся, в первую очередь, чтобы школьники учились самостоятельно искать нужный материал и изучать его. Нужно учить базовые вещи, которые будут востребованы всегда, независимо от технологий. В программировании есть несколько парадигм, подходов к созданию программ: модульная парадигма, процедурные парадигма, объектно-ориентированная парадигма. В школах обычно преподают процедурный подход к программированию, в то время как ООП (объектно-ориентированное программирование) — очень редко или никогда. Выбор языка и системы программирования имеет принципиальное значение, т. к. от этого во многом зависит методика изучения курса, содержание и последовательность предъявления учебного материала, система учебных заданий и, главное, вся дальнейшая работа по овладению программированием для решения реальных практических задач на компьютере. От этого выбора напрямую зависит доступность восприятия, изучения и овладения учащимся приемами и методами программирования. Какие из современных используемых на практике языков годятся на роль первого языка? Наверное, это императивный, строго типизированный, со статической типизацией и строгой семантикой язык. Turbo-Pascal всему этому соответствует, но он уже почти мертв. В последнее время наметилась явная тенденция перехода обучения от алгоритмических к объектно-ориентированным языкам с использованием визуальных систем программирования (Delphi, Visual Basic, Visual C++ и т. д.). Прежде всего, программирование подразумевает написание программы, а что для учащегося означает «программа»? Ответ очевиден, программа — это то, с чем он работает на компьютере каждый день, например, текстовый процессор или Интернет- обозреватель. Т. е. для ученика программа — это приложение с графическим оконно-кнопочным интерфейсом. Значит, программа, которую он будет составлять должна быть такой же. И здесь визуальные среды программирования дают широкие возможности ученику в реализации такого приложения. Старый добрый Turbo-Pascal тоже хорош для изучения принципов программирования, но его терминальный интерфейс плохо воспринимается современными школьниками. Так как объектно-ориентированное программирование (ООП) — это основа всех современных языков программирования, то его необходимо начинать изучать ещё в школе, чтобы учащиеся, придя в высшие учебные заведения, уже имели правильное представление о программировании. Такое утверждение очевидно не является бесспорным, так как для большинства учащихся их дальнейшее образование не связано с разработкой IT технологий. Первый язык программирования должен быть требовательным к ученику. Необходимо, чтобы ученик имел чёткое представление о том, что его программа делает на каждом шаге, и уметь записывать алгоритмы на строгом формальном языке, без лишних “вольностей”. Первый язык должен быть cтрого типизированным, ибо смешение целых чисел, вещественных чисел и текстовых переменных приводит у начинающих программистов к неправильному представлению о методах хранения данных в памяти компьютера. Чем больше сообщений об ошибках ученики увидят от компилятора, и чем больше из этих сообщений они поймут, тем больше фундаментальных знаний о программировании они получат. Паскаль — неплохой язык в этом смысле. Но этот язык редко применяется на практике, и специалист по Паскалю оказывается мало востребованным на рынке труда. Вероятно, в этом заключается основная “неудовлетворенность” учащихся, которые решили совершенствоваться в программировании. Для реальной работы им приходится учить более популярный язык (Java, C/C++, PHP, Python и т. д.). Однако использование Си в качестве начального языка программирования имеет ряд проблем: в нём много отпугивающих конструкций даже для интересующихся программированием учащихся. С другой стороны, никто не заставляет учителей показывать все глубины Си. С ним можно работать на том же уровне, что и с Паскалем, используя соответствующие конструкции. Одним из лучших языков программирования для старта считался и считается Pascal, так как он был придуман специально для обучения основам программирования. Но есть «но»: язык устарел, его никто из компаний не использует в коммерческих целях. Можно, конечно, начать изучение программирования с Pascal, но после основ всем придётся учить новый язык, с другим синтаксисом, с новыми правилами. Паскаль даёт свои плюсы в обучении и, возможно, даже стоит самые основные понятия показать на Паскале. Но нет смысла обучать всему «от и до» на языке Pascal и его библиотеки. Лучше это время потратить на изучение языков и технологий, которые сейчас используются и будут использоваться ближайшие 10–20 лет. Паскаль — это тот самый инструмент (более упрощённый, чем С), который научит, как вообще нужно «идеологически» подходить к программированию. Почему сначала нужно объявлять типы переменных, что операция присваивания значения и логическое равенство — это разные вещи. Когда делаешь элементарные ошибки в Паскале, то программа не будет работать. Это чисто обучающая база. Существуют альтернативы для Turbo Pascal, которые можно использовать в учебном процессе. FreePascal — бесплатный компилятор Паскаля, отвечающий современным требованиям и обладающий средой разработки один в один похожей на Turbo Pascal, что делает возможным использования большей части методической литературы, написанной для последнего. Работает под Windows и Linux. Рекомендуется как самый простой способ замены Turbo Pascal. Отсутствуют проблемы с лицензией. PascalABC — удобная среда разработки, работающая под Windows. С 2007 года разрабатывается версия PascalABC.net — та же среда, но написанная с использованием технологии.NET. Система создавалась на факультете математики, механики и компьютерных наук ЮФУ как учебная среда программирования. С лицензией проблем нет. 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. Программа на Питоне зачастую не требует изменений для запуска ее на другой операционной системе. Программы успешно работают как под Linux, так и под Windows. Питон является интерпретируемым языком. Это очень хорошо, так как можно пробовать идеи «на ходу», без ввода ненужного кода. Python характеризуется ясным синтаксисом. Читать код на этом языке программирования достаточно легко, т. к. в нем мало вспомогательных элементов, а правила языка заставляют программистов делать отступы. Понятно, что хорошо оформленный текст с малым количеством отвлекающих элементов читать и понимать легче. Питон относится к языкам с динамической типизацией. В этом случае нагрузка на программиста меньше ввиду того, что теперь не надо самостоятельно следить за типами данных. Иногда это приводит к трудноотлавливаемым ошибкам (это является существенным недостатком на начальном этапе изучения программирования), но в основном достаточно хорошо помогает писать код. Паскаль или Си относятся к языкам с статической типизацией и начинающему программисту самому приходиться следить за типами данных. Питон относится к языкам с практическим отсутствием программной «магии». Исключения составляют только метаклассы, но до них нужно дорасти. А это минимум 2–3 года изучения. Питон обладает большим количеством готовых решений и библиотек. Большая часть из них бесплатна. В ряде школ проводят интересные эксперименты по преподаванию программирования на базе языка Python. Отзывы учителей и школьников очень положительные. За рубежом накоплен большой опыт в преподавании информатики в школах и колледжах с практикой программирования на самых разных языках, в частности и на Python. Конечно переход в школьной информатике на “новый” язык программирования Python связан целым рядом трудностей, в первую очередь отсутствие учебно-методического материала и необходимости самостоятельно изучать особенности языковых конструкций. Не смотря на то, что в учебниках по информатике есть только один язык программирования Pascal и всё примеры приводятся на нём, наблюдается общая тенденция перехода на Python преподавателей информатики для обучения основам программирования. И всё больше и больше появляется олимпиад, которые предоставляют возможность решать задачи на Python. Многие преподаватели заявляют, что не важно, какому языку обучать, главное — чтобы ученик разбирался в алгоритмах. Это правда, но только отчасти. Изучение алгоритмистики, умение читать и составлять качественные алгоритмы — это основы основ. Понимая азы программирования, и разбираясь в синтаксисе одного языка, можно разобраться в синтаксисе другого языка. Но есть языки с отличными синтаксисами, собственными конструкциями, которых нет в других языках. В результате может получиться так, что понимание алгоритма есть, а синтаксис без справочника прочитать сложно или невозможно. Нет необходимости знакомить учащихся со всеми тонкостями и техническими подробностями языка программирования. Необходимые детали он сможет узнать сам, если его научат пользоваться документацией. Гораздо важнее познакомить учащегося с различными парадигмами программирования. Но при этом есть опасность того, что учащиеся столкнутся с большими трудностями в написании программы для решения конкретной задачи. Мнений очень много, и нельзя ничего здесь категорично заявлять. Важно, чтобы учитель информатики не забывал о главном — что цель не изучить конкретный язык программирования, а развивать алгоритмическое мышление, знакомить с разными стилями мышления и методами, которые применимы при решении различных задач. Одним из вариантов такого подхода является знакомство (без детального изучения) с несколькими языками программирования. Достаточно вместе с классом разобрать несколько простых классических алгоритмических задач.