## Computing Teachers are Different from Software Developers: WIPSCE 2014 Keynote

A computer science degree is neither necessary nor sufficient for success in teaching computing. The slides below miss the live demo of Media Computation. My TEDxGeorgiaTech talk (video on YouTube) has much of the same components, but is lacking the ukulele playing that I did today. There was no recording made of my talk.

Entry filed under: Uncategorized. Tags: , , , , , .

• 1. Joe Crumpton  |  November 6, 2014 at 10:55 am

Imagine if I replaced computing with trigonometry (or physics).

A math degree is neither necessary nor sufficient for success in teaching trigonometry.

I would agree that a math degree is not sufficient for being a successful high school teacher but surely we want high school math teachers to have math degrees. Not requiring computing teachers to have computer science degrees is what has led to “how to use a word processor” level classes instead of programming classes in high schools.

Joe C

• 2. Mark Guzdial  |  November 10, 2014 at 10:51 am

“A math degree is neither necessary nor sufficient for success in teaching trigonometry.” I completely agree with that statement. There is no evidence that not having a CS degree leads to word processing classes. Most of our best CS teachers in Georgia have no CS degrees.

• 3. Mike  |  November 7, 2014 at 2:19 am

Thanks for posting the slides! It has a bunch of really interesting ideas in it, and it was really enjoyable to read!
(And the TEDx talk is only 20 minutes – I can totally watch that tomorrow over lunch)

• 4. Stephen Gilbert  |  November 7, 2014 at 12:05 pm

Thanks for the slides Mark. I especially liked slide 17, common misconceptions about assignment. However, I think the problem is a little deeper. If I am able to get my student to understand that assignment in this case means “copy the value from the variable on the right and store it in the variable on the left” then they will immediately run into this if they are doing Media Computation.

Picture p1 = … // or Pixel or any non-primitive type
Picture p2 = p1;

Now my students are confused. They thought that they understood assignment, but now it looks like assignment works like (3) a relationship.

I’m not at all sure how teachers should handle this. I’ve seen some tackle it head on, early in the course like Lynn Andrea Stein did in the Rethinking CS 101 project and her “shoebox” (later “dial”) and “label” types. I’ve seen others, like Dave Evans in his CS 101 Python course for Udacity, try to instill a consistent reference mental model of assignment instead of a copy and store model. There is no longer the difference between reference types and value types; everything is a reference type. Of course that all breaks down when the student discovers that some types are mutable and others aren’t.

I’ve even seen this problem back when I taught Pascal back in the 90s. Students were fine with variables until Chapter 2 when we introduced var variables and all of a sudden assignment acted differently.

Perhaps the problem isn’t with our students misunderstanding basic concepts, but that our programming languages use exactly the same syntax to mean two entirely different things, and we expect the students to just “know” which of those two things we mean.

Surprisingly, for all its complexity, I’ve found C++ to be much better in this regard. It has consistent value semantics (assignment means copy and store for both primitive and object types) and when you need reference semantics (either with references or pointers), the student has to make their intentions explicit.

–Steve

• 5. gasstationwithoutpumps  |  November 7, 2014 at 12:25 pm

As a long time C++ programmer (since about 1981) and a more recent Python programmer, I disagree about C++ being better about semantics of assignment. I find a lot of people’s C++ programs having serious confusions about deep vs. shallow copies, and about the differences between references and copies, which is often only visible by unwinding a typedef in a declaration elsewhere in the program or by reading the constructor for the type. Also, only about 1 in 100 programs or libraries seems to use “const” well in C++.

Python’s notion of variables just being names for objects (consistent reference semantics), and the objects themselves having the mutability or immutability inherent to the object seems much simpler to teach.

If Steve had argued for C rather than C++, I would perhaps have bought his argument. C has a much simpler pure value semantics, where you have to make pointers explicit (not hidden in references that are indistinguishable locally from variables that invoke constructors on assignment).

These days I tend to use Python for rapid prototyping and C for programming microcontrollers or other space- or speed-sensitive code. C++ has grown too baroque for my tastes in the past decade.

• 6. Mark Guzdial  |  November 10, 2014 at 10:50 am

Steve, “show me the data.” You may very well be right about C++ (though I value Kevin’s critique, too). But we rely too much on our gut, our rationalizations of language features, and anecdotes in computing education (see my paper with Davide Fossati). Do the study, show us the results, please.

• […] promoting the idea of contextualized-computing education, and the notion that other majors need a different kind of CS than what CS majors need.  We need to take serious the education of non-CS majors in Computer […]

• […] work embedding computing in a graphic design context) and tailoring computing education (e.g., high school CS teachers need something different from software developers). Computing education can be embedded in Engineering classes and tailored for Engineering students, […]

• […] Source: Computing Teachers are Different from Software Developers: WIPSCE 2014 Keynote | Computing Education… […]

This site uses Akismet to reduce spam. Learn how your comment data is processed.