Every University Student should Learn to Program: Guzdial Arguing for CS for All in Higher Education

September 19, 2016 at 7:15 am 17 comments

A colleague recently approached me and said, “It would be useful if Universities got involved in this CS for All effort.  All Universities should offer courses aimed at everyone on campus. There should be a systematic effort to get everyone to take those classes.”

I agree, and have been making this argument for several years now.  I spent a few minutes gathering the papers, blog posts, and book where I’ve made that argument over the last decade and a bit.

In 2002, Elliot Soloway and I argued in CACM that we needed a new way to engage students in intro programming: Teaching the Nintendo Generation to Program.

In 2003, I published the first paper on Media Computation: A media computation course for non-majors.

In 2004, Andrea Forte led the team studying the Media Computation class at GT:Computers for communication, not calculation: Media as a motivation and context for learning and  A CS1 course designed to address interests of women.

In 2005, Andrea Forte and I presented empirical evidence about the courses we’d designed for specific audiences: Motivation and nonmajors in computer science: identifying discrete audiences for introductory courses. I published a paper in CACM about how the courses came to be at Georgia Tech: Teaching computing to everyone.

In 2008, I offered the historical argument for teaching everyone to program: Paving the Way for Computational Thinking.

We’ve published several papers about our design process: Imagineering inauthentic legitimate peripheral participation: an instructional design approach for motivating computing education and Design process for a non-majors computing course.

My 2013 ICER paper was a review of a decade’s worth of research on Media Computation: Exploring hypotheses about media computation

My keynote at VL/HCC 2015 was on how computing for all is a requirement for modern society: Requirements for a computing-literate society

My 2015 book is, to a great extent: an exploration of how to achieve CS for All: Learner-Centered Design of Computing Education: Research on Computing for Everyone.

In blog posts, it’s been a frequent topic of conversation:

I don’t know how to convince University CS departments to do just about anything, but here are my contributions to the dialogs that I hope are happening at Colleges and Universities worldwide about how to prepare students to engage in computational literacy.

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

Learning Curves, Given vs Generated Subgoal Labels, Replicating a US study in India, and Frames vs Text: More ICER 2016 Trip Reports Should Computing be in its own College or School?

