Przedstawiamy programistę matematykowi [zamknięte]

30

Obecnie jestem programistą, mam prawie 16 lat i prawie zawęziłem swoją karierę zawodową do czegoś związanego z uzyskaniem stopnia informatyki lub inżynierii elektrycznej (wiem, że są zupełnie inne, ale to pytanie dotyczy mojego przyjaciela), ale moje przyjaciel nie jest tego taki pewien.

On jest bardzo zainteresowany w matematyce i jest bardzo dobry w tym i myślę, że będzie on cieszyć się programowania, ale nie jest gotów, aby spróbować ( edit on jest gotów spróbować, ale nigdy nie zrobił wcześniej). Czy ktoś może mi zasugerować język lub narzędzie, które mógłby zająć się programowaniem (na rozsądnie podstawowym poziomie, który zakładam), aby rozwiązać problemy matematyczne lub wymagać pewnego rodzaju matematyki.

Jak mówię, lubi matematykę, ale myślę, że podobałoby mu się programowanie, problem polega na tym, że nie chcę, aby zniechęcały go rzeczy, które nie są istotne na poziomach wprowadzających, takie jak przydzielanie pamięci i in. Wiem, że jest to bardzo ważne, ale chodzi o to, że chcę, aby nauczył się trochę programowania z matematyki, a mam nadzieję, że jeśli będzie wystarczająco zainteresowany, może zacząć uczyć się programowania jako programowania.

Edycja: To nie tak, że jest całkowicie niezainteresowany - bardziej, że wcześniej nie badał aktywnie tego obszaru, być może dlatego, że nie jest o nim poinformowany. Nie chciałbym go zmuszać do zrobienia czegoś, czego on nie chce. Widzę w tym coś więcej, aby mógł nauczyć się programowania. Jeśli mu się to nie podoba - w porządku, nie mogę tego kontrolować i nie chcę tego, ale jeśli okaże się, że mu się to podoba - ten nacisk będzie słuszny.

ell
źródło
17
Dlaczego chcesz popchnąć swojego przyjaciela w kierunku, który go nie interesuje?
HLGEM,
3
Dla przypomnienia, wielu programistów, z którymi pracowałem, ma stopnie matematyczne. Ponadto są całkiem dobre.
AngryBird,
1
Zgadzam się z @HLGEM. Nienawidziłbym tego, gdyby ktoś popchnął mnie w kierunku czystej, teoretycznej matematyki. Podobnie ci, którzy chcieliby takich rzeczy, nie znosiliby ich, gdyby zostali popchnięci w stronę nudnych stosowanych rzeczy.
Job
4
Aby spojrzeć na coś z innej perspektywy - masz 16 lat. Nie jesteś programistą, jesteś studentem, który dokonał programowania. Twój przyjaciel nie jest matematykiem, jest uczniem, który lubi (i nauczył się) matematyki. Chociaż podoba mi się odpowiedź z @ perl.j, myślę, że możesz przesadzić w tej kwestii.
Joel Etherton,
2
@ perl.j: Dopóki ktoś nie uzyska niezbędnego stopnia, aby wykazać wymagany „podstawowy obszar studiów” jako dowód, że nie jest matematykiem. Nawet ktoś na uniwersytecie, którego specjalizacją jest matematyka, nie jest jeszcze matematykiem.
Joel Etherton,

Odpowiedzi:

60

Logo matematyczne

Jeśli chcesz mieć język „podobny do matematyki”, Haskell jest twoim najlepszym przyjacielem (dla twojego najlepszego przyjaciela). Możesz łatwo tworzyć nowe funkcje bez kłopotów. To najlepsza rekomendacja językowa, jaką mogę ci dać, przyjacielu. Oto kilka linków:

Matematyka

Mathematica Wolframa jest kolejnym zainteresowaniem, jakie może mieć.

Mathematica is a computational software program used in scientific, engineering, and mathematical fields and other areas of technical computing. It was conceived by Stephen Wolfram and is developed by Wolfram Research of Champaign, Illinois.

