I did not learn much in that course.
I did not learn much in that course.
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
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.)
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.
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.
In seriousness, Racket is semi-commonly used in educational settings. Especially for "functional programming"-type courses.
I’m not doubting you. I’m interested in what parts of Racket could be confusing to beginners, maybe to make better courses