Как правило, программисты, которые являются математиками или имеют математическое образование, очень хороши с точки зрения алгоритмов и компьютерного программирования в целом.
Что я не говорю:
Математика нужна, чтобы быть хорошим программистом. Математика необходима для программирования. Хорошие математики - хорошие программисты, и наоборот
Что я говорю
Я хотел бы выучить немного математики, потому что я верю, что это сделает меня лучшим программистом. Какие области / темы математики помогут мне стать лучшим программистом? Ответы в форме math topic - corresponding cs area
будут оценены.
NB: я спросил это на StackOverflow, где он был объявлен не по теме. Я хочу научиться этому в свободное время так же, как я занимался компьютерным программированием. Заранее спасибо.
источник
Ответы:
Итак, есть много областей математики, которые имеют отношение к науке о КС, но специально для программирования:
Теория графов : это большая. Графики и деревья есть везде. Сети, карты, дорожки в видеоиграх. Даже такие вещи, как решение кубика Рубика, могут быть смоделированы как графовый алгоритм и решены с помощью A *.
Дискретная математика : помимо теории графов, знание этой области в целом полезно. Он полон доказательств по индукции, которые очень полезны для понимания рекурсии, что очень полезно в программировании, особенно со структурами данных. Знание о множествах, подсчете, включении-исключении, булевой логике и т. Д. Может пригодиться время от времени.
Теория типов: неудивительно, что знание теории типов помогает в понимании программирования на типизированных языках и, в более широком смысле, в использовании типов в качестве средства обеспечения определенных свойств корректности. Знание теории подтипов поможет вам понять ковариацию и контравариантность в Java-подобных языках. Знание таких вещей, как параметрический полиморфизм, очевидно, полезно при изучении таких языков, как Haskell или Purescript, но такие языки, как Scala, TypeScript и Rust, становятся все более распространенными в промышленности, а типы лежат в их основе.
Если вы доведите это до крайности, вы получите такие вещи, как Coq, Agda и Idris, которые можно использовать для доказательства чрезвычайно точных свойств правильности программ.
Теория вычислимости и сложности : знание, когда проблема неразрешима или NP-сложна, полезна, потому что вы не будете тратить часы, ломая свой мозг для быстрого способа сделать это. Аналогичным образом, знание некоторых теорий, лежащих в основе алгоритмов аппроксимации, управляемости с фиксированными параметрами или экспоненциальных алгоритмов с низким основанием, может помочь, когда вам действительно необходимо решить NP-сложную задачу.
Теория автоматов: многие проблемы могут быть смоделированы с помощью различных конечных автоматов, поэтому полезно понимать их свойства.
Есть также некоторые области для конкретных областей:
Статистика: Если вы занимаетесь машинным обучением или изучаете большие данные, это обязательно.
Линейная алгебра / векторный калькулятор : оба они важны для машинного обучения, графики, моделирования или обработки изображений / аудио.
Теория решеток : если вы выполняете какую-либо работу с компиляторами или с оптимизацией программы, эта проблема возникает постоянно. Фиксированные точки везде!
Теория категорий: не нужно кодировать, но полезно для всего, что глубоко пропитано теорией типов.
Редактировать: не могу поверить, что я забыл:
источник