Хотите дальше читать devby? 📝
Support us

Нужна ли математика программисту? Какая и где учить — разбирает преподаватель и математик

Говорят, «не будешь знать математику, не сможешь стать программистом». Преподаватель, программист и математик Никита Терентьев рассказывает, так ли это. А ещё: где в ИТ хватит базовой школьной программы, где нужны специфические знания. И какие именно направления математики пригодятся для работы в узких областях, вроде data science или gamedev.

39 комментариев
Содержание

Говорят, «не будешь знать математику, не сможешь стать программистом». Преподаватель, программист и математик Никита Терентьев рассказывает, так ли это. А ещё: где в ИТ хватит базовой школьной программы, где нужны специфические знания. И какие именно направления математики пригодятся для работы в узких областях, вроде data science или gamedev.

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

Никита Терентьев
Работает в индустрии более 10 лет, из них 8+ в Epam; lead full stack developer, architect; закончил мехмат БГУ (три раза); преподаватель Python в IT Academy; основные направления работы — solution architecture, pim/dam, image recognition.

Знания для старта

Всегда найдутся люди, которые категорично заявляют, что в ИТ-индустрии не место тем, кто не знает криволинейный интеграл «или хотя бы векторное исчисление». Но:

  1. большой вопрос, станут ли эти люди столь же категорично заявлять это прямо в лица своим коллегам, которые успешно справляются со своей работой, двигают вперёд проекты и индустрию в целом? Ответ: маловероятно.
  2. базовой «школьной» математики вполне хватит для старта карьеры программиста, если вы выбрали наиболее общее (и, скорее всего, популярное) направление. К таким относятся, например, веб-разработка, разработка под интернет вещей или носимые устройства, разработка баз данных (поначалу), мобильная разработка.

Что действительно может вам понадобиться на этом этапе:

  • Основы алгебры. Понятие чисел и числового ряда, дробей и округления, базовых операции над числами так или иначе пригодятся всем программистам в любом направлении деятельности. Хорошим дополнением станет умение работать с разными системами счисления.
  • Функции и их обозначения. Многие языки программирования используют как само понятие функции, так и несколько разных видов обозначений (включая пресловутые lambda) как основу синтаксиса и соответственно расчётов.
  • Основы геометрии. Фигуры на плоскости, их площади и расстояния применяются при проектировании и реализации пользовательских интерфейсов.

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

Мышление: логическое и абстрактное

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

К счастью, логическое мышление прекрасно поддаётся развитию и тренировке. Лучше всего помогают игры — настольные, компьютерные и даже активные — в которых есть чёткий набор правил и возможность выстроить стратегию победы. Шахматы (и их имитации) подойдут идеально. Если есть возможность играть с другими людьми, ею следует обязательно пользоваться.

Где нужна больше математика для программистов (+ ресурсы, где учить)

Есть несколько направлений в программировании, где хорошие познания в высшей математике все-таки жизненно необходимы. Не торопитесь бежать в онлайн библиотеку за полным комплектом трактатов Бурбаки, лучше спокойно проанализируйте требования по выбранному направлению. На старте хорошее понимание ограниченного количества концепций всегда лучше поверхностного формального знания математики «в ширину».

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

Ниже привожу несколько популярных направлений и те разделы «вышки», которые вам понадобятся.

Data science и machine learning

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

  • Статистика — используется для анализа и понимания данных, поиска скрытых паттернов и закономерностей. Для начала можно сфокусироваться на вероятностных функциях, распределении, сэмплинге и измерении погрешностей.
  • Линейная алгебра — помогает лучше понимать и проектировать алгоритмы, основанные на векторном и матричном исчислении. Стоит обратить внимание на векторные пространства и базовые операции над векторами и матрицами, дальше можно будет углубляться в работу со специальными матрицами.
  • Математический анализ (calculus по-английски) — явно или неявно он просто повсюду, от вычисления средних и граничных значений, до работы с последовательностями значений. 

Вот хороший курс для получения базовых знаний по математике для data science.

GameDev

