Отже, існує багато областей математики, які стосуються Science CS, але конкретно для програмування:
Теорія графіків : це велика. Графіки та дерева є скрізь. Мережі, карти, шляхи у відеоіграх. Навіть такі речі, як розв’язання куба Рубікса, можна моделювати як алгоритм графіка та вирішувати за допомогою A *.
Дискретна математика : окрім теорії графів, знання цієї області загалом корисно. Він повний доказів за допомогою індукції, які дуже корисні для розуміння рекурсії, що дуже корисно в програмуванні, особливо зі структурами даних. Знання про множини, підрахунок, включення-виключення, булева логіка тощо може стати в нагоді раз у раз.
Теорія типів: не дивно, що знання теорії типів допомагає зрозуміти програмування в набраних мовах, і в більш широкому сенсі, з використанням типів як способу забезпечення певних властивостей правильності. Знання про теорію субтипізації допомагає зрозуміти коваріацію та протиріччя в мовах, подібних до Java. Знання про такі речі, як параметричний поліморфізм, очевидно, корисне при вивченні такої важкої мови, як Haskell або Purescript, але такі мови, як Scala, TypeScript і Rust, набувають все більшого поширення в промисловості, а типи - в їхніх ядрах.
Якщо ви сприймаєте цю крайню межу, ви отримуєте такі речі, як Coq, Agda та Idris, які можна використовувати для доведення надзвичайно точних властивостей правильності програм.
Теорія обчислюваності та складності : корисно знати, коли проблема є нерозв'язною або важкою для NP, тому що ви не витратите години на обробку мозку, щоб швидко це зробити. Аналогічно, знання деяких теорій, що стоять за алгоритмами наближення, простежуваність фіксованих параметрів або низькоосновні експоненціальні алгоритми, може допомогти, коли вам справді потрібно вирішити важку проблему з NP.
Теорія автоматів: багато проблем можна моделювати за допомогою різних державних машин, тому розуміння їх властивостей корисно.