Наверняка вы задумывались над вопросом: нужна ли математика программисту? И если нужна, то как "приручить" эту самую математику?
Если у вас есть проблемы с математикой, вы решились на освоение предмета и не знаете, с чего начать, эта статья станет хорошим фундаментом для дальнейшего обучения. В ней собраны полезные советы, названы главные разделы математики для программиста и литература для самостоятельного обучения.
Человек, которому никогда прежде не приходилось сталкиваться с математическими рассуждениями, может испытывать некоторые трудности с решением задач, восприятием фактов. Ему трудно отличить истинные утверждения от ложных, понять, какие следствия вытекают из того или иного утверждения.
"Незнание математики грозит кашей в голове."
— А. Савватеев, доктор физико-математических наук, эксперт отдела теоретических и прикладных разработок компании Яндекс, научный руководитель Лаборатории социального анализа при Университете Дмитрия Пожарского.
Статья разделена на несколько частей:
- советы;
- основные разделы математики для программиста;
- список полезной литературы.
- Осознайте и примите тот факт, что хорошим математиком по одному желанию и щелчку пальцев стать невозможно. Все люди, добившиеся успехов в этом предмете, потратили на него часы упорного и напряжённого труда. Если вы встречаете человека, который решает математические задачи гораздо лучше вас, не стоит упрекать себя в отсутствии способностей к предмету или в отсутствии знаний.
- Занимайтесь там, где вас ничто не может отвлекать; отключите телефон, выйдите из соц. сетей и проявите силу воли.
- Занимайтесь ежедневно. Занимайтесь всегда и везде, где только возможно. Уберите из своих привычек бесцельный просмотр соцсетей, телевизора, увлечение видеоиграми и т. п. Вы сразу же ощутите, сколько свободного времени у вас появится. Используйте его с толком.
- Не занимайтесь слишком долго. Делайте перерывы. Не засиживайтесь над одной задачей часами напролёт, это может привести к стрессу. Иногда полезно менять деятельность на день-два, чтобы отдохнуть, но не слишком часто.
- Изучение нового в математике построено на уже приобретенных знаниях, поэтому все время повторяйте пройденное и упражняйтесь в решении задач. Если у вас есть пробелы в математике по программе пятого класса (да, бывает и такое), начните изучение с программы пятого класса. В этом нет ничего постыдного.
- Обязательно заведите две тетради: одну для теории, другую для практики. Пронумеруйте каждый лист. На заднем листе тетради с теорией составьте оглавление (тема — страница). В будущем это вам очень пригодится.
- Если в задаче у вас выходит неверный ответ, решите её ещё раз. Не надо придумывать себе оправдания и откладывать повторное решение. В таких ситуациях важно не просто найти правильный ответ, но и понять, почему в прошлый раз вы решили задачу неверно. Помните, что задача стоит потраченного времени.
- Не стесняйтесь просить помощи у человека, разбирающегося в предмете. Идеальным вариантом будут платные занятия с высококвалифицированным репетитором, если у вас есть такая возможность.
- Логика и дискретная математика.Тут же основы теории множеств, теории чисел, теории графов. Базовые вещи начинают изучать ещё в школе.
- Математический анализ. С одной стороны, он демонстрирует всю красоту и мощь математики, а с другой – агонию математического образования. Раздел сложен в плане понимания, так что тут без посторонней помощи не обойтись. Необходим людям, собирающимся в Computer Science.
- Линейная алгебра. Необходимость освоения раздела зависит от будущих целей. Если вы хотите пойти в GameDev, VR, графику и проч. – линейная алгебра обязательна. Развивает абстрактное мышление, что важно в программировании в целом. Представлять себе многомерные структуры и их взаимосвязь: это очень круто.
- Статистика и комбинаторика. Базовый раздел, который начинают изучать ещё в школе. Темы из этого курса в работе программиста встречаются практически ежедневно.
- Теория алгоритмов. В русском языке принято такое название, однако оно не очень удачное. В оригинале это звучит как “Theory of Computation”. Для изучения потребуется основной мат. аппарат, поэтому начинать с этого раздела не рекомендуется. Зато после изучения вы понимаете, почему алгоритмы выполняются, и компьютеры на самом деле работают всегда.
Как отдельный пункт, стоит вынести криптографию. Она не изучается в школе и даже в некоторых технических вузах. К ней стоит приступать только с хорошей мат. подготовкой (разбираться во всех темах, описанных выше). Однако её необходимо знать, т.к. криптография используется повсеместно: от сообщений в мессенджерах до криптовалют.
Школьная программа:
- Сборник задач по алгебре. 8 — 9 класс. М.Л. Галицкий, А.М. Гольдман. Создан для учащихся в классах физико-математического профиля.
- Алгебра и начала математического анализа. 10 класс. В 2 ч. Ч.1. Учебник (профильный уровень) Мордкович А.Г., Семенов П.В. (2009, 424с.)
- Алгебра и начала математического анализа. 10 класс. В 2 ч. Ч.2. Задачник (профильный уровень). Мордкович А.Г. и др. (2009, 343с.
- Алгебра и начала математического анализа. 11 класс. Учебник. (базовый и углублённый уровни). Мордкович А.Г., Семенов П.В. (2014, 311с.)
- Алгебра и начала математического анализа. 11 класс. Задачник. (базовый и углублённый уровни). Мордкович А.Г. и др. (2014, 264с.)
Вузовская математика:
- Задачник Смирнов Ю.М. Сборник задач по аналитической геометрии и линейной алгебре: учеб. пособие для студентов ун-тов, обучающихся по специальностям »Математика» и »Приклад. математика»
- Основы высшей алгебры — Сушкевич А. К. (1937 г.)
- Путь в современную математику — Сойер У. У. (1972 г.)
- Курс математического анализа. — Кудрявцев Л.Д.
Wikimedia Foundation . 2010 .
Смотреть что такое "Разделы математики" в других словарях:
МАТЕМАТИКИ ИСТОРИЯ — Самой древней математической деятельностью был счет. Счет был необходим, чтобы следить за поголовьем скота и вести торговлю. Некоторые первобытные племена подсчитывали количество предметов, сопоставляя им различные части тела, главным образом… … Энциклопедия Кольера
История математики — История науки … Википедия
История математики в России — Данная статья часть обзора История математики. Содержание 1 Древность и средневековье 2 XVII век 3 … Википедия
Философия математики — учение о сущности математического знания и о базовых принципах математических доказательств, раздел философии науки; её можно также назвать «метаматематикой». Содержание 1 Возможность оснований математики 2 Литература … Википедия
История математики в Индии — Данная статья часть обзора История математики. Научные достижения индийской математики широки и многообразны. Уже в древние времена учёные Индии на своём, во многом оригинальном пути развития достигли высокого уровня математических знаний.… … Википедия
Институт математики и механики (НИИММ СПбГУ) — Научно исследовательский институт математики и механики имени академика В. И. Смирнова (НИИММ СПбГУ) структурное подразделение Санкт Петербургского государственного университета. Выполняет организационную роль, является материальной базой для… … Википедия
Математика — Евклид. Деталь «Афинской школы» Рафаэля Математика (от др. греч … Википедия
Дискретная математика — Дискретная математика область математики, занимающаяся изучением дискретных структур, которые возникают как в пределах самой математики, так и в её приложениях. К числу таких структур могут быть отнесены конечные группы, конечные графы, а… … Википедия
Математический анализ — У этого термина существуют и другие значения, см. Анализ. Математический анализ совокупность разделов математики, посвящённых исследованию функций и их обобщений методами дифференциального и интегрального исчислений. При столь общей… … Википедия
МЕТОД АКСИОМАТИЧЕСКИЙ — способ построения теории, при к ром в ее основу кладутся нек рые ее положения – аксиомы или постулаты, – из к рых все остальные положения теории (теоремы) выводятся путем рассуждений, называемых д о к а з а т е л ь с т в а м и. Правила, по к рым… … Философская энциклопедия
Вместо предисловия
Допустим, сидя вечерком в теплом кресле вам вдруг пришла в голову шальная мысль: «Хм, а почему бы мне вместо случайного подбора гиперпараметров модели не узнать, а почему оно всё работает?»
Это скользкий путь — вы думаете, что достаточно пары вечеров с неторопливым чтением главки «Глубокого обучения» или 5-минутных youtube-роликов с различных MOOC; на деле, чтобы создать понимание, а не его иллюзию, требуется приличное количество времени (ну уж никак не меньше полугода для самых фанатичных); но самое печальное — профит от этого мероприятия не очевиден — к счастью (или к сожалению), мир не устроен по законам математики, и будь вы трижды доктором физмат наук — некоторые модели всё равно будут работать лучше только в том случае, если вы подкинете в них побольше предобработанных данных либо соорудите огромный ансамбль.
Я считаю своим долгом вас предупредить, что это кривая дорожка, и возможно, что вложения в математику окупятся не так скоро, как того бы хотелось. Но математика интересна сама по себе, безотносительно приложений. Тем более что если вас заинтересовало, а что же происходит в этом черном ящике с гиперпараметрами, то это означает, что математика вам, скорее всего, не безразлична.
Ещё кое-что про мои рекомендации: я не люблю математическую литературу, которая кишит индексами, перлами типа «a_ijk с тремя подчеркиваниями и шляпкой сопряженное». Я считаю, что идеи важнее строгих выводов. При этом идеи не должны скатываться до «рукомаханий», всё должно быть довольно строго. Я не люблю книги наподобие Бурбаки и Кнута. На мой взгляд, эти книги предназначены для чего угодно, но не для чтения и не для изучения предмета. Они хороши в качестве ссылок и как энциклопедии.
Напоследок приведу кое-что из Бертрана Рассела:
Евклид презирал практическую полезность, которую внедрял Платон. Говорят, что один ученик, прослушав доказательства, спросил, что выиграет он изучением геометрии; тогда Евклид позвал раба и сказал: «Дай молодому человеку грош, поскольку он непременно должен извлекать выгоду из того, что изучает».
Теперь перейду собственно к основной части.
Пререквизиты
Уровни сложности
Не секрет, что по каждой математической дисциплине написано много литературы, и иногда проблемой становится даже простой выбор нужной книги. Я буду выделять несколько уровней сложности в литературе, что вы знали, куда стоит соваться, а куда лезть (пока что) не надо (или к чему можно обратиться для более полной информации).
- Bring it on — основная рабочая лошадка; это книги, что называется, «must have».
- Hurt me plenty — уровень повыше, позволяет оглядеть с высоты птичьего полёта уровень 1, систематизирует знания, объединяет различные области знаний.
- Nightmare — для сильных духом, уровень мехмата, для любителей математики и башен из слоновой кости.
Дорожная карта
Перейду собственно к конкретным курсам.
Анализ, он же calculus
В российских вузах его преподают довольно интересно: большинство через несколько лет после окончания курса помнят смутно лишь какие-то там интегралы, и кажется что-то ещё. И это при том, что анализ — дисциплина прямо-таки одна из основополагающих в математике вообще. Мостиков от теории к практике как правило нет, и этот курс, подобно летающему острову парит где-то в головах, абсолютно оторванный от реальной жизни. Преодолевать это надо решением задач, причем не только из области математики, но и желательно что-либо из «реальной жизни».
Что нужно знать из анализа?
Основные вещи, которые нам понадобятся — понятие предела, непрерывности, производной, функции многих переменных, градиента, интеграла, интеграла с переменным верхним пределом, многомерного интеграла*.
Литература
Bring it on: тут всё более-менее стандартно — Пискунов / Фихтенгольц.
Hurt me plenty: Зорич, том 1. Эту книгу я люблю очень-очень сильно; это не учебник, но роман в формулах, что-то наподобие Евгения Онегина. К сожалению, он сложнее стандартных курсов по анализу за счет того, что многие вещи в нём даются более общО, и к этому надо привыкнуть; зато за счёт этой общности связываются воедино многие разрозненные вещи (см. те же пределы по базе).
Nightmare: Зорич том1 + том2, Рудин «Основы математического анализа», Львовский «Лекции по математическому анализу», Ramanan «Global Calculus».
В общем и целом резюме тут такое: литературы по анализу даже на русском языке полно; учебники чаще тяготеют к чисто математическим. В качестве дополнения к учебникам уровня 2-3 могу посоветовать несколько курсов:
- stepik.org/course/716
- stepik.org/course/711
Курсы из лектория МФТИ по анализу я не смотрел, но для полноты картины тоже приведу:
Практика
Практиковаться и применять полученные знания не то что «опционально», но строго-настрого ОБЯЗАТЕЛЬНО, иначе вся теория повиснет на вас мёртвым грузом, и вы быстро пойдете ко дну, причем даже не осознавая этого.
Предлагаю рассмотреть следующие варианты: Демидович, problem sets с курсов MIT (https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/index.htm)
Линейная алгебра
Хлеб насущный для Data Science и вообще для науки в целом. К сожалению, люди научились хорошо решать только линейные уравнения и их системы; для уравнений степени 2 и выше существуют всяческие очень нетривиальные теории (коммутативная алгебра, алгебраическая геометрия и иже с ними). Поэтому в анализе данных в основном применяются линейные модели (либо обобщенные линейные модели, как логистические регрессии, перцептроны и т.д.).
На русском языке много книг по линейной алгебре. Проблема в том, что они написаны либо для математиков, либо в них удручающе много индексов (и за деревьями не видно леса). Часто акцент в университетских курсах делается на жордановой форме; про другие стандартные формы часто не упоминается; есть Гаусс и бестолковый Крамер, но редко что бывает про LU, про SVD.
Что нужно знать из линейной алгебры?
Понятие вектора и векторного пространства; понятие линейного оператора; связь операторов и матриц; матричные разложения (LU, SVD как минимум); собственные вектора и собственные значения; ортогональные, унитарные операторы; симметричные и эрмитовы операторы; квадратичные формы, приведение к главным осям.
Литература
Самое хорошее в этом курсе — отсутствие «сложных» и довольно бестолковых теорем линейной алгебры, всяческих двойственных пространств, большое количество задач в книге, практико-ориентированный подход (не «что это такое», а «как это посчитать»). Более толковых курсов по линейной алгебре я ещё не встречал.
Hurt me plenty: Axler «Linear algebra done right»; Гельфанд «Лекции по линейной алгебре»; курс МФТИ lectoriy.mipt.ru/course/LinearAlgebra; Кострикин «Введение в алгебру, часть 2», Тыртышников «Матричный анализ и линейная алгебра».
Проблема книг и курсов с этого уровня сложности в том, что они теоретико-ориентированные. Есть линейные функционалы и двойственные пространства, но нет матрицы проекции на подпространство и практических способов вычисления собственных значений. Скорее всего, курсы с этого уровня придётся дополнять сильной практикой; к примеру, численными методами линейной алгебры.
Про последнюю книгу отдельно. На мой взгляд, это одна из самых удачных русскоязычных книг по линейной алгебре в том смысле, что она не очень сильно оторвана от практики; при этом в ней содержатся и всяческие «продвинутые» темы. Она в какой-то мере может заменить лекции Стрэнга полностью, но её надо дополнять простыми задачами на «набить руку». Задачки в этой книге есть, но они довольно суровые.
Nightmare: Кострикин-Манин «Линейная алгебра и геометрия», Шафаревич-Ремизов «Линейная алгебра и геометрия».
В целом, на русском есть много хорошей литературы, особенно на последнем уровне, но она страдает излишней сложностью.
Практика
Как и в первом случае, практика обязательна. Проходите SVD — изучите сжатие изображений. Проходите матричные умножения — изучите быстрое преобразование Фурье, алгоритм Штрассена; решайте много задач (например, из задачников Кострикина либо Проскурякова); напишите своё LU-разложение, Гаусса. Для самых упорных я могу предложить замечательные книги по численным методам линейной алгебры, такие как Trefethen, Bau «NUMERICAL LINEAR ALGEBRA»; Хорн, Джонсон «Матричный анализ». Эти книги будут полезны, во первых, для «набития» руки; во-вторых, станет сразу понятно, что многие теоретические методы разбиваются в щепки о прозу жизни (машинная точность, нестабильность методов, работа с разреженными матрицами).
Дискретная математика
Ещё один кит современной CS. Здесь нас в основном будет интересовать комбинаторика и основы теории графов.
Что нужно знать из комбинаторики и теории графов?
Биномиальные коэффициенты, их асиптотика; графы; деревья; поиск в глубину и ширину; реккурентные соотношения и их решения;
Литература
Bring it on: Андерсон Дж. «Дискретная математика и комбинаторика»; Хаггарти, Шлипф Дж., Уайтсайдс С. «Дискретная математика для программистов», Оре О. «Графы и их применение».
Две первые книги — прекрасные талмуды по дискретной математике, покрывают практически все вопросы, которые надо знать.
Hurt me plenty: Грэхем, Кнут, Паташник «Конкретная математика», Харари «Теория графов», Оре «Теория графов».
Nightmare: Сачков «Введение в комбинаторные методы дискретной математики», Омельченко «Теория графов».