Программирование для непрограммистов — какой язык программирования учить специалистам по численному моделированию? (Александр Смирновский, OSEDUCONF-2024) — различия между версиями
Материал из 0x1.tv
StasFomin (обсуждение | вклад) |
StasFomin (обсуждение | вклад) |
||
;{{SpeakerInfo}}: {{Speaker|Александр Смирновский}}
<blockquote>
В докладе представляется опыт преподавания программирования на ЯП Python студентам первого
курса бакалавриата Физико-механического института политехнического университета по
направлению «Прикладные математика и физика».
Основной вопрос, на который до сих
пор нет окончательного ответа, — какой язык программирования следует использовать
в обучении студентов по данной специальности на протяжении всего периода обучения?
Размышлениям на эту тему и посвящён данный доклад.
</blockquote>
{{VideoSection}}
{{vimeoembed|990136041|800|450}}
{{youtubelink|}}
{{SlidesSection}}
[[File:Программирование для непрограммистов — какой язык программирования учить специалистам по численному моделированию? (Александр Смирновский, OSEDUCONF-2024).pdf|left|page=-|300px]]
{{----}}
== Thesis ==
На протяжении уже трёх лет студентам первого курса бакалавриата Физико-механического института
Политехнического университета по направлению «Прикладные математика и физика» читается курс,
который в рамках учебной программы гордо именуется «Цифровой практикум» (первый семестр), а во
втором семестре имеет более осмысленно название «Практикум по языкам программирования». Данные
курсы возникли в результате «трансформации» учебного плана всего университета с целью увеличения
числа и некоторой унификации «цифровых» курсов, под которыми понимается не только (и не столько)
программирование, но и такие малопонятные абитуриенту (да и преподавателям, впрочем, тоже)
словосочетания, как: «цифровая культура», «цифровая грамотность», «системы искусственного
интеллекта» и пр. Учебные планы некоторых курсов унифицированы и преподаются студентам в большей
или меньшей степени централизовано, тогда как наполнение других курсов полностью определяет то
подразделение Политехнического университета, преподаватели которого и ведут занятия.
Что касается упомянутых курсов «Практикум по языкам программирования» и «Цифровой практикум»,
то его наполнением и преподаванием занимаются сотрудники Высшей школы прикладной математики и
вычислительной физики Физико-механического института. Для дальнейшего обсуждения вынесенной в
заголовок темы доклада необходимо сделать небольшое отступление и некоторый исторический экскурс.
Как указано на сайте Физико-механического института СПбПУ<ref name="smirnovsk-1">Официальный сайт Физико-механического института с описание направления подготовки «Прикладные математика и физика», [https://physmech.spbstu.ru/edu/03.03.01/03.03.01_01/]</ref>,
образовательная программа по
направлению «Прикладные математика и физика» (направленность «Математические модели и вычислительные
технологии в гидроаэродинамике и теплофизике») нацелена на подготовку бакалавров, обладающих
обширными знаниями в области физико-математических наук, преимущественно ориентированных на
дальнейшее обучение в магистратуре и обладающих практическими навыками математического и
экспериментального моделирования при решении задач гидроаэродинамики, теплофизики, механики
деформируемого твёрдого тела и смежных научно-технических областей. Общая концепция подготовки
основана на сочетании фундаментальных дисциплин математической и физико-механической направленности
с курсами по современным вычислительным и информационным технологиям, применяемым для решения
общенаучных и прикладных задач физики и механики сплошных сред. Таким образом, «цифровой» аспект
является хоть и не основной целью обучения по указанной программе, но очень важной составляющей:
на протяжении всего периода обучения студентам необходимо выполнять различные задания, связанными
с программированием, в том числе самостоятельно разрабатывать программы, реализующих численные алгоритмы
для решения задач механики сплошных сред (гидроаэродинамики).
На протяжении многих лет основным инструментом для написания программ в процессе обучения в Политехническом
университете был и остаётся язык <tt>Fortran</tt>, позволяющий с относительно небольшими усилиями реализовывать
различные алгоритмы вычислительной физики, включая: методы Рунге-Кутты для решения ОДУ, численные методы
для решения уравнения конвективного переноса скалярной величины, конечно-разностные методы аппроксимации
уравнения теплопроводности и др. Более сорока лет назад преподавателями тогда ещё физико-механического
факультета Ленинградского политехнического института балы разработана учебная программа, включающая как
изучение ЯП <tt>Fortran</tt>, так и использование его для программирования в рамках различных курсов по
численным методам. В 2002 году было издано учебное пособие<ref name="smirnovsk-2"><i>Шелест В. Д.,</i> Программирование: учебное пособие, 2022</ref>,
содержащее в том числе материалы по
ЯП <tt>Fortran</tt>, которое используется студентами и преподавателями Политехнического университета и
по настоящее время.
Таким образом, с конца 1980-х годов сформировался единый подход к преподаванию курсов для студентов
специальности «Прикладные математика и физика», в котором на первое место ставится изучение физики,
а также численных методов и подходов для решения физических задач, тогда как программирование является
только вспомогательным инструментом. В этой связи, учебные курсы непосредственно по программированию
предусмотрены по сути только на первом курсе бакалавриата.
С другой стороны, уже на протяжении многих лет внутри преподавательского коллектива продолжается дискуссия
о том, что и как именно необходимо преподавать в рамках курсов по программированию. Эти дискуссии обусловлены следующими обстоятельствами.
Со стороны студентов есть запрос на обучение программированию, которое было бы не только современно,
но и могло бы пригодиться в различных областях профессиональной деятельности. Не раз со стороны некоторых
студентов возникал вопрос, почему им до сих пор приходится изучать <tt>Fortran</tt>, а не более современные
и распространённые ЯП? Конечно, с учётом современных тенденций (в мае 2024 году <tt>Fortran</tt> вошёл в ТОП-10
популярных ЯП в рейтинге TIOBE<ref name="smirnovsk-3">Индекс TIOBE популярности языков программирования (май 2024), [https://www.tiobe.com/tiobe-index/]</ref>), совсем отказываться от <tt>Fortran</tt> было бы нецелесообразно,
особенно если учесть, что в области HPC (High Performance Computing) и вычислительных методов он является
довольно удобным и относительно простым, но в тоже время мощным инструментом (особенно по сравнению с <tt>C</tt> и даже <tt>C++</tt>),
поддерживающим «из коробки» параллелизацию OpenMP, для него доступны библиотеки MPI и многое другое из области HPC.
Тем не менее, недовольство студентов необходимостью изучения <tt>Fortran</tt> по-прежнему остаётся.
С другой стороны, как показывает ежегодный опрос студентов первого курса бакалавриата, который проводится
на протяжении нескольких лет в начале сентября, примерно от трети до половины студентов оценивают свой
навык программирования на низком уровне, а часть из них в целом относятся к программированию скорее негативно.
То есть складывается ситуация, когда часть студентов не готова и даже в принципе не хочет заниматься программированием.
Таким образом, задача преподавателей, преподающих программирование, в том числе заключается в том, чтобы
заинтересовать и вовлечь студентов в область, связанную с программированием, а также «поднять» уровень тех из них,
кто приходит из школы с недостаточными знаниями программирования, чтобы на старших курсах студенты могли без
проблем писать программы, необходимые для выполнения заданий.
И здесь возникает ещё одно важное обстоятельство: многие преподаватели и сами не видят интереса и
целесообразности преподавать ЯП <tt>Fortran</tt>, а мотивация преподавателей, как известно, в настоящее время
практически единственный способ хоть какого-то развития высшей школы в РФ…
И последнее обстоятельство (last but not least) — поскольку специальность «Прикладные математика и физика»
включает не только вычислительную составляющую, но и такие важные аспекты, как экспериментальные исследования
и обработка данных (лабораторные работы), то студентам необходимы соответствующий программный инструментарий.
В рамках «цифровых» курсов студенты изучают различное ПО для подготовки графиков, написания текстов и пр.
(в основном свободное программное обеспечение, включая \LaTeX, <tt>SciDaVis</tt> и др.). Хорошим подспорьем
для них является также и знание языков программирования, позволяющих автоматизировать процессы обработки данных и их анализ.
Таким образом, складывается ситуация, когда, с одной стороны, учебная специальность «далека» от канонического ИТ,
а с другой — программирование является важной составляющей как в обучении, так и для дальнейшей профессиональной
деятельности. И во весь рост встаёт вопрос, вынесенный в заголовок доклада: так какой же язык программирования
следует учить специалистам, чья основная область деятельности — вычислительная прикладная физика? Как обычно
бывает в подобных ситуациях, не существует «серебряной пули» — одного «универсального» ЯП, позволяющего и
обрабатывать данные, и создавать вспомогательные инструменты для их анализа, и писать высокопроизводительные
программы (в том числе для HPC). В настоящее время такую нишу пытается занять ЯП <tt>Julia</tt><ref name="smirnovsk-4">Язык программирования Julia, [https://julialang.org/]</ref>,
который совмещает одновременно и возможность написания высокопроизводительного кода, и простоту и наглядность
для написания простых программ для обработки и анализа данных. К сожалению, несмотря на весьма быстрое развитие
языка и его инфраструктуры, в настоящий момент имеется очень мало как различных учебных материалов на русском языке,
так и опыта его использования в преподавательской среде. Весьма вероятно, что этот язык прочно займёт свою нишу
в области научных вычислений и станет там весьма распространён, но скорее всего не в ближайшем будущем.
Таким образом, текущие реалии таковы, что наиболее «подходящим» ЯП для обучения, а также для обработки и анализа
и данных, был и остаётся <tt>Python</tt>. Именно по этой причине этот язык был выбран в качестве ЯП для обучения
студентов, поступающих на направление «Прикладные математика и физика». ЯП <tt>Python</tt> преподаётся в течение
двух первых семестров первого курса бакалавриата. Для обучения созданию высокопроизводительных программ с
возможностью параллелизации (OpenMP и MPI) по-прежнему используется <tt>Fortran</tt>, который в настоящее время
преподаётся в рамках второго семестра первого курса.
Пока ещё рано говорить, насколько данная концепция преподавания программирования является удачной в контексте
обучения по специальности, связанной с численным моделированием физических процессов, но по крайней мере
большинство студентов весьма положительно оценивают приобретённый опыт программирования на <tt>Python</tt>.
{{----}}
[[File:{{#setmainimage:Программирование для непрограммистов — какой язык программирования учить специалистам по численному моделированию? (Александр Смирновский, OSEDUCONF-2024)!.jpg}}|center|640px]]
{{LinksSection}}
<!-- <blockquote>[©]</blockquote> -->
<references/>
[[Категория:OSEDUCONF-2024]]
[[Категория:Draft]]
[[Категория:СПО в образовании]] | |||
Версия 09:14, 30 июля 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.