Small Basic and the EV3. Time to go play.

July 17, 2015

I saw a couple of blogs mentioning that Small Basic now has an extension that will interface with the Lego Mindstorms EV3 robot.  Being a Small Basic fan I had to give it a try so I borrowed an EV3 from one of the students.  Five minutes after figuring out how to move the program from the computer to the robot with the proper app I had the robot running around on my floor.  Oh boy, is this going to be fun.  Draw it on the screen with a turtle then draw it on the floor.  Kids are going to have a blast.  Having what is now a dual purpose kid friendly language is going to be so cool.  I have run the Mindstorms NXT with Python and Java but they were just a bit difficult to get setup for the kids.  They were also both a bit feature short.

I have programmed the NXT in Java, Python, NXT-G, Scratch (Enchanting) and RobotC.  NXT-G is just a pain.  It has the usual problems with D&D languages; lack of room to see the program, not method friendly, and using the wires to pass variables is a mess.  NXT-G also does not seem to get users ready to transition to a more traditional language.  Not always a necessity for home users but at a school I want to be able to have a bit more structural similarity in the languages.  At least in Scratch a loop looks like a line code loop.  Enchanting uses Scratch to program the NXT robot but it was a bit of a pain to implement and was a bit buggy.  RobotC is by far the most versatile, feature rich and transitional but the price sort of takes it out of my options to use at school.  (If it ain’t free, we cannot afford it.)  Having Small Basic, by far my favorite transition language from Scratch to Python/Java/VB languages, with this extension is just frosting on the cake.

So far all I have done is a For loop in an attempt to draw a square.  It is going to take some tinkering to get the 90 degree angle right and to see if there is a motor synchronization command so the robot will go straight.  (The motors are never exact so the robot has a tendency to curve off the straight.)  I like it when kids have to tinker to get things to work.  It looks like getting the sensors to work is going to be not as simple as RobotC or NXT-G, the extension only seems to see the raw input and the programmer has to figure out what to do with it, but that can just add to the problem solving.  I will have to dig through a couple of example programs to get an idea how things work but it should be fun.  Now if I can just get kids that have EV3s to loan them to the school.  I have eight NXT kits so I just need the bricks.  I am going to have to put the word out when school starts.

Looking on line I see there are attempts to build a Scratch/EV3 interface.  The setup requires using leJos, a Java virtual machine that allows the brick to be programmed with Java.  More stuff to play with.

There is just something about a job that requires I play with Legos and robots and kids.  I love my job.  Now I need to go home and play with my robot.

Back to the MOOC.

July 7, 2015

Back to the MOOC assignment.  Instead of reinventing the wheel (or waking the Good Idea Fairy) I thought I would just adapt one of my old programs to Snap!.  Snap! looks like Scratch so I will grab one of my Scratch programs and I am done.  Snap! is not Scratch.  Things that work in Scratch do not work in Snap!.  Collisions for example.  Hide a sprite in Scratch and it is not subject to collisions.  Hide a sprite in Snap! and it is still subject to collisions.  Do you how long I looked for a syntax error before I started testing this hypothesis?  Way to long.  My Asteroids game works great in Scratch.  In Snap! it requires quite a bit of recoding.

Of course now I have to figure a way of getting the assignment requirements into a fairly simple game.  I will add complexity to achieve the needed elements.  I can do that.  I am good at making simple things complex.

Learning a new language is always good for hours of entertainment.  Learning a language that looks identical to one you already know, but isn’t, just adds to the entertainment value.

I am not a big fan of Scratch.  I use Scratch in my Programming I class because it is an easy introduction to programming and the kids can build some fun little games.  I have a couple of assignments I have been giving the kids for quite a few years and I have the variations of those assignments down pat.  Once the kids have the general idea of loops, decisions and what not we move on to Small Basic.  The quicker the better.  Working with this Asteroids modification has caused me to re-examine Scratch (and Snap!).  After a few hours I have come to the decision I am really, really not a big fan of Scratch or Snap!.  I like all my code in front of me or at least on different screens.  Each sprite having its own code window is just a pain.  Flipping back and forth to remember what the sprite is doing just drives me batty.  The little detail that a custom block will not execute when the block is open for editing had me chasing non-existent errors for a while.  There is no good way of following the execution of the program, no good way I can see of debugging.  As soon as the program gets big it is almost impossible to keep track of the flow.  It is probably more of a mindset than anything else but I will never be a fan.  For me Scratch is great for writing simple little animation games and for teaching some very basics without having to worry about typing and syntax.  Beyond that it is time for line code and a good IDE.

