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 ...
Odpowiedzi:
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:
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ę:
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.
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 .
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, coVector
robi 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:
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:
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 ).
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.
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.
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.
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źć .
źródło
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.
źródło
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.
źródło
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 .
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.
źródło
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.
źródło
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+1
zawsze będzie równy2
, aset a = 1
środkia
bę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ś
13x13
staje się13x10 + 13x3
, co jest znacznie łatwiejsze dla mój mózg do pracy, a ja muszę śledzić że13x10=130 + 13x3=39
tak130+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.
źródło
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)
źródło
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ń.
źródło
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):
źródło
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.
źródło
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ć.
źródło
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?
źródło
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ę.
źródło
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.
źródło
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.
źródło
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ń.
źródło
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.
źródło
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!
źródło
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.
źródło
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.
źródło
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
/,scheme
są pierwszymi najlepszymi językami programowania. Języki o typie statycznym, takie jakJava
/,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!!!źródło
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.
źródło
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
źródło
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ść.
źródło
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 * deltaTime
alboint x = x - speed * deltaTime
Ale 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.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.
źródło
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ć.
źródło