преподаватель, Бухарский государственный педагогический институт, Республика Узбекистан, г. Бухара
АНАЛИЗ ПРОБЛЕМ ИЗУЧЕНИЯ И ПРЕПОДАВАНИЯ ПРОГРАММИРОВАНИЯ НА УРОКАХ ИНФОРМАТИКИ
АННОТАЦИЯ
Искусство программирования включает в себя знание инструментов и языков программирования, навыки решения проблем и эффективные стратегии разработки и реализации программ. Общий подход в обучении программированию заключается в том, чтобы сначала обучить основам языка программирования, а затем направить студентов к эффективным стратегиям для всего процесса программирования. Поэтому часто подчеркивается изучение основных концепций: они формируют основу для формирования более продвинутых навыков.
ABSTRACT
The art of programming includes knowledge of programming tools and languages, problem solving skills and effective strategies for developing and implementing programs. The general approach in teaching programming is to first teach the basics of a programming language, and then guide students to effective strategies for the entire programming process. Therefore, the study of basic concepts is often emphasized: they form the basis for the formation of more advanced skills.
Ключевые слова: программирование, обучение, начинающий программист, языки программирования.
Keywords: programming, training, beginner programmer, programming languages.
Обучение программированию, как правило, считается трудным, и на курсах программирования часто наблюдается высокий процент отсева. Было даже сказано, что новичку требуется около 10 лет, чтобы стать опытным программистом. В научной среде были проведены образовательные исследования с целью выявления особенностей начинающих программистов и изучения процесса обучения и его связей с различными аспектами программирования. В последнее время также изучаются различия между процедурным и объектно-ориентированным подходами к обучению, поскольку Java и C++ стали общими языками обучения. Теперь мы рассмотрим эти вопросы более подробно.
Характеристики начинающих программистов. По определению, начинающим программистам не хватает знаний и навыков экспертов по программированию. В различной литературе было изучено несколько различных разделяющих факторов. Общими чертами для новичков, по-видимому, является то, что они ограничены поверхностным знанием программ и обычно подходят к программированию «строка за строкой», а не на уровне более крупных программных структур. Новички тратят мало времени на планирование и тестирование кода, и при необходимости пытаются исправить свои программы с помощью небольших локальных исправлений вместо более тщательного переформулирования программ. Знания новичков, как правило, зависят от контекста, а не от общего текста, и они также часто не могут правильно применять полученные знания. На самом деле, среднестатистический студент обычно не делает больших успехов во вводном курсе программирования [3].
Иностранные специалисты [3] в своем исследовании изучили трудности программирования на C++, проведя веб-опрос как для студентов, так и для преподавателей. Одним из наиболее очевидных результатов было то, что студенты оценили наличие меньших трудностей, чем было выведено из ответов учителей. Было высказано предположение, что это связано с тем, что студенты сами считают, что они поняли проблему, но учителя видят оставшиеся недостатки в курсовых работах и экзаменах по программированию.
Это подтверждает эмпирические наблюдения многих учителей: новички в программировании часто не осознают своих собственных недостатков. Также личные качества студентов влияют на их успеваемость. Нет литературы о существенных различиях в обучении, которые были бы вызваны такими категориями, как пол или национальность, но общий интеллект и математические или научные способности, по-видимому, связаны с успехом в обучении программированию. В курсе программирования можно распознать различные модели поведения студентов при столкновении с проблемной ситуацией. В некоторой литературе можно заметить два основных типа учащихся программированию: «пробки» и «двигатели». В проблемной ситуации «пробки» просто останавливаются и оставляют всякую надежду решить проблему самостоятельно, в то время как движущие силы продолжают пытаться, изменяя свой код и эффективно используя обратную связь об ошибках. Есть также экстремальные «двигатели» - «лудильщики», которые не могут отслеживать свою программу, вносят изменения более или менее случайным образом и, подобно «пробкам», не очень сильно продвигаются в своей задаче.
В целом, есть эффективные и неэффективные новички, то есть студенты, которые учатся без чрезмерных усилий, и те, кто не учится без чрезмерного личного внимания. Естественно, личные стратегии обучения и мотивация студентов влияют на их успех в изучении стратегий программирования. Многие из учителей считают: учитывая, что знания (предполагается) одинаково низкие и именно их существующие стратегии изначально различают эффективных и неэффективных новичков. Предварительные знания и практика также могут быть основным источником ошибок, особенно при попытке перенести пошаговое решение проблемы непосредственно с естественного языка в программу [4]. Различия между естественным языком и языком программирования могут легко вызвать проблемы. Например, некоторые новички ошибочно понимают, что условие в цикле «while» должно применяться непрерывно, а не проверяться один раз за итерацию.
Различные аспекты программирования. Изучение программирования включает в себя несколько видов деятельности, например, изучение особенностей языка программирования, разработку программ и понимание программ. Типичный подход в учебниках и курсах программирования - начинать с декларативных знаний о конкретном языке. Однако исследования показывают, что важно учитывать и другие аспекты на первых курсах программирования.
Несколько распространенных недостатков в понимании новичками конкретных конструкций языка программирования представлены в работах Солоуэя и Шпорера [5], а также собраны Пане и Майерсом [6]. Например, инициализация переменных кажется более сложной для понимания, чем обновление или тестирование переменных. Ошибки с особыми циклами и условными обозначениями распространены, и действия, которые происходят «за сценой», такие как обновление переменных цикла в циклах «пока», трудны для учащихся. Студенты часто имеют много неправильных представлений в своем понимании или реализации рекурсии. Интересно, что новички были замечены более успешными в написании рекурсивных функций после изучения итеративных функций, но не наоборот [7]. Выражения, которые синтаксически близки друг к другу или означают разные вещи в разных контекстах, часто вызывают практические трудности, например, «123» и 123 на языке С++. Указатели кажутся очень проблематичными, как по мнению студентов, так и преподавателей. Предположительно, что по этой причине также динамическое распределение памяти, справочные параметры и другие вопросы, требующие понимания содержимого памяти и указателей, занимают высокие места в рейтингах сложности. Также многие другие сложные языковые функции, такие как шаблоны, кастинг, полиморфизм и перегрузка функций, были сочтены сложными в ходе опроса.
Однако основным источником трудностей, по-видимому, является не синтаксис или понимание концепций, а скорее базовое планирование программы. Важно проводить различие между знаниями в области программирования и стратегиями программирования. Студент может научиться объяснять и понимать концепцию программирования, например, что означает указатель, но все равно не может правильно использовать его в программе. Студенты могут знать синтаксис и семантику отдельных операторов, но они не знают, как объединить эти функции в допустимые программы. Даже когда они знают, как решить проблему вручную, у них возникают проблемы с переводом ее в эквивалентную компьютерную программу.
Студенты часто испытывают большие трудности в понимании всех вопросов, связанных с выполнением той или иной программы. Дю Буле[8] заявил, что «... требуется довольно много времени, чтобы изучить связь между программой на странице и механизмом, который она описывает». Учащиеся испытывают трудности с пониманием того, что каждая инструкция выполняется в том состоянии, которое было создано предыдущими инструкциями. Он заявил, что они должны быть простой «условной машиной», которая упрощает язык и машину, чтобы все преобразования программы были видны. Например, язык LOGO является примером такого подхода [9] и широко использовался в 80-х годах при вводном обучении программированию. Он основан на том факте, что все инструкции касаются перемещения черепахи, которая рисует на дисплее, что делает состояние программы и преобразования четко видимыми. Однако в настоящее время большинство университетов обязаны преподавать языки программирования, которые по крайней мере, близко к тем, которые используются в отрасли, и лишь в редких случаях можно выбрать подход для вводного курса программирования, основываясь только на педагогических соображениях.
Часто существует небольшое соответствие между способностью писать программу и способностью ее читать. Курсы программирования должны включать их оба. Кроме того, следует обучить некоторым базовым стратегиям тестирования и отладки. Еще одной проблемой, которая усложняет изучение программирования, является различие между моделью программы, как она была задумана, и моделью программы, как она есть на самом деле. Часто встречаются ошибки в дизайне и ошибки в коде. Кроме того, в рабочей жизни программисты ежедневно сталкиваются с необходимостью понимать программу, которая работает неожиданным образом. Это требует способности отслеживать код, чтобы построить мысленную модель программы и предсказать ее поведение. Это один из навыков, которые можно развить, уделяя особое внимание пониманию программ и стратегиям отладки на курсах программирования.
Список литературы:
- F.D.Khayotovna.Q.B.Samadovich Method of teaching roman numbers on different examples in initial classes //Journal of Global Research in Mathematical Archives (JGRMA) 6 (11), 46-51
- Fayzieva D.Kh. Using software for teaching foreign languag using software for teaching foreign languages// Academy— 2020. — № 9 (60). — С. 13-17.
- Келлинг, М. и Розенберг, Дж. Язык для обучения объектно-ориентированному программированию, Материалы 27-го Технического симпозиума SIGCSE по образованию в области компьютерных наук, 1996, стр.190-194.
- Маккракен, М., Алмструм, В., Диас, Д., Гуздиал, М., Хаган, Д., Коликант, Ю.Б., Лаксер, С., Томас, Л., Уттинг, И. и Вилуш, Т. Многонациональное, многоинституциональное исследование оценки навыков программирования студентов первого курса CS, Бюллетень SIGCSE, 33(4). 2001, стр.125-180.
- Бонар, Дж. и Солоуэй, Э. Знания о предварительном программировании: Основной источник неправильных представлений у начинающих программистов, в Soloway & Spohrer: Изучение начинающего программиста. 1989, стр.325-354.
- Роу, Г., Торберн, Г. ВИНС - онлайн-учебное пособие для обучения вводному программированию, Британский журнал образовательных технологий. 2000, 31(4), стр.359.
- Напс, Т.Л., Реслинг, Г., Альмструм, В., Данн, У., Флейшер, Р., Хундхаузен, С., Корхонен, А., Малми, Л., Макнелли, М., Роджер, С. & Веласкес-Итурбиде, Дж.А. Изучение роли визуализации и вовлеченности в образование в области компьютерных наук, Бюллетень SIGCSE. 2003, 35(2), стр. 131-152.
- Кей, Дж., Барг, М., Фекете, А., Грининг, Т., Холландс, О., Кингстон, Дж. и Кроуфорд, К. Проблемное обучение для базовых курсов информатики. Образование в области компьютерных наук. 2000, 10(2), стр.109-128.
- Дю Буле. Некоторые трудности при обучении программированию. 1989, стр.283-300.
- Файзиева Д.Х., Асадова О.А. Методика преподавания информатики в среднеобразовательной школе //Вестник науки и образования 2021. № 1 (104). Часть 20