Программирование для непрограммистов — какой язык программирования учить специалистам по численному моделированию? (Александр Смирновский, OSEDUCONF-2024)
- Докладчик
- Александр Смирновский
В докладе представляется опыт преподавания программирования на ЯП Python студентам первого курса бакалавриата Физико-механического института политехнического университета по направлению «Прикладные математика и физика».
Основной вопрос, на который до сих пор нет окончательного ответа, — какой язык программирования следует использовать в обучении студентов по данной специальности на протяжении всего периода обучения?
Размышлениям на эту тему и посвящён данный доклад.
Содержание
Видео
Презентация
Thesis
На протяжении уже трёх лет студентам первого курса бакалавриата Физико-механического института Политехнического университета по направлению «Прикладные математика и физика» читается курс, который в рамках учебной программы гордо именуется «Цифровой практикум» (первый семестр), а во втором семестре имеет более осмысленно название «Практикум по языкам программирования». Данные курсы возникли в результате «трансформации» учебного плана всего университета с целью увеличения числа и некоторой унификации «цифровых» курсов, под которыми понимается не только (и не столько) программирование, но и такие малопонятные абитуриенту (да и преподавателям, впрочем, тоже) словосочетания, как: «цифровая культура», «цифровая грамотность», «системы искусственного интеллекта» и пр. Учебные планы некоторых курсов унифицированы и преподаются студентам в большей или меньшей степени централизовано, тогда как наполнение других курсов полностью определяет то подразделение Политехнического университета, преподаватели которого и ведут занятия.
Что касается упомянутых курсов «Практикум по языкам программирования» и «Цифровой практикум», то его наполнением и преподаванием занимаются сотрудники Высшей школы прикладной математики и вычислительной физики Физико-механического института. Для дальнейшего обсуждения вынесенной в заголовок темы доклада необходимо сделать небольшое отступление и некоторый исторический экскурс.
Как указано на сайте Физико-механического института СПбПУ[1], образовательная программа по направлению «Прикладные математика и физика» (направленность «Математические модели и вычислительные технологии в гидроаэродинамике и теплофизике») нацелена на подготовку бакалавров, обладающих обширными знаниями в области физико-математических наук, преимущественно ориентированных на дальнейшее обучение в магистратуре и обладающих практическими навыками математического и экспериментального моделирования при решении задач гидроаэродинамики, теплофизики, механики деформируемого твёрдого тела и смежных научно-технических областей. Общая концепция подготовки основана на сочетании фундаментальных дисциплин математической и физико-механической направленности с курсами по современным вычислительным и информационным технологиям, применяемым для решения общенаучных и прикладных задач физики и механики сплошных сред. Таким образом, «цифровой» аспект является хоть и не основной целью обучения по указанной программе, но очень важной составляющей: на протяжении всего периода обучения студентам необходимо выполнять различные задания, связанными с программированием, в том числе самостоятельно разрабатывать программы, реализующих численные алгоритмы для решения задач механики сплошных сред (гидроаэродинамики).
На протяжении многих лет основным инструментом для написания программ в процессе обучения в Политехническом университете был и остаётся язык Fortran, позволяющий с относительно небольшими усилиями реализовывать различные алгоритмы вычислительной физики, включая: методы Рунге-Кутты для решения ОДУ, численные методы для решения уравнения конвективного переноса скалярной величины, конечно-разностные методы аппроксимации уравнения теплопроводности и др. Более сорока лет назад преподавателями тогда ещё физико-механического факультета Ленинградского политехнического института балы разработана учебная программа, включающая как изучение ЯП Fortran, так и использование его для программирования в рамках различных курсов по численным методам. В 2002 году было издано учебное пособие[2], содержащее в том числе материалы по ЯП Fortran, которое используется студентами и преподавателями Политехнического университета и по настоящее время.
Таким образом, с конца 1980-х годов сформировался единый подход к преподаванию курсов для студентов специальности «Прикладные математика и физика», в котором на первое место ставится изучение физики, а также численных методов и подходов для решения физических задач, тогда как программирование является только вспомогательным инструментом. В этой связи, учебные курсы непосредственно по программированию предусмотрены по сути только на первом курсе бакалавриата.
С другой стороны, уже на протяжении многих лет внутри преподавательского коллектива продолжается дискуссия о том, что и как именно необходимо преподавать в рамках курсов по программированию. Эти дискуссии обусловлены следующими обстоятельствами.
Со стороны студентов есть запрос на обучение программированию, которое было бы не только современно, но и могло бы пригодиться в различных областях профессиональной деятельности. Не раз со стороны некоторых студентов возникал вопрос, почему им до сих пор приходится изучать Fortran, а не более современные и распространённые ЯП? Конечно, с учётом современных тенденций (в мае 2024 году Fortran вошёл в ТОП-10 популярных ЯП в рейтинге TIOBE[3]), совсем отказываться от Fortran было бы нецелесообразно, особенно если учесть, что в области HPC (High Performance Computing) и вычислительных методов он является довольно удобным и относительно простым, но в тоже время мощным инструментом (особенно по сравнению с C и даже C++), поддерживающим «из коробки» параллелизацию OpenMP, для него доступны библиотеки MPI и многое другое из области HPC. Тем не менее, недовольство студентов необходимостью изучения Fortran по-прежнему остаётся.
С другой стороны, как показывает ежегодный опрос студентов первого курса бакалавриата, который проводится на протяжении нескольких лет в начале сентября, примерно от трети до половины студентов оценивают свой навык программирования на низком уровне, а часть из них в целом относятся к программированию скорее негативно. То есть складывается ситуация, когда часть студентов не готова и даже в принципе не хочет заниматься программированием. Таким образом, задача преподавателей, преподающих программирование, в том числе заключается в том, чтобы заинтересовать и вовлечь студентов в область, связанную с программированием, а также «поднять» уровень тех из них, кто приходит из школы с недостаточными знаниями программирования, чтобы на старших курсах студенты могли без проблем писать программы, необходимые для выполнения заданий.
И здесь возникает ещё одно важное обстоятельство: многие преподаватели и сами не видят интереса и целесообразности преподавать ЯП Fortran, а мотивация преподавателей, как известно, в настоящее время практически единственный способ хоть какого-то развития высшей школы в РФ…
И последнее обстоятельство (last but not least) — поскольку специальность «Прикладные математика и физика» включает не только вычислительную составляющую, но и такие важные аспекты, как экспериментальные исследования и обработка данных (лабораторные работы), то студентам необходимы соответствующий программный инструментарий. В рамках «цифровых» курсов студенты изучают различное ПО для подготовки графиков, написания текстов и пр. (в основном свободное программное обеспечение, включая \LaTeX, SciDaVis и др.). Хорошим подспорьем для них является также и знание языков программирования, позволяющих автоматизировать процессы обработки данных и их анализ.
Таким образом, складывается ситуация, когда, с одной стороны, учебная специальность «далека» от канонического ИТ, а с другой — программирование является важной составляющей как в обучении, так и для дальнейшей профессиональной деятельности. И во весь рост встаёт вопрос, вынесенный в заголовок доклада: так какой же язык программирования следует учить специалистам, чья основная область деятельности — вычислительная прикладная физика? Как обычно бывает в подобных ситуациях, не существует «серебряной пули» — одного «универсального» ЯП, позволяющего и обрабатывать данные, и создавать вспомогательные инструменты для их анализа, и писать высокопроизводительные программы (в том числе для HPC). В настоящее время такую нишу пытается занять ЯП Julia[4], который совмещает одновременно и возможность написания высокопроизводительного кода, и простоту и наглядность для написания простых программ для обработки и анализа данных. К сожалению, несмотря на весьма быстрое развитие языка и его инфраструктуры, в настоящий момент имеется очень мало как различных учебных материалов на русском языке, так и опыта его использования в преподавательской среде. Весьма вероятно, что этот язык прочно займёт свою нишу в области научных вычислений и станет там весьма распространён, но скорее всего не в ближайшем будущем.
Таким образом, текущие реалии таковы, что наиболее «подходящим» ЯП для обучения, а также для обработки и анализа и данных, был и остаётся Python. Именно по этой причине этот язык был выбран в качестве ЯП для обучения студентов, поступающих на направление «Прикладные математика и физика». ЯП Python преподаётся в течение двух первых семестров первого курса бакалавриата. Для обучения созданию высокопроизводительных программ с возможностью параллелизации (OpenMP и MPI) по-прежнему используется Fortran, который в настоящее время преподаётся в рамках второго семестра первого курса.
Пока ещё рано говорить, насколько данная концепция преподавания программирования является удачной в контексте обучения по специальности, связанной с численным моделированием физических процессов, но по крайней мере большинство студентов весьма положительно оценивают приобретённый опыт программирования на Python.