Co matematyka ma wspólnego z programowaniem? [Zamknięte]

89

Właśnie zacząłem dyplom w zakresie tworzenia oprogramowania. W tej chwili zaczynamy od podstawowej Javy i tak dalej (można powiedzieć od samego początku) - co jest w porządku, nie mam żadnego doświadczenia w programowaniu poza wiedzą, jak robić „Hello World” w Javie.

Ciągle słyszę, że matematyka ma znaczenie dla kodowania, ale jak to jest? Jakie ogólne przykłady pokazałyby, jak matematyka i programowanie idą w parze, czy też są od siebie zależne?

Przepraszam, że moje pytanie jest niejasne, ledwo zaczynam rozumieć świat, w którym wkraczam jako student małp kodowych ...

Rory
źródło
49
Programowanie to matematyka. en.wikipedia.org/wiki/Discrete_mathematics
SK-logic
25
@Dave, dlatego podałem link w komentarzu, a nie jako odpowiedź.
SK-logic
7
@FiascoLabs, a nawet więcej - struktura języka i logika są również subdomenami matematyki. Programowanie to nic innego jak matematyka stosowana.
SK-logic
19
Z drugiej strony, rozpoczynanie od Javy nie jest „od samego początku”.
Matt H
5
@ CharlesE.Grant, wielu studentów matematyki robi to samo (i nadal zdaje testy).
SK-logic

Odpowiedzi:

137

Po pierwsze: jestem matematykiem - profesjonalistą (w tym, że zarabiam na matematyce). Jestem nie programista. Zajmuję się programowaniem, ale zdecydowanie odmienną odmianą Cargo Cult (patrz pierwszy komentarz do https://tex.stackexchange.com/q/451/86 i moja odpowiedź) i nic takiego, co normalnie by mnie do tego skłoniło strona (rzeczywiście, zarejestrowałem się tutaj, aby opublikować tę odpowiedź po zobaczeniu linku do niej w pokoju czatu TeX).

Podsumowanie mojej odpowiedzi brzmi: matematyka to programowanie .

Niedawno mogłem uczyć matematyki dla niematematycznej grupy studentów. Były to sekcja programowania. Myślałem, że to fantastyczne! Nareszcie miałem zamiar uczyć matematyki ludzi, którzy już rozumieli podstawowe idee i mieli już podstawowy zestaw narzędzi do matematyki. Byłem niesamowicie rozczarowany, gdy zapytałem, ilu z nich napisało program i dostałem odpowiedź gdzieś pomiędzy 0 a 1.

Zanim przejdę dalej, powinienem wyjaśnić kilka rzeczy. Istnieją dziedziny matematyki, które dotyczą bezpośrednio programowania i dotyczą oceny algorytmów oraz klasyfikowania języków i tym podobnych. Nie mówię o nich. Istnieje również program, który próbuje przetłumaczyć całą matematykę na język formalny, który może być oceniony przez komputer. Jest to nieco bliższe temu, o czym mówię, ale nawet skupienie się na tym pominie główną część tego, co próbuję powiedzieć. Matematyka, którą wykonuję i programowanie, które wykonuję, są prawie całkowicie niezwiązane tematycznie. Połączenie między nimi jest na innym poziomie.

Chciałbym zacząć od komentarza do głównego pytania:

Jeśli robi to matematykę, cała ludzka działalność jest formą matematyki. W takim przypadku słowo matematyka nie ma przydatnego znaczenia, ponieważ nie można go użyć do odróżnienia jednej czynności od drugiej.

Tak, to matematyka. Ale „matematyka” jest wciąż przydatnym słowem, ponieważ, jak mówi piosenka: „To nie jest to, co robisz, to sposób, w jaki to robisz”. Powiedziałbym, że robię matematykę, kiedy podchodzę do czegoś w sposób matematyczny . Czasami jest to matematyka „twarda”: formułowanie definicji, dowodzenie twierdzeń. Czasami tak nie jest. Czasami pisze głupie małe programy, aby moje dzieci mogły nauczyć się pisowni.

W tym pomaga mi matematyka, gdy programuję:

  1. Abstrakcja Jest to prawdopodobnie najważniejszym zbywalne umiejętności z matematyki. Rozumiem przez to zdolność do usuwania wszystkich niepotrzebnych rzeczy i skupienia się na ważnych właściwościach.

  2. Perspektywa Gdybym mógł wybrać tylko jedną rzecz, której wszyscy moi uczniowie mieliby się nauczyć, to byłaby to: możliwość zmiany punktu widzenia w celu dopasowania do problemu. Zwykle traktujemy to w algebrze liniowej za pomocą formuł o zmianie podstawy (które prowadzą do przerażających matryc i przerażających powikłań), ale jest to o wiele bardziej odpowiednie. W istocie chodzi o to, że tylko dlatego, że coś zostało ci przedstawione w jeden sposób, nie musi to być sposób, w jaki pracujesz z tym. Oddziela to pogląd na samą rzecz od sposobu jej przedstawienia. Może to być bardzo praktyczne: chodzi o to, aby uczynić coś użytecznym lub wydajnym. Jeśli mam listę wektorów i bardziej efektywne jest przechowywanie ich jako listy współrzędnych x i listy współrzędnych y, niech tak będzie .

  3. Forma a funkcja wiodąca z powyższego; jeśli coś można przedstawić na wiele różnych sposobów, to nie jest już śmiało powiedzieć, że jeden szczególności prezentacja jest rzeczą. Ponowne zacytowanie tej piosenki: „To nie jest to, czym jesteś ”. To się liczy .

Mógłbym kontynuować, ale te właśnie przychodzą mi do głowy.

Prawdopodobnie istnieje wiele (negatywnych) reakcji na to, co napisałem do tej pory. Jedno brzmi: „To nie matematyka, to po prostu zdrowy rozsądek”. (lub zły sens), do którego odnoszę się do mojej powyższej uwagi, zgadzając się z sentymentem, że „wszelka ludzka działalność jest formą matematyki”. Innym będzie „To nie jest matematyka, o której mowa w pytaniu”. Jest to prawie na pewno prawda i tutaj mam o wiele więcej sympatii do osoby, która powiedziała „Przynajmniej nie dotknąłem matematyki od 10 lat”. Myli się, oczywiście, oni robią matematykę od 10 lat, ponieważ ilekroć pisali program , robili matematykę . Po prostu nie zdawali sobie z tego sprawy.

W moich programach faktycznie używam „prawdziwych obliczeń matematycznych”. Niedawno kodowałem zabawnego eksploratora kształtów 3D, który polegał na wykorzystaniu matematyki do obliczenia projekcji i innych transformacji, które musiałem zastosować do moich danych. Byłem lekko rozbawiony faktem, że tak naprawdę koduję czwartorzędy! Ale oczywiście matematyka, która była w to zaangażowana, była trywialna w porównaniu z matematyką, którą robię, kiedy pracuję. To były „koperty”. Tego rodzaju matematyki, więc zgadzam się z sentymentem, że wybieracie go, kiedy jest to potrzebne, a jeśli potrzebujesz czegoś bardziej skomplikowanego niż można znaleźć w Wikipedii, to znajdziesz prawdziwego matematyka, który zrobiłby to za ciebie. Aby jednak móc go odebrać, gdy jest to potrzebne, musisz się czegoś nauczyć. To może nie być coś, z czego faktycznie korzystasz, ale dowiedziawszy się, że coś znacznie ułatwia wybranie tego, czego faktycznie używasz w późniejszym życiu. Tak to jest, gdy nie zgadzam się z Coder: trzeba zrobić, aby dowiedzieć się trochę matematyki, jeśli kiedykolwiek będziemy używać żadnych matematyki i trzeba nauczyć się go od strony matematycznej (co nie znaczy, potwierdzające twierdzenia, nawiasem mówiąc).

I tak w końcu do „Matematyki jest programowanie”. Możesz nauczyć się tych wszystkich rzeczy, będąc dobrym programistą. A jeśli nauczyliśmy się te rzeczy, znajdziesz matematyki znacznie łatwiejsze, ponieważ będzie można zrozumieć, że kiedy mówimy o wektor w przestrzeni wektorowej to tylko instancją klasy Vector, co oznacza, że możemy zrobić wszystko, co Vectorrobi to wystąpienie: dodaj, odejmij, skaluj i tak dalej. To dlatego chciałbym, aby uczyć matematyki dla programistów. Ale mówiąc jako matematyk powiedziałbym, że pierwszyz nich „Abstrakcja” jest łatwiejsza do nauczenia się w matematyce niż w programowaniu, ponieważ matematyka jest dążeniem do abstrakcji. Ilekroć widzimy jakieś zachowanie, nasz trening zawsze pyta: „Co takiego jest w tej rzeczy, która sprawia, że ​​zachowuje się w ten sposób? Co jeśli wziąłbym inną rzecz, która byłaby podobna, czy zachowałaby się w ten sam sposób? Ile z tego? czy musiałbym przegrać, żeby przestał się tak zachowywać? ” (Doprowadzenie tego do skrajności prowadzi do „matematyki stonogi” - wyszukaj termin). Ale nie robimy tego z (po prostu) obiektami z „prawdziwego świata” (czymkolwiek one są), robimy to z rzeczami, które już zostały wyabstrahowane.

Trwa to wystarczająco długo, więc zakończę jednym z klasycznych żartów matematyka:

Zarówno matematyk, jak i fizyk uczestniczyli w seminarium na temat nowego modelu obejmującego przestrzeń 24-wymiarową. Następnie dyskutowali o tym, a fizyk zauważył: „To było naprawdę trudne. To znaczy, jak wizualizować 24-wymiarową przestrzeń?” na co matematyk odpowiedział: „Och, to proste. Wystarczy wizualizować przestrzeń n-wymiarową, a następnie ustawić n = 24.”.


Dodano 2012-03-2

Było wiele komentarzy do tej odpowiedzi, wyrażających różnorodne poglądy. Zostały one teraz usunięte przez moderatora, biorąc pod uwagę, że spróbuję je uwzględnić (lub odpowiedzieć na nie) w mojej odpowiedzi.

Nie jestem jednak pewien, czy dam radę. Czytając te komentarze i resztę tego, co znajduje się na tej stronie, mogę jedynie dojść do wniosku, że istnieje ogromne nieporozumienie co do tego, czym właściwie jest matematyka. Co więcej, nie czuję się wystarczająco kompetentny, aby to wyjaśnić. Na szczęście ktoś już powiązał Lament Lockharta, więc odłożę na to wyjaśnienie. Chociaż mógłbym to inaczej wyrazić (gdy dorastałem w środowisku naukowym, położyłem większy nacisk na eksperymentalną naturę matematyki), nie sądzę, żebym mógł to lepiej ująć .

Nadal uważam, że mogę coś dodać. Oprócz nieporozumień dotyczących tego, czym jest matematyka , istnieją również nieporozumienia dotyczące tego, co oznacza „robienie matematyki”. Widzę dwie niemal sprzeczne postawy:

  1. Matematyka dotyczy równań i wzorów. Nie ma więc potrzeby jej studiowania, ponieważ istnieje Wikipedia (jest to prawie odwrotność apokryficznego wyzwania Eulera wobec Diderota ).

  2. Matematyka dotyczy twierdzeń i definicji. Dlatego nie trzeba go badać, ponieważ programy nigdy niczego nie dowodzą (co jest tak kompletnym błędem, jak ... wstaw tutaj ulubiony błąd).

Podczas gdy te dwie postawy są ze sobą sprzeczne, kończą w tym samym miejscu: programista nie ma sensu uczyć się matematyki - a na pewno nie od matematyka! W końcu co oni wiedzą o czymkolwiek? Wszystko, co naprawdę powinien wiedzieć programista, można znaleźć w Wikipedii lub przeklinać kogoś innego.

Powyżej opisałem siebie jako programistę kultowego Cargo. Założę się, że większość z was miała prywatny chichot i pomyślała: „Ach tak, założę się, że wiem, jak wtedy wyglądają wasze programy”. Prawdopodobnie czułeś się trochę zadowolony z siebie i lepszy (choć jestem pewien, że czułeś się źle z powodu poczucia zadowolenia z siebie i lepszego).

To, co opisałem powyżej, to matematyka kultowa.

Więc kiedy mówię, że powinieneś nauczyć się trochę matematyki, aby zrozumieć, jak działa matematyka, mówię to z dokładnie tego samego powodu, co mógłbyś, gdybyś zobaczył fragment kodu, który napisałem: „O ile łatwiej ci w życiu byłoby, gdybyś przestał wycinać i wklejać kod z StackOverflow i nauczył się trochę, jak to zrobić poprawnie. "

Najważniejsze jest jednak to, że powinieneś nauczyć się tego od matematyków. Dlaczego tak? Oto analogia. Językiem, w którym jestem biegły, jest TeX. (Mówi wszystko, naprawdę!). Teraz załóżmy, że chcę dowiedzieć się nieco więcej o TeXie. Tak się składa, że ​​Don Knuth jest w mieście i zaoferował kilka samouczków na temat TeXa. Albo mógłbym po prostu przeczytać o tym na Wikipedii. A może to Perl i Larry Wall lub C # (czy to właściwy?) I Jon Skeet. Być może ci ludzie nie są najlepszymi nauczycielami , ale na pewno nadrobią to w takiej ilości, jaką znają!

I tacy właśnie są matematycy . Jesteśmy ludźmi, którzy piszą w prawdziwym języku, a następnie piszą biblioteki, których używasz. Oczywiście nie musisz wiedzieć, jak udowodnić twierdzenie - nie zamierzasz pisać biblioteki! Ale jeśli wiesz trochę o tym, jak myślimy, to może pomóc ci zrozumieć, dlaczego napisaliśmy bibliotekę tak, jak my, i jeśli zrozumiesz, że może to pomóc ci lepiej z niej korzystać.

Pomiędzy wyszukiwaniem równań na Wikipedii a udowodnieniem hipotezy Poincarégo istnieje pośrednia płaszczyzna, podobnie jak - w odniesieniu do lamentu Lockharta - pośrednia kwestia „Nie wiem zbyt wiele o sztuce, ale wiem, co lubię”. i będąc Monetem, oraz pomiędzy „Gdzie jest„ DOWOLNY ”klucz?” i bycie Don Knuthem. Jeśli nadal studiujesz, masz niesamowitą okazję do uczenia się od ludzi, którzy są ekspertami w swojej dziedzinie i którzy z jakiegoś powodu chętnie spędzają czas na wyjaśnianiu tego.


Inną kwestią, którą chciałem nieco rozwinąć, było to, dlaczego jako programista nie powinieneś bać się uczyć trochę więcej matematyki. To nie są głębokie połączenia ani użyteczność. Twoje umiejętności programowania komputera mogą bezpośrednio pomóc w nauce matematyki. Chcę tylko wspomnieć o kilku.

  1. Zrozumienie zmiennych. Tak wielu ludzi jest zdezorientowanych prostymi stwierdzeniami typu „Niech n będzie liczbą naturalną ...”. Lub „Niech epsilon> 0”. W matematyce są miejsca, w których należy pamiętać o zakresie zmiennej. Wszystkie są powszechne w programowaniu. Naucz się tłumaczyć zdanie matematyczne na program, a łatwiej ci będzie śledzić, co jest.

  2. Charakter dowodu. Jeśli kiedykolwiek napisałeś test lub napisałeś program do użycia przez kogoś innego, rozumiesz sedno dowodów. Kiedy to zrobisz, musisz wiedzieć, że cokolwiek użytkownik włoży, możesz sobie z tym poradzić (wstaw obowiązkowe odniesienie xkcd tutaj). To wszystko dowód! Demonstracja, że wszystko , co wkłada „użytkownik / wszechświat”, zachowa. Eksperymentaliści skłaniają się ku „Jeśli to działa w normalnych okolicznościach, to prawda”, ale programiści wiedzą, że zawsze jest to dziecko, które spróbuje Alt + G + Shift + ÅØÆ, aby zobaczyć, co się stanie.

  3. SUCHY. Przykro nam, że ci to łamie, ale wymyśliliśmy to, nie ty. „Nie powtarzamy się” od tysiącleci. Właśnie dlatego mam kopię elementów Euclida na moich półkach i nadal jest przydatna .

I jest więcej. Gdybym wiedział trochę więcej o programowaniu, napisałbym książkę zatytułowaną „Matematyka dla programistów”, w której celem nie było nauczanie „Matematyki, którą programiści powinni znać”, ale „matematyki, którą każdy powinien znać, ale zoptymalizowanej dla programistów” . Ale prawdopodobnie nigdy nie będę wiedział wystarczająco dużo o programowaniu, żeby to napisać - chyba że ktoś zaoferuje mi współpracę!


Zostawię to tam. Prawdopodobnie gdybym pomyślał więcej, zmieniłbym to, co napisałem; mam nadzieję, że wyjaśnię to lepiej. Za kilka miesięcy mogę nawet nie zgodzić się z częściami tego. Jeśli ktoś chce się kłócić lub skomentować inaczej, prawdopodobnie najlepiej tego nie robić w komentarzach tutaj. Wiesz gdzie mnie znaleźć .

Loop Space
źródło
19
To jedna z najlepszych odpowiedzi, jakie kiedykolwiek czytałem na SE; BTW, nie jest wielka księga „Matematyka dla programistów”; nazywa się Konkretna Matematyka i jest napisany wspólnie przez autora TeXa, Donalda Knutha. Właśnie dostałem kopię i jest fantastyczna. Czuję się jak twoja odwrotność; Poważnie podchodziłem do programowania, kiedy zdałem sobie sprawę, że najlepszym sposobem (dla mnie) zrozumienia pojęć w klasie matematycznej jest napisanie programu, który zrobi to za mnie. Oczywiście wtedy chciałem użyć programu zamiast ręcznie wykonywać obliczenia na pamięć, a moim nauczycielom matematyki nie podobało się.
Jason Lewis
Koleś, +100 za to.
Barry Brown,
2
Zarejestrowany po to, aby głosować za tym
leo
Dokładnie. Nie możesz programować dobrze bez analitycznej myśli, której uczy matematyka.
Fiasco Labs
1
Czy jest dobra książka na temat matematyki programowania (patrząc na programowanie matematyczne)?
qed
27

Nie są tak ściśle powiązane. Podczas programowania ważne jest, aby wiedzieć o matematyce - szczególnie gałęziach dotyczących na przykład wydajności algorytmu, ale prosty fakt jest taki, że nie ma gałęzi matematyki, która powiedziałaby, że Singletony to przerażająco zły pomysł, na przykład: lub kiedy faworyzować dziedziczenie nad kompozycją, czy też tak naprawdę będziesz potrzebować tej elastyczności i nie powtarzać siebie oraz dziesiątek innych podstawowych potrzeb programistycznych.

Matematyka może być w stanie wyrazić to, co robi twój program, ale z pewnością nie jest w stanie wskazać najbardziej możliwej do utrzymania, czytelnej dla człowieka i możliwej do zrealizowania drogi.

DeadMG
źródło
6
1) Nie ma nic złego w singletonach jako takich, 2) algorytmiczna teoria informacji, języki formalne i semantyka denotacyjna są bezpośrednio związane z tymi prostymi rzeczami, którymi się tak martwisz z jakiegoś powodu (nie mają one tak dużego znaczenia dla programowania ogólnie).
SK-logic
19
wtedy twoje doświadczenie musi być nieco ograniczone. Singletony są konieczne i nieuniknione, o ile są częścią modelu domeny. A jak zbudować model domeny to problem matematyczny, nic więcej. I tak, ci, którzy nie znają teorii języków formalnych, wytwarzają okropne modele i okropne języki.
SK-logic
10
@dave: niebezpieczeństwem związanym z tą metodą jest to, że każdy może oderwać cię od rozsądnej, dobrze uzasadnionej pozycji, stwierdzając bardzo odmienną pozycję, bez względu na to, jak głupie. Podejmowanie średnich nie jest użytecznym substytutem dla oceny argumentów.
Michael Borgwardt
4
@ SK-logic: Czy to możliwe, że rozmawiacie o różnych pojęciach dotyczących tego, czym dokładnie jest „Singleton”? Wydaje mi się, że SK-logika mówi o abstrakcyjnej idei posiadania w systemie tylko jednego wystąpienia określonego bytu, co czasem jest dokładnie tym, czego potrzeba. Niestety ta abstrakcyjna koncepcja została ściśle powiązana z przerażająco złym szczegółem implementacji publicznej metody statycznej, ponieważ książka GoF podała to jako przykład tego, w jaki sposób można uzyskać dostęp do takiego Singletona.
Michael Borgwardt
5
Proszę nie więcej Off Topic dyskusja ponownie Singtons
mattnz
20

