Важной проблемой современной системы образования в области программирования является то, что она не способствует развитию модульного мышления. Это относится к статьям, книгам, обучающим видеороликам и др.
Рассмотрим тривиальный пример: найти наибольшее из двух чисел. Если эту задачу дать студенту, изучающему программирование, он, скорее всего, напишет примерно такой код:
#include <iostream> using namespace std; int main() { cout << "Enter two numbers:" << endl; int a, b; cin >> a >> b; if(a > b) cout << "max number is " << a << endl; else cout << "max number is " << b << endl; return 0; }
Студенты пишут такой код потому, что примерно такой же код, как правило, приводится в статьях, книгах и видео по программированию. Это не их вина. У них на начальном этапе обучения просто нет альтернатив. Я сам так писал (если не хуже) в студенчестве.
Давайте на время забудем про std::max и подумаем, чем плоха эта программа? Она решает поставленную задачу? Решает. Что еще надо?
Проблема в том, что данный код полностью непереносим. Его невозможно использовать повторно. Да, функция нахождения наибольшего числа — тривиальна. Ее повторная реализация не занимает много времени. Но ведь тоже самое проявляется и при написании более сложных функций, повторная реализация которых может быть утомительной.
Мне могут возразить: в условиях задачи ничего не сказано про повторное использование кода. Да, это так. Но даже если ты просишь студентов оформить решение в виде отдельного класса, получается что-то вида этого:
#include <iostream> using namespace std; class Max { public: int a; int b; void GetMax() { cout << "Enter two numbers:" << endl; cin >> a >> b; if(a > b) cout << "max number is " << a << endl; else cout << "max number is " << b << endl; } }; int main() { Max max; max.GetMax(); return 0; }
Такое решение тоже нельзя использовать повторно.
Проблема в том, что студенты (в основной своей массе) даже не стремятся к повторному использованию кода. Для них это малопонятная абстракция. Они не до конца понимают его. Они его не видели. Поэтому оно им не нужно (как они думают). Беда в том, что в профессиональной деятельности оно часто необходимо. Придя на работу им приходится его осваивать методом проб и ошибок, затрачивая время и нервы, а также потенциальную прибыль работодателя.
Почему так происходит? Ответ в том, что большинство образовательных материалов не рассчитаны на обучение модульному мышлению. Они объясняют концепции языка и его библиотек на простых примерах. Обычно это и нужно студенту для написания лабораторной (курсовой) работы. А модульное мышление остается за бортом.
Что с этим делать? Ответ на этот вопрос не прост и требует отдельного обсуждения.