I feel the same about all the drag-and-drop languages I have worked with.  They are just awkward.  Complexity is not their forte.  It is possible to do cool things with them but in the end they are teaching tools with a limited use.  The fact that many of them do animation so nicely makes it tempting to keep the kids working in these languages because the kids are willing to work in them.  I think only having kids do a programming course where all they see is drag-and-drop is a big mistake for their CS education.  Kids often take only one semester of programming, they have to see a line code language in that semester.  Nothing fancy; Small Basic, Arduino (not really a language but whatever), RobotC, Python or something along those lines.  It is possible to have fun in those language and still educate.  It is possible to keep kids awake in a line code class if the assignments are kept interesting.  Just do not bury them in some geeky math based coding assignment.  Save that for the second semester.  Most of the second semester will be the geeky “I like programming” kids.

Now back to the MOOC.  The only language the students (mostly prospective APCS Principles teachers) will see in this MOOC is Snap!.  People have a tendency to teach how they learned.  Using a drag-and-drop as the only language is a mistake in my opinion.   I think a lot of first year CS/programming teachers start way behind the Eight Ball when it comes to languages.  They have got to see more.  They do not need to be expert coders but they have to know what is out there and why it is there.

MOOC Assignment Wakes Good Idea Fairy

July 6, 2015


We got the first programming assignment for the APCS Principles MOOC I am taking.  Here it is:

You will develop one program using Snap!. Your program must address the following requirements:

  • Include the basic programming elements of Snap! For example, programs should demonstrate appropriate use of numbers, text, variables, statements, mathematical expressions with arithmetic operators, logical and Boolean operators and expressions, and lists. Your program must have at least 5 if or if/else statements and at least 3 loops.
  • Demonstrate the creation of abstractions to develop and manage the complexity of the program; your program must have three blocks that you create. You must have at least one Reporter and one Predicate. At least two of the blocks must also have parameters.
  • Describe the creative process and the use of algorithms as building blocks of the program.
  • Include comments that help the reader better understand your code

I was sitting there thinking why is this assignment so confusing and difficult to me.  Then it hit me, it is backwards.  I usually have a task I want to do, a game idea or an assignment program I have dreamed up or some program from a book.  This assignment wants 5 ifs, 3 loops and so on.  It is just weird building from that direction.  When given a task or assignment to program I can just go through the planning and design steps and away she goes.  With this assignment I have to dream something up that fits the criteria.  I have a problem when I dream something up.  Typically when I dream something up from Good Idea Fairy Land part way through I reach an “OMG, what have I done to myself?!” stage.  So several years ago I decided the Good Idea Fairy was a bad spirit.  This assignment requires I wake the Good Idea Fairy.  This is a bad thing.

I can understand the idea of this backward approach, it really kills the chance of plagiarism, but it sure is awkward.  Not only do I have to design and code, but I have to think of something to design!  Not my strong point.  Coming up with ideas is not a problem, I have lots of those.  Coming up with an idea that I can do with Snap! in the time allotted and that does not turn into a can of worms because I did not have the time to tinker with it is a problem.  I have had Good Ideas before and usually discover I have bit off more that I can really want to chew.  Oh well, no matter what it is bound to be fun and a new learning experience.


Death of a Switch.

June 19, 2015

Hard day at the office today.  What would make a switch go bad?  It was allowing traffic, only at about .5 Mbps.  It was a cheap Linksys switch but still there is not much to a switch to go haywire.  It took me a while to chase it down because it was not a likely suspect.

My network is sort of a duct tape and chewing gum affair.  I have never bought a managed switch, they are all donated.  Not that I do not get some excellent quality donations from companies but they are still not new and are well used.  I have some cheap 8 port switches in critical locations so I really cannot monitor a lot of things.  Of course I do not have the software to monitor anything so it is a moot point.

My techie friends at the public schools casually talk about upgrading their five year old switches to the latest and greatest at $1100 each.  I wish I had a five year old switch and my annual budget is less than $1100.  It is interesting that my network seems to work (or not work) just as well as theirs.

Keeping a small school network alive is not rocket science, after all I do it and I have absolutely no education in the field.  (Google is my friend.)  Running a large monitored network does require a level of expertise I do not have.  And considering the number of schools that have expert consultants not many other techs do either.

In my programming courses I do diverge into a couple hours of networking.  They build patch cables, set up a mini network and we discuss domain controllers, IP address, MAC addresses and so on.  Enough for them to do some basic troubleshooting.  Most network issues are simple; something got unplugged, a piece of hardware died, someone saw a loose cable and plugged it in (My favorite.  Good for hours of entertainment.) and so on.  I have had kids actually make money from what I have been able to teach them.  For some reason university computer help desks love my kids.  They know how to plug things in, what the idiot lights mean and know how to troubleshoot network basics.  Teaching kids networking basics has to be part of a CS curriculum.  There is so much little stuff they can learn that result in big dividends.

Summer Fun Begins

June 15, 2015

The summer fun has begun.  I did the Lolo 12 Hour mountain bike race yesterday.  With a team of 4 we each did 2 ten mile laps with each doing one lap in sequence.  I was number four in the order.  My teammates averaged about 1:15 a lap.  Mine were a bit slower, 1:30 and 1:45.  That second lap was at 4:00 o’clock in the afternoon.  A bit toasty.  It is weird the way some people have fun.  Raising a garden would be so much less work.  I need to work on that training just a bit more.

In the end of July I am doing the Butte 50 race.  Rated as the hardest mountain bike endurance race in the US I will be dead meat in my present condition.  I did it 2 years ago.  Took me 10 hours.  I was not in good shape at the end.

There is a computer lesson involved with the Lolo 12.  The race was chip timed.  The number plates had chips and when the bike ran over the sensor pad the time would be recorded.  The software died.  I am not sure why; computer glitch, software bug or whatever but luckily the company doing the scoring knew how to score manually.  It seems odd that a professional company would not have multiple computer backups, hardware and software.  Of the 8 people in the two teams I sat with, three of us were computer programmers or hardware engineers.  It was just so tempting to wander over and investigate but I figured they had enough issues to deal with.  A lesson in making systems fool proof.

I have always been interested in small level commercial software like this.  Years ago I worked in bicycle shops.  Computers and point of sale software was just starting to be available.  Oh boy, was it bad.  It was designed and written but computer programmers, not sales people.  As a result it worked and was very organized but was totally useless to a sales person at the till.  The evolution of this POS software has been interesting to watch.

I really need to have the kids look at examples of “simple” software like POS and that race software.

CS has to be for the “regular” kids

June 3, 2015

As I mentioned previously I have signed up for an APCS Principles MOOC from the University of Alabama.  The instructor throws out discussion questions every now and then for the class to discuss.  One of the discussion questions had to do with recruiting kids into CS classes.  It made for some very interesting reading.

As I read these recruitment suggestions I noticed a trend.  Many teachers seem to be looking for “high achievers”, “AP potential”, “hard workers”, “good prospects”, and so on.  I have to say I am absolutely opposed to this type of approach.  We live in a CS world.  Everybody lives in this world therefore everybody should get a CS education, not just the upper level students.  If the school only offers AP level CS then it is doing 90% of the students a disservice.  CS has to come down to the lowest level.  The argument is that not every kid is capable of doing CS, where CS is often thought of as programming.  Maybe every kid cannot do Java (heck, I can barely do Java) but I think they can all learn to program a little robot or get something working in a language like Scratch.

CS teachers need to be recruiting all kids into the classes.  If the school only has upper level CS classes then it is time to reconsider the curriculum and consider the fact it is the 21st century.  I am of the opinion if it is a choice between APCSA for a very few or a low level CS survey class for the many then the APCSA is toast.  “Principles” is directed to the broader spectrum of students so we as teachers need to get the word out that it is not just for the high achieving students.  CS has an elitist reputation, we need to change that.

CS needs to be a K-12 curriculum.  Maybe not as a stand-alone CS class but at least as an integrated thread in all classes.  Somewhere in there every kid should get an opportunity to program a robot, write a simple program, and build an algorithm that actually results in something visual happening (as opposed to memorizing someone else’s algorithm as in a math class).  The people who point out that they use a word processor or spreadsheet in their class and claim it is CS might as well give a kid a 10 key calculator, teach them to add on it, and claim that is math.  Apps are part of the picture, but only a part.  Teaching apps teaches kids to be users, which is very necessary to survive.  Teaching CS teaches kids to be builders, which is necessary to do more than just survive.  Every kid should have the chance to be a builder.

(You should see me discuss this live.  I wave my hands a lot and get very excited.)

Summer fun

June 2, 2015

This is the last week of school.  Kids have finals Tuesday through Thursday and Friday is staff meetings.  Saturday I take off on a 4 – 5 day motorcycle ride to Oregon.  Two friends and I are heading over to Blue River which is just east of Eugene.  In August some different friends and I are heading over to this area to go mountain biking for 3 days.  We are going to ride the McKenzie River Trail which is supposed to be one of the premier mountain biking trails in the nation.  It will have to be pretty dang good to beat what I ride in western Montana.  The motorcycle ride is to get the lay of the land, see the cabin I have reserved and get out of town for a few days.

These road trips are always a bit of a thrill simply because motorcycles are extremely dangerous.  As you get older the hand and eye coordination just is not what it used to be.  At my age riding a motorcycle that will easily do 150 mph (been there, done that and really like it) is not really smart.  One of my friends is on a Harley which keeps me a bit restrained.  His max comfort speed is about 80, mine is in the triple digits so riding with him keeps me out of jail.  My wife has told me many times I am not really smart to ride that thing.  She might know something.  But boy is it a rush.

Two of us have done a lot of road trips together:  San Francisco, Vancouver, Banff, and most of Oregon, Washington and western Canada.  We usually figure a maximum distance away for the given time and a back road route to that point, then figure a way home from there.  We also search out all the little paved back roads.  (That is one reason for Oregon.  They pave everything in that state and some of them are just oh so curvy.  In Montana even the pavement that is there can be a bit iffy.) The far point is usually closely related to a brewery within walking distance to a motel.  Two of us are micro-brew snobs so we are always looking for a new brewery to taste the wares of.  We both have a very low tolerance for drinking and riding hence walking distance or one beer and lots of food and time.  I need to be stone cold sober when on the motorcycle.    I am tempted to head up to Portland on the third day.  60 breweries and a trolley.  Cannot go wrong.

Our road trips have made the category of “male bonding experience” numerous times.  Two of us, 10:00 at night, storm coming, one small motel in a very small town, one room available, and one twin bed.  Very bonding.  Then there was the time the three of us tried camping.  I have the right gear, they did not.  One of them brought one of those big air mattresses.  It leaked.  I slept like a rock.  They slept on the rock.  Last time for camping.

Now these trips have nothing to do with computers other than as a stress management clinic after having to deal with computers for the last nine months.  There is something cathartic about excessive speed and dragging foot pegs through corners.  Of course I do have to stop for scenery a lot to wait for the Harley.  I do bring a laptop so I can do some emergency work if needed but the trip is usually computer free.  I also feel “wrong” if I do not have a laptop available.  The smart phone would do the trick but it just is not the same.

Now if the weather will just cooperate.  Last year we rode in the same neighborhood and ended up in 2 inches of fresh snow, in June.  Slow going for a couple of miles until it turned back to rain.  I almost t-boned into a herd of elk crossing the road because my helmet visor was fogged up.  Excitement for a few seconds.  Luckily I was going very slow.  Elk are really big when they are really close.

No matter what it will be a fun break.  Then it is back to the school.  Lots of work to do over the summer.  Server room to rebuild, computers to debug, laptops to repair, wireless to configure, programming course to rebuild and so on.  It never ends and I love it.


June 1, 2015

I am going to try this again –  It is a MOOC for high school teachers on the Computer Science Principles course.  I tried it last year but things were just a bit too busy.  I also found it boring as heck which made everything else I needed to do much more important.  APCSP is a course that is working its way into the APCS curriculum.  It has the goal of widening the spectrum of students and topics covered in an APCS course.  I have looked through the course material and it definitely looks like a positive direction.  I only have two objections: 1. it is a MOOC, 2. it is AP.

MOOCs.  Not much to say there.  Having a teacher or someone to get immediate feedback from is a big plus for me but then I am old and stogy.  I like chatting about a topic face-to-face.  A chat room is just not the same thing.  When I go to a face-to-face class I make connections with people.  In a MOOC I make connections with avatars.  A bit too weird for me.  There are numerous studies on the completion rate of MOOCs and on-line courses.  The results are not good.  But still, knowledge is knowledge and if I can hang in there I expect to get something out of the course, ideas I can modify to suit my teaching style.  Since most CS teachers are teaching as a one-man-band things like this MOOC are a decent way of getting ideas.

AP. I am not a fan but then I do not teach one either. The concept of an accelerated course is OK.  The idea of regurgitating all that material on one test is not OK.  My high school offers AP and dual-credit courses.  The dual-credits are yearlong courses that include the complete contents of the equivalent semester long University of Montana course.  The kids are registered at U of M and get a U of M transcript.  They get the grade they get in the high school course.  The grade transfers to any college that accepts University of Montana credits.  No special tests, just a regular high school course but at the university level.  Being yearlong as opposed to a semester means more time on topics and more topics.  The courses also cost 25% of the regular U of M courses.  Win-win.   Right now our dual-credit courses are in CS and Math.  We offer AP English, AP US History, AP Chem, AP Art and AP Bio.  They are our advanced courses of course and I have no objection to the material or the methodology, just the test.  Measuring a student’s knowledge of a year’s learning on one test seems a bit counter to the very idea of how education should work.  The kids also have to look at the colleges they are applying for.  Many do not accept AP credits any more.  U of M accepts no APCS credits.

