Excellent article. Continuation is probably the most mind-blowing piece of programming theory I was ever taught.
However, this is a complex article. I feel like I was only able to grasp the substance because I already know a bit about continuation — though this automated and hybrid approach is quite new to me.
I wonder how hard this text is to understand, for someone who does not know what "continuations" are.
This is a classic problem. Programming concepts, like math, build. If you are missing fundamentals then you are not ready for the next step, but if you never see that the next step is there, you never know about your missing fundamentals.
recently I asked if people wanted to have a look at and comment on the abstract math pieces I'm slowly writing[0] and a number have said yes. Someone replied[1] that they "would love a simply math blog." The problem is, the simple stuff you'll skim, the complex stuff you'll get frustrated by, and no one will be happy.
Unless you go through the stages you won't have the skills for the next level, and until you get exposed to the higher levels, you won't realize that there's more work to do. This is, of course, related to the "Blub paradox"[2] that we're all so familiar with.
I don't know about the "average HN reader" I would have thought that anyone with an undergraduate CS degree should be reasonably happy with that article.
But what we've seen many times is that many programmers do not have an undergrad CS degree. More, many programmers claim that formal education is a complete waste of time, and that they can quite happily program capably and competently without having gone to college or university.
Some of them will have been autodidacts who have taught themselves this sort of thing already. Some will be autodidacts who have enough foundations to be ready to understand this.
But some will not. Some will have picked things up here and there and become useful programmers, but find this sort of thing hard going and mind-blowing. The question was to wonder what proportion of HN readers fall in each category.
I guess doing a survey here in HN is probably the only way of measuring that.
As for CS graduates, I suspect that even those who had a course in that area might not actually be that interested - I was fascinated by lambda calculus, combinators and implementations of functional languages so the article was probably more interesting for me than most.
I was thrilled when I read about CPS, now my favorite "crazy thing" is logic embedded eval, see evalo (eval embedded in minikanren logic) http://youtu.be/fHK-uS-Iedc?t=27m35s giving you naive bidirectional evaluation. Too funky.
Constraint-based logic programming is actually pretty straightforward. You just define a constraint, and it tries to go and find things that fit.
Quines is as simple as saying that you want eval(x)==x, and it will try to fill in answers for x. It's a bit underwhelming, though, to realize that it will tell you that "5" is a quine, since eval(5)==5.
You don't think that would be enough to explain continuations to a working programmer? It doesn't really use any specific or formal mathematical language, and explains them mostly in terms of js with examples.
However, this is a complex article. I feel like I was only able to grasp the substance because I already know a bit about continuation — though this automated and hybrid approach is quite new to me.
I wonder how hard this text is to understand, for someone who does not know what "continuations" are.