when you start to get to the parts about abstracting a circut, and making it streamy/lazy, you'd find that the impl details of a non-lazy language can make it more difficult than it needs to be.
Also, as a beginner, you don't want both the difficulties of contepts _and_ the difficulties of language to combine to stop you from learning as effectively.
But Scheme isn't a lazy language - granted, you'll need a language that supports first class functions to lift their implementation of a stream though.
>Also, as a beginner, you don't want both the difficulties of contepts _and_ the difficulties of language to combine to stop you from learning as effectively.
Are you referring to the need to learn Scheme to work through SICP? While the asker specifically requested language-agnostic books, Scheme was chosen as a language for SICP for being a "syntax-free" language...
> Are you referring to the need to learn Scheme to work through SICP?
That's not particularly demanding requirement. The class began with a single lecture about how Scheme worked and after that Hal and Gerry assumed you knew all the language you needed to and dove in.
When the course was introduced (early 80s), most incoming MIT freshman had not programmed a computer (!), including those who planned to do course 6 (EE or CS -- 6.001 was a requirement for either degree).
Scheme was chosen as a language for SICP for being a "syntax-free" language...
First-class functions, lambdas, closures, lexical scoping, etc. Abelson wrote, for instance:
"6.001 differs from typical introductory computer science subjects in using Scheme (a block-structured dialect of Lisp) rather than Pascal as its programming vehicle. The subject's developers feel strongly that Pascal is hopelessly constraining, and that important ideas (such as functional programming and object-oriented programming) can be addressed within Pascal only awkwardly, if at all."
While it certainly espouses a functional style, I found the greatest lesssons to be higher level, focusing on abstraction.
Though I have limited knowledge of C and Java so would be keen to hear your elaborated thoughts on this.