I had a professor at college who mandated Racket as the mode of learning for a software engineering course. I remember how Racket just ended up taking centre stage, figuring language-specific concepts and hacks out let the larger engineering concepts fade into the background.I did not learn much in that course.
chongli|2 years ago
These are highly restricted teaching versions of Racket which do not include the vast majority of the language features. They also use beginner friendly names such as first and rest instead of the cryptic car and cdr. These languages allow students to learn functional programming and basic concepts such as recursion, linked lists, association lists, higher order functions, trees, and graphs without worrying about programming language details such as side effects, fixed size numeric types, memory allocation, pointers, macros, compilers, etc.
For that purpose, Racket seems pretty hard to beat! For the professors, it also has the (nice) side effect that many students with previous programming experience are less likely to have learned Racket (or any functional language for that matter). This has been argued to put the students with and without programming experience on a more equal footing.
[1] https://docs.racket-lang.org/htdp-langs/beginner.html
[2] https://docs.racket-lang.org/htdp-langs/intermediate.html
justinpombrio|2 years ago
For example, consider the program `((+) 1 2 3)`. Racket gives a runtime error "application: not a procedure" because (+) evaluates to 0, which is then applied to "1 2 3", which errors because 0 is not a procedure. But BSL can give a (helpful) syntax error, because it doesn't have higher-order functions.
(I feel like someone's going to tell me that BSL or ISL isn't a subset of Racket for some obscure reason. They're at least essentially subsets.)
priime0|2 years ago
To elaborate, one of the further benefits of multiple student languages like these is that concepts are taught incrementally. For instance, in the beginning student language, lists are explicitly shown as `(cons a (cons b '()))` before they are shown as `(list a b)` in intermediate student language.
BeetleB|2 years ago
So many concepts got in the way of actually learning programming: You have to include header files for basic I/O to work. You need to understand functions to get any program to work. Pointer syntax sucks. Strings are complicated.
Coming from BASIC and QB, the barrier to entry in C/C++ was way too high. To be frank, Racket is more suitable, even if it's not the best option.
goda90|2 years ago
paulddraper|2 years ago
In seriousness, Racket is semi-commonly used in educational settings. Especially for "functional programming"-type courses.
armchairhacker|2 years ago
I’m not doubting you. I’m interested in what parts of Racket could be confusing to beginners, maybe to make better courses
dangrover|2 years ago
stephenhuey|2 years ago