CMU releases a new kids language for robots — in C!

April 14, 2010 at 9:52 pm 18 comments

CMU’s press release about their new robot language doesn’t make much sense to me.

  • The language should be “easy enough for elementary students to use, but powerful enough for college-level engineering courses.”  Why?  Is it even possible to do that?  And why is it desirable?
  • It’s based on “industry-standard C programming language”?!?  I’ve argued previously that it is probably now criminally negligent to teach C or C++ as a first programming language — there’s enough evidence that it’s too hard for students, and we do know how to do it better.
  • “Hundreds of thousands of children gain their first programming experience with robots.” Can that really be right?  Only about 16,000 students took the AP CS test last year.  Let’s take that as a starting place.  There’s a multiple of that actually taking CS classes in high school, but the multiplier is not ten.  There’s a lot more CS in high school than elementary school, and relatively few high schools have robots.  I don’t buy their numbers — I’d like to see the evidence.
  • They argue that it should all be C because it is the language that children “likely will use for years to come” and “will help them transition to those used by professionals.”  The key criteria for a children’s programming is that it will help them in transitioning to industry?  For 10-15 years later?  Do we even know what people will be using in industry in 10-15 years?  And should it really be the focus in elementary school to prepare these students for professional software development?

The folks at CMU do terrific work thaI rave about regularly here.  I think this one isn’t in the right direction.

Carnegie Mellon University’s Robotics Academy announces the release of ROBOTC2.0®, a programming language for robots and an accompanying suite of training tools that are easy enough for elementary students to use, but powerful enough for college-level engineering courses.Like the original, this latest version of ROBOTC is an implementation of the industry-standard C programming language and has a modern programming environment that can grow as students move from elementary through college-level robot programming…“Computer programming is not taught at the middle school level, yet hundreds of thousands of children gain their first programming experience with robots,” said Robin Shoop, director of the Robotics Academy. “We introduced ROBOTC four years ago because students working with robots should spend their time learning scientific, mathematical and engineering principles, not learning a different programming language for each robot platform. Also, the programming environment students use should be compatible with a language such as C that they likely will use for years to come and with an interface that will help them transition to those used by professionals.”


Entry filed under: Uncategorized. Tags: , .

Is learning to program inherently hard? Apple removes Scratch from iPad/iPhone/iTouch

