Well, if my nephews ever want to take on programming this might be a good place to start. Simple syntax, simple concepts, even the posibility of third-party libraries? Sounds interesting for teaching the young (and not so young too, but at that I'd prefer Python because of it's easier "real world usage" -- this does seem a bit too oriented at "toy programming").
I think that to make a kid interested in programming, instant visual feedback is important. That is, writing (simple) games is about the best start.
For little kids, MIT Scratch should be good.
Python + pygame, or Scheme/Racket with its simple game-development features, or even Javascript + any 2D or 3D visualization library should hook an older kid. All of these have simple and compact syntax (JS is worse in this regard, of course).
I'm not sure if this is sarcasm, but it's not clear to me that it's not actually a potentially good idea, in two ways.
The first, important, way is that a tool that offers solid theoretical foundations does not (necessarily) require those foundations. You mention algebra, for example, and it's fair to assume that most school students (and probably their teachers!) don't really appreciate the theoretical grounding of algebra—but they can still hopefully use it with proficiency. In the same way, pure functions and referential transparency need only be difficult to apprehend if you insist on investigating their theoretical foundations; they can just be the way things work, and, if this is a first programming language, then there are no habits regarding mutable state to unlearn before being able to handle immutability.
The second is that, as nine_k (https://news.ycombinator.com/item?id=9982600) points out, learning these concepts before algebra could make understanding algebra itself easier. There are deeply mathematical ideas in the foundations of most programming, even if they are (and even when they should be) hidden, and learning these ideas can help one to come to grips with abstraction in a context that encourages play and experimentation, unlike (unfortunately) the usual mathematics classroom.
Was it the "Yeah" that made the tone seem sarcastic? I didn't really mean it that way, I genuinely do think it would be interesting to see what happens. Sometimes I wish I had been taught math from a more theoretical perspective. When I was younger, math seemed really boring, just problems to solve; how much money is left after this series of transactions, what is the area of this shape, etc. When I did learn simple algebra, it only seemed useful for those kinds of problems.
I've only found mathematics really interesting within the past few years, realizing how useful it is for creative things, like making music and art, or understanding programming at a higher level. If I had learned about functions in a more interactive way, maybe being able to create art on a computer screen, or write up physics systems in games, I think I would have been fascinated, and maybe the concepts would have stuck.
> Was it the "Yeah" that made the tone seem sarcastic?
I honestly wasn't sure, so I tried not to assume. Subtleties of tone are easily lost on the Internet; thank you for taking the time to clarify.
> I've only found mathematics really interesting within the past few years, realizing how useful it is for creative things, like making music and art, or understanding programming at a higher level.
While I am deeply in sympathy with this point of view, and agree with it to some extent, I think that it comes dangerously close to the monad-tutorial fallacy (https://byorgey.wordpress.com/2009/01/12/abstraction-intuiti...). As a teacher, I have four reactions to "why couldn't I have been taught this way?":
1. First and foremost, this is true. Course structure is often not set up to reward creativity and exploration, and that is a real shame. However …
2. I have heard students complain about not being taught in a way that I know is common pedagogical practice. That does not prove (they could just have been taught by bad teachers), but leads me to suspect, that sometimes students don't recognise (or don't want to see: "just show me the formulas!") alternate approaches when they are presented with them.
3. In many cases, the 'aha!' moment now couldn't have been an 'aha!' moment then; it is only because of the long struggle, and the additional learning and maturity, necessarily beginning with the confusion and uncertainty of yesterday, that everything can suddenly click today.
4. Even if I knew today the exact thing that would cause that 'aha!' moment for you, it is almost guaranteed that it wouldn't cause the same reaction for (many) others. The mission of a teacher is to serve the class as a whole; it is simply impossible, in terms of time and (let's be frank!) the teacher's knowledge, to explore for each student the application that will serve him or her best. This is not to say that some more applications and creative exploration wouldn't be welcome—they absolutely would—but more that, often, the best that can be done is to provide you with the basic tools that will allow you to explore and find the 'aha!' moment on your own, probably outside of the classroom.
It seems very difficult to come up with aath curriculum that works for everyone. I agree that a creative approach might not be as practical as I imagine it, I've definitely suffered from the "aha, monads are burritos, why hasn't anybody told me this" fallacy before.
I keep hearing (mostly negative) things about the Common Core program in the US, I wonder what it's really like. Creative new ways of teaching always sound good on paper, but I hear so many parents complain about the way their kids are being taught. I wonder if most of those complaints are warranted, or if the new style of questions just take getting used to.
It certainly does! Having "programmed" since I was ~5, the concept of variables and that level of indirection was second nature. I was truly astounded when other kids had trouble.
Even cooler, these days, is Dragon Box. It teaches kids symbolic manipulation via a cute and fun game. Starts off with little creatures you move around, then simply changing the drawings from creatures to numbers and letters makes a seamless transition.
There has been a significant investment in creating resources for teaching programming with SmallBasic; these wind up being more important than the tool (or even choice of language) itself!