Математика в программировании — основа разработки игр, с её помощью описываются все правила, по которым существует виртуальный мир игры, от простейшей параболы, по которой летит злая птичка, до частиц грязи и пыли, разлетающихся с колёс раллийной машины. Что стоит знать, для проектирования игры:

  • Алгебра, кругом она — без линейных и векторных исчислений невозможно просчитывать перемещения объектов, направления взгляда, движения, стрельбы и так далее, список можно продолжать очень долго.
  • Не будут лишними кватернионы — специальная система исчисления, позволяющая удобно описывать вращения трёхмерного объекта с помощью четырёх измерений.
  • И отдельно стоит отметить мат анализ, с помощью которого можно реализовать физику перемещений и взаимодействий игровых объектов, впрочем, всё очень сильно зависит от игрового движка, иногда крепкие знания матана могут и не пригодится.

Здесь советую отличную серию статей для быстрого знакомства с игровой математикой.

Cybersecurity

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

  • Очень часто для разных вычислений в рамках алгоритмов применяются комплексные числа (complex numbers). В частности, с помощью них можно найти все три корня кубического уравнения, или корни квадратного в тех случаях, когда в школьной математике мы договаривались, что корней нет.
  • Ну и конечно важнейшей дисциплиной для этого направления считается криптография. Если совсем просто, то это наука о шифровании и дешифровании данных. С помощью методов криптографии можно обеспечивать целостность данных, проверять их подлинность, подписывать данные электронной цифровой подписью и так далее.

На Coursera есть целая специальность по криптографии, очень насыщенная.

Зачем учить больше

Продвинутая математика не является необходимой, но действительно даёт очень много преимуществ программисту. Все достаточно сложные математические концепции основываются на логике и символьном «языке», который функционирует по определённому набору правил. А это очень похоже на само программирование.

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

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

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

Бонус: отличный канал на русском языке, на котором освещаются все основные концепции из курса вышки.


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


Эта история, как многие другие, появилась благодаря читателям devby. Уже 16-й год подряд мы объединяем и сохраняем беларуское ИТ-комьюнити. Мы быстро реагируем на любые, особенно тревожные, сообщения наших читателей. Объективно и взвешенно рассказываем, что происходит с индустрией: новые проекты, успехи и неудачи, лютый кринж и глитч надежды на фоне страшных кризисов, которые мы все переживаем.

Давайте пройдем этот путь вместе! Поддержите работу команды на любую сумму: на Patreon, через Donorbox (удобно из Беларуси) или криптой, чтобы мы могли делать больше и оперативней. Ежемесячные платежи делают планы редакции более прогнозируемыми, так мы можем планировать. Спасибо!

Как войти в ИТ в 2022. Рассказывает преподаватель 10+ лет в профессии
Как войти в ИТ в 2022. Рассказывает преподаватель 10+ лет в профессии
По теме
Как войти в ИТ в 2022. Рассказывает преподаватель 10+ лет в профессии
Как выбрать профессию в ИТ в 2022. Четыре шага (на примере)
Как выбрать профессию в ИТ в 2022. Четыре шага (на примере)
По теме
Как выбрать профессию в ИТ в 2022. Четыре шага (на примере)
Помогаете devby = помогаете ИТ-комьюнити.

Засапортить сейчас.

Читайте также
Страх или лень? Как не бояться ответственности на любом этапе карьеры
Страх или лень? Как не бояться ответственности на любом этапе карьеры
Страх или лень? Как не бояться ответственности на любом этапе карьеры
Умение принять ответственность отличает как взрослого от ребёнка, так и хорошего специалиста от просто специалиста. Отвечать за свою, а в перспективе и чужую, работу и карьеру трудно. И даже страшно. Но, как с любым страхом — с этим можно бороться.
Компания звонит по телефону — зовёт в ИТ без навыков и английского. У айтишников вопросы
Компания звонит по телефону — зовёт в ИТ без навыков и английского. У айтишников вопросы
Компания звонит по телефону — зовёт в ИТ без навыков и английского. У айтишников вопросы
Айтишники (и не только) жалуются, что им звонят по телефону из школы IT Overone и предлагают курсы для вхождения в ИТ без первоначальных навыков и английского. 
4 комментария
Хочу стать программистом. С чего начать и как выбрать между Java Script, PHP, Python и другими
Хочу стать программистом. С чего начать и как выбрать между Java Script, PHP, Python и другими
dev.ua
Хочу стать программистом. С чего начать и как выбрать между Java Script, PHP, Python и другими
Войти в IT с семьей, ипотекой и годами опыта в другой сфере: истории свитчеров
Войти в IT с семьей, ипотекой и годами опыта в другой сфере: истории свитчеров
Bubble
Войти в IT с семьей, ипотекой и годами опыта в другой сфере: истории свитчеров

