Czy matematyka jest potrzebna do programowania? [Zamknięte]

117

Zdarzyło mi się debatować z przyjacielem podczas studiów, czy zaawansowana matematyka jest niezbędna dla każdego doświadczonego programisty. Zwykł zaciekle argumentować przeciwko temu. Powiedział, że programiści potrzebują tylko podstawowej wiedzy matematycznej z matematyki w szkole średniej lub na pierwszym roku studiów, ni mniej, ni więcej, i że prawie wszystkie zadania programistyczne można wykonać nawet bez zaawansowanej matematyki. Twierdził jednak, że algorytmy są fundamentalnym i niezbędnym atutem dla programistów.

Moje stanowisko było takie, że wszystkie postępy w informatyce zależą prawie wyłącznie od postępów w matematyce, a zatem gruntowna znajomość matematyki bardzo pomogłaby programistom w pracy nad trudnymi problemami w świecie rzeczywistym.

Nadal nie mogę ustalić, która strona argumentów jest poprawna. Czy mógłbyś opowiedzieć nam swoje stanowisko na podstawie własnego doświadczenia?

simsim
źródło
7
Dziesięć lat później zadzwoniłem do swojego nauczyciela matematyki hs, żeby mu powiedzieć, że w całej swojej karierze nigdy nie korzystałem z matematyki na poziomie zaawansowanym. Dick się porusza, wiem, ale świetne pytanie! Plus jeden.
Chris McCall
Zobacz najwyżej głosowaną odpowiedź na to pytanie .
Boris Stitnicky
Zamiast. Zamknij, to powinno zostać przeniesione do programistów.
Chris Cudmore

Odpowiedzi:

111

Aby odpowiedzieć na zadane pytanie, musiałbym powiedzieć: „Nie, matematyka nie jest konieczna do programowania”. Jednak, jak sugerowali inni ludzie w tym wątku, uważam, że istnieje korelacja między rozumieniem matematyki a umiejętnością „myślenia algorytmicznego”. To znaczy móc myśleć abstrakcyjnie o ilości, procesach, związkach i dowodach.

Zacząłem programować, kiedy miałem około 9 lat i trudno byłoby powiedzieć, że na tym etapie nauczyłem się dużo matematyki. Jednak przy odrobinie wysiłku byłem w stanie zrozumieć zmienne, pętle, instrukcje goto (wybacz mi, byłem Vic 20 BASIC i nie czytałem jeszcze żadnego Dijkstry) i podstawową geometrię współrzędnych, aby umieścić grafikę na ekranie .

Ostatecznie ukończyłem z wyróżnieniem stopień z czystej matematyki z maturą informatyki. Chociaż skupiałem się głównie na analizie, studiowałem także sporo dyskretnej matematyki, teorii liczb, logiki i teorii obliczalności. Oprócz możliwości zastosowania kilku pomysłów ze statystyki, teorii prawdopodobieństwa, analizy wektorów i algebry liniowej do programowania, studiowałem niewiele matematyki, która miała bezpośrednie zastosowanie do mojego programowania na studiach licencjackich oraz programowania komercyjnego i badawczego, które zrobiłem później.

Jestem jednak głęboko przekonany, że formalne metody myślenia, których wymaga matematyka - staranne rozumowanie, poszukiwanie kontrprzykładów, budowanie podstaw aksjomatycznych, dostrzeganie powiązań między pojęciami - były ogromną pomocą, gdy zajmowałem się dużymi i złożonymi projektami programistycznymi.

Rozważ sposób, w jaki sportowcy trenują do swojego sportu. Na przykład piłkarze bez wątpienia spędzają większość czasu treningowego na podstawowych umiejętnościach piłkarskich. Jednak, aby poprawić swoją ogólną sprawność, mogą również spędzać czas na siłowni na rowerze lub wiosłowaniu, ćwicząc ciężary itp.

Studiowanie matematyki można przyrównać do treningu siłowego lub treningu przekrojowego, aby poprawić swoją siłę psychiczną i wytrzymałość do programowania. Ćwiczenie podstawowych umiejętności programowania jest absolutnie niezbędne, ale studiowanie matematyki to niesamowity trening umysłowy, który poprawia podstawowe zdolności analityczne.

Mark Reid
źródło
6
Dodam, że matematyka to nie tylko trening siłowy dla Twojej siły psychicznej, ale także otwiera drzwi do nowych problemów i rozwiązań. Na przykład podczas mojego stażu w przetwarzaniu obrazu nie ma możliwości zaimplementowania naszych algorytmów usuwania szumów bez dokładnego zrozumienia PDE. Wynikowy kod był prosty, ale bardzo precyzyjny. A matematyka nas tam doprowadziła. Jeszcze bardziej niesamowite jest piękno tych formuł. Jedno małe wyrażenie PDE można przetłumaczyć na kilka stron kodu. Bez wstępnej formuły trudno wyobrazić sobie, jak to się kiedykolwiek skończy.
Joe
Matematyka nie jest potrzebna do programowania, ponieważ programowanie to matematyka. Może to być dobra matematyka lub zła matematyka (na przykład, gdy długie wywołanie orangutana jest transliterowane na język Ook ), ale ilekroć programista projektuje jakiś model obiektowy, ze (zwykle nieświadomie) wykonuje czynność matematyczną. Więc znowu, nie trzeba czytać książek matematycznych, żeby programować, ale to nic nie zmienia w fakcie, że programowanie jest matematyką i że (jak to ujął Euclid), nie ma do tego królewskiej drogi.
Boris Stitnicky
56

Podczas gdy zaawansowana matematyka może nie być wymagana do programowania (chyba że programujesz zaawansowane możliwości matematyczne), proces myślowy programowania i matematyki jest bardzo podobny. Zaczynasz od podstawy znanych rzeczy (aksjomaty, wcześniej sprawdzone teorie) i próbujesz dostać się w nowe miejsce. Nie możesz pominąć kroków. Jeśli pominiesz kroki, musisz wypełnić puste miejsca. To krytyczny proces myślowy, który sprawia, że ​​te dwie rzeczy są niesamowicie podobne.

Ponadto matematycy i programiści myślą krytycznie w sposób abstrakcyjny. Rzeczy ze świata rzeczywistego są reprezentowane przez obiekty i zmienne. Umiejętność tłumaczenia z konkretu na abstrakcję również łączy te dwie dziedziny.

Jest bardzo duża szansa, że ​​jeśli jesteś dobry w jednym, prawdopodobnie będziesz dobry w drugim.

Jarrett Meyer
źródło
Można więc powiedzieć, że ktoś, kto rozwiązuje wiele krzyżówek lub gra w Scrabble, jest bardziej skłonny do programowania niż ktoś, kto tego nie robi. Wydaje się, że związek dotyczy raczej prawdopodobieństwa niż ścisłej zależności.
Liam
Rygorystyczność i dyscyplina rozwiązywania problemów matematycznych przekłada się na programowanie. Musisz umieć zdekonstruować problem i podejść do niego najpierw z oczywistego kierunku, a następnie z bardziej kreatywnych kierunków w obu dyscyplinach.
Bramha Ghosh
4
Dwaj świetni programiści, których bardzo podziwiam, nie studiowali informatyki, ale przeszli szkolenie matematyczne i po prostu zmienili ścieżki kariery: Miguel de Icaza i Alexander Stepanov. Nawiasem mówiąc, Stepanov stwierdził kiedyś, że podczas pracy na matematyce „ty nie zaczynaj z aksjomatów: ty kończą się z aksjomatów”. : D
Joe Pineda
@Liam - Chodzi o dopasowywanie wzorców i żonglowanie rzeczami w pamięci w krótkim okresie. Obie czynności wymagają tych umiejętności.
jcolebrand,
+1 za „Jest bardzo duża szansa, że ​​jeśli jesteś dobry w jednym, prawdopodobnie będziesz dobry w drugim”.
Thorbjørn Ravn Andersen
39

informatyka! = programowanie

OK, poważnie, znam dobrych i złych programistów, którzy studiowali angielski i psychologię, a niektórzy byli na kierunkach informatyka. Niektórzy bardzo znani faceci, których podziwiam jako programiści, nie mieli przygotowania CS. Na przykład Larry Wall (Perl) był lingwistą. Z drugiej strony warto wiedzieć coś o domenie, nad którą pracujesz, ponieważ wtedy możesz przynajmniej sprawdzić, czy Twoje dane mają sens i pomóc klientowi / użytkownikom dotrzeć do tego, czego naprawdę chcą. I tak, istnieje problem złożoności obliczeniowej i wydajnych struktur danych oraz poprawności programu. Tych rzeczy uczysz się w informatyce i jest to przydatne w prawie każdej dziedzinie, ale nie jest to ani konieczne, ani wystarczające.

Davida Nehme
źródło
12
Myślę, że najlepszym cytatem, jaki słyszałem, jest: „Informatyka to nie bardziej komputery niż astronomia.” (Dijkstra)
tloach
5
Myślę, że stackoverflow.com został stworzony głównie po to, aby przezwyciężyć ten jednoliniowy typ odpowiedzi, ale jest 15 podobnie myślących osób, które podniosły tę bezużyteczną odpowiedź na szczyt. Nie mam do Ciebie nic osobistego, jednak oznaczyłem Twoją odpowiedź jako „obraźliwą”. Tak przynajmniej dla mnie.
simsim
2
@simsim: Uważam za obraźliwe, że ludzie myślą, że studia informatyczne są w jakiś sposób związane z programowaniem.
tloach
3
@simsim: Nie ma znaczenia, co Joel i Jeff mieli na myśli, kiedy tworzyli tę witrynę. Chodzi o stworzenie społeczności, w której programiści pomagają sobie nawzajem. Myślę, że krótka odpowiedź Davida jest trafna. +1
Scottie T
@ Scottie: gdyby chodziło o „stworzenie społeczności, w której programiści pomagają sobie nawzajem”, wystarczyłyby fora i listy mailingowe. Być może moja odpowiedź była nieco szorstka, ale zaskakujące było to, że 15 użytkowników głosowało za całkowicie nieświadomą „odpowiedzią”, no cóż, przed edycją, oczywiście. :-)
simsim
29

Myślę, że będę pierwszą osobą, która powie, że potrzebujesz matematyki. Jak powiedzieli inni, matematyka nie jest aż tak ważna dla niektórych aspektów rozwoju, ale bardzo ważne są podstawy krytycznego myślenia i ustrukturyzowanej analizy.

Co więcej, matematyka jest ważna dla zrozumienia wielu podstaw, które dotyczą takich rzeczy, jak harmonogramy, optymalizacje, sortowanie, zarządzanie protokołami i wiele innych aspektów komputerów. Chociaż matematyka na poziomie obliczeń nie jest złożona (jest to głównie algebra licealna), teorie i zastosowania mogą być dość złożone, ponieważ solidne zrozumienie matematyki za pomocą rachunku różniczkowego będzie bardzo korzystne.

