Математика и программирование: нужны ли они друг другу?
2014-01-16
Это пост-размышление Dan Luu, старшего разработчика в Google. Работал научным сотрудником в Университете Техаса и во многих исследовательских лабораториях.
Как-то он услышал фразу: «Зачем учить матан и линейную алгебру, если уже есть Вольфрам Альфа?». Эти слова поначалу повергли Дэна в ужас, ведь он никогда не сожалел о том курсе высшей математики, который изучил в университете.
Однако, когда первые эмоции сменились трезвым взглядом на вещи, Дэн задумался: а действительно, может ли знание высшей математики быть одним из главных критериев успешности в работе программиста? Может ли программист быть хорошим специалистом, не имея этих знаний?
Вот его мысли.
Проще вспомнить те случаи, когда мне пригодилась математика. Их гораздо меньше, чем тех, когда я обходился без неё. Если исключить мои должности, бывшие абсолютно математическими (где требовалось знание математики, информационных технологий и фемтосекундной оптики), и рассматривать только тот мой опыт, который не был напрямую связан с высшей математикой, можно получить вот что:
-
из девяти преподаваемых в университете математических дисциплин только три дисциплины я использовал постоянно (дифференциальное и интегральное исчисления, линейная алгебра, теория рядов и многомерных интегралов);
-
три дисциплины из девяти несколько раз пригодились для решения краткосрочных задач (комбинаторика, корректирующие коды, теория вычислительного обучения);
-
одна из девяти дисциплин мне бы пригодилась, если бы у меня не было под руками Интернета (матричный анализ);
-
одна из девяти дисциплин мне пригодилась один раз (математическая экономика);
-
и одна из девяти дисциплин мне не пригодилась ни разу (действительный анализ).
Можно рассмотреть подробней, какие из академических дисциплин я использовал в течение своей долгой службы на страже компьютерных технологий.
Дифференциальное и интегральное исчисления: абсолютно необходимы при работе с физическими явлениями и алгоритмами, связанными с физическим миром. А ещё один из моих самых эффектных фокусов ― это замена рядов Тэйлора (или другой приближающей функции) сложными функциями, где не очень высоки пределы ошибок и требуется высокая скорость.
Линейная алгебра: и пусть я мог обходиться без нё годами, сложно представить мою жизнь без неё и без матриц общего вида.
Теория рядов и многомерных интегралов: см. Дифференциальное и интегральное исчисления.
Комбинаторика: с её помощью можно произвести впечатление на людей на собеседовании, не более того. Максимум, для чего она мне пригодилась – помогла упростить кажущиеся сложными проблемы. Комбинаторные алгоритмы незаменимы.
Корректирующие коды: если вам понадобились корректирующие коды, вам однозначно пригодятся корректирующие коды.
Матричный анализ: с тех пор, как я закончил его изучение и наконец отыскал возможность применить его, прошло десять лет. Тем не менее, оно того стоило.
Действительный анализ: не могу вспомнить, где я его применял, но он полезен для понимания теории меры.
Теория вычислительного обучения: именно она является фундаментом для той интуиции, которая превращает сферу машинного обучения в алхимию.
Математическая экономика: однажды она мне пригодилась, когда проблему решило применение множителей Лагранжа.
Итак, восемь из девяти дисциплин сослужили мне неплохую службу. Недурно.
Был ли такой уклон в сторону использования математических алгоритмов обусловлен моим выбором компаний для работы? Ведь, как правило, меня к себе хотели как раз такие, весьма «математичные» компании, работающие на грани исследований и инженерии.
И я твёрдо верю, что нет, такое активное использование математических алгоритмов в моей работе не было следствием узкой направленности моей карьеры. Даже в сферах, достаточно удалённых от математики, зачастую приходится искать простое комбинаторное доказательство, которое покажет, что именно данное решение является оптимальным с высокой вероятностью. А иногда оказывается, что проблемным местом оказывается функция, которую гораздо быстрее можно вычислить с помощью ряда Тейлора или метода Ньютона.
Если посмотреть на мою карьеру, конечно, гораздо больше прикладной пользы мне принесло понимание архитектуры компьютера, а не высшей математики, но при этом я лично чертовски рад тому, что полюбил математику и работаю вместе с ней.
В итоге я понял, что к выпадам в стиле «Да зачем программисту этот матан?» я отношусь гораздо спокойней, чем думал.
Вывод таков: если вам нравится математика, вы можете заниматься ей всё свободное время; но если вашей целью не являются научные изыскания, а работа программистом ― математика для вас вряд ли станет лучшим выбором для изучения.
Перевод: Люся Ширшова. По мотивам поста Dan Luu.