I recently used AI1 to teach a basic game-building programming class to middle schoolers. I'm excited for AI2 (from what little I've seen, it's so much better!), and I think that code blocks represent a wonderful way to teach programming (especially when each child has access to a computer). I really like the AI platform and plan to continue using it to teach beginning programming.
The problem I've had with code blocks is that, even though they're intuitive, I've found them difficult to use in a classroom setting. Here are some of the difficulties I've run in to:
0) In my classroom, some students don't have a computer, and I can't count on them having one at home. So I lack a simple way of engaging all my students simultaneously with code-blocks. This means in-class and out-of-class exercises are harder, and evening having a discussion seems to require presenting the code blocks on my computer or having already created a tutorial with screenshots. I've thought about using paper cutouts for in-class exercises, but there are difficulties with this (cutouts require time to create, and cutouts don't auto-expand).
1) Though the thinking skills from AI carry on after the course, all the external educational resources I'm comfortable recommending use a text-based programming language (often Python). Using the text-based programming language from the beginning would ease this transition. My course is too short to divide it into separate "code blocks" and "text-based programming language" sections.
2) If each student / group is creating a unique project, I can't easily add library code to all the projects once they've started working on them (I have to recreate it for each project). The XML format I've seen in the block ZIP files seems like it might help address this.
3) The GUI exposes many named items (e.g. parameter names for "private" methods to abstractions I'd like the students to use) that must be scrolled through to find the right pieces. Even if I adopt some convention (e.g. prefix all private methods/parameters with "zzz_" in order to move them to the bottom of the alphabetized list), I find that I have to provide significant guidance for the students to discover the "real" code blocks.
Since I don't know AI2 well, some of those issues, particularly #2 and #3, might now be solved.
So I'm interested in a text-based programming language frontend to AI. I think the right thing for me to do is to send you a pull request (unless you're already planning this feature :) ), and I wanted to see if you had any strong feelings about it up front. I think Python is the right language for the task, given that it seems to match closely with the AI control blocks, it's used in many external educational resources, and its syntax is, I think, light-weight enough. I'm also partial to using Scheme in an attempt to minimize the pain of learning syntax, but I think Python is a more natural fit.
Any thoughts?
-Ethan
(when Button1.Click do:[if {{Label1.Text} = {10}}then: [set Label1.Text to: {0}]else: [set Label1.Text to: {{1} + {Label1.Text}}]])