There's some good stuff here, but a lot of the psychology is ill-founded. Flow, for example, is probably the most effective form of practice, and play often creates flow. Jamis recommends practicing constantly, but it's extremely well established that spacing your practice out gives you more bang for the buck, more improvement per hour of practice. (This is called "massed practice vs. spaced practice", and it's been known since before the dawn of cognitive psychology.)
(There's some pretty good evidence that you can fill the spaces in between your practice sessions by practicing something else — without losing the benefit of spacing.)
The maze generation algorithms, though, are awesome.
My favorite is still this one by Joe Allen:
/* jallen@ic.sunysb.edu */ /* Amazing */ /* Joe Allen 129.49.12.74 */
int a[1817];main(z,p,q,r){for(p=80;q+p-80;p-=2*a[p])for(z=9;z--;)q=3&(r=time(0)
+r*57)/7,q=q?q-1?q-2?1-p%79?-1:0:p%79-77?1:0:p<1659?79:0:p>158?-79:0,q?!a[p+q*2
]?a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817;)printf(q%79?"%c":"%c\n"," #"[!a[q-1]]);}
I definitely was not recommending constant practice--I agree that doing so will hurt you more than it helps you! I was recommending consistently regular practice.
"play is not exercise" Is this true? ...I have always thought I've learned more "playing" with programming than when programming to produce a specific output... Or perhaps... I've forgotten the last time I've done something hard.
That's a neat generator, but it occasionally generates almost entirely-blocked mazes. The density is impressive, but at that point you might as well just start reading IOCCC entries.
(There's some pretty good evidence that you can fill the spaces in between your practice sessions by practicing something else — without losing the benefit of spacing.)
The maze generation algorithms, though, are awesome.
My favorite is still this one by Joe Allen: