Background and researching:
I think MIT’s App Inventor (http://appinventor.mit.edu/ ) is the next step up from Scratch for programming and very accessible to kids. It’s drag and drop code building, and there are lots of projects described under tutorials at http://appinventor.mit.edu/explore/learn.html and http://appinventor.org. (including how to make a remote app to control a Lego Mindstorms bot http://cs.usfca.edu/~wolber/appinventor/bookSplits/ch12RobotRemote.pdf).
In my first ‘real’ programming class, the teacher wouldn’t even let us program in the beginning (it was a CS class for CS majors). The first couple of weeks all we did was learn ‘pseudocode.’ Her point was that once we could do that – we could program in any language we learned, the ‘language’ of coding was the most important, not which language we used. I was so thankful that I stumbled on that class rather than the one I was ‘supposed’ to take.
Octave is what the online courses are using in place of Matlab. The thing about Matlab and similar languages is that they have speedy matrix routines, but the general speed of the language is poor. So if your program will rely in part on some sort of sophisticated algorithm that isn’t just matrix multiplication, that could be a limiting factor.
Kevin is right that Python is a popular choice for math and scientific work that requires a mix, because it is a decent language plus you can get libraries that add in the matrix processing. But even Python is on the slow side for some tasks. If you want to live on the cutting edge, Julia is the newest entry into this domain, promising to be both a fast language with fast math libraries. F# is Microsoft’s entrant in the scientific computing domain.
All are free.
Learning Scratch, then Python, then Java is not like learning addition, then subtraction, then multiplication. Programming languages are not a sequence of skills.
Computer science skills are about being able to express more complicated operations or algorithms or being able to analyze more complicated data in code. This can be done in almost any language. Once you know the building blocks, you can apply them to a new language pretty quickly. There’s no point in doing 6 labs and then learning another language just for the sake of learning another language. Knowing many languages is a small part of what makes someone good at programming.
Many kids will be motivated by a particular type of programming — game design, analyzing baseball statistics, programming a robot, writing for a cellphone or tablet, etc. Whatever language is common for that problem domain would be a great next language for that particular kid. Whatever keeps them writing programs, exploring, and learning.
I live in the Seattle area, where I have the pleasure of tutoring a handful of extraordinarily gifted homeschool students in computer science. For years, I have been using a curriculum called “Program by Design<http://www.programbydesign.org/>” which, in my mind, is hands-down the best introductory CS curriculum. Despite my strong preference for this approach, I rarely recommend it to others, simply because it is extremely difficult to find instructors who can teach this material, and I haven’t heard any reports of students succeeding in learning this way through self-study.
A few days from now, a free Coursera course is starting called Introduction to Systematic Program Design — Part 1 (https://class.coursera.org/programdesign-001/lecture/index), offered by University of British Columbia. There are many intro CS courses on Coursera, but this is the first one offered that follows the Program by Design pedagogy. So I am thrilled to finally have an intro programming course whose content I can fully endorse.
I should note, however, that I cannot attest to the quality of the videos, or the charisma of the instructor, or anything else specific to this course. All I can say is that the approach matches my own, and it is an approach I feel strongly about. So if you’re in the market for a summer CS class, I encourage you to give it a try. If you do, let me know how it goes.
I think MIT's App Inventor (http://appinventor.mit.edu/ ) is the next step up from Scratch for programming and very accessible to kids. It's drag and drop code building, and there are lots of projects described under tutorials at http://appinventor.mit.edu/explore/learn.html and http://appinventor.org. (including how to make a remote app to control a Lego Mindstorms bot http://cs.usfca.edu/~wolber/appinventor/bookSplits/ch12RobotRemote.pdf).