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ę:
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, co Vector
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:
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:
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źć .