Chociaż jest drogi, jest tego wart. Oto kilka linków:

Algorytmy

Algorytmy są ważne dla każdego programu, ale twój kumpel powinien zacząć od nich, kiedy poczuje się dobrze z językiem. Oto kilka innych linków:

Mam nadzieję że to pomoże! Jeśli masz jakieś pytania lub uwagi, prosimy o komentarz! Nawiasem mówiąc, wszystkie te linki mają na celu uwolnienie zasobów. Jeśli chcesz drukowaną książkę, mam kilka rekomendacji, po prostu zostaw komentarz!

dynamiki
źródło
2
Jestem studentem matematyki i mogę polecić Haskella jako niesamowitego z matematyki. Lubię też czytać niektóre teoretyczne rzeczy z tym związane, o wiele bardziej niż większość języków.
Theo Belaire,
2
Jeśli uczy się Haskella, może później przejść nawet do Agdy , języka pisanego w sposób zależny, odpowiedniego do robienia dowodów.
Peter C
4
@ SK-logic Jak możesz to powiedzieć? Matematyka polega na uczeniu się nowych systemów logicznych i ich rozumowaniu (nie zapominaj, że matematycy wymyślili maszynę Turinga). Szczerze myślisz, że ktoś, kto umie poradzić sobie z matematyką, nie poradzi sobie z pojęciem mutacji zmiennych? Chodzi mi o to, aby zrobić coś tak prostego, jak mutacja zmienna w Haskell, wymaga monady sklepowej! Mówienie, że jest to łatwiejsze niż x = x + 1śmieszne.
JeremyKun,
2
@Bean, to była właściwie moja pierwsza reakcja na instrukcję przypisania (i wtedy nie znałem nic oprócz prymitywnych równań liniowych z matematyki). Od tego czasu wielokrotnie widziałem tę samą reakcję. Celowo próbowałem wprowadzić koncepcje programowania funkcjonalnego do osób bez wcześniejszego doświadczenia w programowaniu, stopniowo przechodząc do najważniejszych rzeczy. Najpierw zawsze było łatwo, a to wszystko „WTF?!?” Wygląd zawsze zaczynał się od wprowadzenia koncepcji imperatywnych i OOP.
SK-logic
18

Programowanie funkcjonalne i języki w rodzinie ML lub Haskell zwykle dobrze pasują do umysłu matematyków.

AProgrammer
źródło
Bardzo prawdziwe! Nieskończone listy i wszystko, co jest świetne dla umysłów matematycznych.
14

Jeśli specjalizuje się w matematyce, to bez wątpienia skończy dużo programowania, jeśli nie w językach niskiego poziomu, takich jak C ++, to na wyższym poziomie, specyficznym dla matematyki, takich jak Maple lub Mathematica, w zależności od tego, co robi.

Ponadto, w zależności od obszaru badań, może skończyć się matematyką lub analizą statystyczną, które będą wymagały znacznego programowania. Lepiej przyzwyczaj się do programowania teraz, niezależnie od tego, co zdecyduje.

asa w otworze
źródło
1
Możesz także spróbować wślizgnąć się do jego Pythona za pomocą Sage ( sagemath.org ).
Anton Barkovsky
Oto inny język wyższego poziomu, specyficzny dla matematyki: math.uiuc.edu/Mauaulay2
RyanTM
Sugeruję, żebyś pozwolił mu odkryć programowanie. Kiedy zostanie na to narażony, a na pewno będzie musiał zrobić coś, co wymaga od niego zrobienia czegoś w specyficznym języku matematycznym, to mu się spodoba lub go nie znosi. Jeśli mu się to podoba, będzie mógł wybrać języki, które najlepiej do niego pasują. To nie jest tak, że nie powinieneś pomagać przyjacielowi, jeśli nie okazywał zainteresowania, powinieneś go porzucić.
Ramhound,
12

