I think there's an inherent tension between the properties of a language that make it seem approachable to novices and those that make it suitable for large, complex programs. A good example is the way that novice languages try to gloss over the differences between the various common representations of numbers: integers, floating point numbers, and numeric strings.
Compounding this problem is the fact that the people who feel naturally most motivated to create languages for novices are often those who are not too far removed from their own experience of learning to program. They are thus not as well informed about language design problems and solutions as we might wish. On the other hand, computer scientists who have that background tend to be more concerned with writing and maintaining large, complex programs, since that's the problem they're faced with all the time, and to have forgotten the difficulty of first learning to program -- or if they haven't forgotten it, they at least realize that that was the easy part.
We've seen this pattern enough times now, where languages get widely used despite their designs being excoriated by the cognoscenti, that I think it can't be written off to accidents of history. Cobol, Basic (in multiple incarnations), Fortran, and now PHP and JavaScript -- I'm sure I'm forgetting some. Anyway, the point is, there has to be some reason this keeps happening.
If I'm right, then the only way we'll get beyond it is if enough kids learn some programming in elementary school, more or less, and do a fair amount of programming in high school, so that by the time they hit college they're past the initial hump and are ready to start learning about software engineering, which is fundamentally the management of complexity. It's very difficult to appreciate the need for "bondage and discipline" until you've worked on a codebase where things that should have been simple turned out to be difficult or impossible.
Compounding this problem is the fact that the people who feel naturally most motivated to create languages for novices are often those who are not too far removed from their own experience of learning to program. They are thus not as well informed about language design problems and solutions as we might wish. On the other hand, computer scientists who have that background tend to be more concerned with writing and maintaining large, complex programs, since that's the problem they're faced with all the time, and to have forgotten the difficulty of first learning to program -- or if they haven't forgotten it, they at least realize that that was the easy part.
We've seen this pattern enough times now, where languages get widely used despite their designs being excoriated by the cognoscenti, that I think it can't be written off to accidents of history. Cobol, Basic (in multiple incarnations), Fortran, and now PHP and JavaScript -- I'm sure I'm forgetting some. Anyway, the point is, there has to be some reason this keeps happening.
If I'm right, then the only way we'll get beyond it is if enough kids learn some programming in elementary school, more or less, and do a fair amount of programming in high school, so that by the time they hit college they're past the initial hump and are ready to start learning about software engineering, which is fundamentally the management of complexity. It's very difficult to appreciate the need for "bondage and discipline" until you've worked on a codebase where things that should have been simple turned out to be difficult or impossible.