I started to write this as a comment to Mike Zamansky’s post but it got way to long. As usual he brings up some excellent points. Mike and I have the same goals but our knowledge, experience and backgrounds are vastly different.

I came into CS Ed with no background in CS other than an ancient course in FORTRAN (punch card era) and a horrible course in Java (Gandolf and plug the phone receiver into a weird phone receptacle era). Everything I presently teach I learned on-the-job from books and the internet. I teach no “canned” curriculum so everything I teach I had to learn from scratch. (This is not exceptional. Most CS teachers that are not teaching a “canned” curriculum learned what they presently teach from scratch.) My present job (tech coordinator/IT dude and CS/Math teacher at a smallish K-12 Catholic school) requires I have knowledge of K-12 CS, not just high school or pre-college. As a result I need a tremendous breadth and very little depth. (I wish I had time for depth.) Mike and my skill sets have us looking at CS Ed in different ways, which for me is a huge asset. So here is my comment to his post.

My “Math for Math Teachers” course was a real ass kicker. Number theory, math history (why the Egyptians did it that way and why it was cool), devolution of algorithms (how the long hand division algorithm actually works) and how to teach all that stuff. It was one of the hardest math courses I ever took. (Abstract Algebra with groups, rings and other mysterious, magical and imaginary things was the winner.) I also taught “Math for Elementary Teachers” at the Univ of Montana. Drop out rate was about 25%. These math courses were far from watered down math. They were “understanding how this stuff works” on steroids. When I started teaching I did not need that Abstract Algebra course work, I needed course on how kids see math and how to help them see math. That is what those “Math for Math Teachers” courses try to do. Prospective math teachers could use four semesters of that “math for math teachers”.

I see the same thing for CS. A CS Ed program should not focus on CS content, it should focus on how to teach that content. But the program has to give enough content to build more content on top of. A CS teacher needs to be familiar with a large number of languages, from things like MakeCode, Scratch and Alice to Python, Java, Visual Studio and maybe a couple of game engines like Unity and Lumberyard. Throw in some Blender and Gimp in case the teacher wants to start a game programming curriculum because the APCS course has only two kids in it. They need to be able to discuss the basics of networking, computer hardware and all that “techie” stuff. Oh, and do not forget that apps course that needs a teacher: MS Office, Photoshop, Audacity, etc. The required breadth is intimidating. Remember I am looking at this from the direction of a small school CS teacher. Getting the right depth is the issue that bothers me. Two semesters of Java (or whatever language is the flavor of the month) or a “Java for Teachers” that teaches some Java and but focuses on teaching how kids are going to struggle with Java and how to address that struggle? Both would be the perfect solution but there are only so many hours in the day. Finding that middle ground should keep us CS teachers talking for many years.

Is a “Java for Teachers” a watered down Java course? As far as Java (or whatever language) goes, yes. As far as teaching Java, no. Teaching programming is much harder than learning to program. Ask any CS teacher. The Java element as such is not watered down because it is unimportant, it is watered down because there is only so much time in a course and somehow the instructor has to squeeze in Java AND how to teach Java. The “how to teach Java” is the hard part of the course. Experience has taught me teaching math is a cupcake compared to teaching programming. Will that “Java for Teachers” turn into an “APCS-A for Teachers”? I wish it did not but it may. The shortage of K-12 CS teachers and the shortage of college level K-12 CS teacher trainers may drive that trend. If a school wants an APCS program their only option right now is an “APCS for Teachers” in-service. (I am actually taking an “APCS-P Mobile” in-service this summer. I do not teach APCS and have no desire to teach APCS but it will increase my breadth and will give me more material to cherry pick from for my courses. Depth? Not so much.) Arguing the good or bad of this “take it then teach it” approach does not change the necessity. It is better than nothing.

So where was I? Oh, yes, breadth vs. depth. A CS teachers has to have that breadth. Non-negotiable. You may find yourself teaching 6^{th} graders Scratch or helping a 3^{rd} grade teacher teach Kodu. On the other hand you may end up teaching in a high school that prides itself on sending CS prepped students directly to an upper level university CS program. Going to need some serious depth for that.

Are we watering down CS Ed by building and offering “CS for Teachers” type courses? Yes and no. We are watering down the CS part and (what is the opposite of “watering down”?) adding more body to the Ed part. At least that is what I hope will happen. Individual courses and programs will vary and for sure some are going to be pure schlock.

Can the need for K-12 CS teachers be filled by offering a comprehensive CS Ed degree with a near CS major depth and still fill the K-12 breadth requirement? I do not see it happening. Presently the number of jobs for CS Ed majors is limited. All the CS teachers I know (admittedly not a lot) were hired to teach something else (usually business or math) and ended up teaching a CS course or two. There is simply no market for CS Ed majors to interest prospective teachers. This is somewhat location driven but on average I would claim the statement to be true. So the CS Ed part needs to be some kind of minor or certification program. Something fairly quick and “easy”. Something with a lot of breadth that will make a job seeking teacher more marketable. This is not necessarily a good approach but it is better than an alternative of no CS teachers.

So back to breadth vs. depth. I am a breadth kind of guy. My job requires it. I try to develop depth as needed. Not a great solution but it is all I got. I look at Mike’s former high school position and I see it the other way around. For what he was doing more depth was needed and not quite so much breadth. He was not going to deal with 3^{rd} graders and Kodu. So, given a limited amount of time available in a practical CS Ed program, which approach is better? Yeh, right. Good luck getting an answer most CS educators will agree on there.