At Harvard, countless undergrads taking the introductory CS50 class are producing games, websites, and iPhone apps
My hunch is that the people doing this had already self-trained before taking this course. I'd be really surprised if someone with zero background in programming could take an introductory source like this, and start producing working software.
I wouldn't be surprised at all. I think the traditional CS curriculum, at least at my university, induces learned helplessness, so that by the time students get to a 300-level course they're so convinced they can't do a project they don't even try.
I taught an intro to comp sci summer course that was evenly split between over-achievers looking to get the intro course done before starting their freshman year, and demoralized post-freshmen who had failed the course during the regular year.
By the end of the 9 week summer session, they all had a working Minesweeper game written in Java. I set out levels of achievement they could attain, from very basic working mechanics (including a timer) up to marking a space questionable and revealing all blank spaces surrounding a blank. I demonstrated how to do that using recursion, which our curriculum doesn't even allow teaching until 3rd year, but which my students didn't seem to have any trouble with. I believe recursion is actually a very natural way of thinking, but we prime students to fail at it because all they hear before learning it is that "it's so hard."
I see our curriculum, at least, as one of the biggest hindrances to learning CS. The students who succeed do so despite the adversity of a hostile curriculum.
I think the 'diving in and figuring stuff out' approach is very empowering as well. The traditional 'hang ups' are pointers and recursion. I am curious what you mean that recursion is a natural way of thinking. Can you expand on that?
(I found that recursion made sense to me as well, but that seems like selection bias. When I try to explain it I emphasize thinking that the problem is already solved. This chunk is "somebody else's problem" even if it happens to be yours later. Ignoring the problem and breaking it down. Mixed success so far)
Some problems are naturally better defined recursively than iteratively; the Minesweeper blank space uncovering algorithm is a prime example of that. "Push this button. If it's blank, execute push button for all surrounding buttons." Yet because the word "recursion" is primed with "hard" in the minds of undergrad students, some of them shut down on the word and don't attempt to figure out the problem. Instead they remember "recursion is hard, we'll cover that later".
Assuming subproblems are solved is a more sophisticated way of thinking about some recursive algorithms, like sorting. I don't think that is quite as naturally easy for most people. But I think the difficulty there is in the layering of concepts, not because the algorithm is recursive.
>I am curious what you mean that recursion is a natural way of thinking. Can you expand on that?
>I found that recursion made sense to me as well, but that seems like selection bias.
If you look at "describing", some things are naturally described in a recursive fashion. At least a significant part of thinking is encoding non-verbal ideas in natural language. These include the obvious factorial function, but also such things as the chain rule for derivatives, or the use of subordinate clauses in a sentence, such that a grammatically valid sentence may become arbitrarily long, this achieved by continually attaching further thoughts, the process of doing such being predicated on an underlying -- metahumor.
I think recursion is best explained by doing. This is the definition of the divisor function, you implement it like this, etc.
i think you overestimate the difficulty of producing working software. cs50 requires all their students to produce working software from scratch as a final project. there are always a few very impressive ones from total novices, a ton of good ones, and surprisingly very few horrible projects. these projects are not temperature conversion projects; they are indeed games, websites, iphone apps, etc.
My hunch is that the people doing this had already self-trained before taking this course. I'd be really surprised if someone with zero background in programming could take an introductory source like this, and start producing working software.