You may want to take a serious look at: "How to Design Programs":
http://htdp.org/
It provides explicit support and scaffolds for learning how to program using the DrScheme IDE. (Coincidently, the underlying engine behind DrScheme is the same technology that's powering the prototype arc0 compiler.)
DrScheme supports multiple "teaching" languages with slightly less power than full-on Scheme. This sounds weird at first, but the purpose about using a more limited language is to provide excellent error messages while you're learning. i.e. if you're just beginning to learn how to write functions, then passing around functions as first-class arguments may not be what you intend. So the system, in Beginner level, will treat this as a syntax error with a good explanation of what's going on.
Once you have a good enough understanding of programming, you can graduate to the full "Pretty Big" language, or go into arc or whatever you want.
Hurrah: I just got a forked version of arc to run on mzscheme 3.99.
http://git.hashcollision.org/arc.git
Caveats: I had to disable set-car! and set-cdr! related stuff; still thinking about how to handle that case. Just grep for 'set-car' and you'll see the portions of the code that have been commented out.
Other acts of violence done to the code: I separated parts that dealt with the runtime apart from the stuff dealing with the compile time. I got this running about five minutes ago, so this may not be quite right. :)
This cannot be done in a quick patch. If you want mutation in 3.99, you have to use mpairs -- but then you run against rest arguments being the usual immutable pairs.