канд. пед. наук, доц. Андижанского государственного университета, Узбекистан, г. Андижан
ТИПИЧНЫЕ ОШИБКИ НАЧИНАЮЩИХ ПРОГРАММИСТОВ ПРИ ИЗУЧЕНИИ ЯЗЫКА C++ И СТРАТЕГИИ ИХ УСТРАНЕНИЯ
АННОТАЦИЯ
В статье рассматриваются типичные ошибки, допускаемые начинающими программистами при изучении языка C++, и предлагаются эффективные педагогические стратегии их устранения. Проведена классификация ошибок на пять основных категорий: синтаксические, семантические, логические, ошибки времени выполнения и ошибки управления ресурсами. Экспериментальное исследование проводилось на базе Андижанского государственного университета с участием 187 студентов первого курса специальностей «Компьютерный инжиниринг» (60610500) и «Информационные технологии и системы» (60610200). Результаты показывают, что систематическое применение разработанных стратегий повышает успеваемость студентов на 32,1% и снижает среднее количество ошибок в учебных программах на 42,1%.
ABSTRACT
The article examines typical errors made by novice programmers when learning the C++ language and proposes effective pedagogical strategies for their correction. A classification of errors into five main categories is provided: syntactic, semantic, logical, runtime errors, and resource management errors. The experimental study was conducted at Andijan State University with the participation of 187 first-year students majoring in "Computer Engineering" (60610500) and "Information Technology and Systems" (60610200). The results show that the systematic application of the developed strategies improves student performance by 32.1% and reduces the average number of errors in training programs by 42.1%.
Ключевые слова: C++, обучение программированию, типичные ошибки начинающих, статистический анализ, педагогические стратегии, методика преподавания программирования, отладка программ.
Keywords: C++, programming education, typical beginner errors, statistical analysis, pedagogical strategies, programming teaching methodology, program debugging.
1. Введение
Язык программирования C++ остается одним из базовых языков в учебных программах высших учебных заведений по направлениям подготовки в области информационных технологий. Однако его изучение представляет значительные трудности для начинающих программистов, что обусловлено сложностью синтаксиса, необходимостью понимания низкоуровневых концепций управления памятью и многообразием возможных ошибок [2, 3, 5, 8, 11, 16].
Проблемы обучения программированию в современной высшей школе широко обсуждаются в педагогической литературе. Студенты испытывают различные трудности в освоении синтаксических, концептуальных и стратегических знаний при изучении программирования. Типичные ошибки начинающих программистов являются закономерным явлением в процессе обучения [3, 6, 7]. Как показывает педагогическая практика, значительная часть учебного времени на начальных этапах обучения программированию студенты тратят на поиск и исправление ошибок в своих программах [11, 16].
В контексте современного образования актуальной является задача разработки систематизированных педагогических стратегий, позволяющих сократить время на отладку программ и повысить эффективность обучения. Особое значение приобретает использование современных инструментов разработки и систем автоматической проверки кода в учебном процессе [5].
Цель исследования: разработать и экспериментально проверить систему педагогических стратегий обнаружения и устранения типичных ошибок, допускаемых начинающими программистами при изучении языка C++.
Задачи исследования:
1. Провести систематизацию типичных ошибок начинающих программистов при изучении C++ на основе анализа учебных программ студентов.
2. Разработать классификацию ошибок по категориям с учетом специфики учебного процесса.
3. Разработать педагогические стратегии обнаружения и устранения для каждой категории ошибок с интеграцией современных инструментов разработки.
4. Провести педагогический эксперимент для проверки эффективности предложенных стратегий.
Научная новизна: разработана комплексная система педагогических стратегий устранения ошибок программирования на C++, адаптированная для начинающих программистов с учетом специфики образовательного процесса в условиях узбекских вузов, включающая систему автоматической проверки программ и методику применения современных инструментов отладки.
2. Материалы и методы исследования
2.1. База и организация исследования
Педагогический эксперимент проводился на кафедре Программной инженерии Андижанского государственного университета в период с сентября 2024 года по декабрь 2025 года.
Участники эксперимента: 187 студентов первого курса, обучающихся по направлениям:
- «Компьютерный инжиниринг» (60610500) - 89 студентов
- «Информационные технологии и системы» (60610200) - 98 студентов
В соответствии с методологией педагогического эксперимента участники были разделены на две группы [1, 4, 10, 12]:
- Контрольная группа (КГ): 95 студентов, обучение по традиционной методике.
- Экспериментальная группа (ЭГ): 92 студента, обучение с применением разработанных стратегий.
2.2. Методология педагогического эксперимента
Исследование проводилось методом констатирующего и формирующего педагогического эксперимента в три этапа, в соответствии с методологией, изложенной в работах по организации педагогических экспериментов
Этап 1: Констатирующий эксперимент (сентябрь 2024 - март 2025 г.)
Проанализировано 1840 учебных программ студентов. Средний объем программ составлял 25-35 строк кода. Использовались протоколы выполнения лабораторных работ, записи компиляторов с сообщениями об ошибках, наблюдения преподавателей и анкетирование студентов. Констатирующий эксперимент позволил выявить исходный уровень подготовки студентов и определить наиболее проблемные области в обучении.
Этап 2: Разработка стратегий (апрель - май 2025 г.)
На основе выявленных ошибок разработана классификация и система педагогических стратегий, включающих диагностические признаки, алгоритмы поиска причин, пошаговые инструкции по исправлению и профилактические меры [2].
Этап 3: Формирующий эксперимент (сентябрь-декабрь 2025 г.)
Студенты экспериментальной группы обучались с применением разработанных стратегий, в то время как контрольная группа занималась по традиционной методике. Формирующий эксперимент предполагает целенаправленное воздействие на процесс обучения с целью проверки гипотезы об эффективности разработанных стратегий.
2.3. Инструменты обучения
В качестве базовых инструментов использовались: интегрированная среда разработки Code::Blocks 20.03, компилятор GCC версии 8.1.0 и стандартная библиотека C++.
Для экспериментальной группы дополнительно применялись следующие инструменты в рамках разработанных педагогических стратегий:
1. Статический анализатор Cppcheck - инструмент для автоматического обнаружения потенциальных ошибок в коде без его выполнения (неинициализированные переменные, выход за границы массива, утечки памяти).
2. Отладчик GDB (GNU Debugger) - программа для пошагового выполнения кода, просмотра значений переменных и поиска места возникновения ошибки во время работы программы.
3. Система автоматической проверки программ - разработанная авторами система, которая автоматически компилирует и тестирует программы студентов на наборе тестовых данных, предоставляя немедленную обратную связь о правильности решения.
Эти инструменты применялись не изолированно, а как практическое средство реализации педагогических стратегий, обучая студентов систематическим методам поиска и устранения ошибок.
2.4. Критерии оценки и методы обработки данных
Использовались три группы критериев:
Когнитивный компонент:
- Процент успешно выполненных заданий
- Среднее количество ошибок на одну программу
- Количество попыток до получения правильного решения
Деятельностный компонент:
- Время выполнения задания
- Время отладки программы
- Уровень самостоятельности при решении задач
Мотивационный компонент:
- Удовлетворенность процессом обучения
- Уверенность при программировании
- Готовность к дальнейшему изучению языка
Обработка результатов проводилась с применением методов математической статистики согласно рекомендациям для педагогических исследований [1, 10, 12]:
- Критерий Колмогорова-Смирнова (проверка нормальности распределения)
- Критерий χ² Пирсона (проверка однородности групп)
- t-критерий Стьюдента (сравнение средних значений в группах)
- Критерий Фишера (сравнение дисперсий)
Уровень значимости принят α = 0,05.
3. Результаты и обсуждение
3.1. Классификация типичных ошибок
На основе анализа 1840 учебных программ выявлено 5394 ошибки, систематизированные в пять категорий (Рис 1.):
/Medatov.files/image001.png)
Рисунок 1. Общее распределение ошибок
3.1.1. Синтаксические ошибки (35,8%)
Ошибки, связанные с нарушением правил написания конструкций языка. Обнаруживаются компилятором на этапе трансляции. Синтаксические ошибки являются наиболее частыми среди начинающих программистов.
Основные подтипы:
- Отсутствие точки с запятой (38,2%)
- Ошибки со скобками (26,7%)
- Неправильные операторы (18,4%)
- Забытые директивы #include (16,7%)
Примеры типичных ошибок:
|
// Пример 1: Забыта точка с запятой (68% работ) int main() { int x = 5 // Ошибка: expected ';' cout << x; return 0; } |
// Пример 2: Неправильный оператор (41% работ) int main() { int a = 10; cout < a; // вместо << return 0; } |
3.1.2. Семантические ошибки (22,4%)
Программа синтаксически правильна, но действия не имеют смысла с точки зрения типов данных.
Примеры:
|
// Несоответствие типов (54% работ) int main() { int x; x = "Привет"; // строку нельзя присвоить int return 0; } |
// Использование необъявленной переменной (38%) int main() { cout << y; // y не объявлена return 0; } |
3.1.3. Логические ошибки (18,3%)
Программа работает, но выдает неправильный результат. Логические ошибки часто являются следствием недостаточного понимания алгоритмической логики [2, 3, 5, 8].
|
// Неправильное условие (61% случаев) int main() { int age = 18; if (age > 18) { // ОШИБКА: должно быть >= cout << "Можно голосовать"; } return 0; } |
// Ошибка в формуле (52%) int main() { int a = 10, b = 20, c = 30; double avg = (a + b + c) / 2; // должно быть /3 cout << avg; return 0; } |
3.1.4. Ошибки времени выполнения (15,1%)
Программа компилируется, но при выполнении возникает ошибка. Данный тип ошибок особенно опасен, так как может проявиться только при определенных входных данных [5, 11, 13-15] .
|
// Деление на ноль (68% случаев) int main() { int a = 10, b = 0; int result = a / b; // Ошибка выполнения! return 0; } |
// Выход за границы массива (59%) int main() { int arr[5] = {1, 2, 3, 4, 5}; cout << arr[7]; // Обращение к несуществующему элементу return 0; } |
3.1.5. Ошибки управления ресурсами (8,4%)
Неправильное использование динамической памяти. Эти ошибки характерны именно для C++ и требуют понимания концепций управления памятью.
|
// Утечка памяти (72% случаев) int main() { int* ptr = new int(10); cout << *ptr; // delete не вызван - память не освобождена! return 0; } |
// Утечка в условии (67%) int main() { int* ptr = new int(100); int x; cout << "Введите число: "; cin >> x; if(x > 0) { ptr = new int(200); // Утечка! Перезаписали указатель } // Здесь уже нельзя освободить первый new int(100) delete ptr; // Освобождаем только второй объект return 0; } |
3.2. Стратегии устранения ошибок
3.2.1. Стратегии устранения синтаксических ошибок
СТРАТЕГИЯ 1: Систематическое чтение сообщений компилятора
Разработана трехшаговая методика интерпретации диагностических сообщений компилятора:
1. Найти номер строки: main.cpp:4:5: error: expected ';' → строка 4, позиция 5
2. Понять тип ошибки: expected ';' → пропущена точка с запятой
3. Проверить предыдущую строку: часто ошибка находится в строке перед указанной
СТРАТЕГИЯ 2: Метод "Пишу-Компилирую-Исправляю"
Студент пишет 3-5 строк и сразу компилирует, а не всю программу сразу. Это позволяет локализовать ошибки на ранней стадии.
СТРАТЕГИЯ 3: Контрольный список перед компиляцией
- Есть ли #include <iostream>?
- Все ли операторы заканчиваются точкой с запятой?
- Все ли скобки парные: { }, ( ), [ ]?
- Правильно ли написаны операторы: << для cout, >> для cin?
СТРАТЕГИЯ 4: Использование статического анализатора
Студенты экспериментальной группы обучались использованию Cppcheck для автоматического обнаружения синтаксических проблем до компиляции.
Эффективность: Снижает количество синтаксических ошибок на 48%.
3.2.2. Стратегии устранения семантических ошибок
СТРАТЕГИЯ 1: Таблица соответствия типов данных
|
Тип данных |
Что можно хранить |
Что НЕЛЬЗЯ |
Пример |
|
int |
Целые числа |
Дробные, текст |
int x = 5; |
|
double |
Дробные числа |
Текст |
double y = 3.14; |
|
string |
Текст |
Числа напрямую |
string s = "Hi"; |
Правило: "Тип переменной = Тип значения"
СТРАТЕГИЯ 2: Метод "Объявил - Проверил"
Перед использованием переменной студент должен найти строку с объявлением и проверить, что использование идет ПОСЛЕ объявления.
СТРАТЕГИЯ 3: Применение статического анализатора для проверки типов
Cppcheck автоматически обнаруживает несоответствия типов и использование необъявленных переменных, предоставляя студентам немедленную обратную связь.
Результаты: Количество семантических ошибок снизилось на 44%.
3.2.3. Стратегии устранения логических ошибок
СТРАТЕГИЯ 1: Метод "Сухой прогон" (трассировка)
Студент вручную выполняет программу на бумаге, записывая значения переменных в таблицу. Этот метод помогает понять логику работы программы и выявить расхождения между ожидаемым и фактическим поведением.
СТРАТЕГИЯ 2: Проверка граничных значений
Для условий проверять:
- Точное граничное значение (age = 18)
- Значение чуть меньше (age = 17)
- Значение чуть больше (age = 19)
СТРАТЕГИЯ 3: Метод "Контрольных примеров"
Студент сначала решает задачу вручную на простых числах, затем проверяет программу на этих же числах.
СТРАТЕГИЯ 4: Пошаговая отладка в GDB
Студенты экспериментальной группы систематически обучались использованию отладчика GDB:
- Установка точек останова (breakpoints).
- Пошаговое выполнение кода (step, next).
- Просмотр значений переменных во время выполнения.
- Анализ стека вызовов функций.
СТРАТЕГИЯ 5: Система автоматической проверки
Разработанная система позволяет студентам:
- Получать немедленную обратную связь о правильности решения.
- Тестировать программы на множестве входных данных.
- Видеть ожидаемые и фактические результаты.
- Отслеживать прогресс в решении задач.
Результаты: Время поиска логических ошибок сократилось с 32 минут до 18 минут, успешность решения задач повысилась с 52% до 73%.
3.2.4. Стратегии устранения ошибок времени выполнения
СТРАТЕГИЯ 1: Защитное программирование
Всегда проверять данные от пользователя:
|
int main() { int a, b; cin >> a >> b; if (b == 0) { cout << "Ошибка: делить на ноль нельзя!"; return 1; } cout << "Результат: " << a / b; return 0; } |
int main() { double number; cout << "Введите число для вычисления квадратного корня: "; cin >> number;
if (number < 0) { cout << "Ошибка: нельзя извлечь квадратный корень из отрицательного числа!"; return 1; } cout << "Квадратный корень: " << sqrt(number); return 0; } |
СТРАТЕГИЯ 2: Безопасная работа с массивами
|
#Проверка индекса при обращении к элементу const int SIZE = 5; int arr[SIZE] = {1, 2, 3, 4, 5}; int index; cin >> index; if (index < 0 || index >= SIZE) { cout << "Индекс вне диапазона!"; return 1; } cout << arr[index]; |
#Безопасный поиск максимального элемента const int SIZE = 10; int arr[SIZE]; int n; cout << "Сколько элементов ввести (максимум " << SIZE << ")? "; cin >> n; // Проверка корректности количества элементов if (n <= 0 || n > SIZE) { cout << "Ошибка: количество элементов должно быть от 1 до " << SIZE; return 1; |
Правило: Всегда проверять: 0 ≤ индекс < размер.
СТРАТЕГИЯ 3: Использование GDB для диагностики runtime-ошибок
При возникновении ошибки времени выполнения студенты обучены использовать отладчик для анализа состояния программы в момент сбоя.
Результаты: Ошибки времени выполнения снизились на 51%.
3.2.5. Стратегии устранения ошибок управления ресурсами
СТРАТЕГИЯ 1: Правило "Выделил - Освободил"
Каждому new соответствует один delete:
|
#Простое выделение и освобождение памяти int main() { int* ptr = new int(10); // ВЫДЕЛЕНИЕ cout << *ptr; delete ptr; // ОСВОБОЖДЕНИЕ ptr = nullptr; // ОБНУЛЕНИЕ return 0; } |
#Работа с динамическим массивом int main() { int size; cout << "Введите размер массива: "; cin >> size;
// Проверка корректности размера if (size <= 0) { cout << "Ошибка: размер должен быть положительным!"; return 1; } . . . // ОСВОБОЖДЕНИЕ памяти delete[] arr; // Для массива используем delete[] arr = nullptr; // ОБНУЛЕНИЕ
return 0; } |
СТРАТЕГИЯ 2: Предпочтение автоматических переменных
Для начинающих: если размер известен и не превышает 1000 элементов - использовать обычный массив вместо динамической памяти.
СТРАТЕГИЯ 3: Обнаружение утечек памяти с помощью инструментов
Студенты экспериментальной группы обучались использованию Cppcheck для статического анализа утечек памяти.
Результаты: Ошибки управления памятью снизились на 56%.
3.3. Результаты педагогического эксперимента
3.3.1. Проверка однородности групп
Таблица 1.
Распределение студентов по уровню входных знаний
|
Уровень |
КГ (чел.) |
КГ (%) |
ЭГ (чел.) |
ЭГ (%) |
|
Низкий |
37 |
38,9 |
35 |
38,0 |
|
Средний |
41 |
43,2 |
44 |
47,8 |
|
Высокий |
17 |
17,9 |
13 |
14,1 |
|
Всего |
95 |
100 |
92 |
100 |
Критерий χ²: χ²эмп = 0,305 < χ²крит = 5,991 (при α = 0,05)
Вывод: Группы статистически однородны (p > 0,05).
3.3.2. Сравнительный анализ результатов
Таблица 2.
Результаты педагогического эксперимента (Рис 2.
|
Показатель |
КГ (M±σ) |
ЭГ (M±σ) |
t-критерий |
p-value |
Улучшение |
|
Среднее количество ошибок в программе |
3,8±1,3 |
2,2±0,9 |
9,42 |
<0,001 |
42,1% |
|
Процент успешно выполненных заданий |
56,3±15,2 |
74,4±12,8 |
8,76 |
<0,001 |
32,1% |
|
Среднее время выполнения задания (мин) |
48,5±13,1 |
36,2±10,4 |
7,12 |
<0,001 |
25,4% |
|
Среднее время отладки (мин) |
28,7±9,8 |
17,4±6,3 |
9,38 |
<0,001 |
39,4% |
|
)Удовлетворенность обучением (балл из 5) |
3,2±0,9 |
4,3±0,7 |
9,21 |
<0,001 |
34,4% |
Примечание: M - среднее арифметическое, σ - стандартное отклонение
Все различия статистически значимы при α = 0,05 (p < 0,001).
3.3.3. Динамика снижения ошибок по категориям
Таблица 3.
Сравнение количества ошибок по категориям
|
Категория ошибок |
КГ (среднее на программу) |
ЭГ (среднее на программу) |
Снижение (%) |
t-критерий |
p-value |
|
Синтаксические |
1,4±0,6 |
0,7±0,3 |
50,0% |
9,87 |
<0,001 |
|
Семантические |
0,9±0,4 |
0,5±0,3 |
44,4% |
7,76 |
<0,001 |
|
Логические |
0,7±0,3 |
0,5±0,2 |
28,6% |
5,23 |
<0,001 |
|
Времени выполнения |
0,6±0,3 |
0,4±0,2 |
33,3% |
5,18 |
<0,001 |
|
Управления ресурсами |
0,2±0,1 |
0,1±0,1 |
50,0% |
7,42 |
<0,001 |
Наибольшая эффективность наблюдается для синтаксических (50,0%) и семантических (44,4%) ошибок.
Анализ дисперсий (критерий Фишера):
|
Показатель |
F-критерий |
p-value |
Интерпретация |
|
Количество ошибок |
2,08 |
0,043 |
ЭГ более однородна |
|
Время отладки |
2,42 |
0,018 |
ЭГ более стабильна |
/Medatov.files/image002.png)
Рисунок 2. Результаты педагогического эксперимента
Результаты показывают, что экспериментальная группа не только показала лучшие средние результаты, но и продемонстрировала меньшую вариативность.
3.3.4. Качественный анализ
Анкетирование студентов ЭГ (n=92):
- "Стратегии помогли быстрее находить ошибки" - 89%
- "Метод трассировки очень полезен" - 82%
- "Контрольные списки упростили программирование" - 86%
- "Использование отладчика повысило понимание программ" - 84%
- "Система автоматической проверки помогла в обучении" - 88%
- "Стал увереннее в программировании" - 79%
- "Хотел бы продолжить использовать эти методы" - 92%
Отзывы преподавателей:
- Повысилась самостоятельность студентов при решении задач
- Сократилось время на консультации по типичным ошибкам
- Студенты стали более систематично подходить к отладке
- Использование инструментов повысило мотивацию к обучению
3.4. Обсуждение результатов
Полученные результаты согласуются с данными педагогических исследований, показывающими, что эффективные образовательные интервенции обычно дают улучшение показателей в диапазоне 25-40% [7]. Наше улучшение успеваемости на 32,1% находится в ожидаемом диапазоне и подтверждает эффективность разработанных стратегий.
Важным результатом является интеграция современных инструментов разработки в учебный процесс. Применение статического анализа и отладчиков способствует формированию профессиональных навыков разработки программного обеспечения. Разработанная система автоматической проверки программ обеспечила студентам немедленную обратную связь, что существенно ускорило процесс обучения [5].
Статистически значимые различия между КГ и ЭГ (p < 0,001) по всем параметрам подтверждают эффективность разработанных стратегий. Особенно важным является формирование навыков самостоятельной отладки программ, что отмечается в практике преподавания программирования [1].
Примечательно, что наибольший эффект достигнут в снижении синтаксических и семантических ошибок (50,0% и 44,4% соответственно), что объясняется возможностью их раннего обнаружения с помощью статических анализаторов и компиляторов. Логические ошибки, требующие более глубокого понимания алгоритмов, снизились на 28,6%, что также является значимым результатом и указывает на эффективность метода трассировки и пошаговой отладки.
Анализ дисперсий показывает, что предложенные стратегии не только улучшают средние показатели, но и способствуют более равномерному развитию навыков у всех студентов, что важно для массового обучения программированию.
Ограничения исследования включают фокус на начальном этапе обучения и относительно простых учебных задачах. Дальнейшие исследования должны включать анализ эффективности стратегий при изучении более сложных тем (объектно-ориентированное программирование, шаблоны, многопоточность). Также необходимо провести лонгитюдное исследование для оценки долгосрочных эффектов применения предложенных стратегий.
4. Заключение
1. Проведена систематизация типичных ошибок начинающих программистов при изучении C++ на основе анализа 1840 учебных программ. Разработана классификация, включающая пять категорий: синтаксические (35,8%), семантические (22,4%), логические (18,3%), ошибки времени выполнения (15,1%) и ошибки управления ресурсами (8,4%).
2. Разработана система педагогических стратегий обнаружения и устранения ошибок для каждой категории, включающая конкретные алгоритмы действий, контрольные списки и методические приемы, интегрированные с современными инструментами разработки (статический анализатор Cppcheck, отладчик GDB, система автоматической проверки).
3. Педагогический эксперимент показал статистически значимую (p < 0,001) эффективность предложенных стратегий: снижение количества ошибок на 42,1%, повышение успеваемости на 32,1%, сокращение времени отладки на 39,4%.
4. Наибольшую эффективность показали стратегии для синтаксических (50,0% снижение) и семантических (44,4% снижение) ошибок, что объясняется возможностью их раннего обнаружения с помощью статического анализа и немедленной обратной связи от системы автоматической проверки.
5. Применение методов математической статистики позволило достоверно оценить эффективность разработанных стратегий и подтвердить их практическую значимость для образовательного процесса.
Практические рекомендации:
1. Внедрить разработанные стратегии в учебный процесс на начальном этапе обучения программированию.
2. Использовать метод трассировки и контрольные примеры для всех практических заданий.
3. Применять систему автоматической проверки программ для обеспечения немедленной обратной связи студентам.
4. Проводить регулярный мониторинг типичных ошибок студентов для своевременной корректировки учебного процесса.
Перспективы дальнейших исследований:
1. Расширение функционала системы автоматической проверки с включением интеллектуального анализа ошибок.
2. Исследование эффективности стратегий при изучении объектно-ориентированного программирования и шаблонов C++.
3. Создание банка типичных ошибок с автоматизированной системой обратной связи.
4. Изучение применимости разработанных стратегий для других языков программирования.
Список литературы:
- Грабарь М. И., Краснянская К. А. Применение математической статистики в педагогических исследованиях : непараметрические методы. - Москва : Педагогика, 1977. - 136 с.
- Дейл Н. Программирование на C++ [Электронный ресурс] / Н. Дейл, Ч. Уимз, М. Хедингтон ; пер. с англ. А. С. Цемахмана. - 2-е изд. - Москва : ДМК Пресс, 2023. - 674 с. - ISBN 978-5-89818-342-4.
- Кувшинов Д. Р. Основы программирования : язык C++ : учебное пособие / Д. Р. Кувшинов, С. И. Осипов ; под общей редакцией Д. Р. Кувшинова ; Министерство науки и высшего образования Российской Федерации, Уральский федеральный университет. - Екатеринбург : Издательство Уральского университета, 2021. - 490 с. - ISBN 978-5-7996-3257-1.
- Кушнер Ю. З. Методология и методы педагогического исследования : учебно-методическое пособие. - Могилев: МГУ им. А. А. Кулешова, 2001. - 66 с.
- Qian Y., Lehman J. Students’ Misconceptions and Other Difficulties in Introductory Programming: A Literature Review // ACM Transactions on Computing Education (TOCE). 2017. Vol. 18. P. 1–24.
- Лапчик М. П., Рагулина М. И., Семакин И. Г., Хеннер Е. К. Методика обучения информатике : учебное пособие для вузов. - 4-е изд., стер. - Санкт-Петербург : Лань, 2025. - 392 с.
- Левченко И. В., Садыкова А. Р., Абушкин Д. Б., Карташова Л. И., Кондратьева В. А., Моисеев В. П. Особенности подготовки по программированию будущих учителей информатики // Вестник РУДН. Серия: Информатизация образования. 2021. Т. 18, № 4. С. 337–346. DOI: 10.22363/2312-8631-2021-18-4-337-346.
- Липпман С. Б., Лажойе Ж., Му Б. Э. Язык программирования C++ : [пер. с англ.] / Стенли Б. Липпман, Жози Лажойе, Барбара Э. Му. - 5-е изд. - Москва : ДМК Пресс, 2017. - 1184 с. - ISBN 978-5-97060-596-7.
- Немцова Т. И. Программирование на языке высокого уровня. Программирование языке С++ : учеб. пособие / Т. И. Немцова, А. И. Терентьев ; под ред. Л. Г. Гагариной. - Москва : ИД «ФОРУМ» : ИНФРА-М, 2019. - 512 с.
- Новиков Д. А. Статистические методы в педагогических исследованиях (типовы случаи). - Москва : МЗ-Пресс, 2004. - 67 с.
- Рейзлин В. И. Язык С++ и программирование на нём : учебное пособие / В. И. Рейзлин ; Томский политехнический университет. - 3-е изд., перераб. - Томск : Изд-во Томского политехнического университета, 2021. - 208 с.
- Самохина В. М. Проверка статистических гипотез в психолого-педагогических исследованиях с применением критерия Стьюдента // Молодой ученый. 2016. № 25. С. 586–589.
- Липпман С. Б., Лажойе Ж., Му Б. Э. Язык программирования C++ : [пер. с англ.] / Стенли Б. Липпман, Жози Лажойе, Барбара Э. Му. - 5-е изд. - Москва : ДМК Пресс, 2017. - 1184 с. - ISBN 978-5-97060-596-7.
- Страуструп Б. Программирование: принципы и практика с использованием С++ : [пер. с англ.] / Б. Страуструп. - 2-е изд. - Москва : ООО «И.Д. Вильямс», 2017. - 1328 с.
- Stroustrup B. The C++ programming language : [англ.] / Bjarne Stroustrup. - 4th ed. - Boston : Addison-Wesley, 2013. - XL, 1346 p. - ISBN 978-0-321-56384-2.
- Черемисинов Д. И. О методике преподавания программирования на старших курсах вузов // BIG DATA and Advanced Analytics. BIG DATA и анализ высокого уровня : материалы Девятой Международной научно-практической конференции (Минск, 17–18 мая 2023 г.). Минск, 2023. С. 180–187.