Обычно на вопрос «зачем нужна математика?» отвечают что-то вроде «гимнастика для ума». На мой взгляд, этого объяснения недостаточно. Когда человек выполняет физические упражнения, то он знает точное название групп мышц, которые при этом развиваются. Но разговоры про математику остаются слишком абстрактными. Какие конкретно «мышцы ума» тренируются школьной алгеброй? Она ведь совсем не похожа на настоящую математику, в которой делаются великие открытия. Что дает умение искать производную каких-то запутанных функций?
Преподавание программирования слабым студентам привело меня к более точному ответу на вопрос «зачем?». В статье я постараюсь донести его вам.
В школе довольно много времени посвящается преобразованию и упрощению выражений. Например: 81×2+126xy+49y2 нужно преобразовать как (9x+7y)2.
В данном примере от ученика ожидают, что он вспомнит формулу квадрата суммы
В более сложных случаях, полученное выражение можно использовать для других преобразований. Например:
преобразуется сначала в
а потом, с уточнением (a + 2b) != 0, получается так
Чтобы добиться такого результата, ученику нужно распознать в исходном выражении и потом применить три формулы:
- Квадрат суммы
- Разность квадратов
- Сокращение множителей обыкновенной дроби
В обычной школе на алгебре почти все время мы занимались вот таким преобразованием выражений. В ВУЗе на высшей математике ничего существенно не поменялось. Нам рассказали как брать производные (интегралы и т.п.) и выдали тонну задач. Было ли это полезно? На мой взгляд — да. В результате выполнения таких упражнений:
- Отточился навык преобразования выражений.
- Развилась внимательность к мелочам.
- Был сформирован идеал — лаконичное выражение, к которому можно стремиться.
На мой взгляд, наличие такого идеала, качества и навыка очень полезно в ежедневной работе разработчика. Ведь упростить выражение, по сути, значит изменить его структуру с целью облегчить понимание, не затрагивая смысла. Вам это ничего не напоминает?
Это практически определение рефакторинга из одноименной книги Мартина Фаулера.
В своем труде, автор формулирует их следующим образом:
Рефакторинг (Refactoring) (сущ.): изменение во внутренней структуре программного обеспечения, имеющее целью облегчить понимание его работы и упростить модификацию, не затрагивая наблюдаемого поведения.
Производить рефакторинг (Refactor) (глаг.): изменять структуру программного обеспечения, применяя ряд рефакторингов, не затрагивая его поведения.
В книге даются «формулы», которые нужно распознать в исходном коде и правила их преобразования.
В качестве простейшего примера, приведу «введение поясняющей переменной» из книги:
if ( (platform.toUpperCase().indexOf(“MAC”) > -1 ) &&
(browser.toUpperCase().indexOf(“IE”) > -1 )&&
wasInitialized() && resize > 0 ) {
// do something
}
Части выражения нужно записать в переменную, имя которой поясняет его назначение.
final boolean isMacOS = platform.toUpperCase().indexOf(“MAC”) > -1;
final boolean isIEBrowser = browser.toUpperCase().indexOf(“IE”) > -1;
final boolean isResized = resize > 0;
if(isMacOS && isIEBrowser && wasInitialized() && isResized) {
// do something
}
Представьте себе человека, который не может упрощать алгебраические выражения с использованием формулы квадрата суммы и разности квадратов.
Как вы думаете, сможет ли этот человек рефакторить код?
Сможет ли он вообще написать понятный другим людям код, если у него не сформирован идеал этой самой лаконичности? На мой взгляд — нет.
Однако в школе учатся все, а программистами становится меньшинство. Полезен ли навык преобразования выражений для обычных людей? Я думаю да. Только навык применяется в более абстрактном виде: нужно оценить ситуацию и выбрать дальнейшее действие так, чтобы приблизиться к цели. В педагогике этот феномен называется
Самые яркие примеры возникают при бытовом ремонте подручными средствами, «колхозным» способом. В результате появляются те самые «фишки» и лайфхаки, один из которых изображен на КПДВ. У автора идеи был кусок дерева, провод и четыре шурупа. Вспомнив шаблон патрона для лампы, он собрал из них самодельный патрон.
Даже при езде на автомобильном транспорте, водитель постоянно занимается распознаванием шаблонов в окружающем мире и выполнением соответствующих маневров, чтобы добраться до цели.
Когда ты умер, ты об этом не знаешь, только другим тяжело. То же самое, когда ты не освоил математику…
Что же происходит, если человеку не удалось освоить преобразование выражений? Время от времени я веду индивидуальные занятия со студентами, у которых в школе было плохо с математикой. Как правило, они напрочь застревают на теме про циклы. Настолько, что с ними приходится заниматься «алгеброй», но на языке программирования.
Это происходит потому, что при написании циклов основной прием как раз и заключается в том, чтобы преобразовать группу одинаковых выражений.
Допустим результат работы программы должен выглядеть так:
Введение
Глава 1
Глава 2
Глава 3
Глава 4
Глава 5
Глава 6
Глава 7
Заключение
Тривиальная программа для достижения этого результата выглядит так:
static void Main(string[] args)
{
Console.WriteLine("Введение");
Console.WriteLine("Глава 1");
Console.WriteLine("Глава 2");
Console.WriteLine("Глава 3");
Console.WriteLine("Глава 4");
Console.WriteLine("Глава 5");
Console.WriteLine("Глава 6");
Console.WriteLine("Глава 7");
Console.WriteLine("Заключение");
}
Но это решение далеко от лаконичного идеала. Сначала в нем нужно найти повторяющуюся группу действий и потом преобразовать. В итоге получится такое решение:
static void Main(string[] args)
{
Console.WriteLine("Введение");
for (int i = 1; i <= 7; i++)
{
Console.WriteLine("Глава " + i);
}
Console.WriteLine("Заключение");
}
Если же человек в свое время не освоил математику, то и выполнять подобные преобразования он не сможет. У него просто не будет соответствующего навыка. Именно поэтому тема циклов — первое препятствие в обучении разработчика.
Похожие проблемы возникают и в других областях. Если человек не умеет использовать подручный инструмент, то он не сможет проявлять бытовую смекалку. Злые языки будут говорить, что руки не из того места растут. На дороге это проявляется в неумении правильно оценить ситуацию и выбрать маневр. Что иногда может привести к трагическим последствиям.
Выводы:
- Школьная и вузовская математика нам нужна для того, чтобы мы умели делать мир лучше теми средствами, которые у нас есть.
- Если вы учитесь и у вас возникают проблемы в изучении циклов, попробуйте вернуться к истокам — школьной алгебре. Возьмите задачник для 9 класса и порешайте примеры из него.
Источник: habr.com