Нужна ли математика программисту?
13 февраля 2014 в 01:12

Нужна ли математика программисту?

Как-то Dan Luu, разработчик железа в Google (работал научным сотрудником в Университете Техаса и во многих исследовательских лабораториях) услышал фразу: "Зачем учить матан и линейную алгебру, если уже есть Вольфрам Альфа ".

Эти слова поначалу смутили Дэна — ведь он никогда не сожалел об изучении курса высшей математики в университете.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Оригинал поста Dan Luu

13165
Комментарии (16)
  • 13 февраля 2014 в 03:13 • #
    Николай Рябов
    А иногда оказывается, что проблемным местом оказывается функция, которую гораздо быстрее можно вычислить с помощью ряда Тейлора или метода Ньютона

    Точно. Любая понятная тебе итерация, а то и банальный перебор легко решаются современными процессорами в приемлемое время.
    Я работаю "по-идиотски": сначала придумываю свои алгоритмы, а потом узнаю, как должно быть на самом деле - просто нет времени изучать матчасть, хочется "потрогать" результат.
    Когда узнаю КАК надо, исправляю алгоритм, но чаще использую закон программиста - "работает код - и пусть работает..." Ну вычисляет моя программа оптимальные координаты не за десятимиллионную долю секунды, а за миллионную. В моей работе это не критично.
    Узнал как-то давно алгоритм попадания точки в полигон. Начал переделывать свой "новодел" . А там столько подводных камней для точной науки геодезии оказалось - нет, думаю, пусть все остается как есть.

  • 13 февраля 2014 в 09:06 • #
    Michael Rogachev

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

    Если заменить "программистом" на "кодером" - согласен на все 100. Сравнить два звуковых спектра, сделать оптимальный выбор товаров на складе... Много задач, которые надо еще умудриться закодировать.
    Хорошего всем настроения.

  • 13 февраля 2014 в 19:49 • #
    Игорь Олегович Цесельский

    Ну, слово программист в данном случае обобщающее.

  • 13 февраля 2014 в 23:00 • #
    Michael Rogachev

    Ну я понял, Игорь. Просто к словам немного цепляюсь :-)
    Вот есть у меня хорошая идея. А подступиться как - не знаю. И сижу локти кусаю - ведь я все это изучал когда-то, но не знал зачем. Теперь знаю "зачем" - но не изучаю математику.

  • 18 февраля 2014 в 10:09 • #
    Юрий Горбунов

    Математика учит логически мыслить. Физика - основам модельного мышления. Без этого невозможно работать со сложными системами (за простые уже не платят). В Индии создали систему массовой подготовки программистов - кодировщиков. И что? Без идейных лидеров разработок это стадо баранов. Солдаты без офицеров. Но и офицеры без солдат не армия.
    Как обычно, думайте сами, решайте сами кому что нужно...
    Природа любит эффективные компромиссы. Гармонию.

  • 18 февраля 2014 в 10:54 • #
    Борис Хакимов

    Работа ни о чем, почему?
    Потому, что окружающий нас Мир дуален. Отсюда любое утверждение и любое отрицание содержит долю истины. А вот где ее больше зависит от области применения (предметная область и т.д.). В некоторых областях можно проработать программистом всю жизнь и не знать основ линейной алгебры. В других нет. Приведу пример область разработки алгоритмов. Здесь области линейной алгебры, мат. анализа, мат. программирования - пересекаются, и только.
    Почему? Потому, что мат. прогр. - интеграция наук. Ведущую роль здесь играют ни матан, ни линейная алгебра. Например, одну из ведущих ролей здесь играет нейрофизиология, что многим может показаться странным...

  • 18 февраля 2014 в 14:14 • #
    Игорь Олегович Цесельский

    А что нейрофизиология обходится без математики?)

  • 18 февраля 2014 в 13:24 • #
    Дмитрий Неважно

    В том-то и есть разница между программистом и программистом-профессионалом. Один знает, как найти рациональное решение, уменьшить вес программы и оптимизировать, а другой знает только как написать не вникая в такие тонкости. Вспоминается Windows 95 на 45 Мбайт и Windows 7 на 16 Гбайт. Программы просто не оптимизированы, а сейчас ещё и компиляторы все переделывать надо из-за многоядерности процессоров. Так что учите математику, программисты.

  • 18 февраля 2014 в 18:32 • #
    Юрий Иванов

    Что характерно - ничего, в принципе, нового в "семёрке" и нет.. только прибамбасов куева хуча :-(
    Попробовал её и с тоской вспомнил 98-ые Винды.. больше глючит, чем они

  • 19 февраля 2014 в 22:39 • #
    Юрий Горбунов

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

  • 18 февраля 2014 в 14:12 • #
    Владимир Смоленцев

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

  • 19 февраля 2014 в 22:36 • #
    Юрий Горбунов

    Так мы обсуждаем программистов или системных аналитиков?

  • 27 февраля 2014 в 16:19 • #
    Владимир Смоленцев

    сори ... не понимаю вашего вопроса ... я всю жизнь программист , всю жизнь рядом со мной не было никаких системных аналитиков , я не знаю , но догадываюсь о ком идет речь! Скажу Вам так.... все выдающиеся программисты (себя я не включаю в это число) не знали и знать не желали (у Рихарда в секретах программирования Windows,целая глава этому посвящена) кто такие системные аналитики ... свой 4-х томник "Исскуство программирования" господин Кнут выпускал для программистов и никак иначе (и скажу точнее математику ,чтобы хотя бы понимать код данный в данном труде программист ОБЯЗАН)... в оглавлении об этом сказано черным по белому и если вдруг мир или страна рождает новую должность ... то суть не меняется мода и имидж ничто ...жажда -ВСЕ ! А как известно американцы законодатели моды в программировании , но отнюдь не все программирование следует моде ,даже в той же Америке .... и слава богу !

  • 27 февраля 2014 в 18:59 • #
    Юрий Горбунов

    Один мой коллега по поводу аналогичной позиции сказал: "Народ хочет программировать, а не думать". Я хотя у меня на полке семь томов Кнута (три еще первого советского издания), не считая других классиков программирования, я Вам сочувствую. Нет сегодня в стране разработок сложных программных систем. Поэтому нет и технологической культуры их создания. Так, сопровождение, настойка или ремесленные поделки...

    А что до системного анализа, то это не мода и не имидж, не жажда (ее удовлетворяют пивом). Это инструмент преодоление барьера сложности в программных технологиях. Похоже, об этом Вы и не слышали... Удел прагматиков в программировании так и остаться на всю жизнь на уровне хакеров... Например, Кнут прекрасно знал и использовал асимптотику Стирлинга или понятие производящих функций. А еще есть работы Ильи Пригожина, и даже целая терия сложных систем. Знакомы? У Вас математика соединилась в голове с алгоритмами? Или Вы просто кодировщик?

  • 28 февраля 2014 в 23:22 • #
    Владимир Смоленцев

    нет я акцентировал ваше внимание на математике в обьемах которые так же указал! Теория устойчивости по Ляпунову я так же не использую 8)))...Теории же сложных программных систем остается лишь теориями, я конечно же слышал о них, но мое мнение несколько отличается по моему от вашего ... я считаю что сложная система это система состоящая из идеальных кубиков ..., поэтому мой подход несколько отличается от вашего и это конечно не сложная система ... как порождение какими то аналитиками , оба подхода имеют право на жизнь ...а кто выживет покажет жизнь! Скажу лишь одно .... я уже выигрывал у программистов с комплексными решениями на базе Oracle ... простыми решениями на ADO ODBC Access , судьями были люди далекие о программирования 8) . Да и конечно я практик ... стараюсь участвовать во всех событиях особенно с достаточным интеллектуальным уровнем типа Google AI contest 8)!
    ... сейчас правда ушел в 144-х ядерные процессоры GA-144 ... приду не скоро ... в форумах редко так что прощаюсь!

  • 3 марта 2014 в 01:09 • #
    Юрий Горбунов

    Успехов. Никто не знает пути к новому знанию... А пробовать надо.


Выберите из списка
2019
2019
2018
2017
2016
2015
2014
2013
2012
2011
2010
2009
2008
1970