Найти в Дзене
Стив Май

Об уровнях абстракции на примере матриц

Оглавление

Хочу описать важный момент для обучения - не только математике, но вообще любому предмету. Текст длинный. С примерами.

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

Зачем вообще нужна абстракция высокого уровня?

Это автоматизация. Абстракция высокого уровня позволяет создать простой конечный алгоритм для очень сложных вещей. Очень хорошо, что нам ни для создания алгоритма, ни, тем более, для его использования не обязательно задумываться о всей цепочке абстракций. Если мы работаем в сфере создания алгоритма, то, возможно, нам иногда и потребуется немного понизить уровень абстракции. Но если мы работаем лишь в области применения (использования), то там вообще всё примитивно.

Я обещал рассказать на примере. И в качестве основы для примера я выбрал матрицы. Причин несколько: Во-первых, матрицы - это весьма высокий уровень абстракции, который мало кто понимает. С другой стороны, матрицы на уровне конечных алгоритмов ("строка-на-столбец", "считание матрицы" и пр.) включены практически в любую программу по математике любого ВУЗа, и как минимум половина взрослых людей в России об этом хотя бы слышали (а мои читатели почти все). Во-вторых, очень многие люди полагают матрицы верхом сложности и абстракции в математике, и стереотипно считается, что если уж человек "знает матрицы", то он точно "знает математику". Ну а в-третьих, тут некоторые товарищи заявляют, что умножение - не есть многократное сложение, и в пример приводят именно матрицы, явно не учитывая, что есть разные способы "умножения" матриц, и тот, который не многократное сложение, тот вообще-то не совсем умножение. Точнее, совсем не умножение. Так вот, хотелось бы пояснить и за этот момент.

Как я уже сказал, абстракция высокого уровня - это автоматизация. Автоматизация происходит на уровне конечного пользователя (разработчики же этих матриц столько ручного труда в них вложили, что просто почёт им и уважение). То есть, за счёт использования матриц в своих вычислениях, человек освобождается от огромного количества рутины.

Что именно автоматизируется? Матрицы вообще очень многоприменительные, поэтому я возьму лишь один небольшой пример.

Давайте представим себе вектор. Нет, вектор - это абстракция, которую не представить себе. Давайте представим палку. Палку легко можно представить (кто не может - возьмите в руку за один конец настоящую палку).

Теперь махнём этой палкой. У неё какие-то параметры поменяются (направление), а какие-то останутся (длина).

А теперь всё-таки перейдём к абстракции вектора. Вот у нас есть вектор, у него есть начало, конец. Как и концы палки, эти точки в пространстве, начало и конец вектора имеют по три координаты - числа.

Как нужно поменять эти числа, чтобы вектор, который соответствовал палке до взмаха, стал соответствовать палке после взмаха?

В принципе, каждому должно быть понятно, что посчитать это как-то возможно.

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

Само собой, в процессе разработок способа вычисления, возможно, возникнут аналогичные задачи для более низких уровней абстракции, и придётся попутно решать их. Так сказать, рекурсивно.

Для чего может понадобиться решение этой задачи? Да много для чего. Например, если мы сделаем робота на ардуине, и выдадим ему палку, он должен посчитать, куда она повернётся, чтобы понять, ударил он крапиву или нет. Или вместо палки - манипулятор на космической станции (хотя в космосе крапива не растёт).

Вот тут на помощь приходят матрицы. Если мы возьмём "правильную" матрицу, и "умножим" её на вектор, то получится новый вектор, который как раз и будет новым вектором после взмаха. "Всего" за одну операцию!

Да, операция "умножения" матриц сама по себе громоздка. Но уж точно она менее громоздка, чем решение стереометрической задачи в координатах!

Второй момент - найти "правильную" матрицу, которая подходит нам. Но это уже детали (ибо и на это есть своя автоматизация).

Кстати, почему я "умножение" матрицы на вектор написал в кавычках. Умножение всегда остаётся многократным сложением. При умножении смысл множителей разный - один указывает, что мы должны складывать, а другой - на количество раз. Может ли вектор (или матрица) указывать на количество раз? Нет. Значит, "умножение" матрицы на вектор - это не умножение. Да, мы можем даже от "прожжённых" математиков слышать "умножение" про матрицы. В слово "умножение" здесь вкладывается другой смысл. Ну это как слово "ключ". Совершенно несвязанные между собой вещи, а слово - одно. И вот в матричном случае, это должно бы называться "применением матричного оператора". Но так говорить долго, и в силу ещё всяких разных причин просто заменим фразу на короткое слово.

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

Теперь как это связывается с учёбой.

Изучать какой-то новый уровень абстракции можно с двух позиций - конечного алгоритма и понижения абстракции.

