Dlaczego rodzina c jest standardowym pułkiem badań CS dla programów matematycznych / CS zamiast rodziny LISP? [Zamknięte]

14

Zapoznałem się z LISP do celów samodoskonalenia. Jedną z rzeczy, które zauważyłem, jest to, że LISP jest o wiele bardziej zgodny z paradygmatem matematyki niż powiedzmy C. Składnia i struktura projektu wydają się bezpośrednio odzwierciedlać rzeczywisty model matematyczny algorytmu. Nie ma dla mnie sensu, dlaczego nawet dobre programy CS oparte na matematyce uczą się C zamiast LISP. Myślę, że LISP bardziej bezpośrednio stosuje wyższe pojęcia matematyczne niż C. Nie twierdzę, że nie można modelować struktur matematycznych w C. Po prostu zauważam, że LISP wydaje się być sztywno powiązany z matematykami.

Czytałem wiele z wypowiedzi Joela Spolsky'ego w szkołach JAVA i co nie - i zgadzam się z jego oceną - ale moja szkoła nie uczyła JAVA z tego właśnie powodu. Byli surowi w nauczaniu podstawowych pojęć, takich jak wskaźniki, projektowanie algorytmów, rekurencja, a nawet instrukcje asemblacyjne. Jednak zrobili to wszystko w C i c ++. Czy ktoś zna przyczyny tego i / lub jego historii?

Jonathan Henson
źródło
Na koniec dnia informatyka powinna być do pewnego stopnia obojętna na język. Ideą CS jest to, że powinien on / ona uczyć się każdego nowego języka, ponieważ informatyka jest teoretyczna. Z zewnątrz CS wydaje się być wszechstronnym nauczeniem, jak być programistą i naukowcem. Tak nie jest, nauka CS jest tym, na czym polega CS.
Chris,
2
W podobny sposób, w jaki LISP „echo rzeczywistego modelu matematycznego algorytmu”, C odzwierciedla rzeczywistą strukturę sprzętu i proste jest, w jaki sposób konstruuje się w C w pamięci (co jest naturalnie szczególnie przydatne w systemach wbudowanych). Jednak całkowicie się z tobą zgadzam. Byłbym wdzięczny za trochę zajęć licencjackich w LISP, więc mogłem naprawdę zagłębić się w to dalej
Bill VB

Odpowiedzi:

13

DOBRZE. Nudną odpowiedzią jest to, że ostatecznie większość szkół uczy tego, co profesorom jest wygodne, a większość profesorów nie dorastała, hakując Lisp; swoje wczesne lata spędzili w terenie z językami opartymi na Algolu. Z tego powodu, lata później, kiedy budują program nauczania, kończysz na szkołach, które uczą CS z podstawami w Pascal, potem w C, potem w C ++, a potem w Javie.

Potem masz szkoły, które są niżej i kilka lat młodsze. Spoglądają w górę na poprzeczkę wyznaczoną przez szkoły prowadzące i widzą, że uczniowie opuszczają szkoły znając C, i widzą, że ich uczniowie oczekują tego samego - więc zaczynają uczyć C, potem C ++, a potem Jawa.

Wreszcie, masz kilka instytucji technicznych lub „niższej klasy”, które po prostu uczą każdego zestawu technologii, który będzie pasował do słów kluczowych, których uczniowie chcą w swoich życiorysach - więc w zasadzie otrzymujesz Javę.

Mimo to, niektóre szkoły zrobić uczyć Lisp, chociaż może to być więcej niż fakultatywne języka fundamentalnej. Nawet szkoły, które nie uczą Lisp jako samodzielnego języka, używają go intensywnie w kursach AI, więc początkujące kursy AI mają koncentrację na początku programowania Lisp.

Andrey Butov
źródło
2
Słyszę cię. Bez względu na C i c ++, były to moje wybrane języki przez całą moją karierę, ale LISP byłby o wiele lepszym narzędziem do nauczania dla studentów matematyki niż C. C jest świetnym językiem i pod każdym względem nigdy nie zatrudniłbym kogoś kto tego nie wiedział, ale celem dyplomu CS nie jest szkolenie techniczne w terenie, lecz opanowanie pojęć z matematyki i informatyki. LISP wydaje się znacznie bardziej odpowiedni do tego celu.
Jonathan Henson
Myślę, że oba mają swoje miejsce, a uniwersytety mogą skorzystać z bardziej teoretycznej / akademickiej ścieżki do stopnia CS, w którym poszerzysz swój umysł. Ten utwór powinien mieć niezłą gamę języków, w tym Lisp, Prolog, oparty na Algolu itp. Oraz utwór oparty na praktyce, z koncentracją na praktycznym smaku dnia.
Andrey Butov,
@Jathanathan Henson: Spot on!
Chris,
9

To naprawdę zależy od uniwersytetu. Schemat (dialekt seplenienia) od wieków był językiem wstępnego kursu informatyki na MIT, chociaż ostatnio został zastąpiony pythonem. Mam BS w CS w szkole inżynierskiej, gdzie byłem narażony na C, Scheme, Prolog i C ++ podczas pierwszego roku. Myślę, że to była dobra mieszanka.

Mocno wierzę, że język, od którego zaczynasz, jest o wiele mniej ważny niż bycie wcześniej wystawionym na wiele paradygmatów, zanim twój mózg zamrozi się w jeden sposób patrzenia na świat.

Dima
źródło
1

Zasadniczo teoria informatyki jest matematyczna. Inżynieria oprogramowania jednak nie jest. Bezpośrednie modelowanie pojęć matematycznych nie jest nieodłączną zaletą - twierdzę, że często może być wadą.

Dobre teorie i dobre programy niekoniecznie są ze sobą powiązane.

DeadMG
źródło
„Dobre teorie i dobre programy niekoniecznie są ze sobą powiązane.”: Programowanie polega na budowaniu i łączeniu abstrakcji, które rozwiązują problemy. I, zgodnie z wikipedią, „Teoria jest ... rodzajem abstrakcyjnego lub uogólniającego myślenia, lub jego rezultatów”. ( en.wikipedia.org/wiki/Theory ) Teoria i (dobre) programowanie są naprawdę bardzo blisko siebie.
Giorgio