Хотите сообщить важную новость? Пишите в Telegram-бот

Главные события и полезные ссылки в нашем Telegram-канале

Обсуждение
Комментируйте без ограничений

Релоцировались? Теперь вы можете комментировать без верификации аккаунта.

fallinmyhand
fallinmyhand Патриот в Мерси Софтваре
-11

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

А если проект связан с векторными или интегральными исчислениями? Ведь программист это не тот кто только onclick для кнопочки добавляет)

croadden
croadden SDET в Palta
13

Я QA Automation в геймдеве. Математика не особо была нужна, до тех пор, пока не пришлось работать с позициями игрока (в игровом мире и на миникарте, например), дальностью видимости и т.д. Особенно пригодились геометрические алгоритмы (вхождение точки в многоугольник, положение точки относительно прямой и вот это всё. Да даже сейчас, работая на мобильном проекте, иногда есть необходимость взаимодействовать с расстоянием, положением объёктов (например, проверять, должен ли объект быть виден или нет; выцеплять координаты объекта на экране, имея лишь координаты объекта в сцене и несколько камер). Так что никогда не знаешь, когда математика пригодится :)

Лаврентий  Лучезарный
Лаврентий Лучезарный Пилот межзвёздного пространства в Космолёт
-2

Говорят, «не будешь знать математику, не сможешь стать программистом».

Зависит исключительно от потребности рынка. Будет много вакансий - будут всех брать кто знает что такое объект, класс и переменная. И наоборот.

PS: Мой свежайший пример из Польши - меняю работу, вместо меня берут человека с экономическим образованием из Грузии, и оклад у него я примерно знаю - он ощутимо так больше моего. Рад за него и всего ему самого хорошего.

PPS: Стоит ли добавлять, что моя попытка внутри компании увеличить з/п провалилась.

Anonymous
Anonymous
-1

Это Грузин или миграционный Беларус?

r2d2
r2d2
13

Реальность такова что для повышения зп сейчас легче сменить работу чем добиться что бы её подняли на текущем месте..

Юрий Зеленский
Юрий Зеленский
1

Возможно, Ваш работодатель, читает dev.by и воспользовался своими знаниями математики, чтобы оценить сколько он вложил в спонсирование комментариев, и решил направить средства на решение производственных задач :-)

P.S. Извините, если задел. Просто дружественное подтрунивание, no offence. Без Вас тут будет скучно. Удачи в поисках нового спонсора, для наших комментариев.

Лаврентий  Лучезарный
Лаврентий Лучезарный Пилот межзвёздного пространства в Космолёт
-8

Задеть меня?))))) Вы явно переоцениваете величие своего комментария )))
Тут даже и подтрунивания как такового нет. Что к чему вообще, лучше научитесь мысли более понятно излагать.
И поменьше фантазировать вам нужно.

Лаврентий  Лучезарный
Лаврентий Лучезарный Пилот межзвёздного пространства в Космолёт
8

Делитесь в комментариях, какие направления математики вам нужны в работе.

Делюсь. Умение продавать себя. Очень нужное.

Anonymous
Anonymous
7

В 90% никакие. Базовое умение считать.

Я да же могу больше сказать, знания алгоритмов: сортировка, графы, поиск в ширину или глубину, деревья и тд, не требует знания высшей математики, только какие-то базовые понятия.

Для того чтобы сверстать форму или положить число в бд, математика не нужна.

Да же призовые места на олипиаде по информатике не всегда требуют математику. Так как не возможность решить задачу математические, не означает не возможность её решить алгоритмически. Знание как написать полный перебор, для любой задачи, решает её на 50%.

Пользователь отредактировал комментарий 28 мая 2022, 11:42

jiangbin
jiangbin
0

Даже пишется слитно. Невозможность в данном контексте тоже.

kong_en_ge
kong_en_ge пенсионер в Сад и Огород
5

Учи математику, а то так и будешь джейсоны до пенсии парсить и по базе раскладывать!

anti
anti
3

Как будто что-то плохое

kong_en_ge
kong_en_ge пенсионер в Сад и Огород
3

скучно же

Лаврентий  Лучезарный
Лаврентий Лучезарный Пилот межзвёздного пространства в Космолёт
-6

Учи математику, студент, будешь как и я в индусском гов#окоде копаться. А иначе так и останешься каким-то бизнесменишкой.