Matematyka i programowanie są powiązane na dwa sposoby.

Jednym z nich jest to, że matematyki można używać do rozumowania programów komputerowych. Może pomóc odpowiedzieć na pytania takie jak: „Jak zmieni się czas działania mojego programu, gdy zmienią się dane wejściowe?”, „Czy mój program gwarantuje znalezienie odpowiedzi na mój problem?”, „Czy mój program jest tak wydajny, jak mógłby być? "," Jak powinienem zmienić swój program, aby przyspieszyć lub zużywać mniej pamięci? ". Zazwyczaj omawiasz takie tematy na kursach wyższych klas dotyczących teorii obliczeń, projektowania algorytmów i projektowania języka komputerowego.

Drugi sposób, w jaki matematyka i program są powiązane, polega na tym, że programowanie służy do rozwiązywania problemów matematycznych. Jest to ważne, ponieważ wiele problemów „zwykłego życia” może być przekształconych jako problemy matematyczne, a następnie rozwiązanych (być może w przybliżeniu) na komputerze. Tego rodzaju tematy pojawią się w pewnym stopniu na prawie wszystkich twoich kursach, ale szczególnie na kursach z dyskretnej matematyki i modelowania matematycznego.

Charles E. Grant
źródło
Matematyka nie może zagwarantować, że Twój program znajdzie odpowiedź. To rozwiązałoby problem zatrzymania, co jest niemożliwe.
DeadMG,
6
@DeadMG W przypadku dowolnych programów jest to niemożliwe. W niektórych przypadkach można udowodnić, że dany program kończy się lub nie.
Luc Danton
6
@DeadMG, To powszechne nieporozumienie dotyczące problemu Stop. Problem zatrzymania nie oznacza, że ​​nie możesz udowodnić, czy dany program się zatrzymuje, ale nie ma jednego algorytmu ani dowodu, który można zastosować do wszystkich programów, aby zdecydować, czy się zatrzymają. Patrz na przykład en.wikipedia.org/wiki/Halting_problem i programmers.stackexchange.com/questions/125882/... .
Charles E. Grant
Aaaa Zatem mój błąd. Głupia blokada głosowania ... jeśli mógłbyś edytować swój post, abym mógł cofnąć głosowanie?
DeadMG
4
@DeadMG, jesteś świadomy faktu, najbardziej typowych zadań programistycznych nie potrzebują Turing-kompletny język w ogóle ? W pozostałych przypadkach prawie zawsze istnieje specjalny dowód zatrzymania.
SK-logic
12

Dwa konkretne przykłady, w których matematyka jest ważna dla informatyki, to:

1) Relacyjne bazy danych, w których stosuje się rachunek relacyjny .

Rachunek relacyjny składa się z dwóch rachunków: krotkowego rachunku relacyjnego i rachunku relacyjnego domeny, które są częścią modelu relacyjnego dla baz danych i zapewniają deklaratywny sposób określania zapytań do bazy danych. W przeciwieństwie do algebry relacyjnej, która jest również częścią modelu relacyjnego, ale zapewnia bardziej proceduralny sposób określania zapytań.

Algebra relacyjna może zasugerować następujące kroki w celu pobrania numerów telefonów i nazw księgarń, które dostarczają Książkę próbek:

Join book stores and titles over the BookstoreID.
Restrict the result of that join to tuples for the book Some Sample Book.
Project the result of that restriction over StoreName and StorePhone.

Rachunek relacyjny sformułowałby opisowy, deklaratywny sposób:

Get StoreName and StorePhone for supplies such that there exists a title BK with the same BookstoreID value and with a BookTitle value of

Jakaś przykładowa książka.

Relacyjna algebra i rachunek relacyjny są zasadniczo logicznie równoważne: dla każdego wyrażenia algebraicznego istnieje równoważne wyrażenie w rachunku różniczkowym i odwrotnie. Wynik ten znany jest jako twierdzenie Codda.

Kolejnym obszarem jest sztuczna inteligencja (AI) i uczenie maszynowe .

Na przykład, jak są one używane, zobacz klasę udacity CS 373: PROGRAMOWANIE SAMOCHODU ROBOTYCZNEGO .

