Привет, Хабр! Меня зовут Анна Агабекян, я ментор и автор курсов по направлениям "Тестировщик-автоматизатор на Python" (QAP-тестирование) и «Fullstack-разработчик на JavaScript» в SkillFactory, а также преподаю физику и информатику в лицее. Параллельно с преподаванием я веду научную работу, посвящённую проблемам образования, и на её основе решила сделать статью для Хабра, так как, на мой взгляд, проблема качественного образования в области информатики и IT сейчас стоит очень остро, но остаётся неосвёщенной. Как преподаватель я вижу, что сейчас процесс развития образовательных организаций отстает от требований IT-сферы. Хотела бы с вами поделиться своим видением данной проблемы и возможных путей решения.
Одной из основных проблем преподавания информатики и информационных технологий в средней школе становится «цикл жизни» учебника, который совершенно не соответствует постоянно ускоряющемуся «циклу жизни» технологий.
Некоторые учебники, использование которых в школах рекомендовано, попросту стыдно давать в руки ученикам, настолько архаичным и смешным для современного ребенка является то, что в них написано. Особенно этим грешат описываемые в этих учебниках программные продукты или операционные системы. В учебном плане, составляемом по этим учебникам, практически не остаётся времени для рассмотрения реальных или перспективных технологий и тенденций развития ИКТ и технологий программирования. Хотя именно они должны стать базой для углублённого изучения на уроках информатики.
Зачастую в современных школах обучение информатике происходит преимущественно на пользовательском уровне. Детей учат делать простые презентации, редактировать изображения, создавать документы, работать в таблицах, придумывать надёжные пароли. Уроки по «изучению устройства компьютера» или «созданию рисунка в редакторе Paint» превращаются в бессмысленное занятие, ничего не дают уму и в целом расхолаживают обучающегося, закладывают негативное отношение к предмету и в целом к школьным занятиям, работая на снижение мотивации к содержательной учебной деятельности.
Хотелось бы написать, что в высшей школе дела идут лучше, но нет, там те же проблемы — устаревающие госстандарты образования и хромающая организация учебного процесса. Самый показательный пример устаревания образовательных программ — древние языки программирования.
Языки программирования, используемые в учебных заведениях
Когда-то наиболее популярными языками программирования в школах мира были Бейсик и Паскаль. Бейсик всегда считался самым простым языком программирования, а Паскаль — самым подходящим языком для обучения программированию. Но теперь это не так. Да, Бейсик прост. Но он создавался во времена, когда человечество не имело никакого опыта создания компьютерных систем, и основан на устаревших и не оправдавших себя принципах. Собственно, никакой фундаментальной целостной идеи в основе Бейсика не лежит.
Если спросить детей, какой язык они изучают на информатике, рейтинг ответов будет таким:
Паскаль;
Бейсик;
Кумир;
Fortran;
Алгоритмический язык.
Вы имеете в виду английский?
Как мы видим, детям даются знания по языкам, которые не используются сейчас в профессиональной разработке. С точки зрения кадров, это, наверное, правильно, потому что не нужно переучивать преподавателей и переписывать учебники. Но ни Паскаль, ни Бейсик, ни блок-схемы сейчас не нужны в профессиональном программировании — разработческая мысль давно шагнула вперёд.
Паскаль лишь только помогает преподавать алгоритмику, но писать современные программы на нём крайне сложно, и вот почему:
нет инструмента для быстрого создания интерфейса программы;
слабая графическая часть, которая может рисовать только простейшие объекты;
ограничения по размеру используемой памяти в переменных и циклах;
нет встроенной поддержки web-сервисов и страниц;
Паскаль не знает, как работать с современными базами данных, протоколами обмена, облачными хранилищами и сервисами.
Как альтернативу для изучения можно рассмотреть целую «экосистему» языков программирования, которые постоянно эволюционируют, расщепляются и сливаются. Их необходимо отбирать по следующим критериям:
Чистота и ясность кода, читаемость кода.
Чистота и целостность парадигмы, заложенной в основу языка.
Многогранность и гибкость, возможность писать сложные программы кратко и красиво.
Простота синтаксиса, прозрачность интерпретации языковых конструкций.
Наличие стандартных библиотек и средств интеграции проектов друг с другом и с другими системами и технологиями.Озвученным критериям вполне соответствует Python. Так почему бы не использовать его в качестве образовательного базиса?
Согласно предъявляемым госстандартом требованиям к предметным результатам освоения базового курса информатики «ученик должен владеть умением понимать программы на выбранном универсальном алгоритмическом языке и владеть приёмами написания программы для решения стандартной задачи с использованием основных конструкций и отладки таких программ».
Под универсальным алгоритмическим языком следует понимать любой императивный язык программирования, что не противоречит использованию языка Python. Python обладает стандартными алгоритмическими конструкциями и имеет гибкую систему отладки программ.
Таким образом, преподаватель имеет право выбрать язык программирования Python в качестве средства обучения основам алгоритмизации и программирования. Для большей наглядности давайте сравним Python с одним из широко используемых сейчас в школах и вузах языком.
Сравнение ЯП, используемых в обучении программированию
Разберём главные отличительные особенности языка программирования Python и проведём сравнение с Паскалем.
1. Простой синтаксис и низкий порог входа
Python вместо знаков препинания или ключевых слов (в Паскале такими словами являются «begin» и «end») использует отступы для обозначения выполнения блока. Программы, написанные в одну строку или с другими нарушениями в структуре, не смогут быть выполненными в Python. Такая особенность позволит сократить размер кода и увеличить читаемость программы. Синтаксис Python приучит школьников писать «красивый» код, что улучшит написание и понимание кода. Так, например, различаются записи цикла на Паскале и Python (таблица ниже).
Сравнение синтаксиса цикла с предусловием в Паскаль и Python
Паскаль | Python |
while s + n < 150 do begin s := s + 15; n := n - 5 end; writeln(n) | while s + n < 150: s = s + 15 n = n - 5 print(n) |
2. Динамическая типизация
Python обладает динамической типизацией. Это означает, что переменная связывается с типом во время присваивания значения, а значит, нет необходимости заранее объявлять переменную. Это упрощает понимание типов данных и разрешает путаницу в различных длинах целочисленных и вещественных, строковых и символьных типах, а также сокращает размер кода (таблица ниже).
Сравнение синтаксиса объявления переменных в Паскаль и Python
Паскаль | Python |
var s, n: integer; begin s := 0; n := 75; end. | s = 0 n = 75 |
3. Лаконичный и изящный код
Одно из очевидных достоинств языка. Python — компактность программного кода. Например, решение задачи — поменять местами значения двух переменных — на языке Паскаль решается в три оператора, в Python — в одну строку (таблица ниже):
Сравнение синтаксиса переприсвоения переменных в Паскаль и Python
Паскаль | Python |
c := a; a := b; b := c; | a, b = b, a |
4. Высокоуровневые типы данных
Python, будучи языком очень высокого уровня, имеет встроенные типы данных высокого уровня, такие как динамические массивы (списки) и словари.
В языке Python нет массивов в привычном понимании этого термина, но есть списки, которые можно считать расширением понятия «динамический массив». Мы можем работать отдельно с каждым элементом списка, а можем выполнять операции со всем списком, например добавлять и удалять элементы, копировать части списка, сортировать. Рассмотрим пример на заполнение массива одинаковыми значениями (таблица ниже). Python справляется с этой задачей в одну строку, продублировав массив, состоящий из одного нуля.
Сравнение синтаксиса заполнения массива в Паскаль и Python
Паскаль | Python |
const n = 100; var a: array[0..n - 1] of integer; for i := 0 to n - 1 do a[i] := 0; | n = 100 a = [0] * n |
5. Широкое применение
Используется для разработки веб-приложений, игр, удобен для автоматизации, математических вычислений, машинного обучения, в области Интернета вещей. Существует реализация под названием Micro Python, оптимизированная для запуска на микроконтроллерах (можно писать инструкции, логику взаимодействия устройств, организовывать связь, реализовывать умный дом).
На основании данных отличий можно сделать вывод, что синтаксис и структура основных алгоритмических конструкций в Python во многом схожи с Паскалем. Однако они приведены в совершенный вид, код стал чище и короче, кроме того, Python поддерживает современные типы данных и необходимые функции для работы с ними. Это делает язык подходящим для первого знакомства с программированием, в особенности для школьников и студентов, и лёгким для изучения самим преподавателем.
Так как же можно всё поправить?
В случае школы одним из решений могло бы стать видоизменение самого предмета "Информатика" в новую дисциплину под названием «Информатика и IT-технологии», где это не уроки по использованию офисного пакета, а изучение принципов алгоритмики, computational thinking — тех основ, которые не меняются годами.
Разумеется, для такого "эволюционного" скачка необходимо повышение квалификации преподавателей. Если в плане перевода из одной системы счисления в другую или составления блок-схем всё весьма статично, то новые технологии, веяния, языки программирования и их парадигмы — всё это меняется очень быстро, и, чтобы учитель мог приводить интересные примеры и составлять урок качественно, он должен знать уйму вещей.
Например, если учебная программа подразумевает преподавание только языка Паскаль, преподавателю должен понимать и другие современные, промышленные языки, особенно если в классе есть ученик, заинтересованный в программировании. Иначе создаётся ситуация, как сейчас, когда уже немолодой преподаватель монотонно подаёт информацию о том, что нужно для того, чтобы в Turbo Pascal возвести x в степень 14.
И, конечно, не обойтись без изменений в местных органах Министерства образования и самой школе. У них должны быть механизмы и ресурсы для отправки преподавателя на дополнительное обучение, в том числе и на частных платных курсах, даже за рубежом. Также не стоит забывать о книгах и иных источниках новой, полезной информации. Необходимо предоставить больше свободы преподавателям-энтузиастам, которые хотят, например, дать своим ученикам Python или C++, а не навязывать Паскаль, как в новых учебниках для 10–11 классов, где по ФГОСам есть только упомянутый язык. К сожалению, в нынешних реалиях России всё это выглядит утопией. Хотя по-прежнему будут существовать разработчики, использующие устаревшие языки, нужно учитывать, что в ближайшем будущем они будут заменены более распространёнными.
Ещё одним из средств решения проблем может служить разработка современного интерактивного онлайн-учебника, в котором знания будут максимально актуальны и сжаты и который будет регулярно обновляться (как, например, документация к проекту).
Я верю, что переосмысление подходов к IT-образованию сделает светлое цифровое лучше, независимо от того, захотят ли наши дети начать свою карьеру в сфере IT. Каким бы ни было будущее, становится всё более и более очевидным, что программирование — способность читать и писать код на нескольких распространённых языках — становится новой грамотностью.
Узнайте, как прокачаться и в других специальностях или освоить их с нуля:
Другие профессии и курсы
ПРОФЕССИИ
КУРСЫ
svob
Бейсик ведь и создавался, как УЧЕБНЫЙ язык.
И вообще, информатика — от слова «информация». Она не про компьютеры и не про технологии, а про алгоритмы.
anna_agabekyan Автор
Здравствуйте! Спасибо за ваше мнение. Да, вы верно отметили, что это для учебных целях служило, но в наши дни программирование развивается намного быстрее, и языки, актуальные лет 40-30, а то и 20 назад, уже полностью устарели. Насчет про понятие информатики - теоретической базой для информационных технологий является информатика. ИТ это как раз составная часть информатики. Также я в статье привела о том, что основы алгоритмизации и программирование плохо усваиваются именно на мертвых языках программирования в ходе обучения, поэтому решение проблемы может послужить к изучению популярных ЯП.
DocJester
/иронично/ А информатика у нас ограничивается языками программирования?
Если же говорить серьёзно, то нужно понять одну простую вещь: Паскаль был разработан - сюрприз! - как учебный язык, что и объясняет его строгость. Это хороший учебный язык, позволяющий легко решить учебные же задачи. Он заставляет продумать программу и алгоритм заранее, а не лепить как попало.
Далее, про "дополнительные курсы". Вы, простите, либо трусы наденьте, либо крестик снимите. Педагоги раз в
пять леттри года проходят обязательное повышение квалификации, с ними работают региональные методисты ИРО (Институт Развития Образования), программы повышения квалификации постоянно меняются и улучшаются.UPD. Мантра "Программирование - новая/вторая грамотность" существует не первый год. Вот только ситуация как и с "Windows must die!" - собака лает, а караван идет. Лучше спросите своих учеников лет через десять: "Что вам пригодилось в жизни, дети? Python или Word?". Думаю, ответ очевиден.
hellboy1981
И то, и другое. И ещё куча других вещей.
И да, тем, кто использует Питон профессионально, тот и Word должен знать профессионально
svob
Не-а, это программирование — отдельная дисциплина.
А информатика имхо — вроде ветки, отросшей от математики.
sshikov
>Также я в статье привела о том, что основы алгоритмизации и программирование плохо усваиваются именно на мертвых языках программирования в ходе обучения
Ну, давайте уж честно — это ваш опыт, не более. При этом отметим еще раз — вы лучше знаете условно, питон, и выбираете его для преподавания.
А результаты преподавания на других языках, с которыми вы сравниваете — это результаты чьи? Ваши, или других преподавателей? И в зависимости от ответа, следующий вопрос, который следовало бы себе задать: а в чем причина этих результатов? Возможно язык (вы рассмотрели только эту гипотезу), или же тот факт, что вы (или другой преподаватель) просто хуже знает предмет (и/или другой язык)?
Ну так, совсем просто — вы практикующий программист, как я понял, а другой преподаватель — учитель информатики, который никогда профессионально за деньги не работал? Есть такая разница? И если да, то каков вклад языка, и преподавателя?