Математические темы или области, которые повышают уровень компьютерного программирования? [закрыто]

14

Как правило, программисты, которые являются математиками или имеют математическое образование, очень хороши с точки зрения алгоритмов и компьютерного программирования в целом.

Что я не говорю:

Математика нужна, чтобы быть хорошим программистом. Математика необходима для программирования. Хорошие математики - хорошие программисты, и наоборот

Что я говорю

Я хотел бы выучить немного математики, потому что я верю, что это сделает меня лучшим программистом. Какие области / темы математики помогут мне стать лучшим программистом? Ответы в форме math topic - corresponding cs areaбудут оценены.

NB: я спросил это на StackOverflow, где он был объявлен не по теме. Я хочу научиться этому в свободное время так же, как я занимался компьютерным программированием. Заранее спасибо.

Charitoo
источник
1
Я удивлен, что StackOverflow объявил, что этот вопрос не по теме. С моей точки зрения (ушедшего в отставку программиста), этот вопрос должен быть одним из самых важных вопросов для SO.
scaaahu
1
StackOverflow действительно больше о конкретных проблемах программирования. Это было бы лучше всего для CSEducators, и, возможно, работало на SoftwareEngineering.
Nat
1
У нас были такие вопросы раньше, и у них у всех одна и та же проблема: они слишком широкие и слишком субъективные. Единственный единодушный ответ: все это .
Рафаэль
@ Рафаэль Во-первых, я уважаю решение Мода. Однако я хотел бы задать вопрос от имени ФП. Есть ли способ улучшить вопрос, чтобы его можно было вновь открыть? Если нет способа улучшить его, есть ли другой SE, который OP может пойти, чтобы задать этот вопрос? (Очевидно, что OP уже пробовал SO, и я знаю, что он может не подходить для Academia SE, потому что он не тесно связан с Academia.)
scaaahu
Вопросы, которые требуют формального решения конкретных проблем, будут в порядке. Вопросы с рекомендациями по изучению обычно не подходят для формата SE; «основанная на мнении» близкая причина относится ко всем сайтам!
Рафаэль

Ответы:

19

Итак, есть много областей математики, которые имеют отношение к науке о КС, но специально для программирования:

  • Теория графов : это большая. Графики и деревья есть везде. Сети, карты, дорожки в видеоиграх. Даже такие вещи, как решение кубика Рубика, могут быть смоделированы как графовый алгоритм и решены с помощью A *.

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

  • Теория типов: неудивительно, что знание теории типов помогает в понимании программирования на типизированных языках и, в более широком смысле, в использовании типов в качестве средства обеспечения определенных свойств корректности. Знание теории подтипов поможет вам понять ковариацию и контравариантность в Java-подобных языках. Знание таких вещей, как параметрический полиморфизм, очевидно, полезно при изучении таких языков, как Haskell или Purescript, но такие языки, как Scala, TypeScript и Rust, становятся все более распространенными в промышленности, а типы лежат в их основе.

    Если вы доведите это до крайности, вы получите такие вещи, как Coq, Agda и Idris, которые можно использовать для доказательства чрезвычайно точных свойств правильности программ.

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

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

Есть также некоторые области для конкретных областей:

  • Статистика: Если вы занимаетесь машинным обучением или изучаете большие данные, это обязательно.

  • Линейная алгебра / векторный калькулятор : оба они важны для машинного обучения, графики, моделирования или обработки изображений / аудио.

  • Теория решеток : если вы выполняете какую-либо работу с компиляторами или с оптимизацией программы, эта проблема возникает постоянно. Фиксированные точки везде!

  • Теория категорий: не нужно кодировать, но полезно для всего, что глубоко пропитано теорией типов.

Редактировать: не могу поверить, что я забыл:

  • Криптография : если вы интересуетесь безопасностью, хэшированием, цифровыми подписями и тому подобным, обязательно изучите теорию чисел, теорию групп, теорию поля, теорию эллиптических кривых и т. Д.
jmite
источник