17 Comments Add your own

  • 1. kirkpams  |  September 19, 2016 at 9:02 am

    I’ll ask the same question I’ve seen you ask about K-12 efforts: Who will teach them? We have 18 faculty members teaching ~650 undergrads plus 2 M.S. programs (one on-campus, one online). Everything below 400-level has waitlists, and many faculty are teaching overloads. How could we possibly teach >20,000 students? Hiring is especially difficult for us, given that we are in a small city (~30,000 without the students) where agriculture is the dominant industry of the region.

    • 2. Mark Guzdial  |  September 19, 2016 at 9:22 am

      We would have to hire more faculty. University teaching scales more easily than K-12, e.g. we can have more than 30-40 per class. It would be expensive. It would be far cheaper than providing teachers to all K-12 schools. We know how to scale University teaching. We don’t know how to provide CS Ed to everyone K-12.

      • 3. kirkpams  |  September 19, 2016 at 10:55 am

        I guess I’m more skeptical about the claim that we can hire more faculty. It was extremely difficult for us (took 3 searches) to find a single sys admin for our department, and the rural setting is often a concern for faculty candidates. For institutions outside major metropolitan areas, recruiting people with technical qualifications is considerably more difficult. And scaling to larger classes without grad students (our M.S. students are very few and are externally funded) is quite a daunting proposition.

        • 4. Mark Guzdial  |  September 19, 2016 at 11:02 am

          I understand the skepticism. It is challenging. It would take political will and funding. My point is that it’s easier, is more easily sustained, is more effective, and is cheaper than our current path.

          Compared with producing CS teachers for every one of 98,000 K-12 schools in the US, and creating the mechanisms for sustaining that number, University CS for All is a much easier and less expensive path. Once the University infrastructure is in place, it’s much easier to produce the 98K K-12 CS teachers. Some of them won’t need additional in-service training, and those that do, can get it from local universities (see discussion about costs here).

          Your department would have to be given more resources. Maybe you’d hire MS graduates rather than PhD’s. Maybe you’d have to create a teaching track in your department. All of these are do-able and have been done elsewhere, as opposed to creating CS from scratch in K-12.

          • 5. kirkpams  |  September 19, 2016 at 11:32 am

            I can see where you’re coming from, and bootstrapping at the university level would certainly be a less expensive step. Given enough resources, the recruiting issue could be mitigated. Handling the political issues (at the state level for budgets, within the university faculty with disparate salaries, and within the department over curricular priorities) is a separate can of worms. That’s where the K-12 efforts are in considerably better shape (from my limited perspective).

            Having said that, I have a colleague doing some great work on a course that creates the possibility of a CS gen ed course, which is a big step in the right direction for us.

  • 6. Doug Holton  |  September 19, 2016 at 10:15 am

    I would specify that it depends how the course is implemented. When I took a required programming course in the 90s at Georgia Tech, it was the worst course I’d ever taken in my life. A quick survey of prolog, lisp, and C++. Today at most universities it is not much different, except it is a quick survey of python or java or matlab. An intro programming course that is not designed with beginners in mind and not even trying to make the course relevant and useful to non-majors is worse than doing nothing at all. I know you addressed this with your multimedia computation course, but most other universities are still teaching a very traditional survey course that non-majors hate and quickly forget about. One alternative is to encourage the incorporation of more computational thinking activities into discipline-specific courses. Instead of teaching coding for coding’s sake, use coding to create something or analyze something in a discipline-specific class, including humanities, physics, math, etc. What got me into a lifelong interest in programming was creating an interactive interface with hypercard in a human factors class and later creating an interactive web tool using Perl for a student club, for example. I didn’t even know that Perl sucked, just that it was the tool I needed to use to do what I wanted to do 🙂 Before long I was contributing to compilers and just about the only person in my graduate education college who knew how to program.

    • 7. Mark Guzdial  |  September 19, 2016 at 10:23 am

      Completely agreed, Doug! Note that the title is that I’m arguing that every University student should learn to program and that we should offer CS for All in Higher Education. I’m not convinced that this is best done by the CS department, or should be in a CS class.

  • 8. gasstationwithoutpumps  |  September 19, 2016 at 11:50 am

    I think that there is a capacity problem, at least in some universities, making it difficult to add more programming courses.

    I just tried adding up fall enrollments in all the intro courses (some programming courses, some about computers but not primarily programming) at UCSC in various departments:
    CMPS: 1084 programming, 471 other
    CMPE: 453 programming, 512 other
    CMPM: 199 other
    BME: 60 programming, 59 other
    There are probably other intro courses I’m not aware of.
    (numbers from https://pisa.ucsc.edu/class_search/index.php )

    So in one quarter, about 1600 students get intro programming and 1250 get other intros to computer science. Assuming similar numbers in other quarters, we get 4800/year intro to programming and 3700 a year other intro to CS. With about 16,000 undergrads, reaching everyone would need 4,000 intro seats a year, which is already being exceeded (several students take more than one intro, or take the same intro repeatedly in an attempt to pass).

    I’m not sure that a requirement that everyone take an introduction to computer science would make much difference—those who are open to learning the material already are making attempts to do so, and forcing the few remaining ones to take programming would not result in eager learners, but in bitter hoop-jumpers.

    • 9. Mark Guzdial  |  September 19, 2016 at 11:53 am

      My preference would be to create kinds of introductory computing that wouldn’t be forced or bitter, but would be contextualized and addressed the needs of those students. It would take curriculum development effort, but probably less than what’s currently being spent on Code.org and CSP curricular development.

      • 10. gasstationwithoutpumps  |  September 19, 2016 at 2:20 pm

        There are limits to how much you can modify curriculum to make it palatable to those forced to take it, as the coercion sets up a bias against the course. I would argue that UCSC has already created enough attractive courses (more than enough for everyone to have an intro programming course, based on current enrollments) that adding coercion to the mix would be counterproductive—very few of the coerced students would gain much and the culture of the classes in which some students are coerced to attend would suffer.

        In places where there are a lot of students not taking programming, creating more attractive intro courses is probably a better strategy than requiring programming for all.

        • 11. Mark Guzdial  |  September 19, 2016 at 4:38 pm

          I have a bit more optimism about coerced courses. We made computing a requirement at Georgia Tech in 1999, and until 2002, only one course met the requirement. That was coerced and bitter. We then built three contextualized courses. The level of a sense of bitterness and coercion has ebbed and flowed in the three courses, and we work to reduce the bitterness and the sense of coercion. In general, our data suggest that more students like the required CS1 courses at Georgia Tech than dislike them. I do know from our work in Media Computation that many students are surprised at how much they enjoy the course, and they explicitly say that they wouldn’t have tried the course if it hadn’t been a requirement. I know that that’s true even for many of our undergraduate teaching assistants — even if they don’t become CS majors, they buy into the course, and want to become part of the course leadership. And many of them were coerced into taking the course in the first place.

          CS is unusual among STEM subjects in that students have such negative prior perceptions about it. As we learned at ICER 2016, other cultures are much more positive about CS. That creates a greater sense of coercion when US students are forced to take a CS course. But the potential of having a net positive experience from that coerced experience is so much greater, since the incoming expectation is so low. It’s easy to provide a better experience than what liberal arts students expect when they come into Media Computation.

  • 12. cycomachead  |  September 20, 2016 at 4:29 am

    UC Berkeley is going this direction too. For a very long time there’s been a typical CS0 / CS1 offering, more recently (~7 years) with CS0 being The Beauty and Joy of Computing.

    However, in the past couple years we’ve started a broad Data Science course, which is designed to be an intro to stats and CS. BUT, before the math sounds too bad, the really cool aspect is these “connector” courses, which much smaller courses that are studying data science through a specific lens.

    Here’s a list of current offerings:
    “DS8” is the main course, and *88’s are the connectors. In the model, most people take DS8 and a connector course together, but they are designed so that you could potentially take connector courses later one. There’s talk of formalizing this system into allowing combinations of smaller courses fulfill other requirements on campus.

    Right now, there’s no “CS” requirement on campus — we’re not quite at a stage to support it, but may see this as a step along that path.

  • 13. gflint  |  September 22, 2016 at 5:14 pm

    The bodies are not there and I doubt the bodies will ever be there. There are not enough “qualified” teachers to teach programming in high schools and the qualification is much lower than at the university level. In my state business teachers are “qualified” to teach high school programming/CS and the business degree has no programming course requirement. I would hate to see the same type of “qualified” occur at the university level.

    • 14. gasstationwithoutpumps  |  September 22, 2016 at 8:17 pm

      Universities and high schools scale differently. At university, you can keep scaling classes larger until you run out of large classrooms, so it does not require huge numbers of people to offer a class to 500 students a semester. (At UCSC,470 is the limit.)

      CMPS 5J at UCSC this quarter has 470 students in lecture, and 15 discussion sections, requiring one faculty member and 5 TAs, I believe. For 17,000 students and 12 quarters in which to offer the course, one would only need three such courses each quarter. Even if each faculty member only taught that course once a year, a department of 12 faculty could do it (maybe 14 if you include sabbatical leave). The TA resources may be a bigger problem than the faculty resources (and cost as much or more).

      It is not impossible for existing CS departments to do CS-for-all, as a lot of departments are already teaching most of campus. The biggest problem is that going from 80% to 100% results in a lot more “problem cases”—students who don’t want to be there and actively resist learning.

      • 15. cycomachead  |  September 22, 2016 at 10:36 pm

        Yeah, though you seem to reach a limit of how much faculty can handle. On the other hand, CS61A at Berkeley (a fairly typical CS1 course) had over 1600 students enrolled at the beginning of the semester…I think it’s down to a paltry 1400 now. 😉

        Plus, I think you can scale CS for All in some ways by having other computationally oriented departments work together. It’s not too hard to find physicists, biologists and individuals in other fields who are capable to teach intro CS, even if they aren’t a full time CS faculty.

  • […] engineers should influence what we teach or how we teach it. That’s not what we are teaching. I argue that we need to take a learner-centered approach, where we recognize that learners are not professionals or experts, and particularly in computing, […]

  • […] everyone is counter to situated learning theory.  Students (even K-12 students) are engaged in legitimate peripheral participation — their “job” is to figure out what is expected of them in society. If they […]


Leave a Reply

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

WordPress.com Logo

You are commenting using your WordPress.com 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 10,185 other subscribers


Recent Posts

Blog Stats

  • 2,060,393 hits
September 2016

CS Teaching Tips

%d bloggers like this: