Mark Guzdial has written some blog posts recently about having computing education for everyone that doesn’t have to – and shouldn’t – look like computer science education. He has posts looking at this for both the undergraduate level and the K-12 level.
I’m entirely on board with offering introductory computing and programming education from students with a range of disciplinary interests that doesn’t look like a typical CS1 class or have to cover the typical range of CS1 topics. However, I think a piece missing out of this discussion is whether there is value is teaching those courses in a way that supports students if they realize they want to become computer science students.
Mark gives the example of the insistence of teaching loops in introductory programming, despite the fact that many students will not need loops for their problem solving and can rely on vector-based operations. For students getting started with programming in a data science context, this is certainly the case.
However, particularly when thinking about the K-12 level, how do we know which students “only” need computational exposure or conversational programming skills and which will develop an interest in deeper CS study? Is there merit to introducing some of these foundational CS concepts in these courses, even if just to familiarize students with the fact they exist and give them a taste?
Based on conversations in my department, I think the answer is yes. To build on the example of loops, perhaps an introductory data science course doesn’t have to use loops extensively or test students on them. But, loops are useful! And, if a student does decide to move into CS, they’ll find themselves well served with some minimal prior exposure to the concept.
Again, I am glad that Mark is calling for computing classes that meet the real needs of students who do not plan to study computer science but have the need to be literate in computation. But I hope that some portion of those students may, through those computing classes, realize that they want to change their plans to include computer science. I fear curricula that would tell students “you can’t study CS because you didn’t start out in the right courses/on the right track.” What, then, might we minimally include into those courses to give students the potential to shift tracks?
Hi Amanda,
I don’t want to tell students that they can’t study CS because they didn’t start on the right track. But I hope that we don’t consider high school CS courses as being any track at all. Students shouldn’t be at a disadvantage if they don’t see loops in K12 classes — if they are, then we designed our undergraduate classes wrong.
K12 CS should be about giving students the most useful knowledge for whatever they do. If we have to make choices, we should make choices in favor of the most useful topics, the things that most people programming might use. While there are a lot of CS majors, most students will not become CS majors. Yes, show them real CS, but teach them the computing that is most useful to the most students.