18 Comments Add your own

  • 1. Jeffrey  |  April 14, 2010 at 10:40 pm

    I think computer languages should be taught like second languages, using the principles of second language acquisition. I have been tutoring CS and Math at the undergraduate level for 4 years now and when I find students struggling it is normally because they are having difficulty conceptualizing what the expression (math or computer language) is saying. Too often the focus, when teaching, is about what the code/math does, versus what it means. As a result, the students are not able to manipulate and understand the expression. This may be due to the procedural nature of math/programming language education, but I am not sure. I have not done the research on this idea yet, but I would hypothesize that computer languages and other similar formal languages would be acquired much more easily if taught as languages of expressing ideas versus ways of doing things. The difference is subtle, but the results with my students has been profound.

  • 2. Learning Python (Animal Guide) | Python WebDev Insider  |  April 14, 2010 at 11:15 pm

    […] CMU releases a new kids language for robots — in C! « Computing … […]

  • 3. Ian Bogost  |  April 14, 2010 at 11:28 pm

    On the hundreds of thousands bit, I assume they’re drawing from sales data of Lego Mindstorms sets.

  • 4. Alfred Thompson  |  April 15, 2010 at 9:29 am

    They are likely also including the number of students, middle school students, who are involved in FIRST Lego League ( which is at least in the 10s of thousands every year. These students are not using anything like C though. They are mostly using the graphical language that comes with the Lego NXT robots.
    I share you concerns about starting with C though.
    It looks like neither the RobotC software or currriculum is free BTW.

  • 5. Alan Kay  |  April 15, 2010 at 9:57 am

    A good one for “The Black Museum of Bad Ideas” …

    But watch out if they’ve really made it convenient — this has dominated perspective and taste for a very long time in computing education. The very existence of something in a usable form — regardless of how bad in the long run it actually is — is enough to often promote widespread use and debilitating de facto standards.

    The larger black idea that I don’t understand at all here is giving anyone at any age a “robot programming language” that is not at all set up for anything but simple algorithms, and in which planning, strategies, reasoning, etc., are not just difficult in the extreme, but for all intents and purposes completely invisible to the students.

    It was in part the inadequacies of machine code, FORTRAN, to a great extent ALGOL — and even LISP — which led to the first good reasoning languages in the 60s (such as COMIT, METEOR, and especially PLANNER).

    This seems like YAHTML!

    Best wishes,


  • 6. Michael Kölling  |  April 15, 2010 at 12:32 pm

    And I thought we were stretching it by suggesting a Java environment for early high school…!


  • 7. Garth  |  April 15, 2010 at 2:39 pm

    I teach a robotic section at the high school using the Lego robots with both NXT-G (the Lego language) and RobotC. I dislike NXT-G and like RobotC. The RobotC is generic enough that the programming forms (For loops, etc.) transfer over to most line-code languages (VB, C#, Java, Python). For getting a silly little robot to scoot around and do silly little things it is excellent. It gets kids started in something they can see actually respond to what they wrote. I get kids signing up for my Programming I so they can play with the robots. On the way they accidentally learn some programming. Maybe it is not a language good for CS AP, but from the number of CS AP students there does not appear to be a good language for CS AP.

  • 8. scheppel  |  April 15, 2010 at 7:15 pm

    I remember tryng to learn C when I was a kid. I gave up and switched to Basic. Now I draw things, less stressful.

  • 9. cvs268  |  April 15, 2010 at 11:22 pm

    As much as i would like to applaud the initiative to start young, the focus shouldn’t be on programming per-se.

    Rather the young minds ought to be introduced to the Software Development Life cycle. i.e. how some end-goal (in this case- getting the Robot to do something) is realised in steps.

    The day the kids realise that coding is not a one-step process, but a iterative one, then they are in an ideal frame of mind to jump on to larger things.

    Hence focus on solid concepts:
    – Coding
    – Debugging
    – Re-Use. (mod-ing existing code)

  • 10. Astro  |  April 16, 2010 at 12:39 pm

    We use RobotC for our VEX program from middle school to 12th grade. It’s simple to teach kids how to use it.

    And it’s not a “breakthrough” language. It’s C with some sugar to make it easy to interface with the robot. There are predefined functions that return values from the transmitter/control boxes, outputs to servos and motors look like values in an array.

    I’d suggest downloading the manual and samples to take a look first.

    What you get with the RobotC isn’t the just compiler but the online debugger. You can watch all the variables and internal runtime info on your screen while the robot moves around. Teaching problem solving with the numbers on a screen became much easier.

    Since they needed a runtime support (vs programming to bare metal) to make that happen they were able to toss in a simple task scheduler. So you can fire off “move arm”,”move to next goal” as co-routines. That lets us do multi-tasking with the high school programmers.

    Buy the VEX hardware and the new Cortex controller base and you can make some very sophisticated robots. Google VEX robots or search Youtube for them.

    The cost isn’t a big issue, it’s $30 per student. Skip two weeks worth of Starbucks (go to Wawa or McD) and you have it paid for.

    Finally, it’s C, people are still teaching C in University classes, they are still hiring C programmers. C is like Cobol and Fortran, it’s going to outlive most of us.

  • 11. Jeff Graham  |  April 16, 2010 at 4:24 pm

    And I think we’re stretching a bit to call teaching C/C++ criminal. If so, teaching Java probably should be a capital offense.

  • 12. Fred Martin  |  April 17, 2010 at 3:01 am

    I agree with Astro and Garth. this is for simple, procedural programming. (btw – you dont need to start out teaching software lifecycle! let the kids have fun writing some code first 🙂

    having a realtime display of state vars and where the code is executing, in real time, is huge.

  • 13. Mark Miller  |  April 25, 2010 at 4:53 pm

    I think your question, “Is C what they’re going to be using in 10-15 years time?” is a good one. I once got into an argument with one of my CS professors over this in 1989. He was arguing that the school should teach students the necessary skills to learn languages on their own, because, “I can guarantee you C is not going to be the hot language 5-10 years from now.” He was right. He knew it from experience. He had seen language fads come and go.

    Alan Kay said in his comment that we need to be careful in making things freely available that have a limited design, because the “free stuff proliferates whether it can be justified or not.” I’m afraid that happened a long time ago with C. I have heard prognosticators say that at the very least popular languages will be C-like, at least in their syntax, for many years to come, because so many programmers are used to it. It seems they have a good historical basis to say that. I mean, look at Java. It retains many syntactic idioms from C++ even though it doesn’t need them. They’re really just there for show.

    I watched a short video presentation recently done by Ted Nelson. He used an apt analogy that when the horseless carriage was first invented, they put a socket for a buggy whip right by the cab to make customers feel more comfortable. That’s what they were used to. I’ve even seen a picture of an early horseless carriage model where they literally designed the cover for the engine compartment to look like the top half of a horse! We’re dealing with the same thing here.

    I got curious and found a tutorial on RobotC online. It looks like C with some modifications to give it the “safety” of Java–not a pointer in sight. Well that’s good, at least. Still, though, taking a look at the example code in the later part of the tutorial, just the programming of it looks complicated for someone learning it as their first language.

    I think they’re taking a risk with suggesting that “C is okay for elementary school children.” That’s the implicit message in the product’s description. When I read that I thought, “Are you nuts?” I had a hard enough time understanding Basic as a first language when I was 12, though I was self-taught, with a lot of help from people who were more experienced. What’s implicit in their messaging about this product is, “If the students can’t understand C then they’re not cut out to be programmers.” We see that mentality a lot in CS, don’t we? From an industrial standpoint it makes sense. Languages with C-like idioms dominate software production. From the standpoint of CS itself it’s offensive. I imagine that the late Edsgar Dijkstra would have an appropriate (scathing) response to this notion.

    From a high level, one would think that it would be fine since apparently RobotC doesn’t allow pointers to be used. However, as I’m sure you’re aware there are other things about the language that cause frustration and confusion for first-timers. Even professionals complain about some of these characteristics.

    I don’t know what they cover in elementary schools now. Do they cover relational notions like less-than, more-than, and equality? Again, if the people at CMU designed their product for children they would take this question into consideration.

    Another thing that detracts from it is that RobotC is a compiled language. This discourages (though doesn’t eliminate) experimentation activities. My guess is the designers were thinking, “The students are going to have to deal with this in the future, so might as well get them used to it.” It also functions as a kind of “weeder” characteristic: “If you don’t like this way of working, you’re not cut out to be a programmer.”

    I get the impression that no thought was put into the language choice from a pedagogical perspective. They really thought of it as a training vehicle for future industrial software developers. Besides this, it looks like they were looking for a language that would have the flexibility to grow with the student, allowing more sophistication as their skill grew, and would get the respect of older students (avoiding the “that’s a kid’s language” discrimination–an unfortunate aspect of computing culture that was prevalent among kids even 30 years ago). There are other languages out there that they could’ve used that would’ve made a lot more sense if they were taking into consideration how children learn, and would’ve met their capability requirements. But I guess they wanted to use a “serious” language. I’m getting the impression now this is the same thing that afflicts math education.

  • 14. Astro  |  April 25, 2010 at 9:19 pm

    Mark gets bonus points for reading the docs and taking a look at what the code can and can’t do.

    He makes the point that it’s a compiled language. The compile/download/debug cycle is < 10 seconds for most of the work that we do. The orginal VEX the laptop needs to be connected to the robot. With their new controllers the laptop is connected to the controller, using WiFi to download to the robot. It means that you do get live debugging of the moving robot.

    I like what they've done. At an event two weeks ago I worked a 5th grader through simple tank drive and he got it. I had a 7th grader do very well at the Trinity Firefight Challenge, I've got code for a 4 wheel pivot bot. So Mark is right it does allow the user to grow with it.

    But he said that there were better languages to use. Time to step up and prove the point. The constraint is to run on a small PIC based controller that has a (small) fixed infrastructure. I'd guess it would be possible to get Logo (my choice) to work or Lua but then I'm a procedural kind of guy.

    What would better (and implementable) choices be?

    • 15. Mark Miller  |  April 26, 2010 at 1:34 am

      The main concern I’d have is using a language that allowed the application of computing principles in a clear concise manner, without cruft. If the hardware couldn’t handle it I’d question the choice of the platform.

      I was thinking along the lines of Logo–Lisp without parentheses. It’s a nicely designed, easy-to-learn language. I did a cursory search of information on PIC controllers and the memory limitations reminded me of old 8-bit hardware. When I was in Jr. high we ran Terrapin Logo on an Apple II. It was an interpreter. It ran at a decent speed on a 1 Mhz 6502, and it fit within 32-48k RAM. That included any code you wrote. Turnaround time was basically instantaneous. It didn’t have an integrated debugger, but I’m pretty sure it had trace capability so you could see what procedure was getting executed when. I don’t know if Terrapin was capable of driving a robot, though there were implementations around that could. This is just an example of what’s possible.

      I think it’s great there are robots with WiFi capability. That’s really ideal.

  • 16. Alan Kay  |  April 26, 2010 at 8:39 am

    Why not COBOL and PL/1? A surprisingly large number of programmers still make a good living programming in these two languages.

    A lot of this is along the lines of “The *easiest* way to predict the future is to *prevent* it” rather than “The best way to ….”

    But, to me, the central questions here have to do not just with learnability by the children, but education goals of their helpers.

    What are your educational — not vocational — goals for children vis a vis computing, STEM, and thinking itself?

    And, what is interesting about robots and making them do something besides the feeling of control and a certain kind of enfranchisement?

    Marvin (Minsky) and Seymour (Papert) had really good ideas along these lines. What efforts have the current crop of “robot programming for children” advocates taken to understand the best ideas of he past, and what new great ideas have they come up with themselves?

    C, or Java, or LOGO are not the main issues here. But really good ideas about what we think children need to learn would soon get us to think about the best kinds of programming languages for these goals.

    Best wishes,


    • 17. Mark Miller  |  April 26, 2010 at 10:18 pm

      Hi Alan.

      I agree with your points. I just had the thought as I was re-reading this thread that it’s difficult in technical communities, particularly when there’s an atmosphere that seems to require “answers” rather than thinking about goals, to get people to think about ideas and concepts so they can arrive at their own answers. I’ve often fallen into the trap of throwing people a bone with an example: “Okay. You want something specific? Here. Chew on this,” but it doesn’t have the desired effect. I should stop doing it. This relates to your message (posted later on in this blog) about getting students to think along the lines of models rather than artifacts and conventions. This is just anecdotal, but it seems to me the “artifacts and conventions” thinking pervades the field of CS, and the field of work where computers are used.

      The idea, “The easiest way to predict the future is to prevent it” isn’t even on anyone’s minds (I wish it was, because then people could ask, “Is this a good goal??”). The attitude is more, “Look, this is what we have to work with,” and there is absolutely no notion whatsoever of thinking about the goals and creating something new that might help accomplish them. I think you already know why this happens.

      You asked the question in your message about models and goals in CS, “What happens to students who don’t make the cut?” I think you see it on display every day. The problem is society has said to people in computing, “You have made the cut,” because the goals have been reduced.

      There are tiers in some professional fields, like in medicine, where even though lesser goals are possible, people can still contribute something constructive. If they “didn’t make the cut” in one tier, there’s the possibility they can at another. These tiers are typically recognized by job titles and roles. The difference is there’s an awareness in these fields as a whole that there are tiers with different goals, and there are defined boundaries to them. Things developed in one tier get used in another with some safeguards to make sure they’re not misused, and there’s an awareness about where things have come from. The thing is in computing, there are tiers, but they are not so clear cut, and each one thinks they know everything there is to know about computing. The business community has some understanding of where the boundaries are with these tiers. They’ve gained this knowledge through experience (even so, this notion is not well developed), but within the technical community there’s this odd disconnect where the tiers are not well acknowledged. So people try to build systems using inappropriate architectures, and this often results in failures. Artifacts seem to “magically” materialize between tiers, and it’s difficult to get people to think about, “Do you understand where this came from?” And so the idea develops that there are no higher goals to aspire to beyond what people already know, because they’ve been told by society, “You made the cut”, and it doesn’t acknowledge that any formal tiers exist. This ties in with what you’ve said before that CS is not a real field.

      The problem may tie back to the fact that we don’t know what computing is yet. Society translates this to “We don’t understand it. It could be good. It could be bad.” So we’ve allowed people to try things within some ad hoc boundaries that pertain to containing risk. If this is true, then the goals change to containing risk, rather than asking, “What are we really trying to do, and what needs to be developed to achieve the goals to the best of our abilities?” Considering this question demands that people get beyond containing risk, and this can feel threatening. So the response is typically to dismiss such questions. What I’ve seen you start to articulate is the risk of not considering such questions.



  • […] was discussed in Wired magazine a few months ago.  I had heard that they were going to use their RobotC language, but instead it sounds like they’re going to extend Alice. That’s promising!  Looking […]


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Trackback this post  |  Subscribe to the comments via RSS Feed

Enter your email address to follow this blog and receive notifications of new posts by email.

Join 9,005 other followers


Recent Posts

Blog Stats

  • 1,879,119 hits
April 2010

CS Teaching Tips

%d bloggers like this: