7,3K подписчиков

Низкоуровневое обучение

Вот если бы я писал статью для программистов, я бы ограничился одной фразой: "компилятор умнее программиста".

Но я пишу для людей, поэтому буду объяснять эту мысль.

Частично я затронул эту тему в статье

Значит, так.

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

Чисто технически это очень похоже на программирование - программист передаёт алгоритм исполнителю. К этому я и сделал отсылку в начале.

В принципе, это довольно неплохой подход.

Был бы, если бы все задачи были заранее известны. Но народная мудрость учит "знал бы, где упаду - соломку бы подстелил". Заранее знать, с чем столкнётся ученик, невозможно. Сейчас - даже на ЕГЭ может встретиться задача, которую "мы такие не решали". Я уж не говорю о взрослой жизни. Ну и нет "алгоритма творчества". Нельзя научить создавать что-то новое простой передачей алгоритма. Хотя, попытки были. ТРИЗы всякие там.

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

"Вот сюда пиши пять. Пять. Вот. Теперь минус. Да не там, перед пятёркой минус пиши. Молодец. Теперь поменяй местами. Хорошо. Дели. Да, с обратной стороны доски дели. Что получил? Неправильно, пересчитывай. Ну вот, теперь да. Молодец, ты решил задачу. Понял? Садись, пять!"

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

У ученика не только нет свободы выбора, но и даже необходимости этот выбор осуществлять. Более того, нет необходимости как-то объяснять выбор хотя бы для себя. Внешний алгоритм.

У программистов это называется низкоуровневое программирование. Ассемблер. Программист не оставляет машине выбора - чётко следуй максимально подробным инструкциям.

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

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

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

Ну, это как бы если учитель у доски говорил "реши уравнение" вместо всей инструкции, которая была выше. Очень общая инструкция, не так ли? Ведь уравнение может быть аналитическим (квадратное), трансцендентным (уравнение Кеплера) или вообще дифференциальным. А уж метод решения может выбирать ученик - наиболее оптимальный, лучше чем может предложить учитель.

Почему так не делается? Ведь мозги учеников тоже очень сложны и разнообразны. Зачем давать подробные инструкции, которые могут и не подойти конкретному ученику?

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

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

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

Не всё так безрадостно. Я не зря привёл ссылку на статью про внутреннюю оптимизацию.

Такой компилятор на самом деле существует. Он есть в мозгу каждого ученика, каждого учителя. Каждого человека.

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

А если вдруг вам скажут, что нужно принести два стакана воды, но стаканов нет, а есть только одна кружка, вы дважды принесёте воду именно в кружке, игнорируя "низкоуровневую" команду. Потому что компилятор умнее программиста.

В общем, этот компилятор есть.

Почему он с водой работает, а с уравнением - нет?

Проблема в "настройке" этого компилятора. На "принеси воды" он настроен, а на "реши уравнение" - нет.

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

Но "компилятор" в мозгу так не работает. Мозг - не компьютер.

В вас никто не закладывал способы "принести воды".

И всё же они "скомпилировались".

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

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

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