(I usually try to keep my posts a maximum of two Word pages. Opps, I leaked.)
For many years I have been keeping a CS Ed course in the back of my mind. A one semester thing that would at least get pre-service students thinking about diving into CS Ed. I built an outline many years ago and every now and then I break it out and play with it. The previous two posts and this one sort of help me organize and verbalize. Someday I may actually convince the local university to hire me to teach it.
The following comments assume you are walking into a school that does not have a solid CS program. Sort of like most schools in the US. Do not assume I am an expert on this. I have been teaching CS for 30 years but that does not imply I have been doing it right for 30 years. In that 30 years I have had some really good ideas (least I thought they were) that went down in flames. What I do suits my skills and interests. What you do has to suit your skills and interests. (One of the nice things about teaching CS is you can follow your own interests and get where the kids need to go curriculum-wise.)
Step number 1.
What do you have to work with? Computers would be convenient but you can do a lot without them (see http://csunplugged.com/) but if you are like me you like the “computer” part of Computer Science. For a typical programming course not much is really needed in the way of a computer. Schools complain about the expense of a CS program. My school-owned hardware (all Windows PCs) is all older than 5 years. Almost all are donated from businesses rotating their hardware. I have not bought a lab computer in about 9 years. Dig a little, the stuff is out there. Find parents that work in real estate, banks, law offices, stock brokerages and so on. Those companies usually have a 3 to 5 year rotation for their hardware. I scored big when a local hospital did their rotation. More computers, monitors, switches, and printers than I could use.
If you want to do a graphics course then there may be issues with dated equipment. I wanted to have the kids dabble in Microsoft’s Project Spark but a minimum of i5 was required. All but one of my students had an i5 or better. The kids typically have better stuff than the school. Rely on it.
For my Programming I we can use a lab but I have laptops to loan the kids. I strongly recommend to the kids to use their own laptops if they own a Windows machine. For Programming II I require them to provide their own laptop or check one out from me (rare). I tell parents who want to buy their student a laptop nothing fancy but I want the kids working on the laptop they would take to college.
Step number 2.
Software is the easiest. There is so much free programming and CS stuff out there the problem is making a decision what to use. For a Programming I course there is Scratch, Alice, Small Basic, TouchDevelop and on and on. Microsoft has a whole TouchDevelop Programming I game writing curriculum ready to go for free. For Programming 2,3,4,… there is Python, Java, GameMaker, Corona, Visual Basic, C#, and more and more. All free and almost all have free tutorials to get started with.
Which do you use? Use what you can find the best assets for. If you are an experienced programmer pick your favorite flavor. After many years of tinkering I have narrowed down my personal favorites for teaching. For Programming I I favor Scratch and Small Basic. Scratch is good for beginners simply because they can do some fun things easily and there is little syntax to remember. I like SB for a beginning line code language because all the syntax is given in the IntelliSense dropdowns. It is also nice for fun turtle projects. The kids can actually write some pretty good programs with SB but the code gets a bit ugly when the program gets big. SB is for teaching, not writing commercial software. Remember, for many kids this will be the one and only CS course they may take. Focusing on a semester of coding may not be the best way to go. Touch lots of CS topics. Make it worthwhile.
For Programming II I have to go with Python. Python has a great free book out there. Having a book is nice when you just want to take a day off from the whiteboard and have the kids do their own digging. That free book and the flexibility of the language make it a winner. I teach a game making course that uses both GameMaker and Corona. Simple and professional games can be made with both and they have free versions. There is an excellent book out there for Corona. GameMaker has some good tutorials available.
And there is Java. Java is very popular. I am not a good Java programmer so I will wait until I find a good textbook I like before I try teaching Java again.
That is one of the things you learn with time. How much time do you have to learn a new language you think you should teach? I have a list of things I want to learn for the kids: TouchDevelop, Project Spark, C# and Java are just a few. Maybe next week.
Now the not so easy stuff.
Step number 3.
You will need kids. One or two programming geeks will usually not do the trick. The administration frowns on classes of one or two kids. Something about “economically justifiable”. You will need an introductory drug course. Introduce something like “Game Writing with Scratch”. The word “Game” is a huge attraction. Or at least get the word around that the kids get to program a game in Programming I. How good Programming I is will greatly affect how many kids are in Programming II, and eventually (if offered) an AP course or Programming 3,4,… The kids will take a hard course if it is interesting. “Build it and they will come” is not a good plan for building your CS program. You need to chase kids down. Remember, pottery is a much easier elective. So getting kids is a combination of salesmanship, planning and word of mouth.
Step number 4.
Curriculum and syllabus. For me this has always been the biggest obstacle. What should I be teaching in order to really have a CS curriculum instead of just a bunch of programming courses? The Computer Science Teachers Association (CSTA) has some guideline documents but for the classroom they can be a bit warm and fuzzy. If you are teaching something like Math you can grab the average set of textbooks and get a pretty good outline of a curriculum. Textbook companies spend a lot of money getting a 3 or 4 year high school math curriculum lined out. In 30 years of teaching CS I have never seen a multi-year high school CS curriculum written by anybody but the teacher. A few years ago just finding a CS book that was not pure programming was near impossible. Things are starting to change. The new APCSP is an effort to really teach CS. It is still heavily into programming but it is a start. UC Berkeley’s “The Beauty and Joy of Computing” is another good program. Again it is primarily a programming course but it has started to focus on the problem solving aspects of CS.
This is where my skills and interests start to come into play. I think a CS curriculum should include software and hardware problem solving, fundamentals of networking, and a very basic grasp of network administration. If you have the skills, teach them. I see comments that computer techie skills are to CS as being a car mechanic is to an automotive engineer. You have got to know how things work, car or computer, before you can really be good working with them. Problem solving with a computer requires knowing how to solve problems with the computer. In simpler words, know how to fix your own stuff.
Some of my curriculum ideas come from the local university. I ask CS instructors what they want the incoming freshmen to know. The answer has been consistent throughout the years. Problem solving skills, the ability to think and the very basics of programming. They could care less if they know language X in great detail. They say they can teach that but without the basics of problem solving the kids are lost and cannot catch up.
If you have to write your own curriculum and syllabi focus on problem solving, not syntax. The kids need to learn how to learn syntax, not have syntax for language X memorized.
Step number 5.
Never be satisfied that you have it right. CS evolves. Yes, you could easily teach the same syllabus and curriculum for 10 years without damaging the kids. Math, Science, English, History, etc. have been teaching the same basic curriculum for about 50 years fairly successfully. CS is unique in this manner. The fundamentals may not change all that much. The basic concepts of problem solving, programming fundamentals, and programming design stay fairly unchanging at the high school level. It is all the fun details that the good CS teacher has to keep an eye on; new languages, new game making software, new hardware, and new things to get kids interested in the CS field. Mix up programming projects regularly. Do not be afraid to go off track every now and then. Have the kids work in something like Kodu for a few weeks. Remember the goal is to teach CS, not to train professional programmers in language X.
As long as CS is an elective it will have to be kept interesting and fun. Once it becomes required then it can become boring and tedious. (Humor.)