Naucz go Haskell. Jest to język, w którym możesz myśleć tak jak w matematyce:

  • Funkcja to coś, co mapuje dane wejściowe na dane wyjściowe
  • Rzeczy są oceniane w razie potrzeby
  • Wnioskowanie o typie i szalony system typów
  • Wygodna składnia
  • Świetna społeczność (na przykład na StackOverflow )
  • Monady

Sugeruję, abyś pokazał mu http://learnyouahaskell.com , jeden z najlepszych samouczków dla Haskell.

FUZxxl
źródło
11

Jako ktoś, kto studiował matematykę (mam licencjat z czystej matematyki i właśnie otrzymałem tytuł magistra matematyki stosowanej / statystyki), a później zrozumiał zabawę / praktyczność / znaczenie programowania w dalszej karierze, naprawdę doceniam to pytanie. Chciałbym mieć 10 lat temu takiego przyjaciela, który popchnie mnie do programowania.

Oboje powinniście sprawdzić Project Euler . Co to jest?

Project Euler to seria trudnych problemów programowania matematycznego / komputerowego, których rozwiązanie wymaga nie tylko wiedzy matematycznej. Chociaż matematyka pomoże ci znaleźć eleganckie i wydajne metody, do rozwiązania większości problemów konieczne będzie użycie komputera i umiejętności programowania.

Chociaż nie jest to sugestia specyficzna dla języka, byłaby świetną motywacją do rozpoczęcia programowania (szczególnie, jeśli już istnieje zainteresowanie matematyką). Problemy zaczynają się bardzo łatwo i łatwo, ale szybko stają się bardzo trudne i / lub trudne. Dobre wyzwanie i motywacja, z których oboje mogą się cieszyć.

Jeśli chodzi o język, którego używam, mam doświadczenie w C ++, R, Matlab i Mathematica, które są świetne i szeroko stosowane w społeczności matematyki. Ale dokładniej, zdecydowanie zalecam naukę Pythona, który jest bardzo przydatny w matematyce, ale nie jest tak ograniczony do matematyki, jak niektóre inne (na wypadek, gdyby chciał więcej opcji w późniejszym życiu). Rozpoczęcie pracy z Pythonem jest łatwe, ale jest mnóstwo rzeczy do nauczenia się. Jest również bezpłatny w przeciwieństwie do niektórych innych. C ++ może być dobrym wyborem, ale może mieć więcej przeszkód od samego początku.

bnjmn
źródło
+2 dla Project Euler zamierzał dodać jako komentarz do głównego pytania, dopóki nie zobaczyłem twojej odpowiedzi. OP i jego przyjaciel zdecydowanie powinni się w to zaangażować.
cobaltduck
10
  • Dla matematyków największym podnieceniem są Algorytmy. Twój przyjaciel musi zacząć wdrażać je w Pythonie (jest przyjazny).

  • Numeryczne środowiska obliczeniowe, takie jak MATLAB, będą przydatne do manipulacji matrycami, kreślenia funkcji i danych, implementacji algorytmów.

SHOUBHIK BOSE
źródło
10

To zależy od interesującej go dziedziny matematyki.

Jeśli bardziej interesuje go algebra abstrakcyjna lub kombinatoryka, prawdopodobnie polubiłby Haskella, ponieważ złożony system typów pozwala na bezpośrednie programowanie różnych rodzajów matematyki. ATS może być również opcją.

Polecam Learn You a Haskell for the Great Good na samouczek wprowadzający i czysto funkcjonalne struktury danych dla algorytmów.

Jeśli bardziej interesuje go analiza macierzy, równania różniczkowe lub układy dynamiczne, polecam Matlab , NumPy lub Octave . Interesujące może być również APL przez Dyalog ; chociaż nie zacznę go od tego. Przepisy numeryczne , podczas gdy w C ++ można dostosować, aby służyły jako dobry przewodnik po algorytmach.

Jeśli chce robić statystyki, R jest naturalnym wyborem.

Inżynier świata
źródło
5

