План такой:
use-case когда математика нужна (для затравки)
почему математика почти всегда не нужна (и что нужно)
если нужна математика, то что наиболее часто
теория графов, что типовое нужно
Поехали.
- В принципе некоторые разделы Software Engineering проще переоткрыть (и немного доделать напильником) самому, чем штудировать мануалы (в которых часто "за деревьями леса не видно"
В системном программировании (чаще многопоточном) периодически возникают всякие хм… "микро-алгебры": вот если мы делаем такие операции с такими ограничениями - это условие всегда выполняется => ошибки нет.
Но это довольно специфичная область + специфичные условия:
- вы должны работать в системном программировании
- вы долж быть на уже вполне приличной позиции
- совсем стандартные решения должны не подойти
- В подавляющем большинстве случаев программисту математика не нужна.
Нужно именно "ремесленное умение программировать" + "знание предметной области".
Периодически нужно Computer Science (которое по-моему мнению уже не математика - как физика и химия в 17 веке это уже не натурфилософия)
Довольно редко нужна именно математика.
- Если нужна всё-таки математика, то что нужно:
- формальная логика (есть в Computer Science)
- формальные языки (есть в CS как бы не продвинутее math)
- основы статистики (как делать не надо - полезно когда начинаешь измерять производительность системы, чтобы избежать ошибок)
- теория графов - тут, наверное надо остановться поподробнее
- Теория графов, что нужно.
Вообще программа живёт в 2х измерениях:
- а) текст программы
- б) state программы: эволюция состояния программы во времени (иногда делят на б) эволюция одного потока \ в) эволюция многопоточной программы)
И вот нас обычно интересует вопрос: "какими свойствами должен обладать текст программы, чтобы state программы был хорошим"?
Ну например: если у нас есть множество упорядоченных блокировок и блокировки в одном потоке берутся в отношении порядка => в многопоточной программе не может возникнуть deadlock (рассматривается структура программы WaitForGraph => Resource Wait Graph => подкраф одного потока => (подграф одого потока обладает свойством => deadlock невозможен)).