
Часто слышу такой вопрос от коллег и знакомых. Очевидно, что короткого ответа тут недостаточно, собеседник приведёт контраргументы, что в итоге выльется в жаркий спор. Обычно в результате такого спора единое мнение не формируется, каждый остаётся при своём.
Всё дело в том, что этот вопрос сам по себе является риторическим, провоцирующим спор. «Правильность» ответа существенным образом зависит от контекста, который у каждого собеседника, как правило, свой собственный. Контекстом в данном случае будет разное понимание смысла слов вопроса. Поэтому давайте разберём некоторые смыслы каждого из них.
Программисту
Что для вас значит «быть программистом»?
Если вы можете писать программы для решения некоторых задач, то вы вполне обоснованно можете называть себя программистом. Если к тому же в вашем трудовом договоре в графе «должность» написано «инженер-программист», значит что и другие признают вас таковым!
Но есть люди, которым этого не достаточно и для которых чужое мнение не является определяющим. Для них важно уметь объяснить, почему те или иные приёмы программирования наилучшим образом подходят для решения задач. Такие люди постоянно стараются восполнять пробелы в навыках и знаниях, в том числе, докапываться до математических основ программирования. Только это поможет им самим считать себя достойным звания программиста.
Нужна
Если твоей целью является устройство на работу программистом, то, математические навыки хоть и будут плюсом, но обычно работодатели не ожидают от соискателей какого-то глубокого понимания математики. Подразумевается, что если у человека есть высшее образование, то и с математикой у него всё должно быть хорошо. Собственно, такое положение дел и приводит к тому, что вопрос «ненужности математики» слышен в основном от работающих программистов.
Но если же ты стремишься развиваться как программист, повышать свою квалификацию, учиться находить наилучшие решения, то тебе определённо нужно копать глубже в поиске той базы, на которой можно выбрать наилучше методы получения качественного кода.
Математика
Современная академическая математика отвратительна! Она нарочно дистанцируется от реального мира и сконцентрирована больше на самолюбовании. Совершенно абсурдный культ «царицы всех наук» и претензия на самостоятельную значимость пресекают большинство попыток познакомиться с ней поближе.
А жаль. Ведь всё равно все понимают, что именно математика даёт инструменты для решения задач реального мира, в том числе и программирования. Дело в том, что математика вовсе не царица, а лишь безропотная старательная служанка, которая справится с любым классом задач… если только дать ей правильные инструкции)).
Какая математика может пригодится программисту?
Действительно, не вся математика одинаково полезна. Прежде всего, для решения практических задач может пригодится только так называемая «конструктивная математика». В отличие от традиционной математики тут нет аксиом, нагло постулирующих истинность каких-то утверждений без существенных на то оснований (аксиомы выбора, исключения третьего и т.п.). Доказательством в конструктивной математике считается алгоритм получения свидетельства истинности — а это как раз то, что нужно программистам!
Вот лишь некоторые разделы математики, которые могут пригодиться программистам:
теория алгоритмов — рекурсия, структуры данных, сложность и прочее;
логика — даст понимание о роли языка (синтаксис с БНФ, семантика с правилами вывода);
лямбда-исчисление — язык для описания вычислений со всего двумя (!) базовыми правилами — объявлением лямбда-абстракции и её применением к аргументу;
теория типов — предоставляет инструментарий для проверки корректности алгоритмов до их исполнения благодаря тесной связи этой теории с логикой (изоморфизм Карри-Говарда);
теория категорий — даёт представление о возможностях специальных обобщённых типов-контейнеров, посредством которых во многих языках программирования реализуется безопасная работа с эффектами (прежде всего, с асинхронностью).
Также не стоит забывать, что всё программирование иногда называют одним из разделов математики. И, вообще, математика развивает навыки моделирования реальности и манипулирования абстракциями, что очень важно для профессии программист.
Таким образом, «правильный» ответ зависит исключительно от того, какие именно цели стоят перед вами, что для вас значит «быть программистом» и как именно вы представляете себе «математику». Надеюсь, эта небольшая заметка поможет вам определиться, стоит ли дополнительно заниматься математикой в вашем конкретном случае.