Jestem absolwentem matematyki i ukończyłem studia informatyczne. Prowadzę blog o nazwie Matematyka ming Programowanie, w którym badam zastosowania matematyki w programowaniu (i odwrotnie) i muszę przyznać, że większość mniej matematycznych aspektów informatyki jest raczej sucha i niezainspirowana (w zasadzie mój sprzeciw wobec wszystkie absurdalne włamania do programowania systemów z mojego doświadczenia w branży).

Z drugiej strony na moim blogu przyglądam się takim problemom, jak rozpoznawanie twarzy (sporo algebry liniowej), metody szyfrowania, maszyny Turinga i automaty komórkowe, modele przewidywania aktywności seryjnego zabójcy, wyszukiwarki i kilka innych matematycznych pojęć . Najlepsze jest to, że mogę wdrożyć pomysły i wszystkie moje!

Aby twój przyjaciel pokochał programowanie, tak jak my wszyscy, znajdź go naprawdę interesującegoprojekt. Aspekt programowania nie pozostanie bez jego pracy nad produktem, który uzna za piękny. Jeśli chodzi o języki, polecam Mathematica, Racket (bardzo przyjazna, ale nadal potężna pochodna schematu), Python i Haskell. Mathematica jest prawdopodobnie najlepsza, ponieważ może selektywnie implementować własne funkcje matematyczne i używać wbudowanych bibliotek Mathematica do ukończenia projektu (np. Napisać funkcję, która oblicza współczynniki Fouriera, a następnie użyć Mathematica do wykonania pozostałej analizy, takiej jak jak filtrowanie, generowanie obrazu itp.). Nawet podstawowe tematy, takie jak integracja, dają fascynujące projekty (różne reguły kwadratury, integracja Monte Carlo, łagodne przejście do uczenia maszynowego z dużymi zestawami danych).

Wydaje się również, że wiele odpowiedzi pochodzi od osób, które nie zajmują się matematyką lub które nie korzystały z języków, które sugerują do tworzenia oprogramowania matematycznego. Powodem, dla którego ludzie polecają Haskell, jest to, że jest on możliwie najbliższy dosłownej realizacji teorii kategorii i dobrze pasuje do niektórych matematycznych definicji niektórych podstawowych pojęć. Ale jeśli twój przyjaciel jest bliski twojemu wieku, to nie jest gotowy na teorię kategorii matematycznie (ta dojrzałość jest mniej lub bardziej bezużyteczna aż do ukończenia szkoły i niegodziwy trudno się uczyć), a jako pierwszy język Haskell jest najbardziej stromykrzywa uczenia się sugerowanych języków (być może Prolog jest bardziej stromy). Użyłem Haskella do implementacji kompilatora JavaScript i skończyłem z bardzo pięknym eleganckim kawałkiem kodu, ale dla intuicyjnych rzeczy, takich jak zmienna mutacja, już musisz zagłębiać się w nietrywialne monady.

Python i Mathematica będą o wiele bardziej przyjazne, a Mathematica ma najbardziej płytką krzywą uczenia się po prostu dlatego, że wszystkie biblioteki są spakowane w ładny interfejs użytkownika z niesamowitą dokumentacją (wystarczy nacisnąć F1!). Z drugiej strony jest jedna książka, o której słyszałem (ale jej nie przeczytałem), która zapewnia zarówno przejście do zaawansowanej matematyki, jak i wprowadzenie do Haskell jednocześnie . Wygląda na to, że ma pozytywne recenzje Amazon, więc możesz to sprawdzić. Może przejść do języków takich jak C # i Java, jeśli kiedykolwiek będzie chciał robić rzeczy branżowe, ale bardziej prawdopodobne, że nigdy nie będzie musiał wchodzić do tej dżungli (a wiele matematyki przemysłowej to zresztą czysty Matlab).

Ale tak jak powiedziałem, przy odpowiednim projekcie nauka języka staje się radością, niezależnie od projektu.

JeremyKun
źródło
3

Jeśli twój przyjaciel lubi formalną logikę i uważa Sztuczną Inteligencję za interesującą, może chciałby spojrzeć na Prologa .

