This is a post I wrote a couple years ago. It seemed to fit again so I refreshed it and am going with it again.
As you may have noticed from my blog articles this is one of my favorite topics. This is because I teach high school CS and I am well aware of what I am lacking in education and knowledge. What bothers me the most is I have no practical or affordable way of making significant improvements in either. I am attempting to write a methods course for computer science teachers at the local university. Much easier said than done. What really slowed me down was reading other blogs by other high school CS teachers and truly realizing where my programming knowledge level is. There are some really sharp high school programming teachers out there. So I started thinking about what a K – 12 CS teacher really needs. So here is the beginning of a list of thoughts. These are based on my experience of teaching in small schools where CS is not in a department but is in a limbo. They are also based on my philosophy of not teaching programming, but teaching how to learn programming.
High School first.
- A BA in Secondary Education. A must for certification. Contrary to what some parents I have met believe, a person really cannot (should not) walk in off the street and start teaching. Having knowledge of a field does not mean you know how to present it to others. Not that an Education degree guarantees that skill but it does improve the chances.
- A BS in Computer Science. I would definitely say no. 90% of the required course work for a CS degree is not going to end up being useful in the average K-12 classroom. Would a CS degree hurt? Definitely not, but getting a degree in CS and a degree in Education gets pretty expensive and time consuming and would probably not improve hiring chances enough to justify it. In my area of the US there are not enough CS classes offered in schools to hire a CS teacher so the school hires a Business, Math, Technology, or something teacher that is willing to teach a CS (programming) course or two.
- A CS Ed degree if one can be found in your State. I am still looking. CS Ed type courses are starting to appear but they are still rare. What interests me in these types of courses is not the course material, but meeting the fellow students. CS curriculum is such a vaporous thing that getting ideas from other teachers is a must. Learn whose blogs have the best ideas, good textbooks, good languages, fun things for kids to work with in a programming class, why to avoid Cisco and so on are the meat and potatoes of teaching CS.
- Some programming language courses. Most university courses are either Java or Python. If you are going to teach Java or Python a course in it would be real handy. Of course realize that the teaching technique probably will not transfer to high school. I do not think the language is that critical. It is the thought process as how to learn a language that is important. Does a high school teacher need to be proficient at a particular language? Does the typical CS teacher have time to become proficient? What is meant by proficient? The typical CS teacher to me teaches 3 programming courses, 3 math courses, is on the math curriculum committee, the text book purchasing committee, is the building emergency tech guy when something dies and is helping coach at least one sport. (My background is small schools. For a small school this is typical.) I feel a HS CS teacher should be able to operate to some extent in several languages. Being able to program at the commercial level may be expecting a bit much.
- Be a programming geek. You have to like to program on your own just for fun. You have to like to play with programming languages just for fun. Every now and then while working on a cool idea you look at the clock, it is 3 AM, you are still at school and you have an 8:00 class. (My wife cracked down on this one. She said I was losing contact with the world.) Or half way through the Stats class you are teaching you have an epiphany about a program you have been working on, you tell the kids to hold on for a moment while you scribble down some pseudo-code before you lose the idea.
- Be able to select a decent programming language book or educational source. You are going to end up teaching yourself a lot of what you are going to need for the job. Understand that “Learn Java in 24 Hours” is a catchy title, not a statement of truth.
- Have lots of links to lots of CS education blogs. You will learn more from these CS teachers than any University course could ever do.
- Teaching a programming class is the black hole of time. Realize that one prep period is not enough time to teach yourself a new language, grade math papers, plan for next week’s classes, and troubleshoot the lab computer that suddenly will no longer log in. Be ready to put in some non-union hours.
- Know games. There are a lot of good programming games out there. Things like Lightbot and Cargo Bot. Gamemaker and Project Spark can be life savers if some kid wants to learn how to make games and will not leave you alone. You do not need to know how to use them but know where to find the tutorials.
- Be able to talk games. What does it take to write something like “Call of Duty”? Be able to answer the big question “How do I become a rich game programmer?” (Answer: get a degree in physics, math or art, know a little programming and get an internship. Be a designer, not a programmer. Programmers make minimum wage.)
- Know some people in the CS business. Guest speakers are a good thing.
- A BA in Elementary Education is a must just to get a job.
- A BS in CS. Not even.
- College level classes in programming? College level classes in programming do not teach Scratch or Kodu. Do not waste your time. If you get some genius kid who wants to learn Java, give him a good book and go back to herding the cats.
- Know applications; all sorts of applications. CS at the elementary level is lots of apps and, if you are lucky, a little programming. The classroom teachers are not too interested in programming; they are interested in something that will help them achieve their subject goals.
- Be expert enough in all subjects so you can help the classroom teachers design lessons using the available technology. This is not too CSie but it is going to be a big part of the job.
- Be able to plan in intimate, gruesome detail every minute of the class period. A class of 7th graders with 15 minutes of free time and a computer can get, ahh, entertaining?
- Have excellent classroom management skills. Twenty to thirty 5th graders in a computer lab can get a little unruly if not managed well.
- Again know games. Know lots of games, especially ones that have some learning goals.
- Be able to fix stuff yourself. For example if the internet in the lab dies know what to check. Waiting for tech support means you have a room full of kids with nothing to do and you do not have the option of just running for your life.
- Be nice to tech support (if you have tech support). If you have good tech support give them a Christmas present. If you have bad tech support give them two Christmas presents as a bribe so you can get good tech support.
- And last but not least, read Sun Tzu’s “Art of War”. Almost everything in it applies to either computers or students.