Пользователь отредактировал комментарий 28 мая 2022, 14:04

justman
justman
8

В маленьких компаниях - нужна, часто нужно за бухгалтером перепроверять правильность начисления зп.
В больших компаниях - нет, там с этим все окей, начислят без ошибок.

kong_en_ge
kong_en_ge пенсионер в Сад и Огород
3

в больших тем более нужна: чтобы солидного корпобухгалтера ущучить

ddd111
ddd111
-5

Айтишники в очередной раз пытаются притянуть что-то умное к себе без смс.
Мы уже и так поняли, что вы спецы вообще во всем.

nvv
nvv
9

К сожалению большая часть айтишников не способна даже посчитать налоги и проценты по кредиту

kong_en_ge
kong_en_ge пенсионер в Сад и Огород
1

ну, скока уже можно про джунов виронита?!

afox
afox
2

Очень зависит от сферы.

Вне игр, мл, обработки изображений, задач распознавания, мне в разных ситуациях за примерно 25 лет работы пригодились понимание теории графов, матрицы и линейная алгебра. Даже без конкретных теорем и численных методов в голове - понимание принципов и основ помогают найти и отоьрать нужную информацию

karma
karma минусует в комментах
2

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

Anonymous
Anonymous
3

Это точно. Причём всунуть пытаются не просто МЛ, а сразу Deep Learning модный из последних SOTA. В здоровенные хранилища заливаются петабайты информации, стопиццот индусов чистят и размечают выборки, дико дорогие теслы несколько недель учат всю эту фигню. А потом получается инференс такой, что под него отдельный кластер хочется развернуть. И в самом конце оказывается, что всю вот эту вот херню можно было сделать каскадами Хаара и косинусным расстоянием, а работать этот мелкий уродец может даже на компе времен мамки Стифлера.

Anonymous
Anonymous Position в Noname
1

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

belpyro
belpyro
2

не нужна! и туда же: историю, философию, физику, химию, литературу. не нужна! ровно с того момента, когда произошла подмена слова "инженер-программист" на "айтишник". с того момента, когда образование стало услугой. не нужна!

Александр Гинзбург
Александр Гинзбург Senior C++ в BSVT - NT
5

Лично мне за последние примерно двадцать лет работы в разработке различного софта, задачи с необходимостью применения математики/геометрии - встречались относительно редко. Однако, именно подобные проекты (богатые на математику), я бы назвал наиболее яркими и интересными. Хотя, в то же время, и наиболее сложными. Это те проекты, участие в которых вызывает гордость, несмотря на то, что уже прошло немало лет.

Пользователь отредактировал комментарий 28 мая 2022, 23:06

mishka
mishka dev в Galera
4

Купил за два рубля, продал за пять. Вот на этих три процента и живём (с)

Tim Z
Tim Z
7

В статье все верно изложено - главное, что даёт математика, - это умение решать задачи. Думаю, при решении упражнений из алгебры и геометрии задействованы те же области мозга, что и при решении алгоритмических задач. Поэтому, развивая мозг в школе на математике, вы подготавливаете свой мозг к программированию. Попробуйте сами - откройте задачку с leetcode и постройте для неё алгоритм. У меня это вызывает стойкое чувство дежавю, как когда-то я пытался упростить выражения с кучей скобок из учебника Сканави в школе.

htostsi
htostsi Wizard в Moonlight
5

Математику уж за тем знать нужно, что она ум в порядок приводит. (Ломоносов)

mishka
mishka dev в Galera
0

Вроде даже с бодунища помогала Михаилу Васильевичу

vivkine
vivkine
-2

" в ИТ-индустрии не место тем, кто не знает криволинейный интеграл «или хотя бы векторное исчислениe."

Естессно, для тех кто работает на Boeing, NASA, HP etc. Конечно OnLine Stories можно програмировать и без этого в уме.

vivkine
vivkine
0

Статья в тему, о человеке который стал милиардером в 25 лет благодаря своим математическим способностям:

https://www.forbes.com/sites/colehorton/2022/05/25/the-new-youngest-self-made-billionaire-in-the-world-is-a-25-year-old-college-dropout/?sh=32dc6df4494b

Отрывок из статьи:

As a kid, Wang was a math whiz who competed in national math and coding competitions. In 6th grade, he signed up for his first national math competition intent on securing a free ticket to Disney World. He didn’t win the competition, but he clinched his trip to the magic kingdom. By 17, he was working full-time coding at the question-and-answer site Quora, where he met Scale’s cofounder, Lucy Guo.