Opis: Ta klasa, prowadzona przez jednego z czołowych ekspertów AI, nauczy Cię podstawowych metod sztucznej inteligencji, w tym: wnioskowania probabilistycznego, wizji komputerowej, uczenia maszynowego i planowania, wszystkie z naciskiem na robotykę. Obszerne przykłady programowania i zadania zastosują te metody w kontekście budowy samochodów z własnym napędem. Będziesz miał okazję odwiedzić, za pośrednictwem wideo, wiodące laboratoria badawcze w tej dziedzinie oraz spotkać naukowców i inżynierów, którzy budują samochody z napędem w Stanford i Google.

Wymagania wstępne: Instruktor przyjmie solidną wiedzę na temat programowania, całe programowanie będzie w języku Python. Pomocna będzie znajomość prawdopodobieństwa i algebry liniowej.

TYDZIEŃ 1:

Podstawy prawdopodobieństwa Lokalizacja samochodu za pomocą filtrów cząstek

TYDZIEŃ 2:

Gaussowie i ciągłe prawdopodobieństwo Śledzenie innych samochodów za pomocą filtrów Kalmana

TYDZIEŃ 3:

Przetwarzanie obrazu i uczenie maszynowe Znajdowanie obiektów w danych czujnika

TYDZIEŃ 4:

Planowanie i wyszukiwanie Ustalanie, gdzie jechać za pomocą wyszukiwania A * Wyszukiwanie optymalnych tras z programowaniem dynamicznym

TYDZIEŃ 5:

Sterowanie Sterowanie sterowaniem i prędkościami za pomocą PID

TYDZIEŃ 6:

Wszystko razem. Programowanie samochodu z własnym napędem

TYDZIEŃ 7:

Egzamin końcowy Egzamin sprawdzający Twoją wiedzę

JonnyBoats
źródło
Wydaje mi się, że należy to do sztucznej inteligencji, ale większość ludzi ma to ciasto na niebie, kiedy używa się tego terminu. W każdym razie prawie każdy program symulujący rzeczywisty świat prawie zawsze wymaga pewnej formy bardziej zaawansowanej matematyki. Ponadto każdy system z czujnikami prawie zawsze wymaga pewnej formy zaawansowanej matematyki.
Dunk
11

Do rozwoju aplikacji naukowych, programowania gier, systemów czasu rzeczywistego, systemów symulacji i takich aplikacji, rzeczywiście wymagana jest matematyka. W końcu programowanie wykorzystuje matematykę i naukę do rozwiązywania problemów. Z drugiej strony, aby zaprogramować aplikację, która przechwytuje informacje o użytkownikach w celu zarejestrowania ich w bazie danych, nie wymaga żadnego wysokiego poziomu matematyki. Niemniej jednak wszyscy programiści skorzystaliby z Podstawowej teorii liczb, Algebry, Podstawowej teorii zbiorów i Podstawowej analizy numerycznej.

Od strony matematyki różne tematy matematyki (jak również wiele innych dziedzin nauki) mogą znacznie skorzystać z programowania.

Emmad Kareem
źródło
Zgadzam się. Dużo pracuję nad rozwojem przedsiębiorstwa i nie znalazłem potrzeby korzystania z zaawansowanej matematyki, chociaż zdecydowanie warto wiedzieć, ponieważ może to zdecydowanie pomóc. Powiedziałbym, że każdy programista powinien wziąć przynajmniej rachunek 1. Inne typy programów mogą często wykorzystywać takie rzeczy jak transformaty Fouriera, modele statystyczne i programowanie 3D.
Makotosan
@Makotosan, dziękuję za komentarz. Matematyka jest jednak bardzo interesująca, biorąc pod uwagę krótki czas programisty, najlepiej poświęcić wysiłek na to, co naprawdę zwiększa produktywność. Dodatkowe informacje stają się luksusem dla tych, którzy mogą sobie na nie pozwolić.
NoChance
Myślę, że matematyka jest tylko wiedzą domenową potrzebną dla twojego programu, tak samo jak zrozumienie finansów jest ważne dla programistów Excela.
sixtyfootersdude
9

Myślę, że bardziej niż cokolwiek innego, to podobieństwo zastosowanego procesu myślowego sprawia, że ​​oba wydają się tak podobne.

Na przykład oba są niezwykle logiczne. Jeśli wykonasz ten sam zestaw kroków lub tę samą formułę, zawsze uzyskasz ten sam wynik. Na przykład 1+1zawsze będzie równy 2, a set a = 1środki abędą zawsze wynosić 1 (dopóki nie ustawi się czegoś innego)

Innym przykładem jest potrzeba myślenia przestrzennego. W matematyce odkryłem, że często muszę trzymać liczby w głowie i wizualizować to, co robię. W bardzo prosty przykład, chciałbym rozbić problemów matematycznych, tak że coś 13x13staje się 13x10 + 13x3, co jest znacznie łatwiejsze dla mój mózg do pracy, a ja muszę śledzić że 13x10=130 + 13x3=39tak 130+39 = 169. Ta sama umiejętność wizualizacji czegoś niewidocznego lub podziału problemu na mniejsze problemy jest często stosowana do programowania.

Czuję więc, że chociaż nie musisz mieć matematycznego zaplecza do programowania, w którym matematyka jest definiowana jako wykonywanie obliczeń z liczbami, musisz mieć podobny proces myślowy i zrozumienie, jak byś używał podczas rozwiązywania problemów matematycznych.

Rachel
źródło
A podstawowa matematyka jest zwykle odskocznią do uzyskania tego systematycznego, logicznego procesu rozwiązywania problemów. Struktura językowa, coś, czego nie uczy się już w szkole, jest kolejnym krokiem. Istnieje powód, dla którego kompilator ma analizator składni, a im lepiej analizujesz i analizujesz strukturę kodu, tym większe prawdopodobieństwo, że będziesz w stanie dobrze programować.
Fiasco Labs
5

Przypuszczam, że do tej pory nauczyłeś się elementów rachunku różniczkowego i niektórych trygonometrii . I nazywacie to Matematyką. To tak, jak nazwać parę nóg „istotą ludzką”.

Rachunek nie ma wiele wspólnego z programowaniem i jest ściślej związany z fizyką i inżynierią. Będziesz potrzebować fizyki do silników gier i rachunku do analizy statystycznej . (Analiza statystyczna generuje więcej miejsc pracy, na które wygodnie jest się przyznać)

Rachunek dla nas dotyczy bardziej powiązania programowania ze światem rzeczywistym. Rachunek obliczeniowy jest gałęzią, która bada, jak daleko idzie ta relacja. (spoiler: idzie źle, ale możemy to kontrolować w nieskończoność )

Trygonometria to zwariowane gniazdo w pudełku, które pojawia się, gdy najmniej się tego spodziewasz, a następnie od tego zależy analiza sygnału , generowanie dźwięku i wiele innych rzeczy.

Przejdź przez Algebra 101 i Logic 101 , przestudiuj historię Pascala, Leibniza (tak, prawie wymyślił rachunek różniczkowy, pomylił się w połowie, kłócił się z Newtonem, aż wszystko zaczęło mieć sens - i nadal wymyślił kodowanie binarne), Babbage i wiele waszych wątpliwości zniknie. (jednak twoja definicja matematyki zostanie na zawsze zmieniona)

ZJR
źródło
4

Programowanie obejmuje wiele tradycyjnych dyscyplin akademickich.

Matematyka, szczególnie matematyka stosowana , jest ważna w programowaniu, ponieważ wiele rzeczy, o które prosimy komputery, to chrupanie liczb. Zrozumienie metod numerycznych oraz efektywnego i odpowiedniego stosowania obliczeń jest jedną z rzeczy, które wielu programistów robi na co dzień.

Joel Brown
źródło
4

Tutaj opowiem ci praktyczne rzeczy, w których zetknąłem się z matematyką w rozwiązywaniu niektórych problemów obliczeniowych (szczególnie w domenie internetowej):

  1. Wyszukiwarki używają rachunku wektorowego do wyszukiwania danych.
  2. Faktoryzacja macierzy może być używana do wielu rzeczy, takich jak analiza sentymentów.
  3. Musisz znać Rachunek sumowany, aby dowiedzieć się o złożoności kodu, który piszesz.
  4. Prawdopodobieństwo jest szeroko stosowane w wyszukiwaniu / wyszukiwaniu informacji probabilistycznych
  5. Naiwne twierdzenie Bayesa jest używane w analizie predykcyjnej.
  6. Musisz znać takie rzeczy jak hiperpłaszczyzna itp. Dla koncepcji zwanej SVM, która jest ponownie używana w uczeniu maszynowym do rozwiązywania problemów kategoryzacji.
  7. Musisz zrozumieć Entropy, aby robić rzeczy związane z przetwarzaniem języka naturalnego.
  8. Utajone indeksowanie semantyczne / Analiza głównych składników wykorzystywana przez wyszukiwarki silnie opiera się na algebrze macierzy. & wkrótce......
