So You Got That Computer Science Teaching Job. Now What?

(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.)

5 Responses to “So You Got That Computer Science Teaching Job. Now What?”

  1. lenandlar Says:

    Thanks for sharing. What books etx would you recommend for problem solving at school level. I work as a faculty and we rarely spend enough time on problem solving

  2. gflint Says:

    I would like the answer to that myself. In any subject getting the kids to step back and diagnose the problem before attempting to solve it is a war. In programming we spend most of the lecture (more of a conversation) looking at the programming problem than in discussing coding solutions.

  3. gasstationwithoutpumps Says:

    Nice post, but I want to disagree with “CS is unique in this manner.” The basics of CS have no changed that much since I started 45 years ago, and the biggest changes were around 1974–80. More recent changes have been much smaller and more incremental. There are 20-year-old text books that are still good to use. The first edition of the book you recommend for Python came out in 2002 (13 years ago), and Kernighan and Plauger’s Elements of Programming Style (1978) is still worth reading.

    On the other hand, almost nothing I learned in high school biology is still relevant—biology has changed enormously in the past 50 years, and is still changing rapidly. A 10-year-old text book is quaint and riddled with errors.

    • gflint Says:

      Good point. At the high school level there is not much change in the sciences. We still use 20 year old Bio books. The teacher does some major enhancing but there is still not a huge change. You are correct in that the major principles of CS have not changed but all the things that would attract kids into a high school CS elective have. Showing kids things like Project Spark, TouchDevelop and other “new” stuff keeps them coming. Our Physics course has more gadgets (which seem to require more time to use and get working) but the physics has not changed. Chem is the same story. I can still help the kids with my 30+ year old college chem. Math is by far the oldest curriculum/syllabus. Except for the calculator and the occasional use of spreadsheets math classes look the same as they did 40 years ago. Standardized tests seem to test the same things as they did 40 years ago.

      One of the things I really like about teaching CS is there is no standardized test I have to prepare my classes for. We can do what ever we want (Project Spark, Python, Small Basic, Scratch, GameMaker, whatever) and still have the kids ready for an entry level university CS program. We are still teaching/learning those 20 year old concepts but we have them dressed up in something new that keeps the kids interested.

      But you do have me thinking. I do not teach the sciences and just get an idea what they are doing when they ask for tech help or when I help a kid with homework. I need to chat with them to see how big a change there has been in the last 10-20 years.

      • gasstationwithoutpumps Says:

        At the high-school level chemistry and physics are still teaching 19th century material, and math is still teaching 18th century material. The content is quite stable and the presentation methods have not changed much in the past 30 years (display technology has gotten a bit better).

        Many of the “modern” teaching techniques for physics were used in the 1960s (look up physics educator Robert Karplus).

        Biology has had revolutionary changes in content. RNA editing wasn’t even known about when I was in high school!

        CS has gotten much cheaper to teach (when I was in high school, the cheapest computers cost about twice as much as a house $40k for an IBM 1130 vs. $20k for the average US house price in 1965), and there are a lot more fun tools and toys (you can now get a fairly powerful computer for less than price of dinner). Programming languages have improved in the past 50 years, but many of the biggest jumps occurred in mid-70s (Pascal, C, C++, Smalltalk) and early 80s.

        I currently favor Scratch followed by Python for beginners, but Python was designed initially in the 1980s, with early implementations in the early 1990s. Scratch is more recent, with its first beta release in 2006.

        So CS has had a bit more rapid change than physics, chemistry, or math, but a lot less rapid change than biology. (If your high school is using 20-year-old textbooks in bio, there is something seriously wrong in your bio courses.)

Leave a comment