So with all that said why do it?  Teaching CS/programming can sometime be like teaching on a raft in the middle of the ocean.  You are out there all by yourself just hanging on hoping you are going in the correct direction.  With Math there are usually other teachers in the school, there are very active organizations like the National Council of Teachers of Mathematics and the State NCTM organization and there are lots and lots of textbooks, one of which is bound to be close to what you want to teach.  In CS not so much.  You are usually the only CS teacher and maybe the only CS teacher for many miles.  The Computer Science Teachers of America simply does not yet provide the pedagogical support of the NCTM.  As for textbooks, there is no money in it for the publishers because the numbers are too small therefore the selection of high school texts is extremely slim.  When you also consider no one has really decided on a “best” high school language it makes it a bit rough to decide what book to write.  Most high school subjects are very static, a twenty year old math or history textbook is not all that different from a brand new one.  CS is a bit more dynamic.  Last year’s CS textbook can sometimes easily be considered an antique.  I have some 10 year old CS “Education Programs” that I keep around for the kids to chuckle over.

The only solution, especially for teacher education, is to go with something like this MOOC.  APCSP is worth learning about and the only practical way is this thing.  But they are grinders.  This one has something like 500 people signed up.  It will be a bit much to carry on any kind of discussion with that many involved.

Besides, I need something to do in the summer to keep me off the streets at night.

Memorial Day

May 26, 2015

It was Memorial Day yesterday so I went to my Father’s grave.  He has a simple head stone “John W. Flint WWII Korea Vietnam”.  He was a warrior.  He started fighting in 1939 as a mercenary in Finland fighting Russians.  In 1940 he joined the US Navy.  After the third destroyer was sunk out from under him he wanted to be on a bigger ship.  He signed up for “Advanced Fire Control” thinking he would be in a Fire Direction Center on a battleship.  Opps, wrong “Advanced Fire Control”.  He ended up being launched from a submarine at midnight, rowing a little rubber boat to the beach with a radio and calling fire on Japanese gun positions so the Marines could land more safely.  “Advanced” meant he was in advance of any other American landing on the beach.  He did three landings that way and figured he had pressed his luck enough and went back to a ship.  During the invasion of Okinawa there was a time when the Marines were running out of marines.  The Navy called for volunteers to join an “Armed Sailor Battalion”.  The sailors in all the ships brigs were volunteered.  My father volunteered to lead a platoon.  He was involved in some of the heaviest fighting on the island.  After the war he sold Jeeps and was a professional gambler in Vegas.  He was very good at both but he said it lacked excitement.  In 1950 he joined the US Army to go to Korea.  He fought up to the Yalu River and back.  Finally a mortar round landed in his foxhole and he got evacuated.  The Army doctors managed to patch him up to the point where he could refuse discharge (could not get through an airline metal detector though) and he stayed in.  Being a bit of a linguist; Chinese, Korean and a little Turkish from working with the Turks in Korea, he started working for the CID (the Army equivalent of NCIS).  In 1965 he bribed an orders clerk to send him to Vietnam.  He ended up as the First Sergeant of a support element to a Special Forces Group.  It took almost a year for the Army to find him to discuss the bribing of the orders clerk.  They offered to let him retire.  He did.  He went on to get his Master’s degree in Anthropology and help wife number three get her doctorate in Archeology.  He finished his life as a research assistant for her, an avid hunter, fisherman, outdoorsman and poet.

I hope my head stone can say that much.

What should a K – 12 CS teacher know?

May 22, 2015

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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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.)
  11. Know some people in the CS business. Guest speakers are a good thing.


Elementary school

  1. A BA in Elementary Education is a must just to get a job.
  2. A BS in CS. Not even.
  3. 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.
  4. 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.
  5. 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.
  6. 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?
  7. Have excellent classroom management skills. Twenty to thirty 5th graders in a computer lab can get a little unruly if not managed well.
  8. Again know games. Know lots of games, especially ones that have some learning goals.


  1. 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.
  2. 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.
  3. And last but not least, read Sun Tzu’s “Art of War”. Almost everything in it applies to either computers or students.


Get every new post delivered to your Inbox.