Математика и программирование: нужны ли они друг другу?

Это пост-размышление Dan Luu, старшего разработчика в Google. Работал научным сотрудником в Университете Техаса и во многих исследовательских лабораториях.

Как-то он услышал фразу: «Зачем учить матан и линейную алгебру, если уже есть Вольфрам Альфа?». Эти слова поначалу повергли Дэна в ужас, ведь он никогда не сожалел о том курсе высшей математики, который изучил в университете.

Однако, когда первые эмоции сменились трезвым взглядом на вещи, Дэн задумался: а действительно, может ли знание высшей математики быть одним из главных критериев успешности в работе программиста? Может ли программист быть хорошим специалистом, не имея этих знаний?

Вот его мысли.

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

  • из девяти преподаваемых в университете математических дисциплин только три дисциплины я использовал постоянно (дифференциальное и интегральное исчисления, линейная алгебра, теория рядов и многомерных интегралов);

  • три дисциплины из девяти несколько раз пригодились для решения краткосрочных задач (комбинаторика, корректирующие коды, теория вычислительного обучения);

  • одна из девяти дисциплин мне бы пригодилась, если бы у меня не было под руками Интернета (матричный анализ);

  • одна из девяти дисциплин мне пригодилась один раз (математическая экономика);

  • и одна из девяти дисциплин мне не пригодилась ни разу (действительный анализ).

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

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

Линейная алгебра: и пусть я мог обходиться без нё годами, сложно представить мою жизнь без неё и без матриц общего вида.

Теория рядов и многомерных интегралов: см. Дифференциальное и интегральное исчисления.

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

Корректирующие коды: если вам понадобились корректирующие коды, вам однозначно пригодятся корректирующие коды.

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

Действительный анализ: не могу вспомнить, где я его применял, но он полезен для понимания теории меры.

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

Математическая экономика: однажды она мне пригодилась, когда проблему решило применение множителей Лагранжа.

Итак, восемь из девяти дисциплин сослужили мне неплохую службу. Недурно.

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

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

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

В итоге я понял, что к выпадам в стиле «Да зачем программисту этот матан?» я отношусь гораздо спокойней, чем думал.

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

Перевод: Люся Ширшова. По мотивам поста Dan Luu


Читайте также: 

Рейтинг востребованности языков программирования

Не так важен код, как его рисуют

Записки по Дейкстре: Методология программирования