Za pomocą tego języka podajesz swoje predykaty (wstępne założenia, „fakty”) i reguły wnioskowania („relacje”), a następnie zadajesz pytania.

Następnie Prolog idzie i zastanawia się, czy na pytanie można odpowiedzieć, korzystając tylko z podanych faktów i relacji, a jeśli tak, to udziela odpowiedzi.

Mówisz więc, że „tom jest kotem” i „wszystkie koty są zwierzętami”, i pytasz „czy tom jest zwierzęciem?” a otrzymasz odpowiedź „prawda”.

Możesz też poprosić go o „listę wszystkich zwierząt, o których wiesz”, a otrzymasz listę pojedynczych pozycji „tom”.

Oczywiście składnia jest nieco bardziej skomplikowana, ale masz ogólny pomysł.

Bill Michell
źródło
Prolog jest frustrująco bliski logice pierwszego rzędu, ale naprawdę niezgodny, ponieważ nie ma sposobu na odróżnienie „niesprawdzonego” od „fałszywego”. Pod pewnymi względami jest to fajny język, ale nie narzucałbym go matematykowi i nie nazwałbym go logiką programowania.
David Thornley,
Czy nie możesz po prostu przetestować negacji?
Bill Michell,
2

Najlepszym sposobem, aby zachęcić przyjaciela do spróbowania, może być rozpoczęcie programowania bez zbytniego zastanawiania się nad tym, że programuje.

Gdy będzie gotów zająć się bardziej „programowaniem”, możesz zacząć od tej samej książki i uczyć się programowania z bardziej matematycznych podstaw. Dwie z moich obecnych ulubionych książek to:

SICP można swobodnie oglądać na stronie internetowej MIT Press .

Jeśli twój przyjaciel ma matematyczne skłonności, Lisp nie przedstawi żadnych trudności i uwolni cię od konieczności uczenia się specjalnej składni. Myślę, że Lisp jest łatwiejszy do nauczenia się niż Haskell.

Programista
źródło
1

Zgadzam się z Haskellem, ale z praktycznego punktu widzenia powinien on także uczyć się języka na powszechnie używanej maszynie abstrakcyjnej. Mam na myśli oczywiście język JVM lub język .NET.

Na tych platformach są języki, które są nieco bardziej interesujące niż języki flagowe. Na JVM spójrz na Clojure i Scalę. Na platformie .NET spójrz na F #.

Był też język .NET firmy Microsoft Research o nazwie c-omega, co było bardzo interesujące, ale było tylko projektem badawczym.

dsmith
źródło
1

Matlab jest powszechnie używany do programowania matematycznego i naukowego. Jest to język oparty na skryptach, nie trudny do nauczenia, a wszystkie problemy z pamięcią są ukryte przed użytkownikiem.

Inżynieria oprogramowania i inżynieria elektryczna mogą być łączone w inżynierii komputerowej.

Danny Varod
źródło
0

Jeśli twój przyjaciel nie chce wypróbować programowania, nie rozumiem, dlaczego chcesz wymusić ten problem. Myślę, że kluczem do bycia programistą jest chęć uczenia się, a jeśli nie chce się uczyć, programowanie prawdopodobnie nie jest dla niego

Ale powiedziawszy to, najlepszym rozwiązaniem może być stworzenie małego programu i popisanie się nim. Być może zostaw niektóre jego części niedokończone i sprawdź, czy możesz zainteresować go pomocą w ukończeniu. Wiem dla mnie, że algorytmy i logika programu są o wiele bardziej interesujące niż pisanie składni, więc być może spróbuj poprosić go, aby pomógł ci w logice programu, a potem idź do kodu i pozwól mu zobaczyć wyniki tego.

Jeśli w ogóle wykazuje zainteresowanie kodem źródłowym, pokaż mu, jak pisać własne rzeczy. Osobiście uważam, że sam język nie ma znaczenia, o ile jest łatwy do nauczenia i ma mnóstwo dokumentacji.

Rachel
źródło
0

