Get into the semantics and formal methods side of things and you can pretty much "learn" all programming in ten grueling years. Start with lambda calculus, combinators, basic one-step operational semantics to reason about virtual machines, move to large-step operational semantics for the academic hand-waving, taste a little axiomatic logic stuff and proofs, maybe dabble in prolog-type resolution and inference, backward and forward chaining, take a deep breath and study a little syntax theory, mess with turing machines and automata, maybe pickup a little "actual" machine and write a compiler for a clean Algol dialect, say, Scheme (oh no I didn't just call Scheme an Algol dialect!) Yeah, like I was saying, do your first Pascal then do a little Lisp, like Scheme (wtf? didn't I just call scheme an Algol dialect? what is it?)
By now you're pretty much ready to mess with early Lambda papers, but before you start, grab Wilson and read up on Uniprocessor garbage collection techniques. Yeah, you pretty much ignored languages without automatic memory allocation, but you aren't missing much; ones with block structure and no heap allocation can be done with a strict stack discipline, pick up Hennesy and Patterson and play with SPIM, you targeted MIPS in your early pascal compiler right? right? And Algol type languages that need dynamic allocation usually need it for datastructures, and not executable code, so you wont have to worry about closures, again, read up on Wilson and implement that with the Unix brk(2) system call. Big boy! (or girl!)
It's time mess with a few real systems; you look at GCC and it's a mess, you opt for LCC and it's a well documented toy, you get bored with C and discover Common Lisp. Without even trying, you pretty much learned a bunch of scripting languages and tool syntaxes just to get things done. CMUCL keeps you busy for about 2 years during which you realize you're not really done with programming. So you "learn" denotational semantics. No one ever learns denotational semantics, not even Scott and Strachey. As a matter of fact, you didn't even learn lambda calculus when you said you learned earlier. Time for Barendregt! the big yellow book that falls apart in your hand. Worst binding ever. You spend six months in the first two chapters.
By now you have memorized CiteSeer, you have grown an afro and you're pretty much feral. You go back to fuck with combinators and you're side tracked to term-rewriting and all that jazz, stuff wacko British guys come up to milk Red-Brick institutions for grant money. Graph reduction is your next step and by now you're tethered to your last neuron, stretched thin. You're sick to your stomach of all this theory. You think more than you feel, so you go back to the basics and learn yourself mathematics .. but your ten years are almost over and you're still not a programmer. You know everything and nothing. You can hack on machines that haven't been invented yet.
All this hasn't prepared you for a career in web development, and now you're a lamer in SitePoint forums begging people to teach you CSS and Photoshop. The joys of being a startup hacker.
I was gonna come back with "And then someone asks you to write a GUI...", but then I read your punchline. Well played.
The irony is that your post basically describes what I did in college while avoiding my physics homework. I learned Lisp, lambda calculus, Haskell, denotational semantics, SICP, continuations, 4 different ways of implementing continuations, multimethods, a bunch of different garbage collection algorithms, implemented a bunch of Scheme variants, combinator graph reduction, Ocaml, JoCaml and the join calculus, operational transformations, STM, and Erlang. And then I went out into the real world and became a UI programmer. The first thing I've gotta do when I get into work tomorrow is make this nifty JavaScript hack work with IE8.
By now you're pretty much ready to mess with early Lambda papers, but before you start, grab Wilson and read up on Uniprocessor garbage collection techniques. Yeah, you pretty much ignored languages without automatic memory allocation, but you aren't missing much; ones with block structure and no heap allocation can be done with a strict stack discipline, pick up Hennesy and Patterson and play with SPIM, you targeted MIPS in your early pascal compiler right? right? And Algol type languages that need dynamic allocation usually need it for datastructures, and not executable code, so you wont have to worry about closures, again, read up on Wilson and implement that with the Unix brk(2) system call. Big boy! (or girl!)
It's time mess with a few real systems; you look at GCC and it's a mess, you opt for LCC and it's a well documented toy, you get bored with C and discover Common Lisp. Without even trying, you pretty much learned a bunch of scripting languages and tool syntaxes just to get things done. CMUCL keeps you busy for about 2 years during which you realize you're not really done with programming. So you "learn" denotational semantics. No one ever learns denotational semantics, not even Scott and Strachey. As a matter of fact, you didn't even learn lambda calculus when you said you learned earlier. Time for Barendregt! the big yellow book that falls apart in your hand. Worst binding ever. You spend six months in the first two chapters.
By now you have memorized CiteSeer, you have grown an afro and you're pretty much feral. You go back to fuck with combinators and you're side tracked to term-rewriting and all that jazz, stuff wacko British guys come up to milk Red-Brick institutions for grant money. Graph reduction is your next step and by now you're tethered to your last neuron, stretched thin. You're sick to your stomach of all this theory. You think more than you feel, so you go back to the basics and learn yourself mathematics .. but your ten years are almost over and you're still not a programmer. You know everything and nothing. You can hack on machines that haven't been invented yet.
All this hasn't prepared you for a career in web development, and now you're a lamer in SitePoint forums begging people to teach you CSS and Photoshop. The joys of being a startup hacker.
[Edit: inserted line-breaks for the meek]