Czy możesz się bez tego obejść, absolutnie i nie powinieneś pozwolić, aby mniej dogłębna znajomość matematyki cię powstrzymywała, ale gdybyś miał szansę lub skłonność, bym uczył się jak najwięcej matematyki, rachunku różniczkowego, teorii numerycznej, liniowej algebra, kombinatoryka, zastosowania praktyczne, wszystko to ma zarówno praktyczne, jak i teoretyczne zastosowania w szerokim zakresie informatyki.

Znałem ludzi, którzy odnieśli wielkie sukcesy po obu stronach płotu (ci bez silnego nacisku na matematykę i ci, którzy chodzili do szkoły na fizykę lub matematykę), ale w obu grupach lubili problemy numeryczne i uczenie się algorytmów i teorii matematyki .

GrayWizardx
źródło
Popieram to. Choć można się bez tego obejść - czy można żałować swojej decyzji? Jeśli spodziewasz się nawet średnio ekscytującej / wymagającej pracy, zdobyte umiejętności matematyczne z pewnością Ci pomogą.
Andras Vass
Słusznie! GrayWizardx i inni: Co radzisz jako osoba ucząca się samodzielnie, jeśli chodzi o materiały do ​​czytania? Ogromnie odstraszył mnie morderczo zły sposób, w jaki uczono mnie matematyki, gdy byłem młodszy. Nie chcę obwiniać gdzie indziej, ale matematyka została przedstawiona złośliwie. Teraz czas na odkupienie. Jak ŁATWE jest samodzielne nauczenie się przedstawionych tu matematyki (rachunek różniczkowy, algebra liniowa, matematyka dyskretna itp.)? Czy istnieje konkretny zestaw podręczników zalecany do tego podejścia? Dyplom uczelni już nie wchodzi w grę!
Emmel
1
@Emmel, faktycznie widziałem „The Manga guide to Math” i „The Manga guide to Calculus” w Barnes and Noble, i wiem, że widziałem „Kompletny przewodnik idiotów po algebrze liniowej”. Jeśli chodzi o rzeczywiste zasoby, kiedyś istniały świetne strony matematyczne (dla studentów itp.), Ale nie jestem pewien, ile z nich nadal jest dostępnych. Jedną z rzeczy, które robię od czasu do czasu, jest uczęszczanie do szkoły średniej i „audytowanie” zajęć z matematyki (przyjmuj to jako zaliczenie / niezaliczenie) i po prostu dostaję odświeżenie. Nie zrobił tego w ciągu 5-6 lat, ale ostatnim razem było to całkiem pomocne.
GrayWizardx
26

Mam dyplom z matematyki, ale nie przypominam sobie, żebym wymagał tej matematyki tylko raz w mojej karierze. Było to przydatne, jeśli chodzi o ćwiczenie mojego umysłu w logicznym myśleniu, ale nie napisałem żadnego kodu wykorzystującego dynamikę płynów, teorię kwantową ani łańcuchy Markowa. (Podejrzewam, że najbardziej prawdopodobne jest pojawienie się tego ostatniego).

Większość programistów branżowych nie potrzebuje przez większość czasu zaawansowanych matematyki. Czasami znajomość trygonometrii może pomóc, a na pewno umiejętność zrozumienia wystarczającej liczby matematyki do implementacji algorytmów opisanych matematycznie może być ważna - ale poza tym? Nie.

Nie zapominaj, że większość programistów nie robi postępów w informatyce - tworzą aplikacje. Nie muszę znać zaawansowanej inżynierii, aby prowadzić nowoczesny samochód, chociaż ten samochód prawie na pewno został ulepszony dzięki zaawansowanej inżynierii.

Jon Skeet
źródło
Zgadzam się z większością tego, co powiedziałeś, ale czy nie można powiedzieć, że wiele aspektów programowania może być znacznie łatwiejszych dzięki zrozumieniu powszechnych zasad matematycznych? Czasami wzór na coś jest o wiele łatwiejszy do zaprogramowania niż algorytm, aby osiągnąć tę samą wartość ... o ile znasz tę formułę
BenAlabaster,
@balabaster: Czasami - ale powiedziałbym, że nie zdarza się to zbyt często. Podobnie, nie musisz wcześniej znać wzoru, aby go użyć. Jako kompetentny w matematyce jest dobry, więc można zrozumieć formuły, kiedy je zobaczyć, ale rzadko potrzebne stopień poziomu matematyki sama IMO.
Jon Skeet
11
Stopień matematyki? Wtedy wiesz, że to nie tylko liczby. Mam dwa stopnie matematyczne i często korzystam z treści: algebra boolowska do analizowania / upraszczania logiki, automaty / teoria języka do budowy DSL, algebra do analizy wydajności big-O itp.
joel.neely
14

Twierdzę, że posiadanie zaawansowanej logiki (dyskretnej) matematyki może naprawdę pomóc. To razem z teorią mnogości. Te dyscypliny mogą bardzo pomóc w przypadku typowych programów komputerowych. Jednak wiele innych matematyki, którą uczyłem się na uniwersytecie, to rachunek różniczkowy, który, o ile widzę, miał bardzo ograniczone zastosowanie. Ponieważ 90% (lub coś w tym rodzaju) programowania polega na tworzeniu aplikacji biznesowych z bardzo prostą matematyką, powiedziałbym, że w większości można sobie poradzić z bardzo małą wiedzą matematyczną. Jednak dobre zrozumienie algebry boolowskiej, logiki, matematyki dyskretnej i teorii mnogości może naprawdę wynieść Cię na wyższy poziom.

Kibbee
źródło
14

Pójdę tutaj pod prąd i powiem „Tak”

Przechodzę z inżynierii lądowej na programowanie (Concrete Sucks!). Moje wykształcenie matematyczne składa się ze zwykłych zajęć z pierwszego roku, drugiego i trzeciego roku Rachunku (Diff EQ, całkowanie objętości, szeregów, transformacji Fouriera i Laplace'a) oraz kursu analizy numerycznej.

Uważam, że mojej matematyce niewiarygodnie brakuje programowania komputerowego. Brakuje mi całych obszarów dyskretnej matematyki i logiki, a przetrwam tylko dzięki obszernej bibliotece podręczników, Wikipedii i Wolframa. Większość zaawansowanych algorytmów opiera się na zaawansowanej matematyce i nie jestem w stanie opracować zaawansowanych algorytmów bez przeprowadzania rozległych badań (w zasadzie odpowiednik pół kursu). Z pewnością nie jestem w stanie wymyślić NOWYCH algorytmów, ponieważ po prostu nie wiem nie ma matematycznych podstaw, jak ramiona gigantów, na których można stanąć.

Chris Cudmore
źródło
Ile podstawowych algorytmów tak naprawdę pisze przeciętny programista? Przypuszczam, że 80% prac programistycznych nie obejmuje matematyki poza podstawową algebrą.
dbkk
@dbkk: Najczęstszym zadaniem przeciętnego programisty jest projektowanie modelu obiektowego, „logiki biznesowej” jakiejś domeny. A taki proces to nic innego jak matematyka, choć nie jest to powszechnie odzwierciedlane przez tych, którzy wykonują zadanie.
Boris Stitnicky
14

To zależy od tego, co robisz. Jeśli dużo zajmujesz się programowaniem 3D, znajomość geometrii 3D jest z pewnością niezbędna, prawda? ;-) Jeśli chcesz utworzyć nowy format obrazu, taki jak JPG, lub nowy format audio, taki jak MP3, jesteś również zagubiony, jeśli nie możesz zrozumieć transformacji cosinusowej lub Fouriera, ponieważ są to podstawy, na których opiera się najbardziej stratna kompresja . Wiele innych problemów można rozwiązać lepiej, jeśli dość dobrze znasz matematykę.

Istnieje również wiele innych zadań programistycznych, które nie wymagają wiele matematyki.

Mecki
źródło
13

Jeśli uważasz, że temat jest na tyle fascynujący, że chcesz go opublikować, po prostu zacznij się uczyć. Reszta przyjdzie naturalnie.

Daniel Situnayake
źródło
9

Tak, nie ma potrzeby zaawansowanej matematyki - jeśli programujesz komercyjne - oprogramowanie z półki.

Jednak w przypadku hardcorowych rzeczy, takich jak:

  • Obliczanie trajektorii do sterowania robotem
  • Tworzenie aplikacji podobnych do sztucznej inteligencji w celu obsługi niepewności i automatycznego wnioskowania
  • Gra z ruchem i grafiką 3-D

Przydać się może trochę zaawansowanej wiedzy matematycznej. I to nie jest tak, że są to problemy „nie z tego świata”.

Musiałem stworzyć oprogramowanie, aby spróbować „przewidzieć” ilość papieru potrzebną do biura (i po prostu piekło było znaleźć najlepszy sposób na przybliżenie wartości).

Trzeba jednak uważać, bo przy zaawansowanych rzeczach łatwo się pogubić - jest mój znajomy, który użył Turinga do przechowywania stanu dynamicznego menu tylko po to, żeby je poprawnie wyświetlić - bum ... może puścił się za daleko w swojej wyobraźni.

rshimoda
źródło
możesz dodać takie rzeczy, jak kompresowanie plików lub edytowanie plików MP3 lub cokolwiek, co wymaga rzeczywistego zrozumienia, co robi komputer, zamiast po prostu zrzucać stronę internetową.
tloach
4
Jak wykorzystał do tego Turinga? Tablica ouija czy seans?
Jared Updike
8

Jaki rodzaj programowania?

Z mojego doświadczenia komercyjnego nie potrzebowałem zaawansowanej matematyki, ale jest to mocno uzależnione od dziedziny, w której się pracujesz.

Grafika komputerowa wymaga dużej ilości zaawansowanej matematyki. Wiele akademickich programów komputerowych wymaga zaawansowanej matematyki.

Mówiąc więc, istnieje tendencja do korelacji między ludźmi, którzy są dobrzy z matematyki, a ludźmi, którzy są dobrzy w programowaniu.

Mam nadzieję, że ta niewyraźna odpowiedź pomoże.

David Waters
źródło
6

Matematyka jest potrzebna programistom w niektórych dziedzinach, ale w innych jest prawie bezużyteczna.

Jeśli jesteś twórcą gier i musisz dużo pracować z fizyką - zrozumienie matematyki jest kluczowe. Jeśli pracujesz z zaawansowanymi kontrolkami wizualnymi - nie możesz wiele zrobić bez geometrii. Jeśli planujesz wykonać jakieś obliczenia finansowe - NAPRAWDĘ pomogłaby Ci solidna znajomość statystyki.

Z drugiej strony przez ostatnie 5 lat miałem tylko 2 lub 3 projekty, w których w ogóle była wymagana DOWOLNA ilość matematyki. Spośród nich tylko 1 przypadek nie pomógł w wyszukiwaniu w Google.

Pod koniec dnia nawet obliczenia finansowe są bardzo często czymś, co Twoi klienci robią za Ciebie i dają Ci formuły do ​​wdrożenia.

Więc jeśli prowadzisz działalność związaną z oprogramowaniem stosowanym, prawdopodobnie nigdy nie wykorzystasz swojego dyplomu z matematyki. Jeśli zajmujesz się oprogramowaniem akademickim, matematyka jest kluczowa.

Ilya Kochetov
źródło
Do „twórcy gier” dodałbym „twórcę symulacji”. Pamiętam, jak w 1993 roku jeździłem po całym mieście, próbując znaleźć książkę matematyczną wystarczająco zaawansowaną, aby wyjaśnić mi, jak działają Quaternions, abym mógł poprawnie zakodować martwy algorytm reokulacji. Dzięki Bogu za dzisiejszy Internet!
TED
6

Zgadzam się z Chrisem. Powiedziałbym też „Tak”. Ale to zależy od twojego rynku, jak wspomniano powyżej. Jeśli po prostu tworzysz podstawowe, gotowe aplikacje lub narzędzia do pisania, które pomagają w codziennej pracy ... matematyka nie jest tak ważna.

Inżynieria niestandardowych rozwiązań oprogramowania wymaga wielu rozwiązań problemów i krytycznego myślenia. Umiejętności, które z całą pewnością są rozwijane, gdy obecne jest przygotowanie matematyczne. Skończyłem matematykę ze stopniem inżynierii komputerowej i przypisuję mojemu wykształceniu matematycznemu, dlaczego jestem tam, gdzie dziś jestem.

To moje 2 centy, czytając powyżej, mogę stwierdzić, że wielu się z tym nie zgodzi. Zachęcam wszystkich do rozważenia, że ​​nie mówię, że nie można mieć tych umiejętności bez przygotowania matematycznego, po prostu stwierdzam, że umiejętności są efektem ubocznym posiadania takiego przygotowania i mogą pozytywnie wpływać na oprogramowanie.

MaTT
źródło
6

Z mojego doświadczenia wynika, że ​​matematyka jest wymagana w programowaniu, nie można od niej uciec. Całość programowania oparta jest na matematyce.

Problem nie jest czarno-biały, ale bardziej kolorowy. Nie chodzi o to, czy potrzebujesz matematyki, ale ile. Wyższe poziomy matematyki dadzą ci więcej narzędzi i otworzą twój umysł na różne ścieżki.

Na przykład możesz zaprogramować, jeśli znasz tylko dodawanie i odejmowanie. Gdy wymagane jest mnożenie, będziesz musiał wykonać wiele dodatków. Mnożenie upraszcza powtarzalne dodawanie. Algebra pozwala uprościć matematykę przed wprowadzeniem jej do programów. Algebra liniowa dostarcza narzędzi do przekształcania obrazów. Algebra Boole'a zapewnia mechanikę redukcji wszystkich tych ifstwierdzeń.

I nie zapomnij o rodzeństwie matematyki, logiki i filozofii. Logika pomoże Ci efektywnie wykorzystać stwierdzenia caselub switch. Filozofia pomoże ci zrozumieć sposób myślenia faceta, który napisał kod, który modyfikujesz.

Tak, nie potrzebujesz dużo matematyki do pisania programów. Niektóre programy mogą wymagać więcej matematyki niż inne. Większa wiedza matematyczna da ci przewagę nad tymi, którzy mają mniejszą wiedzę. W dzisiejszych czasach ludzie potrzebują każdej korzyści, jaką mogą uzyskać, aby uzyskać te miejsca pracy.

Thomas Matthews
źródło
6

Programuję od 8 lat zawodowo, a od 12 roku życia jako hobby.

Matematyka nie jest konieczna, logika jest. Matematyka jest jednak strasznie pomocna, powiedzieć, że nie jest to konieczne, to tak, jakby powiedzieć, że aby zabić człowieka, broń nie jest konieczna, można użyć noża. Cóż, to prawda, ale ta broń znacznie to ułatwia.

Jest kilka minimum, które powinieneś już spełnić. Musisz znać podstawowe wyrażenia algebraiczne i notację oraz popularne odpowiedniki komputerowe. Na przykład musisz wiedzieć, co to jest wykładniczy (3 do 3 to 27), a typowe wyrażenie komputerowe to 3 ^ 3. Wspólne notacje algebry zmieniają się między językami, ale wiele z nich używa nieco ujednoliconej metodologii. Inni (patrząc na ciebie LISP) nie. Musisz także znać kolejność operacji.

Musisz zrozumieć myślenie algorytmiczne. Najpierw to, potem to, daje to, co jest używane w tych obliczeniach. Możliwe, że to rozumiesz lub nie, i jest to dość trudna przeszkoda do przeskoczenia, jeśli jej nie rozumiesz; Odkryłem, że jest to coś, co „dostajesz”, a nie coś, czego można się nauczyć. I odwrotnie, niektórzy ludzie nie „rozumieją” sztuki. Nie powinni zostać malarzami. Również w programie nauczania CS byli studenci, którzy nie potrafili zrozumieć, dlaczego to nie działa: x = z + w; z = 3; y = 5; Nie chodzi o to, że nie rozumieją dodawania, chodzi o to, że nie rozumieją wymogu jednoznacznego wyrażenia. Jeśli to rozumieją, komputer też powinien, prawda? Jeśli nie widzisz, co jest nie tak z powyższymi trzema liniami, nie zostań programistą.

Wreszcie, musisz wiedzieć, jaka matematyka jest w twojej domenie programowania. Oprogramowanie księgowe może zatrzymać się na podstawowej algebrze. Jeśli programujesz fizykę, musisz znać fizykę (luźno) i matematykę w trójwymiarowej geometrii (euklidesowej). Jeśli programujesz oprogramowanie architektoniczne, musisz znać trygonometrię.

Ale to sięga dalej niż matematyka; niezależnie od domeny, dla której programujesz, musisz dobrze zrozumieć podstawy. Jeśli używasz oprogramowania do analizy języka programowania, musisz znać prawdopodobieństwo, statystyki, teorię gramatyki (wiele języków) itp.

Często niektóre domeny wymagają wiedzy, która według Ciebie nie jest ze sobą powiązana lub może z niej skorzystać. Na przykład, jeśli programowałeś oprogramowanie audio, tak naprawdę musisz znać trygonometrię, aby radzić sobie z przebiegami.

Wielkość również zmienia rzeczy. Jeśli sortujesz zestaw danych finansowych zawierający 1000 pozycji, to nic wielkiego. Gdyby jednak było to 10 milionów rekordów, odniósłbyś wiele korzyści ze znajomości matematyki wektorowej i głębokiego zrozumienia sortowania na poziomie binarnym (jak system sortuje alfabetycznie? Skąd wiadomo, że „a” jest mniejsze niż „b '?)

Przekonasz się, że jako programista, twoja ogólna baza wiedzy eksploduje, ponieważ każdy projekt będzie wymagał więcej nauki poza bezpośrednią sferą programowania. Jeśli jesteś wrażliwy lub leniwy, jeśli chodzi o samokształcenie i nie podoba Ci się pomysł spędzania ponad 10 godzin tygodniowo na odrabianiu zadań domowych, nie zostań programistą.

Jeśli lubisz ćwiczenia myślowe, jeśli lubisz się uczyć, jeśli potrafisz myśleć o abstrakcyjnych rzeczach, takich jak matematyka bez kalkulatora lub projektowaniu bez szkicownika, jeśli masz szerokie gusta życiowe i hobby, jesteś samokrytyczny i potrafisz wyrzucić ” ulubione pomysły, jeśli lubisz doskonalić rzeczy, zostań programistą. Nie opieraj tej decyzji na matematyce, ale raczej na umiejętności logicznego myślenia i uczenia się. To jest to, co jest ważne; matematyka to tylko produkt uboczny.

user634669
źródło
5

Oczywiście zależy to od tego, jakim typem programisty chcesz być, lub lepiej, jakim programistą chcesz, abyś był Twoim pracodawcą. Myślę, że rachunek różniczkowy i algebra to podstawa, a programowanie statystyczne i liniowe jest rzeczywiście dobrym narzędziem w teczce, być może bez analizy (pochodnych, całek, funkcji ...) można by się obejść. Ale jeśli chcesz wiedzieć, jak działają rzeczy dogłębnie (na przykład elektronika lub niektóre nietrywialne algorytmy), „zaawansowana” matematyka jest czymś, bez czego lepiej nie rezygnować z nigdzie.

Manrico Corazzi
źródło
5

Większość programów, które zrobiłem, dotyczyła symulacji fizycznych do badań, w tym elektromagnetyzmu, mechaniki kwantowej i mechaniki strukturalnej. Ponieważ domeny problemowe mają zaawansowaną matematykę związaną z nimi, trudno byłoby mi je rozwiązać bez użycia zaawansowanej matematyki.

Zatem odpowiedź na twoje pytanie brzmi - to zależy od tego, co próbujesz zrobić.

WalkingRandomly
źródło
5

Zaawansowana znajomość matematyki jest niezbędna, jeśli zamierzasz pisać nowy język programowania. Lub musisz napisać własne algorytmy.

Jednak dla większości programów z dnia na dzień - od stron internetowych do rozpatrywania wniosków ubezpieczeniowych - tylko podstawowe matematyki są konieczne .

Dąb
źródło
5

Ktoś, kto ma solidne podstawy matematyczne (nie tylko arytmetyczne) lub logiczne, dobrze poradzi sobie z algorytmami, zastosowaniem zmiennych, rozumowaniem warunkowym i strukturami danych.

  • Nie każdy może zaprojektować interfejs użytkownika.
  • Nie każdy może stworzyć wydajny kod.
  • Nie każdy może jasno komentować i dokumentować.
  • Nie każdy potrafi zrobić dobry algorytm

Matematyka pomoże ci w pewnym momencie, ale tylko w pewnym momencie.

Niepodcięte
źródło
5

Nie sądzę, aby zaawansowana wiedza matematyczna była niezbędna dla dobrego programisty, ale z własnego doświadczenia myślę, że programiści, którzy lepiej opanowali matematykę zaawansowaną, są również lepszymi programistami. Może to po prostu wynikać z bardziej logicznego umysłu lub bardziej logicznej perspektywy wynikającej z ich doświadczeń związanych z rozwiązywaniem problemów matematycznych.

Jimoc
źródło
5

Podstawową koncepcją matematyki jest następujące, opracowanie, zrozumienie, implementacja i użycie algorytmów. Jeśli nie możesz robić matematyki, to dzieje się tak, ponieważ nie możesz robić tych rzeczy, a jeśli nie możesz tego robić, nie możesz być skutecznym programistą.

Typowe zadania programistyczne mogą nie wymagać żadnej konkretnej wiedzy matematycznej (np. Prawdopodobnie nie będziesz potrzebować algebry wektorowej i rachunku różniczkowego, chyba że wykonujesz zadania, takie jak na przykład grafika 3D lub symulacje fizyczne), ale podstawowe umiejętności są identyczne i brak umiejętności w jednej domenie będzie odpowiadał brakowi umiejętności w drugiej domenie.

DrPizza
źródło
5

Matematyka to zestaw narzędzi do tworzenia programów. Polecam wprowadzenie Cormena do algorytmów. Dotyka bardziej „matowych” rzeczy.

- Greatest lowest limit (managing resources) 
- Random variables (game programming)
- Topological sort (adjusting spreadsheets)
- Matrix operations (3d graphics)
- Number theory (encryption)
- Fast fourier transforms (networks)
user559910
źródło
4

Nie sądzę, aby wyższa matematyka była warunkiem bycia dobrym programistą - jak zawsze zależy to od tego, co kodujesz.

Oczywiście, jeśli zajmujesz się programowaniem grafiki 3D, będziesz potrzebować macierzy i innych rzeczy. Jako autor oprogramowania biznesowego prawdopodobnie będziesz potrzebować matematyki statystycznej.

Ale bycie profesjonalnym programistą przez prawie 10 lat (i kolejne 10 lat amatorem) „wyższej matematyki” nie jest czymś, czego potrzebowałem regularnie. W około 99,8% wszystkich przypadków jest to po prostu plus, minus, dzielenie i mnożenie w niektórych inteligentnych kombinacjach - w większości przypadków chodzi o algorytmy, a nie matematykę.

BlaM
źródło
4

Dla większości programistów uczenie się wyższej matematyki jest ważne po prostu dlatego, że zmusza mózg do logicznego myślenia krok po kroku, aby przejść od jednej rzeczy do drugiej.

Jednak bardzo niewiele prac programistycznych wymaga czegoś więcej niż matematyka w szkole średniej. Kiedyś użyłem algebry liniowej. Nigdy nie używałem rachunku różniczkowego. Codziennie używam algebry.

Lucas Oman
źródło
4

Wiedza matematyczna jest często przydatna dla programisty, podobnie jak umiejętności projektowania graficznego, umiejętność rozwiązywania zagadek, etyka pracy i szereg innych umiejętności i cech. Bardzo niewielu programistów jest dobrych we wszystkim, w czym programista może być dobry. Nie zgodziłbym się z żadnym stwierdzeniem w postaci „nie jesteś prawdziwym programistą, chyba że możesz { wstaw tutaj ulubioną umiejętność programowania }”.

Ale obawiałbym się programisty, który nie potrafi matematyki. Bardziej niż tego, który nie potrafił rysować.

MusiGenesis
źródło
4

Myślę, że to naprawdę zależy od tego, co próbujesz zrobić, ale IMHO, teoria CS i OS są tutaj ważniejsze niż matematyka i naprawdę potrzebujesz tylko matematyki, którą one obejmują.

Na przykład, istnieje wiele podstaw CS w teorii planowania i optymalizacji, które stoją za wieloma planistami w nowoczesnych systemach operacyjnych. To jest przykład czegoś, co wymagałoby trochę matematyki, ale nie jest to coś bardzo skomplikowanego.

Ale szczerze, w przypadku większości rzeczy matematyka nie jest potrzebna. To, czego potrzebujesz, to nauczyć się umiejętności myślenia o podstawie 2 i 16, takiej jak umiejętność mentalnego LUB / AND. Na przykład, jeśli masz bajt i wewnątrz tego bajtu znajdują się dwa 3-bitowe pola i 2 zmarnowane bity, wiedząc, które bity są w których polach są aktywne, gdy wartość bajtu wynosi około 11, sprawi, że rzeczy będą nieco szybsze niż konieczność użycia pióro i papier.

Uri
źródło
Czy kiedykolwiek studiowałeś teorię kolejek? Czy kiedykolwiek studiowałeś menedżery pamięci i modele statystyczne, które sprawiają, że programiści wybierają jeden z nich? Niekoniecznie nie zgadzam się z ciężarem twojej odpowiedzi, ale z twoim nadmiernym uproszczeniem.
San Jacinto
@San: Jestem pewien, że zbytnio upraszczam, ale myślę, że większość programistów systemów nigdy nie musi wiedzieć o tych rzeczach na tym poziomie. Uczyłem się go na poziomie podstawowym na pierwszych dwóch stopniach i nieco głębiej podczas doktoratu, ale to nigdy nie było moją mocną stroną, wolę zostawić to ekspertom. Ludzie z OS, których znałem, mieli umiejętności matematyczne, które mnie powaliły.
Uri
co moim zdaniem jest bardzo ważne. Myślę, że istnieje potrzeba odróżnienia programowania systemów od programowania systemu operacyjnego. Mocno utkane koncepcje, ale mimo to inne.
San Jacinto
4

Zacząłem programować mniej więcej w tym samym czasie, kiedy rozpocząłem naukę na wstępie do algebry. Więc nie powiedziałbym, że matematyka jest aż tak ważna, chociaż może pomóc w pewnych typach programowania, zwłaszcza funkcjonalnych.

Nie uczyłem się jeszcze matematyki dyskretnej, ale widzę wiele teorii związanych z programowaniem napisanych w notacji matematycznej, której uczy się na tych zajęciach.

Upewnij się również, że wiesz, jak obliczyć cokolwiek w dowolnej bazie, zwłaszcza w podstawie 2, 8 i 16.

Jedną z klas, która naprawdę przyniosła mi pewne koncepcje, była ta klasa przygotowująca do programowania. Uczyliśmy się o związkach, skrzyżowaniach i innych radosnych rzeczach, i to prawie dokładnie odpowiada matematyce bitowej. Bardzo dokładnie omówiliśmy logikę boolowską. To, co uznałem za najbardziej przydatne, to moment, w którym nauczyliśmy się redukować złożone wyrażenia logiczne. To było bardzo przydatne:

(x|y) & (x|z) & (x|foo)

można uprościć do

x | (y & z & foo)

Czego wcześniej nie rozumiałem.

Earlz
źródło
4

Cóż, wygenerowałeś wiele odpowiedzi i nie, nie przeczytałem ich wszystkich. Jestem w środku, nie, na pewno nie potrzebujesz matematyki, żeby być programistą. Assembler vs sterowniki urządzeń w Linuksie są nie mniej ani bardziej skomplikowane niż inne i nie wymagają matematyki.

W żadnym wypadku nie musisz zdawać ani zaliczać żadnych zajęć z matematyki.

Zgodzę się, że podejście do rozwiązywania problemów w programowaniu jest dość podobne do podejścia matematycznego, w wyniku czego matematyka prawdopodobnie przychodzi łatwo. lub wręcz przeciwnie, jeśli matematyka jest trudna, programowanie może być trudne. Zajęcia, stopień naukowy, jakiekolwiek kartki papieru czy trofea nie są wymagane, oczywiście, żeby się czegoś nauczyć.

Teraz, jeśli nie możesz szybko przekonwertować z szesnastkowego na dwójkowy na dziesiętny ani w głowie, na papierze, ani przy użyciu kalkulatora, będziesz miał problemy. Jeśli chcesz dostać się do sieci i innych rzeczy, które wymagają synchronizacji, co często robią sterowniki jądra, ale nie muszą. Będziesz walczyć. Znam bardzo długą listę osób z dyplomami matematycznymi i / lub informatycznymi i / lub inżynierskimi, które borykają się z obliczeniami szybkości, bitów na sekundę, bajtów na sekundę, ilości pamięci potrzebnej do zrobienia czegoś itd. w pewnym stopniu można to uznać za swego rodzaju talent, który niektórzy mają, a inni muszą pracować.

Najważniejsze jest to, że wierzę w siłę woli, jeśli chcesz się tego nauczyć i chcesz, to jest takie proste. Nie musisz brać udziału w zajęciach ani wydawać dużo pieniędzy, na przykład linux i qemu mogą zająć cię przez dłuższy czas, różne języki asm, itp. Środowiska powodujące awarię dla rozwoju jądra, osadzone itp. Nie jesteś ograniczony do tego , ale nie wierzę, że musisz uciekać i chodzić na jakieś zajęcia, jeśli nie chcesz. Jeśli chcesz wziąć udział w zajęciach ee, cs i matematyce.

old_timer
źródło
To nie jest przynęta na płomienie, ale rzeczywistość. Wszystko, co musisz wiedzieć o elektronice cyfrowej i inżynierii oprogramowania z perspektywy programowania, można podsumować. 0, 1 i lub nie. na tych pięciu rzeczach działa elektronika cyfrowa i wszystkie programy. Możesz zbudować wszystko za pomocą dużego pudełka szybkich bram.
old_timer
4

Potrzebujesz matematyki. Programowanie to nic innego jak matematyka. Wszelkie ustalenia fizyki teoretycznej nie stają się implikacją praktyczną (możliwą do zastosowania), chyba że zostaną wyjaśnione za pomocą rozwiązań matematycznych. Żadnego z nich nie można rozwiązać obliczeniowo, jeśli nie można ich zinterpretować na komputerach, a dokładniej w językach programowania. W ten sposób opracowuje się różne języki, aby rozwiązywać określone problemy. Ale w przypadku języków programowania ogólnego przeznaczenia, takich jak java, c, c ++, większość naszych zadań programistycznych obejmuje powtarzalne (ciągłe) rozwiązywanie tych samych problemów, takich jak wyodrębnianie wartości z bazy danych, plików tekstowych, umieszczanie ich w systemie Windows (komputer stacjonarny, sieć), manipulowanie te same wartości, czasami dostęp do niektórych danych z podobnych urządzeń (ale z różnymi nazwami handlowymi, innym portem i bólem głowy) itp., który nie wymaga więcej niż jednolitej metody

Pramod
źródło
3

IMO, prawdopodobnie potrzebujesz zdolności matematycznych, niekoniecznie posiadając dużą wiedzę w tej dziedzinie. Zatem rzeczy, których potrzebujesz, aby być dobrym z matematyki, są podobne do rzeczy, których potrzebujesz, aby być dobrym w programowaniu.

Ale generalnie nie pamiętam, kiedy ostatnio korzystałem z jakiejkolwiek zaawansowanej matematyki w codziennym programowaniu, więc nie.

Lehane
źródło