- Students don’t have enough opportunities to learn computer science in school (k12)
- Current K12 computer science programs are doing it all wrong.
The second item I’m not as sure about. Oh I do understand that there are a lot of computer science programs out there that are not going a very good job but there are also some amazing and wonderful CS programs out there. So that is a mixed bag. The solutions being offered are not always that radical or even different. The online component is the largest difference and that in my opinion is not a magic bullet by any stretch of the imagination.
Ajit Jaokar co-founder of feynlabs (similar to Khan Academy in that it was started in response to an adult wanting to help a child learn) has two interesting articles in Edutopia about how to radically transform how we teach computer science.
- Five Principles to Radically Transform How We Teach Computer Programming
- Five More Principles to Radically Transform How We Teach Computer Programming
- Co-Relate the Teaching of Programming Languages to Real-Life Examples in Other Scientific Domains I think that most successful computer science teachers these days are trying hard to bring in more real-life examples especially in their projects. Projects that are too artificial and forced tend to turn students off. On the other hand finding ways to co-relate projects to other subjects and other fields of interest build enthusiasm for computer science.
- Prepare Kids for the Next Wave of Computing The next wave of computing includes mobile and cloud computing. Many CS teachers find themselves overwhelmed with too much to teach in too little time as it is. This makes fitting in cloud and/or mobile development tricky at best. When you add in that few teachers have training in these areas and it’s a tough situation. That being said, students need to be made aware of these topics. These are great discussion points and fit very well into discussion of computing on society which should flow all though CS education. These are areas where we need more professional development and available resources. There are some good things available for mobile (App Inventor for Android and some Windows Phone resources from Microsoft) but not much for cloud. And least not much for cloud that is appropriate for the high school audience. (Hint to my friends at Microsoft)
- Clarify for Kids the Economic Value of Learning Programming This is important for any subject being taught at school today. For CS it has to be more about just a job in computing though. It has to be about the value of understanding the tool that is central to almost every business and industry in the developed world.
- Delay Coding I have mixed feelings about this one. I know there is a lot of thinking these days about teaching concepts apart from coding. I think that early success with coding is encouraging but doesn’t over do it. I also think that instructors can do enough set up to make starting with code easy. Plus there is increasingly the option of programming using graphical tools like Alice, Scratch, App Inventor and Kodu that really take syntax (a frustration point for many) out of the early doing picture.
- Discuss the Big Picture and Introduce Systems Thinking With an undergraduate degree in Systems systems thinking is never far from central in the way I do things. I think that object oriented program leads directly to systems thinking which is a plus. When teaching about objects I try to show the relationships between objects and how things like inheritance and polymorphism help a system to fit together more smoothly.
- Use Hacking as a Fundamental Teaching Tool I don’t like the phrasing of this. I might use the term mashup or just say “start with code and have students modify it.” I’m working on a number of curriculum resources where I supply working code either just the user interface or with some active code and then ask students to add to it or modify it. I didn’t always do this but I’ve talked to enough people who have seen good results with this that I’m doing it now. My hope is that this actually encourages more experimentation with code as opposed to too much playing with the user interface.
- Start with One Programming Language But Don’t Limit Yourself I’ve long been a believer that students should leave school knowing more than one programming language. I like to compare languages even without formally teaching multiple languages. I feel this gives students some sider insight that is helpful in their careers. In high school I think that if there are multiple courses there should be multiple languages taught. Kids at this age learn multiple programming languages quite easily as long as they are comfortable and confident in the teaching.
- Use Multimedia for Learning and for Content Creation Increasingly most teachers are using media for learning. Of course even when I was a student 40 years ago we had and used media in class but today YouTube and similar options make a lot more available. To me programming is creative but is it creative media? Not always. Media Computation is a great idea out of Georgia Tech but it is only one way to use media for content creation. The visual programming tools like Alice, Scratch and Kodu do let students create what are essentially programmed “movies.” These are great opportunities to mix programming, media and other areas of study. Over all I think I need to think more about creative media in CS.
- Separate the Exceptions from the Rules I think most of us do this. We present methods (or functions/subroutines) first in a simple fashion. Once students get the basic concepts of methods we introduce the differences between passing by reference and value. Doesn’t seem so radical to me.
- Discuss Learning About Learning I’m not sure I understand what Joakar is talking about in this point. I do know that my focus on teaching computer science is to help students learn how to learn more. They need an understanding of the basic concepts of course but the best thing we can do is help them learn how to learn on their own. I encourage experimentation and supplemental research. I emphasize that we are preparing for a world (of computer science) that is one of constant change and that students will never stop learning new things. The ones who get excited by this are the ones who really enjoy CS.