vivkine
vivkine
-3

Шерлок Холмс не был ни программистом, ни математиком. Он был сыщиком. Однако его дедуктивный метод, который он использовал в процессе своих расследований очень помогал ему распутывать сложные комбинации происходящих событий.

kong_en_ge
kong_en_ge пенсионер в Сад и Огород
7

Начнем с того, что Шерлок Холмс был фантазией в одной голове.

Pavel K
Pavel K
-3

Все думают, что любят математику, пока дело не коснется тензорного исчисления ))
Если ты не разрабатываешь базы данных, алгоритмы шифрования или игровые движки, то поверь, математика у тебя будет только на Википедии в свободное от работы время. Верхом твоих математических потуг на работе будет в лучшем случае нахождение медианы, а обычно и вовсе остаток от деления

perfokarta
perfokarta
0

Я не совсем понимаю, для какой аудитории пишет автор. Для школьников? Но у них есть уроки информатики, где о входе в ИТ расскажут более доступно. Для студентов ИТ специальностей? Так они уже в ИТ. Для людей, которые хотят поменять свою профессию на  ИТ? Тогда это - подменить своими курсами стандартное образование. Похоже на то, как во время пандемии, начитавшись разной, в том числе и медицинской литературы,  многие стали считать себя вирусологами. То есть, по сути, врачами. Мы хотим иметь врачей с таким образованием?

Программированию обучают в специализированных вузах уже больше 50 лет, и, судя по всему, довольно успешно. Причем, по моему мнению, какой-либо язык программирования - один из самых простых, хотя и необычных для новичка, предметов. В основном же, там преподаются математические дисциплины, которые подготавливают к будущей профессии, потому что да, "математика ум в порядок приводит" (с) 
Честно говоря, я уже не помню ни одной теоремы, но помню впечатления от их доказательств - как пройти длинную-длинную цепочку рассуждений, не сбиться и прийти к однозначному всегда работающему утверждению.
И еще, помню очарование точностью. Без умения быть точным не напишешь программу. Возможно, чтобы  написать программу, которая выведет "Hello world" разными цветами в пределах ЯП, это не очень критично. Но чтобы написать программу, реализующую множество сценариев, которые не будут конфликтовать между собой, и не сломают ничего существующего, нужно иметь специальное мышление, которое формируется довольно долго, в особых условиях - и не на курсах. 
"Не навреди" - правило любой профессии.

Пользователь отредактировал комментарий 30 мая 2022, 12:12

mishka
mishka dev в Galera
-4

Чтобы писать хороший код - нужно кодить. Универы, математика и т. д. не обязательны, даже иногда могут мешать.
Многие топовые эксперты/преподаватели в своих областях топят против универов, я с ними солидарен 😁

vz9
vz9
2

они топят против универов потому что за 4-6 лет вложили времени в образование как 3 универа, а те кто ссылаются на их утверждения обычно поработали кое как 8 часов и учесали в бар

Александр Гинзбург
Александр Гинзбург Senior C++ в BSVT - NT
0

Никто не будет спорить, что для больших компаний, где кодеры делают формочки (а апогеем профессионализма является сохранение содержимого формочки в файл или базу), справедливо утверждение, что универ, для функций кодера, не обязятелен. Эти компании меняют кодеров также, как расходники к принтерам. Но есть и разработчики - программисты. На этих профессионалах строится весь процесс. Это уже не расходный материал. Это тот высоко-потенциальный профессиональный базис, на котором держится разработка. Как правило, для таких разарботчиков курс универа действительно даёт как твёрдый фундамент для дальнейшего развития, так и возможность обзавестись хорошими связями в IT профессиональном мире.

Пользователь отредактировал комментарий 3 июня 2022, 15:41

reader
reader
0

Насчет шахмат не совсем согласен. По сути это - тренировка "нейросети" в мозге под узкую специфическую задачу. И зубрежка дебютов.
Для "обычного" программирования полезны основы: структуры данных и основные алгоритмы. Все программы на 99% состоят из этого, плюс еще 1% из математических формул.
Что еще полезно, на мой взгляд - это понимание ОС и железа. То есть, не программировать сферическую программу в виртуальном вакууме, а понимать что будет происходить "под капотом".