There is almost no magic, which is good when learning new stuff. The actual computer is sort of still there. The IDEs are free and good. The environment and APIs are really stable so 10 year old code compiles and runs, and the syntax is traditional. It's not a toy language so it's useful too.
The major drawbacks is that there are a lot of crappy "enterprisy" code out there.
I really liked learning Scheme though (in 1994 or so). I think every php- and javascript-damaged kid really needs a big dose of Scheme, just as we needed it to heal some of the damage that came from Basic and C. (COBOL seems to be very hard to cure)
Clojure does not strike me as anywhere near as "clean" as Scheme, but maybe it's an alternative.
Perhaps a good first year should include courses that uses Java, Scheme and Prolog?
First semester you have 3 courses going into programming from 3 different angles:
- Racket – functional programming, algorithms, etc
- DLX processor design and logical circuits (ended with ARM assembler) – the technical side
- Math – obviously, the pure mathematical side of it
Then, second semester, we did Java, C, complex algorithms and data structures, low-level programming, etc.
I’d say this is a nice way to go at it, because after the first year you have a rough overview how everything, from electron level to malloc, from simple algorithms to a webserver, works.