Six Reasons Why Computer Science Education is Failing Students

April 5, 2013 at 1:41 am 24 comments

Interesting arguments from the CEO of LiveCode.  These two points are particularly interesting.  The first is: What sits between Scratch, or Alice, or App Inventor, and professional-class languages like JavaScript or C++?  I would put Python in there, but I still see that the Scratch->Python gap is a big one.  The second paragraph is really striking, and I’d like to see more evidence.  Does Israel’s great CS ed system lead to the strong startup culture, or is it because Israelis value technology that they have both a great startup culture and a great CS Ed system?

Up to about age 13 there are some excellent tools in widespread use, most notable among them being the free and popular Scratch from MIT and MIT App Investor  However students outgrow Scratch by around age 13 and schools often don’t make a good choice of language for the next phase in a child’s education.  Many traditional programing languages such as JavaScript or C++ are completely inappropriate for this age group.  Students struggle to understand what they are learning and often spend their lessons searching for a missing symbol.  The current generation of students use smartphones and so selecting a tool that allows them to create their own apps is another great opportunity to make learning directly relevant to them.  Our own LiveCode platform provides a handy solution to these issues by allowing students to create their own mobile apps using a programming language that is close to English.

I firmly believe that a strengthening computer science education program has to be one of the most obvious and cost effective things we can do to ensure future economic prosperity.  Israel has the highest rate of startup per capita anywhere and that in part stems from its strong computer science education program.  Estonia, another country with both a strong tech sector and economy, recently announced a plan to expand teaching of computer science to all primary school children.  Do we want to be left in the dust by these countries, or left unable to compete with the growing economies of India and China?  What is it going to take to get computer science education moved up the agenda in the USA and here in the UK?

via Six Reasons Why Computer Science Education is Failing Students.

Entry filed under: Uncategorized. Tags: , , , , .

“Everybody should be afraid of MOOCs” Stanford teams with edX: Shaking out open learning options

