Математичні теми чи сфери, що підвищують знання комп'ютерного програмування? [зачинено]


14

Взагалі комп'ютерні програмісти, які є математиками або мають математичний досвід, дуже гарні з точки зору алгоритмів та комп'ютерного програмування взагалі.

Що я не кажу:

Математика потрібна, щоб бути хорошим комп'ютерним програмістом. Математика необхідна для програмування. Хороші математики - хороші програмісти і навпаки

Що я кажу

Я хотів би навчитися математиці, тому що я вірю, що це зробить мене кращим програмістом. Які області / теми математики допоможуть мені стати кращим програмістом? Відповіді форми math topic - corresponding cs areaбудуть вдячні.

NB: Я запитав це в StackOverflow, де це було оголошено поза темою. Я хочу навчитися цьому у вільний час так само, як я займався з комп'ютерним програмуванням. Заздалегідь спасибі.


1
Я здивований, що StackOverflow заявив, що це питання поза темою. З моєї точки зору (програмованого програміста), це питання повинно бути одним із найважливіших питань для ПС.
scaaahu

1
StackOverflow розповідає про конкретні проблеми програмування. Це було б найкраще в CSEducators, і, можливо, він працював над SoftwareEngineering.
Нат

1
У нас були подібні питання раніше, і всі вони мають однакову проблему: вони занадто широкі і занадто суб'єктивні. Єдина консенсусна відповідь: все це .
Рафаель

@Raphael По-перше, я поважаю рішення Мода. Однак я хотів би поставити запитання від імені ОП. Чи варто вдосконалити питання, щоб його можна було знову відкрити? Якщо немає можливості її покращити, чи може інша ДП ОП може поставити це питання? (Очевидно, що ОП вже пробував ТА, і я знаю, що він може не підходити для Academia SE, тому що він не тісно пов'язаний з Academia.)
scaaahu

Питання, які задають формальне вирішення конкретних проблем, було б добре. Питання з питань вивчення, як правило, не підходять для формату SE; тісна причина "на основі думки" стосується всіх сайтів!
Рафаель

Відповіді:


19

Отже, існує багато областей математики, які стосуються Science CS, але конкретно для програмування:

  • Теорія графіків : це велика. Графіки та дерева є скрізь. Мережі, карти, шляхи у відеоіграх. Навіть такі речі, як розв’язання куба Рубікса, можна моделювати як алгоритм графіка та вирішувати за допомогою A *.

  • Дискретна математика : окрім теорії графів, знання цієї області загалом корисно. Він повний доказів за допомогою індукції, які дуже корисні для розуміння рекурсії, що дуже корисно в програмуванні, особливо зі структурами даних. Знання про множини, підрахунок, включення-виключення, булева логіка тощо може стати в нагоді раз у раз.

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

    Якщо ви сприймаєте цю крайню межу, ви отримуєте такі речі, як Coq, Agda та Idris, які можна використовувати для доведення надзвичайно точних властивостей правильності програм.

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

  • Теорія автоматів: багато проблем можна моделювати за допомогою різних державних машин, тому розуміння їх властивостей корисно.

Існують також деякі сфери, характерні для різних галузей:

  • Статистика: Якщо ви займаєтесь машинним навчанням або великими даними, це обов'язково.

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

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

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

Редагувати: не вірю, я забув:

  • Криптографія : якщо ви зацікавлені в безпеці, хешировании, цифрових підписах тощо, то переконайтеся, що ви вивчите деяку теорію чисел, теорію груп, теорію поля, теорію еліптичної кривої тощо.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.