Привет, Хабр! Меня зовут Анна Агабекян, я ментор и автор курсов по направлениям "Тестировщик-автоматизатор на Python" (QAP-тестирование) и «Fullstack-разработчик на JavaScript» в SkillFactory, а также преподаю физику и информатику в лицее. Параллельно с преподаванием я веду научную работу, посвящённую проблемам образования, и на её основе решила сделать статью для Хабра, так как, на мой взгляд, проблема качественного образования в области информатики и IT сейчас стоит очень остро, но остаётся неосвёщенной. Как преподаватель я вижу, что сейчас процесс развития образовательных организаций отстает от требований IT-сферы. Хотела бы с вами поделиться своим видением данной проблемы и возможных путей решения.  Одной из основных проблем преподавания информатики и информационных технологий в средней школе становится «цикл жизни» учебника, который совершенно не соответствует постоянно ускоряющемуся «циклу жизни» технологий.  Некоторые учебники, использование которых в школах рекомендовано, попросту стыдно давать в руки ученикам, настолько архаичным и смешным для современного ребенка является то, что в них написано. Особенно этим грешат описываемые в этих учебниках программные продукты или операционные системы. В учебном плане, составляемом по этим учебникам, практически не остаётся времени для рассмотрения реальных или перспективных технологий и тенденций развития ИКТ и технологий программирования. Хотя именно они должны стать базой для углублённого изучения на уроках информатики.  Зачастую в современных школах обучение информатике происходит преимущественно на пользовательском уровне. Детей учат делать простые презентации, редактировать изображения, создавать документы, работать в таблицах, придумывать надёжные пароли. Уроки по «изучению устройства компьютера» или «созданию рисунка в редакторе Paint» превращаются в бессмысленное занятие, ничего не дают уму и в целом расхолаживают обучающегося, закладывают негативное отношение к предмету и в целом к школьным занятиям, работая на снижение мотивации к содержательной учебной деятельности. Хотелось бы написать, что в высшей школе дела идут лучше, но нет, там те же проблемы — устаревающие госстандарты образования и хромающая организация учебного процесса. Самый показательный пример устаревания образовательных программ — древние языки программирования.  Когда-то наиболее популярными языками программирования в школах мира были Бейсик и Паскаль. Бейсик всегда считался самым простым языком программирования, а Паскаль — самым подходящим языком для обучения программированию. Но теперь это не так. Да, Бейсик прост. Но он создавался во времена, когда человечество не имело никакого опыта создания компьютерных систем, и основан на устаревших и не оправдавших себя принципах. Собственно, никакой фундаментальной целостной идеи в основе Бейсика не лежит. Если спросить детей, какой язык они изучают на информатике, рейтинг ответов будет таким: Паскаль; Бейсик; Кумир; Fortran; Алгоритмический язык. Вы имеете в виду английский? Как мы видим, детям даются знания по языкам, которые не используются сейчас в профессиональной разработке. С точки зрения кадров, это, наверное, правильно, потому что не нужно переучивать преподавателей и переписывать учебники. Но ни Паскаль, ни Бейсик, ни блок-схемы сейчас не нужны в профессиональном программировании — разработческая мысль давно шагнула вперёд. Паскаль лишь только помогает преподавать алгоритмику, но писать современные программы на нём крайне сложно, и вот почему:  нет инструмента для быстрого создания интерфейса программы;  слабая графическая часть, которая может рисовать только простейшие объекты;  ограничения по размеру используемой памяти в переменных и циклах;  нет встроенной поддержки web-сервисов и страниц; Паскаль не знает, как работать с современными базами данных, протоколами обмена, облачными хранилищами и сервисами.  Как альтернативу для изучения можно рассмотреть целую «экосистему» языков программирования, которые постоянно эволюционируют, расщепляются и сливаются. Их необходимо отбирать по следующим критериям: Чистота и ясность кода, читаемость кода. Чистота и целостность парадигмы, заложенной в основу языка. Многогранность и гибкость, возможность писать сложные программы кратко и красиво. Простота синтаксиса, прозрачность интерпретации языковых конструкций. Наличие стандартных библиотек и средств интеграции проектов друг с другом и с другими системами и технологиями.Озвученным критериям вполне соответствует Python. Так почему бы не использовать его в качестве образовательного базиса? Согласно предъявляемым госстандартом требованиям к предметным результатам освоения базового курса информатики «ученик должен владеть умением понимать программы на выбранном универсальном алгоритмическом языке и владеть приёмами написания программы для решения стандартной задачи с использованием основных конструкций и отладки таких программ».  Под универсальным алгоритмическим языком следует понимать любой императивный язык программирования, что не противоречит использованию языка Python. Python обладает стандартными алгоритмическими конструкциями и имеет гибкую систему отладки программ. Таким образом, преподаватель имеет право выбрать язык программирования Python в качестве средства обучения основам алгоритмизации и программирования. Для большей наглядности давайте сравним Python с одним из широко используемых сейчас в школах и вузах языком. Разберём главные отличительные особенности языка программирования Python и проведём сравнение с Паскалем.  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) Python обладает динамической типизацией. Это означает, что переменная связывается с типом во время присваивания значения, а значит, нет необходимости заранее объявлять переменную. Это упрощает понимание типов данных и разрешает путаницу в различных длинах целочисленных и вещественных, строковых и символьных типах, а также сокращает размер кода (таблица ниже). Сравнение синтаксиса объявления переменных в Паскаль и Python Паскаль Python var s, n: integer; begin    s := 0;    n := 75; end. s = 0 n = 75 Одно из очевидных достоинств языка. Python — компактность программного кода. Например, решение задачи — поменять местами значения двух переменных — на языке Паскаль решается в три оператора, в Python — в одну строку (таблица ниже): Сравнение синтаксиса переприсвоения переменных в Паскаль и Python Паскаль Python c := a; a := b; b := c; a, b = b, a 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 Используется для разработки веб-приложений, игр, удобен для автоматизации, математических вычислений, машинного обучения, в области Интернета вещей. Существует реализация под названием Micro Python, оптимизированная для запуска на микроконтроллерах (можно писать инструкции, логику взаимодействия устройств, организовывать связь, реализовывать умный дом). На основании данных отличий можно сделать вывод, что синтаксис и структура основных алгоритмических конструкций в Python во многом схожи с Паскалем. Однако они приведены в совершенный вид, код стал чище и короче, кроме того, Python поддерживает современные типы данных и необходимые функции для работы с ними. Это делает язык подходящим для первого знакомства с программированием, в особенности для школьников и студентов, и лёгким для изучения самим преподавателем. В случае школы одним из решений могло бы стать видоизменение  самого предмета "Информатика" в новую дисциплину под названием «Информатика и IT-технологии», где это не уроки по использованию офисного пакета, а изучение принципов алгоритмики, computational thinking — тех основ, которые не меняются годами. Разумеется, для такого "эволюционного" скачка необходимо повышение квалификации преподавателей. Если в плане перевода из одной системы счисления в другую или составления блок-схем всё весьма статично, то новые технологии, веяния, языки программирования и их парадигмы — всё это меняется очень быстро, и, чтобы учитель мог приводить интересные примеры и составлять урок качественно, он должен знать уйму вещей.  Например, если учебная программа подразумевает преподавание только языка Паскаль, преподавателю должен понимать и другие современные, промышленные языки, особенно если в классе есть ученик, заинтересованный в программировании. Иначе создаётся ситуация, как сейчас, когда уже немолодой преподаватель монотонно подаёт информацию о том, что нужно для того, чтобы в Turbo Pascal возвести x в степень 14. И, конечно, не обойтись без изменений в местных органах Министерства образования и самой школе. У них должны быть механизмы и ресурсы для отправки преподавателя на дополнительное обучение, в том числе и на частных платных курсах, даже за рубежом. Также не стоит забывать о книгах и иных источниках новой, полезной информации. Необходимо предоставить больше свободы преподавателям-энтузиастам, которые хотят, например, дать своим ученикам Python или C++, а не навязывать Паскаль, как в новых учебниках для 10–11 классов, где по ФГОСам есть только упомянутый язык. К сожалению, в нынешних реалиях России всё это выглядит утопией. Хотя по-прежнему будут существовать разработчики, использующие устаревшие языки, нужно учитывать, что в ближайшем будущем они будут заменены более распространёнными. Ещё одним из средств решения проблем может служить разработка современного интерактивного онлайн-учебника, в котором знания будут максимально актуальны и сжаты и который будет регулярно обновляться (как, например, документация к проекту).  Я верю, что переосмысление подходов к IT-образованию сделает светлое цифровое лучше, независимо от того, захотят ли наши дети начать свою карьеру в сфере IT. Каким бы ни было будущее, становится всё более и более очевидным, что программирование — способность читать и писать код на нескольких распространённых языках —  становится новой грамотностью.  Узнайте, как прокачаться и в других специальностях или освоить их с нуля: Профессия Data Scientist Профессия Data Analyst Курс по Data Engineering ПРОФЕССИИ Профессия Fullstack-разработчик на Python Профессия Java-разработчик Профессия QA-инженер на JAVA Профессия Frontend-разработчик Профессия Этичный хакер Профессия C++ разработчик Профессия Разработчик игр на Unity Профессия Веб-разработчик Профессия iOS-разработчик с нуля Профессия Android-разработчик с нуля КУРСЫ Курс по Machine Learning Курс "Machine Learning и Deep Learning" Курс "Математика для Data Science" Курс "Математика и Machine Learning для Data Science" Курс "Python для веб-разработки" Курс "Алгоритмы и структуры данных" Курс по аналитике данных Курс по DevOps Frontend, Data Science