There was a great SIGCSE-members list a while back with a list of CS Ed blogs (mine was on there!). I wanted to start reading over other people’s blog posts, possibly making my own blog posts in return. This is the first post that came of this, but I hope to make more posts soon.
https://gflint.wordpress.com/2018/06/14/garth-goes-back-to-college-opps/
Garth describes an introductory Python course, and criticizes the instructor’s approach quite heavily. In particular, he calls out the following:
This course is a perfect example of the mindset that learning programming is nothing more than learning syntax. Memorize the language syntax and you are learning programming. No problem solving. No teaching top down, bottom up or other problem solving strategies. No debugging techniques. Nothing that makes a programming course an actual, useful programming course… I am trying to look at this course as a teacher with the goal of imparting a fundamental understanding of what programming is all about through the medium of a particular language. From that view the course is a zero on a scale of zero to ten.
This post made me reflect on my own Python course, and whether colleagues like Garth would enjoy it more. Obviously, I think the pedagogy is better, but that’s not hard. Flip the classroom, design more active learning experiences, engage my TAs… These are well-known strategies you tend to pick up after a few SIGCSEs. Sure, they all take time and effort, but they’re not conceptually challenging.
But would Garth be pleased with my approach to teaching “problem-solving”? Am I “imparting a fundamental understanding of what programming is all about”? Am I teaching problem-solving?
Most every project has opportunities for student empowerment. Project 4 allows them to make a text-based adventure game of their own design, and project 5 is an open-ended data science exploration. I try to make the programming problems contextualized and not just abstract. I try to highlight ideals about “being a programmer” during lecture and there are also assignments about programming culture and community ethics. Is this what others are talking about?
I’ve brought up this subject a lot with colleagues in the past year, and it even came up during my interview at the University of Delaware. So far, I’ve struggled as an educator to get answers. Here are some thoughts:
- What is problem-solving? How do I teach it? What are reasonable performance objectives for an introductory course? What does assessment look like?
- Should I be using more Open-ended projects? Design-based activities? Open-ended problem solving? I do some of this - does that mean I teach satisfactory problem solving?
- How much is enough? What about the low-level skills acquisition, how much does that get pushed to the wayside? How do I fit these into an already over-packed curriculum - what unit am I going to ditch or cover in even less depth?