Jawar
źródło
3

Problem z twoim pytaniem polega na tym, że „matematyka” i „programowanie” są zarówno bardzo szerokimi, jak i głębokimi przedmiotami, o których można dowiedzieć się więcej, niż ktokolwiek mógłby opanować w życiu (bez przesady). Osobiście posiadam tytuł magistra matematyki. Podczas studiów wydawało mi się, że im więcej się uczyłem, tym mniej wiedziałem w porównaniu do moich rówieśników; czułem, że z biegiem lat stałem się mniej inteligentny. Kiedy przedstawiłem pracę magisterską grupie profesorów, nawet większość z nich wydawała się być w dużej mierze nieznana temu, co studiowałem.

Podobnie jestem teraz programistą aplikacji internetowych bazującym na bazach danych. Jeśli porównasz mnie do kogoś, kto zajmuje się programowaniem w języku asemblera, możesz myśleć o nas jako o dwóch bardzo utalentowanych profesjonalistach, ale mielibyśmy znacznie inną wiedzę, mimo że oboje jesteśmy „programistami”.

W miarę postępów w nauce matematyki wyższej (wykraczającej poza rachunek pierwszoplanowy) odkryjesz, że matematyka zaszczepia dyscyplinę abstrakcyjnego rozumowania, która będzie ci dobrze służyć podczas programowania. Uważam, że ta dyscyplina jest bardzo ważna, ponieważ będziesz zajmować się abstrakcyjnymi problemami podczas programowania.

Pewnie, w programowaniu studentów pierwszego roku prawdopodobnie poznasz arytmetykę wskaźników. Będziesz pisać krótkie programy ilustrujące tę koncepcję, a twoje rozumienie tego, jak napędza twój komputer, jest zgodne z twoją wolą. Jednak nauczenie się, jak działa arytmetyka wskaźników w abstrakcji, nie ułatwi ci używania wskaźników w prawdziwym programie. Kiedy przyjdzie czas na zmieszanie 10 000 wierszy kodu i wprowadzenie pewnych zmian w arytmetyce wskaźnika, będziesz musiał być w stanie rozumować na bardzo abstrakcyjnym poziomie, podejmując strategiczne decyzje, aby zrównoważyć różne obawy dotyczące wpływu twoich zmian kod.

Jako programista musisz zrównoważyć „czytelność” kodu, wydajność kodu, łatwość użycia powstałych programów i wiele innych kwestii. Musisz być w stanie dokonać bardzo abstrakcyjnych porównań, aby zrównoważyć te obawy. Każdego dnia dokonasz wielu takich porównań. Nie zacząłem nawet zajmować się zarządzaniem czasem. W sposób abstrakcyjny uzasadnisz prawdopodobieństwo, że coś, co zrobisz, wpłynie na twoją zdolność do wykonywania zadań na czas, i ponownie będziesz podejmował wiele decyzji każdego dnia, które wpłyną na twoją pracę.

Wreszcie, musisz utrzymać dyscyplinę filozoficzną, aby móc przyswoić nowe pomysły i koncepcje, aby móc kontynuować, gdy stare metody i praktyki przestaną być stosowane. Po raz kolejny będziesz musiał być w stanie ocenić pojawiające się pomysły i dokonać abstrakcyjnego porównania z tym, co już wiesz.

Krótko mówiąc, programowanie, jak większość z nas wie, nie ma wiele wspólnego z matematyką, jak większość z nas wie; ale kiedy spojrzysz na to na poziomie abstrakcyjnym, mają one wiele wspólnego.

Ciastka Z Mąki Ryżowej
źródło
Szczególnie podoba mi się część „jak większość z nas o tym wie”. To jest trudność, którą widzę czytając większość odpowiedzi tutaj: „lewa ręka” nie wie, co robi „prawa ręka”.
Loop Space,
Myślę, że „lewa ręka nie wie, co robi prawa ręka” podsumowuje. OP powiedział, że „zaczyna od dołu” z Javą. Programowanie w Javie przypomina budowanie czegoś ze śrub i tarcicy ze sklepu ze sprzętem, w przeciwieństwie do obróbki śrub i przekształcania żywych drzew w tarcicę (co byłoby bardziej jak programowanie w asemblerze)
Rice Flour Cookies
2

Matematyka opisuje (powiedzmy) równanie sześcienne.

Algorytm opisuje, jak rozwiązać to równanie sześcienne.

Konstruowanie tego (lub dowolnego) algorytmu w sposób, który może być wykonany przez maszynę, jest programowaniem .

Informatyka to analiza algorytmu - jego teoretyczna wydajność czasowo-przestrzenna, granice błędów itp. To wiele można uznać za gałąź matematyki. Zauważ jednak, że informatyka i programowanie nie są w rzeczywistości tym samym. Ważne jest, aby mieć podstawy w informatyce, jeśli chcesz być dobrym programistą, ponieważ pomaga ci to lepiej projektować i rozumować opracowywane algorytmy. Ale to nie jest wymóg.

Dobry programista może nie być (w rzeczywistości często nie jest) dobrym matematykiem i na odwrót. Są to odrębne umiejętności, które można zidentyfikować.

mcmcc
źródło
3
To zależy od twojej domeny. Jeśli chcesz zostać programistą, tak naprawdę nie musisz znać matematyki. Jeśli chcesz stać się kluczową częścią biznesu (w wielu domenach), umiejętność znalezienia rozwiązania problemów z domeną jest niezbędna. Bardzo często rozwiązania te można uzyskać tylko dzięki solidnemu zapleczu matematycznemu. Być może nie musisz być ekspertem w żadnej konkretnej dziedzinie matematyki, ale powinieneś wiedzieć, jak zastosować szeroki wachlarz matematyki, aby dowiedzieć się, jaka matematyka może rozwiązać twój konkretny problem w danym momencie.
Dunk
2

Przez lata widziałem wiele pytań na forach tego typu, na których prawdziwy problem polegał na słabym zrozumieniu matematycznym plakatu. Na przykład każdy, kto ma dobre podstawy w algebrze, rozumie, że nie można podzielić przez zero. Ale widziałem wiele pytań, w których plakat nie rozumiał tego, a następnie nie rozumiał komunikatu o błędzie, mówiącego „nie można podzielić przez zero”. Widziałem wiele pytań, w których było jasne, że plakat nie rozumiał podstawowej logiki. Widziałem zbyt wiele pytań, w których pojęcia algebry boolowskiej nie były wyraźnie rozumiane.

To, że nie piszesz dowodów matematycznych lub nie rozwiązujesz bezpośrednio równań jak w podręczniku do matematyki, nie oznacza, że ​​nie musisz rozumieć pojęć, które się za nimi kryją. Nawiasem mówiąc, przez wiele lat pracy nigdy nie spotkałem złego programisty, który dobrze rozumiał matematykę.

W niektórych dziedzinach używasz dużo matematyki bezpośrednio, takich jak programowanie gier, programowanie statystyczne, programowanie finansowe, niektóre systemy wbudowane. W niektórych przypadkach otrzymujesz równania, których potrzebujesz w wymaganiach, a czasem nie. Jednak nawet po otrzymaniu równania odpowiednie tłumaczenie tych równań na kod programowania wymaga zrozumienia równania na początku.

Chociaż w podstawowej aplikacji CRUD można uzyskać niewiele więcej niż podstawową algebrę, większość bardziej interesujących problemów i bardziej zaawansowanej pracy wymaga zrozumienia matematyki. Dlaczego więc chcesz ograniczyć się od samego początku, nie dogłębnie ucząc się matematyki?

HLGEM
źródło
2

Dwa przykłady, które natychmiast przychodzą na myśl, to:

