I’d fallen a bit behind in my blog reading lately. Over the long weekend I tried to catch up some and came across a post by Leigh Ann DeLyser called Lets just blame the Intro CS… That post was a response in part to an article about the struggle to plug the embedded programming gap. It seems as though people want to blame the first programing course for all the ills in the field of computer science. At times it feels like people want everything covered in a first course. As Leigh Ann suggests we in the computer science field really need some conversations about what the purpose of the first course (and perhaps the whole curriculum) should be. Then we should make the course fit the goals.
I’ve been honored to be a part of the CS 2013 ACM/IEEE-CS Joint Task Force for the the last year or so. This project is designed to make recommendations for what the undergraduate computer science curriculum should look like going forward. And there are recommendations for embedded system development as part of the curriculum. But that doesn’t mean it has to be done in the first course. Depending on the people I am talking to though almost everything gets suggested as belonging in a first course. Sometimes I think people only expect students to have one course in computer science. Unfortunately, in high schools that is often the case. The reality is that a single course has a limited amount of time to cover what has to be a limited amount of material.
The first question most people ask is “what should we cover?” but I like the point in Leigh Ann’s blog – the first question should be more along the lines of “what is the purpose of this course?”
Let’s start with some things you probably don’t want to be the result of a first programming course.
So forget the assembly language programming for a first course – you’ll scare all but the crazy away. Forget the detailed OS interactions – they’re not ready for it. The first job of the first course is to get students ready for more. What you want is:
If a student finishes a course with interest in learning more and the basics they need to learn the next steps they’ll do fine. They can learn assembly language and hard code C in later courses. They can learn a little about limited resources doing mobile programming and from their to the fun stuff of embedded systems. Or they can get to embedded by way of robots. They don’t need to learn it all in the first course.
of course a complete curriculum should cover multiple programming languages and multiple programming paradigms. Sticking with one language throughout is harmful and limiting. High school and college kids pick up new languages very quickly and the sooner they do the better in my view. Bout let’s not try to cram four years of education into the first programming course ok?
Excellent post. I'd add to your list of "what you want out of the first CS course" a solid foundation in problem-solving. I tell my Intro students that I'm really helping them refine their problem-solving skills, getting them to think more critically about the process and getting them to the point where they can develop algorithms and reason about approaches to difficult problems (breaking them up into smaller pieces, etc). Programming is just the tool and the medium we use to get there.
Thanks, this make me feel justified!
1. Basic concepts of programming
2. Interest in learning more (have fun)
3. Problem solving (Amy)
No “best first language” is mentioned because there are only about a zillion languages that can be used to address these three. OK, so a zillion is a bit of an exaggeration but there are lots. Everything from Kudo to C# can be fit in here. The first course is setting the hook (fishing analogy, sorry) and if set properly they will be more likely to run with it.
Garth, you are one of the people who I think really gets it.
Amy, you're so right in that I should have included problem solving.
So true! And this could even apply to a general "what to get out of a CS degree" discussion as well. There's no way that you can learn everything you'll need to know for your career in four years. But having a good foundation in knowing how to learn and think critically is essential. Good post!