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 area
bę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ę.
źródło
Odpowiedzi:
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:
źródło