funkcje - Pomysł zastosowania transformacji do zmiennych wejściowych w celu wytworzenia zmiennej wyjściowej jest silnie zakorzeniony w matematyce. Jeszcze bardziej pojęcie przekazywania funkcji jako parametru do innej funkcji. Zasadniczo pojęcie abstrakcyjnego myślenia związane z programowaniem dość dokładnie przypomina matematykę.

bitMasks - To powszechne podejście programistyczne do rozwiązywania problemów wymaga co najmniej podstawowego zrozumienia algebry boolowskiej, aby nawet zrozumieć tę koncepcję.

JohnFx
źródło
1

Z perspektywy programistów: Matematyka jest podzbiorem programowania.

Matematyka stosowana w programowaniu:

Pracując ze zbiorami (tablice, listy, mapy itp.) W programowaniu, masz do czynienia z rzeczywistymi implementacjami matematycznych abstrakcji.

Programowanie bez matematyki:

Jeśli tak println("Hello World"), to fakt, że pewna matematyka jest używana do obliczania pozycji na ekranie, długości łańcucha itp., Jest naprawdę w większości nieistotny.

Korzystanie z programowania matematyki:

Wdrożenie matematyki i fizyki w języku programowania umożliwia takie rzeczy, jak projektowanie wspomagane komputerowo.

Jacek
źródło
Istnieje przecięcie rzeczy związanych zarówno z matematyką, jak i programowaniem. Żaden z nich nie jest właściwym podzbiorem drugiego. Gdybyś wiedział więcej MATH, wiedziałbyś o tym. Narysujmy diagram Venna i zobaczmy, czy możemy znaleźć przedmiot w każdym obszarze. Algebra jest związana z matematyką i programowaniem. Zasady programowania obiektowego nie są ściśle związane z matematyką, ale są abstrakcjami, ponieważ matematyka jest abstrakcją. Dyskretna matematyka jest niezwykle przydatna dla programistów, podobnie jak statystyki. Rachunek rzadko pojawia się u większości programistów, nigdy jeszcze dla mnie od 30 lat.
Warren P,
0

Programowanie zwykle opiera się na modelu, który zwykle jest modelem matematycznym.

Weźmy przykład tworzenia kalkulatora hipotecznego. W tym celu musisz wiedzieć, jakie jest zainteresowanie, jaki jest złożony interst i tak dalej. Jeśli nie rozumiesz podstawowej matematyki, ktoś inny musi przekazać Ci te informacje. Zwykle zadaniem programisty jest zrobienie wszystkiego. W razie potrzeby możesz zawsze szukać pomocy.

W matematyce istnieje prosta koncepcja, która jest szeroko stosowana w programowaniu. Na przykład wyrażenia, równanie, zmienne są głęboko używane w programowaniu. Jeśli nie rozumiesz matematyki, możesz nie być najlepszym programistą.

Mając silną matematykę, daj więcej rzeczy do modelowania swojej pracy. To ostatecznie czyni cię lepszym programistą. Na przykład możesz chcieć narysować równanie kwadratowe w jednym ze swoich projektów, w ten sposób uczysz się więcej rzeczy tylko dlatego, że jesteś silny z matematyki. Albo piszesz program, aby znaleźć obszar koła, dać ci więcej doświadczenia.

W mojej krótkiej karierze nauczycielskiej odkryłem, że jeśli studenci nie mają wiedzy matematycznej, są prawie zagubieni, gdy robią problemy finansowe. Jeśli zgubią się w tym modelu, nauka samego języka staje się trudniejsza i, szczerze mówiąc, bardzo frustrująca.

Bez nazwy
źródło
3
To, czy ktoś może rozwiązać problem finansowy, ma wszystko wspólnego z tym, czy jest on kompetentny w tej dziedzinie, czy nie ma prawie nic wspólnego z umiejętnościami programistycznymi. Pracuję z oprogramowaniem do przetwarzania sygnałów, które zawiera dużo matematyki, która jest ponad moją głową. Moja praca nie polega na matematyce, lecz na przekształcaniu tego, co produkują matematycy i inżynierowie, dla których programowanie nie należy do ich specjalizacji, w dobre oprogramowanie. Ponieważ to moja domena.
Blrfl
W większości praktycznych dziedzin oba są osobne: ktoś ma model i ktoś musi go zaprogramować. Więc tak, masz rację. Ale aby ktoś mógł nauczyć się programowania od samego początku, musi znać matematykę. W przeciwnym razie będzie to trudne. Muszą wiedzieć o zmiennych, wyrażeniach i różnych właściwościach matematycznych. Pracowałem z zespołem optymalizacyjnym. Pracowali nad rozwiązaniami. Gdyby nie mieli wiedzy na temat matematyki, nigdy by na nią nie pracowali. Odpowiedziałem na to z punktu widzenia uczenia się i wiedząc, że to dopiero nowy uczeń, który wkracza w programowanie.
Noname
Z punktu widzenia uczenia się konieczne jest posiadanie podstaw matematycznych, w przeciwnym razie inni nie będą się uczyć.
Noname
Solvery są bardzo problematyką matematyczną, co sprawiłoby, że zrozumienie matematyki wymagałoby pracy nad nimi. Nie twierdzę, że nie ma żadnych pojęć matematycznych związanych z programowaniem, ale jak zauważył @DeadMG w swojej odpowiedzi, istnieje wiele bardzo praktycznych aspektów procesu, w którym matematyka absolutnie nie pomaga.
Blrfl
1
@Birfl, DeadMG jest, cóż, trochę ignorantem (i prawie zawsze się myli). Matematyka zawsze pomagałaby we wszystkich „miękkich” obszarach. Psychologia opiera się w dużej mierze na matematyce. Socjologia jest jeszcze bardziej matematyczna. A w przypadku projektowania systemów lepiej nie dotykać go bez bardzo dobrego tła w semantyce (z dyskretnej matematyki). W programowaniu nie ma aspektów, które nie są matematyczne. Uwzględniono projekt GUI i kodowanie CRUD.
SK-logic
0

Teoretyczne podstawy informatyki (która jest czymś więcej niż tylko programowaniem) mają charakter matematyczny. Wszystko, od samej definicji obliczalności, analizy i wyrażania algorytmów po specyfikacje języków programowania, opiera się na szerokiej gamie matematyki. Zobacz tę stronę Wikipedii, aby poznać smak matematyki.

Większość z nich nie jest tak naprawdę konieczna, aby wiedzieć, czy wszystko, co chcesz zrobić, to kod procy. Jeśli chodzi o stosowaną matematykę, chyba że wejdziesz na dziedzinę wymagającą poważnych umiejętności w zakresie chrupania liczb (szczegółowe symulacje fizyczne, analiza sygnałów, analiza finansowa i przewidywanie itp.), Prawdopodobnie nie użyjesz nic bardziej zaangażowanego niż podstawowa algebra na co dzień.

John Bode
źródło
0

To szczerze zależy od tego, jakie programujesz.

Jeśli tworzysz lekkie aplikacje internetowe z pewną logiką, prawdopodobnie nie potrzebujesz bardziej zaawansowanych klas matematycznych, które wymagają wielu stopni. Jeśli pracujesz z rzeczami, które są nieco bardziej obciążające procesor, niż będziesz potrzebować więcej matematyki. Jeśli pracujesz w jakiejkolwiek dziedzinie naukowej, naprawdę chcesz mieć pod ręką swoje odniesienia do obliczeń.

Kolejnym miejscem, w którym będziesz potrzebować matematyki, jest pisanie gier. W momencie, w którym chcesz poruszać się po przekątnej, musisz zacząć przeprowadzać ostrożne obliczenia, aby nie skończyć z postaciami, które przyspieszają, jeśli przejdziesz do bloku na NE.

To powiedziawszy, niekoniecznie musisz nauczyć się matematyki, a następnie nauczyć się programowania. Nauka programowania jest całkowicie poprawna, a następnie wybranie zaawansowanej matematyki. Zacząłem kodować, zanim postawiłem stopę w klasie Calc lub Trig, i poszło mi dobrze. Kiedy zacząłem uczyć się zaawansowanej matematyki, odkryłem, że kodowanie naprawdę mi pomogło, ponieważ mogłem bardziej eksplorować ten temat, zmieniając zmienne w szybkim skrypcie, niż za pomocą pióra i papieru.

kcunning
źródło
Zdecydowanie musisz znać swoją matematykę i matematykę wektorową w grach.
Alan B
Absolutnie. Przekonałem się również, że pisanie gier może być świetnym sposobem na naukę matematyki, o której zapomniałeś ze szkoły średniej, o ile nie dotrzymasz terminu.
kcunning
0

W żadnym wypadku nie jestem ekspertem od matematyki! Dobrze sobie radziłem w geometrii HS, co było dla mnie logiczne. Uważam, że programowanie i geometria są bardzo podobne. Logika logiczna bardzo dobrze kojarzy mi się z dowodami geometrycznymi.

Potem jest niewiele rzeczy, takich jak wiedza, że ​​możesz kontrolować liczbę kolumn w rzędzie za pomocą operatora modułu.

Zdecydowanie popieram pomysł bycia dobrym programistą, który ma przyjaciela (lub kolegę / konsultanta), który jest dobrym matematykiem.

Oczywiście, jeśli masz szczęście mieć oba zestawy umiejętności, biegnij z nim!

TecBrat
źródło
0

Prosta odpowiedź; Matematyka sprawia, że ​​jesteś szybki . Jasne, możesz google / se / wikipedia usunąć problemy z kodowaniem, ale zrób wystarczająco dużo matematyki i nie będziesz musiał . Wierzcie lub nie, odpowiednio wyszkolony ludzki mózg jest szybszy niż Google . Co więcej, im więcej znasz matematyki, tym szybciej będziesz w stanie zrozumieć wyniki, jakie daje google / se / wiki, i tym mniej będziesz musiał zgłębiać, aby zrozumieć, co mówią ci ludzie. W trakcie rozwiązywania problemów programistycznych i tak skończysz się na nauce matematyki, ale jeśli skupisz się na matematyce, będzie to znacznie bardziej wydajny proces.

Twoje pytanie jest jak muzyk rockowy pytający, dlaczego potrzebuje formalnego szkolenia muzycznego. Czy bez tego można odnieść sukces? Pewnie. Czy to sprawia, że ​​stajesz się bardziej zły, jeśli idziesz z tym? Absolutnie.

Nieco bardziej skomplikowana odpowiedź - kiedy matematykowie i programiści używają słowa „rozwiązanie” (w przypadku problemów, to znaczy nie równań - tj. Nie „korzeni”) - mają one na myśli to samo. Nauka rozwiązywania problemów matematycznych pomaga w nauce rozwiązywania problemów programistycznych.

BTW - i żadne przestępstwo nie jest przeznaczone dla nikogo - każdy, kto mówi, że jest dobrym programistą, ale nienawidzi matematyki, jest wielkim grubym kłamcą. Stało się tak, że zostali wyłączeni z formalnej matematyki przez złego hs lub instruktora college'u i od tego czasu czują się, jakby „nie byli dobrzy w matematyce”. Każdy bez trudności w nauce (tj. Każdy, kto jest w stanie nauczyć się języka OO), jest w stanie wszystko, włącznie z Sophomore Calculus.

jamesson
źródło
0

Działania matematyczne i 99% programowania mają bardzo niewiele wspólnego. Matematyka nie musi być świetnym programistą. Brałem udział w kilku kursach matematyki na poziomie uniwersyteckim, w tym między innymi rachunku I, II, III elementów algebry liniowej i kilku innych.

Jestem inżynierem oprogramowania od ponad 10 lat i bardzo rzadko potrzebuję używać czegoś więcej niż podstawowej matematyki. Istnieje kilka wyjątków, w których potrzebna jest matematyka: jak grafika i inne obszary. Ale 99% programowania i inżynierii oprogramowania nie wymaga matematyki. Wymaga logicznego myślenia, algorytmów, OOP, funkcji, problemów z rozkładem itp.

Pascal Aschwanden
źródło
0

1) W trakcie nauki programowania natkniesz się na żargon techniczny (tj. Algorytm). Aby przeanalizować algorytm, trzeba mieć pojęcie o naturze funkcji wielomianowych, logarytmicznych i wykładniczych.

2) Opierając się na aplikacji informatycznej, trzeba mieć pojęcie na temat matematyki dyskretnej i ciągłej, aby napisać sensowne rozwiązanie. Więcej na ten temat można zrozumieć, przechodząc przez takie kursy jak:

---> Matematyka dla informatyki

---> Kodowanie macierzy: algebra liniowa za pomocą aplikacji informatycznych .

Dla początkujących czuję, że języki dynamiczne, takie jak python/, schemesą pierwszymi najlepszymi językami programowania. Języki o typie statycznym, takie jak Java/, C++nie są najlepsze na początek. Opencourseware opublikowane z „MIT / UOC-Berkeley / Stanford” może poprowadzić Cię lepiej niż zwykły program studiów. Założę się, że!!!

nadmiernej wymiany
źródło
-1

Osobiście powiedziałbym, że zależy to od poziomu zaangażowanego programowania. Modele danych i korelacje między nimi, zaangażowane algorytmy programowania. Na przykład: aby napisać program, który wyświetla „Hello World”, nie widzę żadnego wymogu, aby zapoznać kogoś z Wyższą Matematyką. Poziom zaangażowania matematycznego zależałby od poziomu złożoności problemu, który należy rozwiązać programowo.

Aubede
źródło
-2

Tylko moje doświadczenie, nie więcej:
nie jestem matematykiem. Nie jestem geniuszem, tylko samouk.
... i po wielu latach zdaję sobie sprawę, że pracuję intuicyjnie

Najpierw nauczyłem się Pick (martwy system) od zera (sam z dokumentacją papierową i próbkami),
... po C, C ++ dla zabawy i Java dla pracy.

Jak już o tym mówiłeś, mogę powiedzieć, że nauka tego języka nie jest problemem matematycznym (nawet jeśli podstawowa / minimalistyczna algebra ci pomoże), ale logicznym .

Teraz wiele narzędzi (takich jak Eclipse) pomaga i poprawia: musisz skupić się na tym, co chcesz zrobić , używając tylko 52 zastrzeżonych słów ... i wielu bibliotek, które mają dla ciebie pracę.

Jeśli więc lubisz język, wybierz projekt Java, zapoznaj się z Design Design, UML, zrozum JVM i jak go używać z Bigloo i Scalą, rozumieć raz po raz w ciągu 10 000 godzin.

Doświadczenie w Javie zapewnia dobrze płatne prace i przez długi czas w dużych projektach przemysłowych, a będziesz mógł przejść do innego środowiska, ponieważ potrafisz mówić informacyjnie , a nie matematyki .

Jeśli zrozumienie języka (słów, znaczenia, koncepcji i innych ukrytych nauk logicznych, takich jak semantyczna, ontologia, ...) jest dobrym celem dla osoby ludzkiej, przez całe życie, możesz zacząć już teraz .

W przeciwnym razie eksperymentuj w inny sposób.

Z pozdrowieniami
Claude

cl-r
źródło
Ponownie zobacz poniższy post. Robisz matematykę, po prostu nie chcesz tego przyznać.
jamesson
1
Widziałem, ale znalazłem też inne posty odpowiadające na pierwsze pytanie dotyczące zainteresowań matematycznych dla ucznia (który zna podstawy, a nie specjalności) z -1 ^ n, gdy mówili o logice po łacinie, filozofii, języku ... prawdziwe życie. Czy matematyka daje umysł tak ograniczony, że wszystko nie jest w równaniu, jest odrzucane, bez zrozumienia życia wokół i zapominania, że ​​Newton zaczyna się od intuicji podanej przez jabłko? Być może to moderator otwiera umysły na inne światy, jeśli to możliwe, wzbogaci to obie strony dyskusji. Mimo to będę ostrożny w pisaniu.
cl-r
-2

Ktoś prawie uderzył w gwóźdź w głowę powyżej. Programowanie to matematyka. W szczególności programowanie to gałąź logiki matematycznej zwana teorią obliczalności lub teorią rekurencji.

Inne gałęzie matematyki są zaangażowane bezpośrednio, w szczególności formalny język i teoria automatów. Pomagają one opisywać wyrażenia regularne używane w dopasowywaniu wzorców oraz gramatyki formalne używane do opisywania i analizowania języków programowania.

Każdy, kto twierdzi, że programowanie nie jest matematyką, albo nie wie, o czym mówi, albo ma ukryty motyw, taki jak maksymalista „Własności intelektualnej”, który ma nadzieję na zysk dzięki patentowi na algorytm lub inną podstawową matematykę fakt lub odkrycie.

Kilka odniesień do programowania jako matematyki i następstwo, że nie wiem o czym mówisz:

Program to dowód: logika XIX wieku i informatyka 21 wieku

Programy są dowodami: modele i typy w rachunku Lambda

Wikipedia Artykuł w Curry-Howard Correspondence

O niezwykłej skuteczności logiki w informatyce

Nieuzasadniona skuteczność logiki

Tak, są one ciężkie dla „logicznej” części logiki matematycznej, ale matematyka jest ogólnie uznawana za kilka aksjomatów, a ich konsekwencje logiczne zostały opracowane za pomocą logiki pierwszego rzędu.

Jeśli chodzi o powiedzenie inaczej i bycie maksymalistą „IP” dla pieniędzy:

Jak opatentować algorytm w USA . Algorytmy nie podlegają opatentowaniu, ale na algorytmy udzielane są patenty, nie nazywając ich algorytmami. Nietrudno jest znaleźć w Internecie dużo materiałów, które wskazują lub próbują wyjaśnić tę sprzeczność.

Bruce Ediger
źródło
6
-1 dla reklamy hominem na końcu.
Charles E. Grant
@charles ad hominem przeciwko komu? Oryginalny plakat? Myślę, że sens patentów jest wnikliwy (nawet jeśli można by je lepiej sformułować).
gcbenison
@gcbenison: „Każdy, kto twierdzi, że programowanie nie jest matematyką ... lub ma ukryty motyw”, jest klasycznym atakiem ad hominem: nie muszę odpowiadać na twoje argumenty, ponieważ jesteś złym człowiekiem. Uznałem to za irytujące, ponieważ nie sądzę, aby programowanie było matematyką i uważam, że patenty na oprogramowanie są obrzydliwością. Mam doktorat z matematyki stosowanej, ale czy wiem, o czym mówię, z pewnością jest przedmiotem dyskusji.
Charles E. Grant
@commentators: dzięki. Zwykle ignoruję te zachowania, ponieważ są one samozwańczą nędzą przypisywaną innym. --- do Bruce'a Edigera: Trwa refleksja znaku wątpliwości.
cl-r
@ cl-r: Myślałem o bardzo konkretnych przykładach, takich jak kampania anty- Linuxowa SCO i nature.com/news/... Jeśli jako programiści pozwolimy prawnikom zdefiniować matematykę na korzyść prawnika, wówczas cała cywilizacja robi wielką szkodę .
Bruce Ediger,
-2

Matematyka ma wszystko wspólnego z programowaniem. Na przykład w programowaniu gier musisz używać matematyki do fizyki i robić więcej mniej wszystkiego. Aby przenieść x pozycję gracza w Javie byś zrobił, int x = x + speed * deltaTimealbo int x = x - speed * deltaTimeAle można powiedzieć, że jest to podstawowe matematyki więc pozwala przejść do bardziej zaawansowanych rzeczy. Istnieje algorytm oceniania szachistów o nazwie Elo Algorytm.

To jest wyjaśniony algorytm Elo

Jeśli nadal uważasz, że jest to podstawowe, spróbuj tego. Jak obliczyć czyjś wiek, kiedy otrzymujesz dzień urodzenia, miesiąc i rok. Odejmij rok urodzenia od tego roku, a następnie sprawdź, czy miesiąc jest krótszy niż ten miesiąc i czy nie jest odejmowany 1.

To nie magia, to ciężka praca i dobra matematyka.

one2three
źródło
-4

Ok, prawdopodobnie dostanę za to mnóstwo głosów negatywnych, ale programowanie i matematyka to dwie zupełnie niezwiązane rzeczy. Ktoś może być niesamowitym programistą znającym tylko takie podstawowe funkcje, jak dodawanie, mnożenie i podstawowe operacje logiczne.

Większość programistów nie rozwiąże ani jednego równania podczas swojej kariery zawodowej, a takie rzeczy, jak duża notacja O, mogą być również uchwycone w sposób nie matematyczny. Myślisz tylko o tych rzeczach, wyobrażasz sobie, jak bity przewracają ci się w głowie, i voila, możesz powiedzieć, jaki to jest wielki O, jeśli ktoś wyjaśni ci, czym jest log i moc.

Czasami matematyka może to uczynić prostym lub może sprawić, że poczujesz dumę z faktu, że coś udowodniłeś, ponieważ możesz rozszerzyć znaczenie programowania na dziedzinę matematyki, nazywając to dyskretną matematyką i tym podobne, ale ucząc się wielu równań różniczkowych i całek oraz jak to udowodnić, IMHO nie jest najlepszym pomysłem, co zrobić, jeśli chcesz odnieść sukces jako programista.

Przynajmniej nie dotykałem matematyki przez 10 lat, cały czas kłóciłem się z moimi profesorami matematyki, a kiedy potrzebowałem matematyki do renderowania w czasie rzeczywistym, nauczyłem się wszystkiego od strony programistów, bez dowodzenia żadnych twierdzeń, i dla mnie było to proste i łatwe do zrozumienia w porównaniu do wszystkich profesorów matematyki, w których wkładanie w nasze głowy komentarza „nie możesz być dobrym programistą, jeśli nie znasz matematyki”. Jasne, że możesz, łatwo!

Teraz znam matematykę, dzięki czemu mogę rozmawiać z programistami matematyki ze wszystkimi różnicami w logach i innymi rzeczami, ale tylko z tego powodu, aby nie zemdlały. Ponieważ te rzeczy są bezużyteczne 99,9% czasu, a kiedy już są, można je nauczyć 1000 razy bardziej efektywnie z punktu widzenia programistów.

Heck, programiści potrzebują co najmniej 5 lat, aby opanować język programowania + ramy + najlepsze praktyki. Dlaczego, u licha, powinni nauczyć się dowodzić twierdzeń? Uczniowie matematyki zajmują się matematyką, programiści uruchamiają te rzeczy, tak to powinno działać.

Koder
źródło
8
Dzieciak mówi mamie, że nie będzie potrzebował matematyki, bo dorośnie i zostanie milionerem w baseballu. Jego mama mówi mu: „Będziesz potrzebował matematyki, by policzyć swoje miliony”.
Nav
2
Przepraszam, muszę się nie zgodzić. Studiowanie matematyki uczy logicznego myślenia. Jeśli nie potrafisz myśleć logicznie, wszystko, co napiszesz, to garść kodu, który się nie skaluje. Nie twierdzę, że musisz być ekspertem w dziedzinie matematyki, a nawet matematyki, ani nie musisz jej używać w życiu codziennym. Ale musisz to przestudiować, jeśli chcesz rozwiązać prawdziwe problemy z programowaniem.
jmort253
2
@ jmort253: Studiowanie matematyki nie czyni z ciebie logicznie myślącej osoby. Jest to albo coś, co jest w twoim umyśle, albo nie. Nienawidziłem matematyki od szkoły, ale jestem bardzo logiczną osobą. Programowanie nie jest matematyką, zajmuję się programowaniem systemów od ponad 10 lat i mogę to powiedzieć ze 100% pewnością, a możesz spodziewać się jeszcze mniej matematyki, gdy zajmujesz się programowaniem stron internetowych lub administracją SQL. Twoim zadaniem nie jest opracowywanie nowych teorii matematycznych, Twoim zadaniem jest sprawienie, aby rzeczy działały przy użyciu ograniczonych zasobów w łatwy do utrzymania sposób przy użyciu najbardziej wydajnych algorytmów i kontenerów.
Koder
2
@Nav: Dla każdej osoby podstawowa matematyka ma sens, aż do równań xiy. Ale liczenie milionów jest zwykle tym, co robią księgowi i prawnicy, ponieważ w przeciwnym razie przegapisz jakieś prawo stanowe, które musi zrobić coś z deklaracją i stracić wszystko tak czy inaczej. Powinieneś być wystarczająco bystry, aby zrozumieć, co się dzieje, ale gdy już coś osiągniesz, bardziej opłacalne będzie skorzystanie ze specjalistycznych usług, które zrobią wszystko za Ciebie poprawnie, szybko i na czas, zachowując formę na siłowni, aby utrzymać to ciężko zarobione miejsce w pierwszej piątce.
Koder
10
Matematyka nie jest procesem rozwiązywania równań. Jeśli jedyną matematyką, jaką kiedykolwiek widziałeś, jest matematyka nauczana w szkole, to nigdy nie widziałeś matematyki .
doppelgreener