Секция 2: «Содержание и методика преподавания отдельных дисциплин» 23 октября 12:35 – 13:15

 

Доклад «Преподавание языков программирования при обучении программистов»

Докладчик:

Виталий Николаевич Брагилевский
старший преподаватель СПбГУ, сотрудник компании JetBrains

 

Аннотация: 

Языки программирования образуют один из важнейших компонентов учебных планов программ, ставящих своей целью подготовку программистов. Современный квалифицированный программист должен владеть тремя, а то четырьмя языками программирования. При этом всякий раз необходимо делать выбор, какие языки изучать, а какие опустить. С одной стороны, у таких курсов много «заказчиков» — многие последующие курсы рассчитывают на владение студентами тех или иных языков программирования. С другой — изучение конкретных языков должно облегчать изучение других языков в дальнейшем, уже после завершения обучения в вузе. К сожалению, далеко не все языки хорошо подходят для таких целей. Некоторые их них оказываются «вещью» в себе, опыт их изучения очень плохо переносится, а то и вредит изучению других языков. В настоящем докладе будут представлены несколько распространённых подходов к преподаванию языков программирования и обсуждены их достоинства и недостатки. Также будут даны критерии, которые можно использовать при формировании компонентов учебного плана, связанных с преподаванием и использованием языков программирования.

 

Запись доклада

Презентация доклада

 

Резюме: 

Профессиональный программист обычно владеет несколькими языками программирования. Но заранее обучить программиста всем языкам невозможно. В процессе обучения могут появиться новые языки, или какие-то языки неожиданно становятся популярными. В этих условиях следует обучать наиболее «типичным» языкам, не обязательно самым актуальным, но облегчающим освоение новых языков программирования. 

Язык программирования – это инструмент, способ выражения мысли, и даже способ самого мышления. Кроме того, язык программирования – это ещё и некий стиль работы. При обучении языкам программирования необходимо также обучать и стилю написания программ, а именно, какие конструкции принято использовать и как они связаны между собой. 

            Многие языки программирования начинают оцениваться и с точки зрения того, насколько правильно их использовать в качестве инструмента для обучения. Рассмотрим два языка, часто используемых для обучения. Например, язык Python идеален как язык программирования, когда мы готовим специалистов в разных областях: химиков, математиков, биологов, лингвистов, историков. Но для обучения программистов не стоит его использовать. Python – это язык с устаревшим синтаксисом, пришедшим из начала 90-х годов. У него неудачная система типов. Слишком большая свобода для написания кода. Кроме того, переход от Python к другому языку гораздо сложнее и опаснее, чем в обратную сторону.

Язык С++ также создаёт проблемы при обучении программистов. Это сложный язык, который всё время развивается и его трудно полностью изучить. С его помощью легко написать «работающую», но некорректную программу. Практически невозможно быстро перейти к решению прикладных задач. 

Был проведён опрос вновь поступивших студентов 1-го курса Факультета математики и компьютерных наук СПбГУ о том, какими языками программирования они владеют. Большинство (89%) владеют языками C или C++, больше половины (63%) знают Python. Можно в этом случае учить языку, который все якобы «знают». Но не понятно какой процент обучающихся его знает, насколько хорошо знают. Можно переучивать на профессиональные подходы к написанию кода, но это достаточно сложно, к тому же не все будут согласны переучиваться. А что же делать с теми, кто совсем не умеет программировать или обучен другому языку? Возможно решением этих проблем станет обучение студентов менее знакомым им языкам программирования, например, PascalABC.NET, Julia, Kotlin. При этом необходимо сразу же обучать «хорошо» писать на них программный код. Основные характеристики качества кода: удобство сопровождения, гибкость, портируемость, возможность повторного использования, удобочитаемость, тестируемость, понятность. 

Некоторые считают, что нужно обучать языку Java, поскольку это главный объектно-ориентированный язык программирования. Этот взгляд уже устарел лет на 15-20. Есть мнение, что нужно преподавать Javascript или PHP, поскольку, зная их студенты смогут быстро начать работать в компаниях, но вузы в этом не заинтересованы. Некоторые предлагают начать с низкоуровневости, с языка ассемблера, С, чтобы студенты знали, как всё устроено изнутри. Кто-то предлагает начинать с функционального программирования на языке Haskell. Но пригодятся ли эти знания студентом позже, в том числе, для перехода на другие языки программирования?

Каждая образовательная программа или преподаватель делают свой выбор относительно преподаваемых языков программирования, который зависит от многих факторов. Нужно думать о том, как этот выбор будет влиять на дальнейшее обучение, как изучаемый язык программирования будет применяться в последующих дисциплинах. Языки программирования все разные и заставляют нас думать по-разному. Навыки программирования просто так не переносимы с одного языка на другой. 

На образовательной программе «Современное программирование» Факультета математики и компьютерных наук СПбГУ на первом курсе обучения в сентябре-октябре реализуется курс «Основы программирования» (язык Kotlin). Параллельно реализуется дисциплина «Основы Linux» (язык Bash). В ноябре-декабре преподаётся дисциплина «Введение в объектно-ориентированное программирование» (язык Kotlin), и параллельно дисциплина «Низкоуровневое программирование» (Язык C++). Кроме того, на первом курсе используется Python для решения задач в курсе «Дискретная математика».

Во втором семестре первого курса на языке Kotlin реализуются проекты, в том числе и командные. Студенты приближаются к решению промышленных задач. С++ тоже изучается в полной выкладке, и одновременно начинается курс «Алгоритмы и структуры данных».

На втором курсе стоит задача расширить кругозор студентов, и в третьем семестре они изучают язык Haskell. В четвёртом семестре в рамках курса математической логики изучается язык логического программирования Prolog. Не третьем курсе обучения в рамках дисциплины «Машинное обучение» используется Python. C 5-го по 8-ой семестры студентам предлагаются дисциплины по выбору: Python, Scala, Java, C#, Rust, Javascriptm PHP.