Нужна ли математика программисту? Какая и где учить — разбирает преподаватель и математик
Говорят, «не будешь знать математику, не сможешь стать программистом». Преподаватель, программист и математик Никита Терентьев рассказывает, так ли это. А ещё: где в ИТ хватит базовой школьной программы, где нужны специфические знания. И какие именно направления математики пригодятся для работы в узких областях, вроде data science или gamedev.
Говорят, «не будешь знать математику, не сможешь стать программистом». Преподаватель, программист и математик Никита Терентьев рассказывает, так ли это. А ещё: где в ИТ хватит базовой школьной программы, где нужны специфические знания. И какие именно направления математики пригодятся для работы в узких областях, вроде data science или gamedev.
Материал подготовлен для людей, которые начинают свой путь в ИТ. Матёрых программистов с тяжёлым багажом знаний просим в комментариях поделиться личным опытом и полезными ресурсами, чтобы максимально дополнить статью для коллег.
Никита Терентьев
Работает в индустрии более 10 лет, из них 8+ в Epam; lead full stack developer, architect; закончил мехмат БГУ (три раза); преподаватель Python в IT Academy; основные направления работы — solution architecture, pim/dam, image recognition.
Знания для старта
Всегда найдутся люди, которые категорично заявляют, что в ИТ-индустрии не место тем, кто не знает криволинейный интеграл «или хотя бы векторное исчисление». Но:
большой вопрос, станут ли эти люди столь же категорично заявлять это прямо в лица своим коллегам, которые успешно справляются со своей работой, двигают вперёд проекты и индустрию в целом? Ответ: маловероятно.
базовой «школьной» математики вполне хватит для старта карьеры программиста, если вы выбрали наиболее общее (и, скорее всего, популярное) направление. К таким относятся, например, веб-разработка, разработка под интернет вещей или носимые устройства, разработка баз данных (поначалу), мобильная разработка.
Что действительно может вам понадобиться на этом этапе:
Основы алгебры. Понятие чисел и числового ряда, дробей и округления, базовых операции над числами так или иначе пригодятся всем программистам в любом направлении деятельности. Хорошим дополнением станет умение работать с разными системами счисления.
Функции и их обозначения. Многие языки программирования используют как само понятие функции, так и несколько разных видов обозначений (включая пресловутые lambda) как основу синтаксиса и соответственно расчётов.
Основы геометрии. Фигуры на плоскости, их площади и расстояния применяются при проектировании и реализации пользовательских интерфейсов.
Если вы не прогуляли в школе первые пять классов, то восстановить формальные понятия этих разделов можно буквально за один вечер. Более продвинутые концепции спокойно можно изучить на последующих этапах и по мере необходимости.
Мышление: логическое и абстрактное
Самое главное, что может дать базовая математика в школе — это умение думать и рассуждать, приходить к решению и отбрасывать неверные пути, находить граничные и исключительные ситуации. Именно эти навыки помогают программистам достигать успехов в любом направлении разработки. Все вышеперечисленные концепции можно объединить единым понятием логики. Именно еёмногие недополучают в школе/университете и этот дефицит придётся компенсировать на стороне.
К счастью, логическое мышление прекрасно поддаётся развитию и тренировке. Лучше всего помогают игры — настольные, компьютерные и даже активные — в которых есть чёткий набор правил и возможность выстроить стратегию победы. Шахматы (и их имитации) подойдут идеально. Если есть возможность играть с другими людьми, ею следует обязательно пользоваться.
Где нужна больше математика для программистов (+ ресурсы, где учить)
Есть несколько направлений в программировании, где хорошие познания в высшей математике все-таки жизненно необходимы. Не торопитесь бежать в онлайн библиотеку за полным комплектом трактатов Бурбаки, лучше спокойно проанализируйте требования по выбранному направлению. На старте хорошее понимание ограниченного количества концепций всегда лучше поверхностного формального знания математики «в ширину».
Проанализируйте требования в вакансиях, учитывайте не только запросы по новичкам, но и то, в какую сторону придётся двигаться по мере развития вашей карьеры. И фокусируйтесь на практике, это поможет не скиснуть от потока новых знаний, и получить полезные здесь и сейчас навыки.
Ниже привожу несколько популярных направлений и те разделы «вышки», которые вам понадобятся.
Data science и machine learning
Для решения задач здесь часто приходится прибегать к использованию головокружительных многомерных массивов, тензоров, статистических распределений и многих других продвинутых концепций. Фундаментом станут три раздела:
Статистика — используется для анализа и понимания данных, поиска скрытых паттернов и закономерностей. Для начала можно сфокусироваться на вероятностных функциях, распределении, сэмплинге и измерении погрешностей.
Линейная алгебра — помогает лучше понимать и проектировать алгоритмы, основанные на векторном и матричном исчислении. Стоит обратить внимание на векторные пространства и базовые операции над векторами и матрицами, дальше можно будет углубляться в работу со специальными матрицами.
Математический анализ (calculus по-английски) — явно или неявно он просто повсюду, от вычисления средних и граничных значений, до работы с последовательностями значений.
Вот хороший курс для получения базовых знаний по математике для data science.
GameDev
Математика в программировании — основа разработки игр, с её помощью описываются все правила, по которым существует виртуальный мир игры, от простейшей параболы, по которой летит злая птичка, до частиц грязи и пыли, разлетающихся с колёс раллийной машины. Что стоит знать, для проектирования игры:
Алгебра, кругом она — без линейных и векторных исчислений невозможно просчитывать перемещения объектов, направления взгляда, движения, стрельбы и так далее, список можно продолжать очень долго.
Не будут лишними кватернионы — специальная система исчисления, позволяющая удобно описывать вращения трёхмерного объекта с помощью четырёх измерений.
И отдельно стоит отметить мат анализ, с помощью которого можно реализовать физику перемещений и взаимодействий игровых объектов, впрочем, всё очень сильно зависит от игрового движка, иногда крепкие знания матана могут и не пригодится.
Она же компьютерная безопасность, направление, в котором решают задачи защиты чувствительной информации от несанкционированного доступа, кражи и т. д. С большего здесь используется общий для всех дисциплин мат аппарат — алгебра логики, мат анализ, специальные системы счислений. Отдельно я бы отметил две вещи:
Очень часто для разных вычислений в рамках алгоритмов применяются комплексные числа (complex numbers). В частности, с помощью них можно найти все три корня кубического уравнения, или корни квадратного в тех случаях, когда в школьной математике мы договаривались, что корней нет.
Ну и конечно важнейшей дисциплиной для этого направления считается криптография. Если совсем просто, то это наука о шифровании и дешифровании данных. С помощью методов криптографии можно обеспечивать целостность данных, проверять их подлинность, подписывать данные электронной цифровой подписью и так далее.
Продвинутая математика не является необходимой, но действительно даёт очень много преимуществ программисту. Все достаточно сложные математические концепции основываются на логике и символьном «языке», который функционирует по определённому набору правил. А это очень похоже на само программирование.
Номинально, чем больше продвинутых разделов математики знает человек, тем проще ему заниматься программированием. Но не потому, что где-то в программировании напрямую нужно применять, к примеру алгебраическую топологию или теорию поля, а потому что и там, и там — крайне похожие процессы. Опыт из одного легко перенести в другой и наоборот.
Также продвинутая математика помогает развивать абстрактное мышление, которое будет крайне полезным дополнением к общей логике. Абстрактное мышление помогает лучше воспринимать сложные бизнес модели и процессы, воспроизводить их в коде.
Существует очень много способов развить абстрактное мышление, от простейших, вроде просмотра фильмов и чтения книг, до полноценных занятий на уровне хобби — участие в театральных кружках, игра на музыкальных инструментах, сборка моделей и так далее.
Бонус: отличный канал на русском языке, на котором освещаются все основные концепции из курса вышки.
Делитесь в комментариях, какие направления математики вам нужны в работе. И источники, где можно найти лекции/упражнения/разборы — добавим в материал.
Эта история, как многие другие, появилась благодаря читателям devby. Уже 16-й год подряд мы объединяем и сохраняем беларуское ИТ-комьюнити. Мы быстро реагируем на любые, особенно тревожные, сообщения наших читателей. Объективно и взвешенно рассказываем, что происходит с индустрией: новые проекты, успехи и неудачи, лютый кринж и глитч надежды на фоне страшных кризисов, которые мы все переживаем.
Давайте пройдем этот путь вместе! Поддержите работу команды на любую сумму: на Patreon, через Donorbox (удобно из Беларуси) или криптой, чтобы мы могли делать больше и оперативней. Ежемесячные платежи делают планы редакции более прогнозируемыми, так мы можем планировать. Спасибо!
«Опытный айтишник в ЮАР зарабатывает от $40К». Как БГУИР бустанул карьеру
Экс-студент из Африки Донован Мотингоэ скучает по Беларуси: ему нравилась погода, люди и драники. Правда, в комплекте шло немного ксенофобии и неприятный случай «с полицией».
«За деньгами — это в сантехники». Айтишник не заработал и $500 на двух работах
Алексей попытался войти в ИТ в 2022-м. Слишком поздно, как он теперь думает. До этого работал в основном руками, и в его случае — с эпилепсией — часто это была работа «до первого приступа». Но, похоже, к ней придётся вернуться. На двух айтишных работах он смог заработать за месяц всего лишь 1300 рублей.
Хотите сообщить важную новость? Пишите в Telegram-бот
Главные события и полезные ссылки в нашем Telegram-канале
Обсуждение
Комментируйте без ограничений
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.