Если мы будем изучать с точки зрения алгоритма, то он будет восприниматься учеником как бесполезный. Да. Ну есть алгоритм. А нафига он нужен? Только как алгоритм в себе. Разве что знать алгоритм ради решения одной-двух относительно сложных задач (потому что решение большего количества задач потребует уже понимания абстракции за рамками конечного алгоритма, либо выучивания нового алгоритма), которые редко встречаются. Можно и не запоминать даже. Такая участь не постигает разве что таблицу умножения. Просто потому что в школе каждые 5 минут надо умножать. А что-то чуть более редкое - всё забывается, стоит ученику выйти из класса.

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

Подход должен быть из задачи. Сначала ученик должен решить задачу сложным способом - не имея в руках высокоуровневого инструмента. То есть, уровень абстракции повышается во время решения задачи (что вообще-то логично), а не понижается во время объяснений, как её решать.

Только вдоволь намучившись, и с огромным трудом получив правильный ответ, человек понимает все прелести автоматизации. Более того, для него эта автоматизация становится естественным продолжением его работы.

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

О переходах к новым уровням

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

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

Но сам переход на новый уровень - очень трудоёмкий.

Этот момент важно учитывать, потому что человеческий мозг очень ленив, и заставить его "впустую" работать - невозможно. Он всегда должен думать, что работает на понижение затрат.

Конечно, сказать волшебные слова нельзя, как нельзя выпить таблеточку для перехода на новый уровень абстракции.

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

Когда же учитель не позволяет ребёнку вдоволь наработаться с предметами, а сразу даёт таблицу умножения (устраняет провокацию), мозг воспринимает это не как облегчение, а наоборот - как усложнение.

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

Переход к сложной абстракции оказывается не оправданным.

И мозг не выполняет переход. Гарантированно.

Таблица умножения (и сложения!) тупо заучивается (это проще, чем понять, и не многим сложнее, чем задачи были до сих пор), выучиваются алгоритмы сложения-вычитания-умножения-деления. И на этом всё.

Следующий переход - к дробям - не выполняется аналогично. Но тут сложнее, ребёнок ещё на уровне предметов (он же не выполнил переход к числам и действиям), а тут нужно повысить абстракцию ещё. Соответственно, даже если учитель даст ребёнку задачу, в которой переход к дробям будет оправданным, ученик не сможет понять всей её трудности. Тупо потому что вся трудность сводится к трудности выполнения алгоритма. Алгоритм трудности особой не вызывает - НОК, НОД и 5 действий. Это любой дурак запомнит.

Все последующие переходы оказываются в очень сложном положении. С одной стороны, конечный алгоритм усложняется уже на столько, что запомнить его просто так нереально (попробуйте хотя бы записать на бумаге словами метод Крамера, без использования абстрактных понятий). А с другой стороны, как и с дробями, понять несостоятельность предыдущего уровня нельзя, потому что нет его - предыдущего уровня.

А всего лишь, учитель не позволил ребёнку перекладывать палочки и потребовал записать цифры чуть раньше.

Об исправлении

Собственно, сам ученик не считает, что он как-то не правильно учится. С какой стати? Он же не придёт к маме и не скажет "мам, там все дроби проходят, а я этот уровень абстракции не могу понять, потому что у меня всё на алгоритмах".

Более или менее становится понятно как раз после переходов к величинам и функциям. Это уже достаточно высокие уровни абстракции, чтобы на одних алгоритмах скатиться на тройки и двойки.

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

И у репетитора возникает сложность. Чтобы "слегка подтянуть по математике", нужно пройти все уровни абстракции, начиная с нулевого. При этом учитывая, что конечные алгоритмы худо-бедно мозг помнит, и создать ситуацию, когда переход станет оправданным - очень трудно.

Но тем не менее возможно. Особенно, если ситуация зашла в "ну теперь я даже в простой математике ничего не понимаю".

Почему у некоторых всё супер или опять о гениях

Вообще, статистически известно, в каком возрасте можно осуществлять переходы к разным уровням абстракции (а можно и не осуществлять). Как я уже отметил, если эту статистику не учитывать и пытаться пробросить ученика через несколько уровней, результат будет резко негативный. Тем не менее, статистика не работает в конкретных случаях. И некоторые ученики могут совершить переход раньше (как и позже) среднего возраста. Если считать абстракцию величин (читай - уравнения) по возрасту примерно уровня 13 лет (7 класс), то вполне вероятно, что один на тысячу сможет её постигнуть и в 7-8 лет (2 класс). Таких можно назвать "гениями", но как правило, быстрое развитие в одном месте компенсируется заторможенным развитием в другом.

Есть более примитивный вариант. Его иногда называют "количество перерастает в качество". Если ребёнку дать невозрастную абстракцию, или перескочить через пару уровней, то он, конечно, перехода не совершит. Сейчас не совершит. Со временем, решая задачи, повторяя алгоритм, он сможет вернуться к этой проблеме и всё-таки совершить переход на новый уровень. Особенно, если все предыдущие уровни оказались "в кармане".

Ну и оба этих варианта могут сработать только в том случае, если мозг готов к переходам. Способы подготовки разные, обычно просто случайно так получилось. "Нахватался", говорят.