Wielokrotnie denerwuje mnie nauczanie studentów nowych zasad języka (takich jak rozkład z tablicy na wskaźnik), które nie mają absolutnie nic wspólnego z samym programowaniem. Zastanawiałem się więc:
Czym jest język programowania z najmniejszą liczbą specjalnych reguł językowych, w których wszystko jest najwyższej klasy i można je komponować bez uciążliwych ograniczeń technicznych? Czy taki język nie byłby idealnym językiem nauczania?
Uwaga moderatora
Szukamy długich odpowiedzi, które zawierają wyjaśnienia i kontekst. Nie wymieniaj tylko języka: wyjaśnij, dlaczego według niego język odpowiada na pytanie. Odpowiedzi, które niczego nie wyjaśniają, zostaną usunięte. Aby uzyskać więcej informacji, zobacz Dobry subiektywny, zły subiektywny .
programming-languages
fredoverflow
źródło
źródło
I=SKK
. Ostatecznym językiem ortogonalnym są języki z jedną instrukcją, takie jak Jot i RSSB.Odpowiedzi:
Jeśli chodzi o „bardzo niewiele zasad”, twierdzę, że wygrałby Lisp lub Smalltalk. Gołą składnię można zapisać na jednej karcie piwa.
Jednak z mojego doświadczenia wynika, że prostota Lisp i Smalltalk nie oznacza, że są one łatwe do zrozumienia i nauczenia. Chociaż nie jest to „czysty” sposób, z mojego doświadczenia wynika, że imperatywny styl listy rzeczy do zrobienia jest najłatwiejszy do zrozumienia dla początkujących.
Dlatego sugerowałbym Python, Ruby lub coś o podobnej abstrakcji : Znajdziesz (prawie) każdą podstawową koncepcję w nich (OK, żadnych wskaźników), ale nie musisz tego rozumieć od samego początku, aby coś działało.
źródło
Powiedziałbym, że LISP, schemat lub język z tej rodziny byłby najbardziej ortogonalny. Z
let
,lambda
,define
,if
,cons
,list
, i(
)
można nauczyć prawie wszystko, że chcesz zostać w intro oczywiście. Nie ma również potrzeby stosowania dyrektyw dotyczących wstępnego przetwarzania lubint main()
takich rzeczy, które uczniowie po prostu uwzględniają, ale nie widzą powodu.Podczas moich kursów wprowadzających CS zrobiliśmy wiele naprawdę fajnych rzeczy ze Scheme: zaimplementuj maszynę Turinga, zaimplementuj komputer TC-201, napisz gramatykę bezkontekstową, użyj rekurencji, napisz sortowanie i wstawianie, zaimplementuj dodatki i mnóstwo inne rzeczy.
Zrobiłem Javę w AP comp sci przed studiami, ale Scheme był świetny, ponieważ mogłem ograniczyć bałagan i skupić się na rzeczywistych koncepcjach w moim programie. To była świetna klasa i gorąco polecam wypróbowanie jej w nauczaniu.
źródło
Pascal został specjalnie zaprojektowany do nauczania programowania. Łatwo się go nauczyć (był to jeden z pierwszych języków programowania, których się nauczyłem).
źródło
Logo: wciąż żyje i kopie !
Może wydawać się bardziej zabawką niż językiem programowania, ale dla wielu osób nie byłby to zły pierwszy krok. Składnia jest bardzo prosta, ale żółw zapewnia bardziej konkretną formę informacji zwrotnej niż większość języków / środowisk. Próba stworzenia określonego kształtu to świetny sposób na poznanie procesu myślenia o przyszłości w celu rozwiązania problemu.
Jeśli jednak masz awersję do żółwi, naprawdę uważam, że Scheme jest właściwą drogą.
źródło
Zaproponowałbym zarówno SML, jak i Haskell. Ortogonalność była głównym punktem konstrukcyjnym obu. W szczególności rdzeń SML (czyli część języka, której nie dotyczy modułowość), jest w zasadzie typowym rachunkiem lambda. W rezultacie większość funkcji językowych zależy od typów, a typy z kolei sterują formularzami wprowadzania i eliminacji wartości. To jest prawie idealne.
W obu językach istnieje kilka nie-teoretycznych brodawek (eqtyps w SML, seq w Haskell), ale nadal biją na nogach wszystko inne pod względem dziwnych interakcji niepowiązanych cech językowych.
źródło
Niezależnie od wyboru zdecydowanie zachęcam do nauczania „prawdziwego” języka . Nauczanie języków zabawek działa dla niektórych osób, ale dla innych jest bardzo, bardzo frustrujące z powodu braku połączenia z prawdziwym światem. Niektórzy ludzie potrzebują prawdziwej przydatności jako motywacji do nauki i nie jest naszym miejscem ocenianie tej strategii uczenia się (w rzeczywistości jest to powszechne nieporozumienie).
To dyskwalifikuje języki takie jak Logo, ale także języki specyficzne dla domeny, takie jak Przetwarzanie . Podczas gdy ten ostatni jest niezwykle przydatny do niektórych rzeczy (np. Do tworzenia grafiki informacyjnej), użycie jest zbyt ograniczone dla większości zastosowań (a więc i większości użytkowników). Wyklucza to także Gofer , bezużyteczny podzbiór Haskell. To również wyłącza Pascal bo chociaż ten ostatni jest stosowany w rzeczywistych projektach, to po prostu nie ma znaczenia dłużej i po prostu brakuje istotne cechy (np wbudowaną strun).
Spośród praktycznych języków zgodziłbym się z tymi, które już wspomniano: nowoczesne dialekty Lisp lub Scheme, Haskell, Python lub Ruby. Osobiście prawdopodobnie użyłbym Pythona, ale wszystkie te opcje mają swoje zalety i wady.
źródło
Tcl ma 12 reguł rządzących całym językiem.
Istnieje bardzo niewiele specjalnych przypadków lub zastrzeżonych słów lub znaków.
źródło
Aby rozwinąć mój komentarz, w Jot wszystko jest pierwszej klasy (ponieważ jest to rachunek lambda) i można je skomponować. Jest tylko jedna instrukcja. To absolutnie okropny język nauczania.
Ogólnie rzecz biorąc, plandeki Turinga mają bardzo niewiele specjalnych zasad i wymagają bardzo dobrego zrozumienia podstaw obliczeń, zanim będzie można cokolwiek zrobić. Idealny język nauczania pozwala uczniom eksperymentować bez wyciągania włosów, więc abstrakcje na wyższym poziomie są w rzeczywistości dobrą rzeczą.
źródło
Najważniejsze cechy języka, którego się uczysz to:
zasada najmniejszego zaskoczenia (PASCAL)
czytelność (Ada)
Moim zdaniem drugi przebija pierwszy, ponieważ czytanie kodu jest nawet ważniejsze niż jego pisanie.
Teraz znowu piszę w języku C #, Java, Objective-C i JavaScript, z których wszystkie mają okropne dziwactwa: D
Mimo to, gdybym musiał wybrać jeden język na początek, wybrałbym C #. Jest stosunkowo łatwy do odczytania, sam w sobie ma kilka poważnych niespodzianek (najczęściej są one ukryte w narzędziach / frameworkach MS ...) oraz ogromną ilość kodu do odczytu i dokumentacji, które są niezbędne do dobrego uczenia się.
źródło