Tematy lub dziedziny matematyki, które zwiększają biegłość programowania komputerowego? [Zamknięte]


14

Zasadniczo programiści komputerowi, którzy są matematykami lub mają wykształcenie matematyczne, są bardzo dobrzy pod względem algorytmów i ogólnie programowania komputerowego.

Czego nie mówię:

Matematyka jest niezbędna, aby być dobrym programistą komputerowym. Matematyka jest niezbędna do programowania. Dobrzy matematycy są dobrymi programistami i vice versa

Co mówię

Chciałbym nauczyć się matematyki, ponieważ uważam, że uczyni mnie to lepszym programistą. Jakie obszary / tematy matematyki pomogą mi zostać lepszym programistą? Odpowiedzi z formularza math topic - corresponding cs areabędą mile widziane.

NB: Zapytałem o to na StackOverflow, gdzie zostało to uznane za nie na temat. Chcę się tego uczyć w wolnym czasie, tak jak robię to z programowaniem komputerowym. Z góry dziękuję.


1
Dziwi mnie, że StackOverflow zadeklarowało, że to pytanie jest nie na temat. Z mojego punktu widzenia (emerytowanego programisty) to pytanie powinno być jednym z najważniejszych pytań dla SO.
scaaahu

1
StackOverflow naprawdę więcej na temat konkretnych problemów programistycznych. Najlepiej byłoby to w CSEducators, a być może pracował w SoftwareEngineering.
Nat

1
Wcześniej mieliśmy takie pytania i wszystkie mają ten sam problem: są zbyt szerokie i zbyt subiektywne. Jedyną zgodną odpowiedzią jest: wszystko .
Raphael

@Raphael Po pierwsze, szanuję decyzję Mod. Chciałbym jednak zadać pytanie w imieniu PO. Czy istnieje sposób na poprawienie pytania, aby można je było ponownie otworzyć? Jeśli nie ma sposobu, aby to poprawić, czy jest jakaś inna SE, OP może zadać to pytanie? (Oczywiście, OP już próbował SO i wiem, że może nie pasować do Academia SE, ponieważ nie jest ściśle związany z Academia.)
scaaahu

Pytania, które wymagają formalnych rozwiązań konkretnych problemów, byłyby w porządku. Pytania dotyczące porady na temat nauki są zasadniczo nieodpowiednie dla formatu SE; „oparty na opiniach” ścisły powód dotyczy wszystkich stron!
Raphael

Odpowiedzi:


19

Tak więc istnieje wiele dziedzin matematyki, które są istotne dla nauki o CS, ale konkretnie w programowaniu:

  • Teoria grafów : ta jest duża. Wykresy i drzewa są wszędzie. Sieci, mapy, ścieżki w grach wideo. Nawet rzeczy takie jak rozwiązywanie kostki Rubika można modelować jako algorytm graficzny i rozwiązywać za pomocą A *.

  • Dyskretna matematyka : oprócz teorii grafów pomocna jest znajomość tego obszaru. Jest pełen dowodów indukcyjnych, które są bardzo przydatne do zrozumienia rekurencji, co jest bardzo przydatne w programowaniu, szczególnie w przypadku struktur danych. Znajomość zestawów, liczenia, wykluczania włączenia, logiki logicznej itp. Może się przydać raz na jakiś czas.

  • Teoria typów: nic dziwnego, że znajomość teorii typów pomaga w zrozumieniu programowania w językach pisanych na maszynie, a szerzej, w stosowaniu typów jako sposobu zapewnienia określonych właściwości poprawności. Znajomość teorii podtypów pomaga zrozumieć kowariancję i kontrawariancję w językach podobnych do Java. Wiedza o takich rzeczach, jak polimorfizm parametryczny jest oczywiście pomocna podczas nauki języka z dużymi czcionkami, takiego jak Haskell lub Purescript, ale języki, takie jak Scala, TypeScript i Rust, stają się coraz bardziej popularne w branży, a typy leżą u podstaw.

    Jeśli doprowadzisz ten skrajności do końca, otrzymasz takie rzeczy, jak Coq, Agda i Idris, których można użyć do udowodnienia niezwykle precyzyjnych właściwości poprawności programów.

  • Teoria obliczalności i złożoności : wiedza, kiedy problem jest nierozwiązywalny lub trudny do rozwiązania, jest przydatna, ponieważ nie będziesz marnować godzin na marnowanie mózgu na szybki sposób, aby to zrobić. Podobnie znajomość teorii leżącej u podstaw algorytmów aproksymacyjnych, ciągliwości parametrów o ustalonych parametrach lub algorytmów wykładniczych o niskiej podstawie może pomóc, gdy naprawdę trzeba rozwiązać problem trudny dla NP.

  • Teoria automatów: wiele problemów można modelować za pomocą różnych automatów stanów, więc zrozumienie ich właściwości jest przydatne.

Istnieją również obszary specyficzne dla danej dziedziny:

  • Statystyka: jeśli korzystasz z uczenia maszynowego lub dużych zbiorów danych, jest to koniecznością.

  • Algebra liniowa / wektor oblicz : oba są ważne dla uczenia maszynowego, grafiki, symulacji lub przetwarzania obrazu / dźwięku.

  • Teoria krat : jeśli pracujesz z kompilatorami lub optymalizacją programu, ta pojawia się cały czas. Naprawiono punkty wszędzie!

  • Teoria kategorii: niepotrzebna do kodowania, ale przydatna do wszystkiego, co jest głęboko przesiąknięte teorią typów.

Edycja: nie mogę uwierzyć, że zapomniałem:

  • Kryptografia : jeśli interesujesz się bezpieczeństwem, mieszaniem, podpisami cyfrowymi itp., Zapoznaj się z teorią liczb, teorią grupy, teorią pola, teorią krzywej eliptycznej itp.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.