24 Comments Add your own

  • 1. Neil Brown  |  April 5, 2013 at 3:13 am

    Here’s a hypothesis: full-text programming is where lots and lots of the programming tools sit, and they all seem to have this lower age bound in the teenage years. The reason Scratch and Kodu (et al) reach into earlier ages is because they have a different way of editing code. The way to reach the gap is not with full-text programming, but by finding something like Scratch that can extend further upwards.

    Of course, that’s exactly the idea behind the prototype shown at SIGCSE. But it seems like most recent developments in coding have focused on practicalities and gamification of full-text programming (Codecademy, CodeAvengers and so on) rather than a different way of making programs.

  • 2. Brian Wilkinson  |  April 5, 2013 at 7:33 am

    I like the question posed by this article. I would argue that something like Alice could certainly be used as a bridge between Scratch and Java (but not C++). I think Alice does a pretty good job of introducing many of the OOP concepts that can be difficult to learn. Our intro CS class at the high school level is taught with Python so perhaps, as the author stated, the better sequence might be Scratch -> Alice -> Python -> Java (for the AP class).


  • 3. Rita  |  April 5, 2013 at 8:04 am

    In Etoys, there is the tile-based environment and you click a menu to view the corresponding smalltalk code. You always have a fully functional smalltalk programming environment with Etoys. What is needed is a guide for students to make the transition from the tile-based environment to writing smalltalk code.
    A good step towards this is the BotsInc environment from Stephane Ducasse, where you only deal with one object and learn the smalltalk way to code.
    Unfortunately, these pieces of software need some work to run together in the same system again. But I think that would answer #1.

  • 4. Alfred Thompson  |  April 5, 2013 at 8:44 am

    My understanding is that Alice 3.0 is an attempt to make the transition from traditional Alice to Java programming easier. I look forward to seeing how effective that is. Small Basic, which is not a block language but which is fairly easy for beginners has a “Promote” button which converts from SB to Visual Basic as an attempt to ease the transition. All this means that some people are aware of the difficulty in moving from a simple beginner language to a more powerful but complicated language.
    Like you I see Python as between Scratch/Alice and languages like Java. I see various BASIC languages in that range to although BASIC is fairly unpopular among many these days. Unfairly in my opinion.
    One tool I have been experimenting with lately is TouchDevelop which is somewhere between a block language and a traditional language in syntax and in programming interface. While I don’t see it as the final answer I think it may lead to better answers as it is developed. The principal developer of it is also using it to teach HS CS and that may prove interesting in the long run.

  • 5. Keith Decker  |  April 5, 2013 at 10:27 am

    Another bridge project for this age group is Bootstrap, the middle-school part of the Program By Design curriculum

    They have a browser-based editor for schools that are so locked down that no free software can be installed, and tie closely with middle-school algebra and geometry.

  • 6. Monica McGill  |  April 5, 2013 at 12:30 pm

    Looking outside the educational realm, there is a mix of simple, easy-to-use tools that can be used for educational purposes that are also being used for commercial projects. Many popular, successful, mobile games on the App Store have been created with GameSalad, for example. I find GameSalad to have a similar feel to earlier versions of Alice, but with a lot more intuitive look and feel.

    One of the draws for this type of tool, of course, is that students can not only post their games to the App Store, but also have the opportunity to sell their games. These types of tools have high value for students, providing both intrinsic and extrinsic motivation.

    This begs the question, though, if professional developers currently experience “economic prosperity” using tools that require systems thinking, algorithmic development, aesthetics, and production processes, but not actual coding, are we missing an educational opportunity? (Or, more directly, is “programming” necessary for **all** students studying computing? Or is there another path? The more I run across these tools, and the more I work with students in production-style courses, the more I wonder….)

    • 7. Mark Guzdial  |  April 5, 2013 at 1:44 pm

      I’ve been thinking along similar lines, Monica. What are the paths to support other needs for programming (e.g., for data analysis, for batch processing images, etc.) with similar “salad” applications?

      The real problem with these is that, if they smack of “programming,” the students reject them for *not* being programming. “I want to learn the real thing, not some toy! I want to leave Java or Python or PHP or…” Authenticity is pretty powerful as a motivator.

      • 8. Monica McGill  |  April 5, 2013 at 5:50 pm

        Understood. But what students see as authentic is directly tied to their end goals, which vary. If students want to learn programming, there are already plenty of learning opportunities at thousands and thousands of colleges across the world. If these tools, which only seem to be getting more useful and powerful, can lead to viable paths with economic opportunities for individuals (and countries), I can’t help but wonder if there is some value here that should be explored on a broader scale.

  • 9. gasstationwithoutpumps  |  April 5, 2013 at 5:18 pm

    Another explanation of the waning of US startups relative to Europe and Israel is the tying of health insurance to being an employee of a large corporation in the US:

  • 10. OTR Links 04/06/2013 | doug --- off the record  |  April 6, 2013 at 1:31 am

    […] Six Reasons Why Computer Science Education is Failing Students | Computing Education Blog […]

  • 11. Kathi Fisler  |  April 6, 2013 at 8:55 am

    One problem with migrating to professional-scale languages is that students end up confronting the whole language. Often this happens accidentally: for example, a student might use a keyword they haven’t learned yet (such as “new”) as an entirely reasonable variable name. Without IDEs that meet students where they are, working in professional languages can get too hairy, too fast.

    One approach is to create new, beginner-friendly languages (perhaps with graphical syntax). Another is to create tools that adapt the target languages to students’ abilities. DrScheme (now DrRacket) and DrJava take this path: users configure their level (beginner, intermediate, advanced, professional), and the language scales appropriately. For example, in DrRacket beginners don’t know about functions that take no arguments, so beginner level requires all functions to have arguments. If a beginner-level user writes a function with no arguments, they get an error message about needing arguments (the same program would be syntactically correct in more advanced levels). The point is that scaling the language—with tool support—enables one to tailor error messages and feedback to where students are. Surface-level “language subsets” that aren’t backed by IDE support can’t achieve this.

    We don’t always need new languages to bridge these gaps. Sometimes, we need careful pedagogic attention to tools that ease students into the existing languages that they will need to get to. I’m not saying that early-entry languages lack value: they have a strong role in bridging huge gaps. For smaller yet still painful gaps, however, we could do a lot with carefully-designed pedagogic tools on existing languages.


    • 12. Bonnie  |  April 7, 2013 at 2:55 pm

      I very much agree with this. I also think that textbooks are a big part of the problem. There is no need to introduce every form of loop syntax to beginning students when while loops will cover all types of loops. Why teach constructs like i++ to students who are struggling with assignment? Textbook authors seem to think they have to encyclopedically cover every possible syntactic variation as early as possible. I would like to see completely new textbooks, perhaps combined with tools like DrJava, that introduce a real programming language in a pared down way. I truly think that would make all the difference

  • 13. What we talk about when we talk about CS | Geeky Mom  |  April 22, 2013 at 7:00 am

    […] Six Reasons Why Computer Science Education is Failing Students […]

  • […] apps and applications!  It’s a compellingly different model for introductory computing, that sits between visual block programming and professional textual programming. […]

  • 15. Mark Miller  |  April 30, 2013 at 7:18 pm

    One aspect the article talks about are teachers who are tasked with teaching programming, who are not well trained in it, and so create dry, boring “worksheet” classes. This brought to mind one of my experiences from many years ago.

    I’ve shared this once before on here, but perhaps it bears repeating in light of this subject. I was in the TAG (Talented And Gifted) program for a bit while I was a high school student, tutoring other students. Word got around that I was into programming computers, and a teacher approached me about teaching programming to elementary school students. It was a trial run. Teachers were just looking to experiment with a new idea. The school district didn’t have many programming teachers, and they were all at the secondary level. I took a stab at it. I don’t remember how long I was given to teach it, but it was a set amount of time, a few weeks perhaps. My memory is I came in to the elementary school I was assigned to once a week for an hour.

    I had a class, IIRC, of 3rd-6th graders. It was small, I think probably one student from each grade level. They seemed forlorn. The school had a small computer lab of Apple II’s, and they were only used to give what the students called “boring keyboarding drills.” So, I presented the idea that rather than them working within the constraints of the software they were using, they could mold the machine somewhat to something they wanted, via. programming in Basic, which fortunately was burned into the ROMs. We didn’t have to install anything. That was my “better idea” than boring drills. The rest flowed from there, with me presenting Basic the way I had learned it. The older students caught on to my method, and become more interested in it as we went along. The younger students had a harder time, and unfortunately I was ill-placed to help them (both in the time I was allowed to spend with them, and my own understanding of what would be valuable about programming to the students). Basic didn’t help, as I think it hit them too hard, too fast with too many rules.

    After the course came to an end I was informed by one of the teachers in TAG that overall my course was received positively. One of the boys in my class (I think the oldest one) got interested enough in programming that he wanted to pursue it more on his own. That felt like an accomplishment for such a short course, opening the eyes of some students to a way of approaching the machine they didn’t realize existed before–getting an inkling that they could “write” with them, rather than just using the machines as “digital workbooks.”

    I know that using a high school student to teach the subject was not the best idea conceivable, but given the limited scalability of that knowledge at the time, at least for some of the students it was a better idea than what they were getting from the adult teachers who were available. With some reservation, I submit that in similar circumstances perhaps this idea–using students with some experience in programming to teach students–deserves consideration.

    • 16. Mark Guzdial  |  April 30, 2013 at 8:00 pm

      Hi Mark,

      I had a similar experience. I was a Junior in High School when my Fortran teacher was asked to offer a course in Basic for adults in community education. She wasn’t interested, but she recommended me. I taught “Bits, Bytes, and Basic,” and continued to teach throughout undergraduate.

      But I am strongly against proposing this as a solution for primary or secondary school education, for the same reason that I’m against the TEALS program that uses IT professionals to teach computing in schools. It gives principals and school districts an ‘out.’ It relieves the pressure to “just offer something in computing!” without creating a sustainable solution. Imagine if someone was to suggest, “We can’t afford to hire another English teacher, so let’s ask a bright Senior to teach it” or “Physics isn’t all that hard — let’s just have the best high school students tutor the weaker ones and not hire a teacher.”

      Our problem in computing is that there are too few teachers applying for the training that’s available. We are way under-utilizing our available capacity for professional development. I hear the response, “But what about the students? They need access to computer science education!” Agreed — and it’s the job of school districts and principals to provide it. Providing bright high school students or IT professionals to teach the courses relieves the pressure without creating a sustainable path.

      Sustain the pressure. Don’t blink. Create demand for CS teachers.

      • 17. Mark Miller  |  May 1, 2013 at 4:07 pm

        I understand and support what you’re saying in principle. However, I question the means you’re suggesting for applying pressure. If a school did not consider a student to teach a course, then perhaps they’d consider just as you said–an IT professional, or worse, an English or PE teacher (just grabbing a couple titles at random). This is not unprecedented, as I’m sure you know. If a school is grasping at straws, it doesn’t help matters just to exclude students as possible candidates. If you’re suggesting that the means of applying pressure is to provide a low-quality experience for the students, then I think this notion of “pressure” is a thinly veiled justification to paper over what’s happening. If such a school system is as unprincipled as you suggest, why would they care about using anyone who is unfamiliar with computing and programming, and may be unskilled in teaching what they know?

        I didn’t propose what I described as a “solution” (which I interpret to mean something of long standing), but a means to satisfy a demand until a competent programming teacher is hired. It was based on the assumption that the education system held some principles of education in high regard, and would not slide into rampant pragmatism. I was saying that if the goal is to provide some semblance of a quality experience, and if the means to provide something better is not immediately available, then this might be an option worth considering, preferring some quality experience over an experience of barely any quality. Perish the thought that it should become standard practice!

        • 18. Mark Guzdial  |  May 1, 2013 at 5:48 pm

          My preference between the two (a bright high school student or an unqualified English/PE teacher) is for the English/PE teacher. This is someone who has chosen the job of “educator.” If she develops a sense of identity as a “computer science teacher” (as in Lijun’s work), she may seek out professional development and become a better computer science teacher. I do recognize we’re choosing between two undesirable options, but the unqualified teacher can be taught, while the high school student is going to leave.

  • […] Six Reasons Why Computer Science Education is Failing Students ( […]

  • 20. gasstationwithoutpumps  |  May 1, 2013 at 8:38 pm

    This year my son (a high school junior), and IT professional, and a journalist have been co-teaching a Python course to novice programmers as a free course for home-school students. The school district has no computer science courses (the closest is a web-design course that has little technical content).

    I don’t know how good a job they’ve been doing, but I think they have been doing a better job than the school district (anything is better than nothing).

    I think that they are also doing better than most English or PE teachers would have done. Knowledge of the subject is more important than knowledge of pedagogy sometimes.

    Obviously courses by unpaid and untrained teachers are not a long term solution for major gaps in educational offerings, but there is not the slightest shred of evidence that the local school district sees the lack of computer science as a problem to be solved (though some parents do).

    Incidentally, I notice that some of those who taught CS as high school students ended up as computer science educators. It may not be the most efficient way to create CS teachers, but it probably has as high a success rate as the other methods being tried.

    • 21. Mark Guzdial  |  May 1, 2013 at 10:05 pm

      I completely believe that your son and his adult colleagues did a far better job than most English or PE teachers. I also strongly agree that knowledge of the content is more powerful than general teaching knowledge (though not as powerful as pedagogical content knowledge, which presumes knowledge of content first).

      But next year, you want your son to be at college. (I know — I follow your blog. 🙂 I don’t know about the adult colleagues, but I know that we can expect the English or PE teacher to be around for multiple years. I don’t have any empirical evidence for this claim, but my guess is that having them there, in the same CS-teaching job, year-after-year, increases the odds that they’ll get better at it. I’m most interested in the long-term, systemic solution.

      The evidence we have from GaComputes suggests that high school or undergrad teachers of computing are likely to persist in computing, though we don’t have much evidence about becoming a teacher or not. You may be right about the success rate. I hope we can come up with a more efficient and successful way of encouraging more high-quality computer science teachers.

      • 22. gasstationwithoutpumps  |  May 1, 2013 at 11:36 pm

        Well, year after next—we still have one more year with him at home. I’d be glad to see English or PE teachers training to teach CS, but I’m not about to hold my breath. I think that high school students have more chance of learning CS from MOOCs, much as I dislike them as teaching tools, than of getting high school English or PE teachers to teach them CS. (There is some hope for getting math teachers to teach CS, but I suspect most of them will drift out of teaching once their programming skills are good enough to teach CS well.)

        • 23. Alfred Thompson  |  May 2, 2013 at 8:01 am

          I don’t see that many CS teachers leave teaching as their skill level increases. I see more people who came to teaching from industry going back to industry. Often that comes because of frustrations other than pay. I know that I returned to industry for reasons other than income (though the income boost was welcome) and I have returned to teaching again for reasons other than income. (Duh :-)) I think that most people have more complicated reasons than money for moving into or out of teaching.

          • 24. gasstationwithoutpumps  |  May 2, 2013 at 11:56 am

            It’s true that choice of occupation is not primarily driven by money, if teaching is the choice, even for a while. I have noticed that a lot of the math bloggers I followed have drifted out of teaching into “curriculum development” or startup software companies. This may be just normal attrition from teaching ranks, but the opportunities for those who can program make it easier for them to drift away.


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,031 other followers


Recent Posts

Blog Stats

  • 1,995,573 hits
April 2013

CS Teaching Tips

%d bloggers like this: