Дефицит модульного мышления

Важной проблемой современной системы образования в области программирования является то, что она не способствует развитию модульного мышления. Это относится к статьям, книгам, обучающим видеороликам и др.

Рассмотрим тривиальный пример: найти наибольшее из двух чисел. Если эту задачу дать студенту, изучающему программирование, он, скорее всего, напишет примерно такой код:

#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;
}

Такое решение тоже нельзя использовать повторно.

Проблема в том, что студенты (в основной своей массе) даже не стремятся к повторному использованию кода. Для них это малопонятная абстракция. Они не до конца понимают его. Они его не видели. Поэтому оно им не нужно (как они думают). Беда в том, что в профессиональной деятельности оно часто необходимо. Придя на работу им приходится его осваивать методом проб и ошибок, затрачивая время и нервы, а также потенциальную прибыль работодателя.

Почему так происходит? Ответ в том, что большинство образовательных материалов не рассчитаны на обучение модульному мышлению. Они объясняют концепции языка и его библиотек на простых примерах. Обычно это и нужно студенту для написания лабораторной (курсовой) работы. А модульное мышление остается за бортом.

Что с этим делать? Ответ на этот вопрос не прост и требует отдельного обсуждения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *