Нужна ли математика программисту? Какая и где учить — разбирает преподаватель и математик
Говорят, «не будешь знать математику, не сможешь стать программистом». Преподаватель, программист и математик Никита Терентьев рассказывает, так ли это. А ещё: где в ИТ хватит базовой школьной программы, где нужны специфические знания. И какие именно направления математики пригодятся для работы в узких областях, вроде data science или gamedev.
Знания для старта
Всегда найдутся люди, которые категорично заявляют, что в ИТ-индустрии не место тем, кто не знает криволинейный интеграл «или хотя бы векторное исчисление». Но:
- большой вопрос, станут ли эти люди столь же категорично заявлять это прямо в лица своим коллегам, которые успешно справляются со своей работой, двигают вперёд проекты и индустрию в целом? Ответ: маловероятно.
- базовой «школьной» математики вполне хватит для старта карьеры программиста, если вы выбрали наиболее общее (и, скорее всего, популярное) направление. К таким относятся, например, веб-разработка, разработка под интернет вещей или носимые устройства, разработка баз данных (поначалу), мобильная разработка.
Что действительно может вам понадобиться на этом этапе:
- Основы алгебры. Понятие чисел и числового ряда, дробей и округления, базовых операции над числами так или иначе пригодятся всем программистам в любом направлении деятельности. Хорошим дополнением станет умение работать с разными системами счисления.
- Функции и их обозначения. Многие языки программирования используют как само понятие функции, так и несколько разных видов обозначений (включая пресловутые lambda) как основу синтаксиса и соответственно расчётов.
- Основы геометрии. Фигуры на плоскости, их площади и расстояния применяются при проектировании и реализации пользовательских интерфейсов.
Если вы не прогуляли в школе первые пять классов, то восстановить формальные понятия этих разделов можно буквально за один вечер. Более продвинутые концепции спокойно можно изучить на последующих этапах и по мере необходимости.
Мышление: логическое и абстрактное
Самое главное, что может дать базовая математика в школе — это умение думать и рассуждать, приходить к решению и отбрасывать неверные пути, находить граничные и исключительные ситуации. Именно эти навыки помогают программистам достигать успехов в любом направлении разработки. Все вышеперечисленные концепции можно объединить единым понятием логики. Именно её многие недополучают в школе/университете и этот дефицит придётся компенсировать на стороне.
Где нужна больше математика для программистов (+ ресурсы, где учить)
Есть несколько направлений в программировании, где хорошие познания в высшей математике все-таки жизненно необходимы. Не торопитесь бежать в онлайн библиотеку за полным комплектом трактатов Бурбаки, лучше спокойно проанализируйте требования по выбранному направлению. На старте хорошее понимание ограниченного количества концепций всегда лучше поверхностного формального знания математики «в ширину».
Проанализируйте требования в вакансиях, учитывайте не только запросы по новичкам, но и то, в какую сторону придётся двигаться по мере развития вашей карьеры. И фокусируйтесь на практике, это поможет не скиснуть от потока новых знаний, и получить полезные здесь и сейчас навыки.
Ниже привожу несколько популярных направлений и те разделы «вышки», которые вам понадобятся.
Data science и machine learning
Для решения задач здесь часто приходится прибегать к использованию головокружительных многомерных массивов, тензоров, статистических распределений и многих других продвинутых концепций. Фундаментом станут три раздела:
- Статистика — используется для анализа и понимания данных, поиска скрытых паттернов и закономерностей. Для начала можно сфокусироваться на вероятностных функциях, распределении, сэмплинге и измерении погрешностей.
- Линейная алгебра — помогает лучше понимать и проектировать алгоритмы, основанные на векторном и матричном исчислении. Стоит обратить внимание на векторные пространства и базовые операции над векторами и матрицами, дальше можно будет углубляться в работу со специальными матрицами.
- Математический анализ (calculus по-английски) — явно или неявно он просто повсюду, от вычисления средних и граничных значений, до работы с последовательностями значений.
Вот хороший курс для получения базовых знаний по математике для data science.
GameDev
Математика в программировании — основа разработки игр, с её помощью описываются все правила, по которым существует виртуальный мир игры, от простейшей параболы, по которой летит злая птичка, до частиц грязи и пыли, разлетающихся с колёс раллийной машины. Что стоит знать, для проектирования игры:
- Алгебра, кругом она — без линейных и векторных исчислений невозможно просчитывать перемещения объектов, направления взгляда, движения, стрельбы и так далее, список можно продолжать очень долго.
- Не будут лишними кватернионы — специальная система исчисления, позволяющая удобно описывать вращения трёхмерного объекта с помощью четырёх измерений.
- И отдельно стоит отметить мат анализ, с помощью которого можно реализовать физику перемещений и взаимодействий игровых объектов, впрочем, всё очень сильно зависит от игрового движка, иногда крепкие знания матана могут и не пригодится.
Здесь советую отличную серию статей для быстрого знакомства с игровой математикой.
Cybersecurity
Она же компьютерная безопасность, направление, в котором решают задачи защиты чувствительной информации от несанкционированного доступа, кражи и т. д. С большего здесь используется общий для всех дисциплин мат аппарат — алгебра логики, мат анализ, специальные системы счислений. Отдельно я бы отметил две вещи:
- Очень часто для разных вычислений в рамках алгоритмов применяются комплексные числа (complex numbers). В частности, с помощью них можно найти все три корня кубического уравнения, или корни квадратного в тех случаях, когда в школьной математике мы договаривались, что корней нет.
- Ну и конечно важнейшей дисциплиной для этого направления считается криптография. Если совсем просто, то это наука о шифровании и дешифровании данных. С помощью методов криптографии можно обеспечивать целостность данных, проверять их подлинность, подписывать данные электронной цифровой подписью и так далее.
На Coursera есть целая специальность по криптографии, очень насыщенная.
Зачем учить больше
Продвинутая математика не является необходимой, но действительно даёт очень много преимуществ программисту. Все достаточно сложные математические концепции основываются на логике и символьном «языке», который функционирует по определённому набору правил. А это очень похоже на само программирование.
Номинально, чем больше продвинутых разделов математики знает человек, тем проще ему заниматься программированием. Но не потому, что где-то в программировании напрямую нужно применять, к примеру алгебраическую топологию или теорию поля, а потому что и там, и там — крайне похожие процессы. Опыт из одного легко перенести в другой и наоборот.
Существует очень много способов развить абстрактное мышление, от простейших, вроде просмотра фильмов и чтения книг, до полноценных занятий на уровне хобби — участие в театральных кружках, игра на музыкальных инструментах, сборка моделей и так далее.
Бонус: отличный канал на русском языке, на котором освещаются все основные концепции из курса вышки.
Делитесь в комментариях, какие направления математики вам нужны в работе. И источники, где можно найти лекции/упражнения/разборы — добавим в материал.
Эта история, как многие другие, появилась благодаря читателям devby. Уже 16-й год подряд мы объединяем и сохраняем беларуское ИТ-комьюнити. Мы быстро реагируем на любые, особенно тревожные, сообщения наших читателей. Объективно и взвешенно рассказываем, что происходит с индустрией: новые проекты, успехи и неудачи, лютый кринж и глитч надежды на фоне страшных кризисов, которые мы все переживаем.
Давайте пройдем этот путь вместе! Поддержите работу команды на любую сумму: на Patreon, через Donorbox (удобно из Беларуси) или криптой, чтобы мы могли делать больше и оперативней. Ежемесячные платежи делают планы редакции более прогнозируемыми, так мы можем планировать. Спасибо!
Читать на dev.by