Sigcse-2008-paper
From SC Education
This is very quick and dirty, but it is a start. Charlie had another title, I couldn't remember it. Feel free to redirect all this. Is is just a starting stake of ice in the ground.
Practical Suggestions for Computer Science Education
Everyone knows that "In theory, theory and practice are the same; but in practice, they are different", but practice should inform theory, at least where Computer Science Education is concerned.
Each of our computer science programs accomplish two ends, to develop students growing in mastery of the theory of Computer Science, as well as to develop students who are practitioners of Computer Science. This basically grew from the observation that students who had succeeded in their "intro to programming" course may not actually be able to cut code. We each independently had the light bulb go off "Hmm, if students can't cut code efficiently it hampers their advancement and understanding in higher level courses. We also had the parallel and concurrent thought that "Hmm, cutting code is a messy on-the-job skill, sometimes loosely connected to theory." Long story short, we realized we needed to produce both theoreticians and practitioners.
This has expressed itself in our student preparation in several ways
- out-of-band apprenticeship programs where we
- involve students in special projects
- involve students as helpers and presenters in workshops
- involve students in student competitions
- courses involving big projects providing lots of opportunity for students to make mistakes and learn from them
- a focus on efficiency of programming which we have accomplished in a number of ways:
- developing parallel programming theoretical understanding and HPC programming skills
- involving students in hands-on physical projects
- designing, constructing and competing in robotics, which encourages very efficient C programming
- designing and constructing inexpensive, portable computational clusters
Our collaborations with industry have confirmed the efficacy of these directions. We have been involved with the SuperComputing organization for close to ten years, helping with its educational outreach and training. The hand-on workshops we lead through them furthers this approach, directly with faculty, allowing us to indirectly reach their students when they model what we cover in our workshops.
We are also involved with industry leaders such as Intel and Microsoft who have a serious dilemma. Maintaining Moore's law has forced the into the many-core world. Unfortunately, they are few people trained to take advantage of these architectures, hence the aforementioned dilemma. This many-core programming need nicely splits into the theoretical parallel methods training and the practical parallel programming experience. It appears we may be gaining some experience next year taking our workshops to other countries to help them redefine their CS curricula. That is interesting to us. It is even more interesting to participate in shaping what we do with Computer Science Education in the United States over the next few years.