Wokół Pythona istnieje cała darmowa biblioteka matematyczna i społeczność. Zacznę od „mędrca”, powinien naprawdę dobrze się nim posługiwać, a przy okazji nauczy się programowania w języku Python.

Bill K.
źródło
0

Myślę, że powinieneś pokazać swojemu przyjacielowi kilka różnych wariantów, takich jak:

  • do
  • LISP / Schemat
  • PODSTAWOWY
  • bourne-shell
  • Prolog

Myślę, że C i LISP są dobrym punktem wyjścia, pokazując, że różne języki mogą być lepiej dostosowane do różnych zadań. Nie wierzę w używanie Haskell ani Erlang do wszystkiego.

Interesujący może być również kod maszynowy (lub asembler) dla prostego procesora. Zawsze byłem szczęśliwy, że zacząłem od kodu maszynowego na moim pierwszym C64 . ( MOS 6510 ) Praktyczne doświadczenie, które trudno jest zdobyć jako dorosły, mając ograniczony czas na „zmarnowanie”.

MattBianco
źródło
Muszę się nie zgodzić. Dlaczego małe dziecko, interesujące z matematyki, byłoby zainteresowane kodem maszynowym? A dlaczego C? Zgromadzenie zakłada zbyt dużą wiedzę na temat procesorów. Podobnie C stawia wiele wymagań, które najlepiej pozostawić osobie chcącej nauczyć się poważnego programowania: wskaźniki, rejestry, zakresy, typy. W przypadku pierwszego wprowadzenia do programowania dla takiej osoby coś, co koncentruje się na algorytmach lub zastosowaniach pomysłów matematycznych (prawdopodobieństwo, losowość, symulacje), jest znacznie lepsze. Python, Lisp / Forth, Basic nawet. Powłoka Bourne'a? Dlaczego? ...
Assad Ebrahim
0

Dla mnie programowanie zaczyna się od chęci „zrobienia czegoś”, „co jeśli?” pytanie:

  • „Chciałbym stworzyć własną stronę internetową”, więc poznaj HTML, itp.

  • „Nienawidzę tego, że muszę klikać X lub że widzę Y na tej stronie za każdym razem, gdy odwiedzam. Czy nie ma sposobu, aby to zautomatyzować?” Dowiesz się więc o bookmarkletach lub pisaniu rozszerzeń przeglądarki.

  • „Chcę skatalogować całą moją muzykę i żadne z narzędzi, które widziałem, nie robi tego tak, jak chcę”, więc poznajesz bazy danych.

  • „Chcę śledzić wydatki w moim klubie matematycznym”, więc poznasz arkusze kalkulacyjne, makra programistyczne, a może nawet bazy danych.

Aby napęd naprawdę tam był, musi on pochodzić od niego . Spróbuję znaleźć problem, który chce rozwiązać, a następnie wybrać narzędzie / język / system, który pozwala mu zautomatyzować / zaprogramować rozwiązanie.

David Weinraub
źródło
-2

Moim zdaniem Haskell i Mathematica są dobrą drogą. Większość języków funkcjonalnych jest również dobra dla matematyki. Python jest również dobry, sprawdź dokumentację matematyczną .

Ten moduł jest zawsze dostępny. Zapewnia dostęp do funkcji matematycznych zdefiniowanych w standardzie C.

Tych funkcji nie można używać z liczbami zespolonymi; użyj funkcji o tej samej nazwie z modułu cmath , jeśli potrzebujesz obsługi liczb zespolonych. Wprowadzono rozróżnienie między funkcjami obsługującymi liczby zespolone a tymi, które tego nie robią, ponieważ większość użytkowników nie chce uczyć się tyle matematyki, ile jest wymagane do zrozumienia liczb zespolonych. Otrzymanie wyjątku zamiast złożonego wyniku umożliwia wcześniejsze wykrycie nieoczekiwanej liczby zespolonej użytej jako parametr, dzięki czemu programiści mogą ustalić, w jaki sposób i dlaczego została wygenerowana.

Moduł zapewnia następujące funkcje ...

Billjk
źródło