So you think you want to be a computer science teacher? Part 2.

August 23, 2015

Yesterday I spent four hours trying to get my computer clocks to sync with the domain controller.  I had a new dc built (the old one was Server 2003) and it would not sync with time.windows.com.  After an hour of Googling and tinkering the time sync started working.  Still not sure why.  Then tried to get the old dc to sync with the primary.  Another hour.  Again it works but I do not know what I did to start it.  Another hour to get my desk computer to sync with the dc.  I tried to manually sync one of my non-domain computers with time.windows.com.  No go.  I bring the laptop home and POOF, it syncs.  I think I have something funky going on with my firewall.  I have had two pros look at it and they see nothing wrong.  It could be the Charter modem doing something strange.  I will plug into it directly next week and see what happens.

Having the right time seems trivial.  It is not.  All sorts of things want the time to be the same through the network or nasty little warnings pop up.  The dcs have to be time syncing or they do not want to sync data.

Alfred Thompson had a post “So you think you want to be a computer science teacher?”  In a small school you do not just teach computer science.  You teach CS (and likely something else), you are maybe the IT department and you are possibly the person that knows all about everything related to computers.  Yup, everything.

You write the CS curriculum.  Think you are going to walk in the door and teach APCS out of the APCS cookbook to computer geeks that love computers and CS?  Think again.  Those APCS kids had to come from somewhere and there is no nifty freshman CS1 or CS2 or CS whatever cookbook for teachers.  Also not a large choice for textbooks.  If you wanted textbooks you should have become a math teacher.   You also have to decide what the heck CS even is.  It is not just teaching programming.  That would wayyy to easy.  What the rest is and how far you should go in high school is to be determined.  The present consensus is warm and fuzzy.  You spend a lot of time in Google looking for ideas and knowledgeable advice.  You take to blogging in the hope you make some good contacts that give you good ideas.  You get on a first name basis with people in the local university CS department in the hope you can get help from them creating a good direction for your courses and your students.  The Education department?  They showed you how to use a Smartboard didn’t they?  Isn’t that CS?

You are also the defacto computer expert (and if you are not careful the cell phone, school phones, copy machine, cable TV, VCR machine, school bells and anything else that uses electricity expert).  I do not care what your degree and transcripts say you did in college.  You are the IT person.  “Computer expert” means firewalls, servers, switches, wireless, anti-virus, content filters, grading software (hours of fun there) and anything else that might have to do with a computer.  You advise the administration on things that can be very expensive and critical for the future of the school.  (No pressure there!)  Oh, you are also the software expert.  You will be on a first name basis with a Quickbooks support guy named Fred with an Indian accent.  The IT training program consists of an intimate relationship with Google.

Oh, and forget about that 8 to 3:30 day.  Teaching CS take about 3 times as much prep time as any other subject (except maybe English but then English teachers are gluttons for punishment).  Remember you are designing almost all your own assignments.  And do not forget you are the IT department.  Things go haywire with computers during the day for no logical reason.  They get fixed after school or on the weekend.  And if the internet goes down just forget about anything in your life until it gets back up.  In the middle of class?  Tough, you are out the door.

There is no doubt about it, being a Computer Science teacher is fun.  You are never bored, you are always learning something new, there is always something you should be doing, you are usually the department head (usually there is just you in the department) so you can go almost any direction with your curriculum, there is always some new gadget to play with, there are great people out there that are interested in what you are doing and want to help you with what you are doing and, best of all, it is always changing.  Why would a teacher not want to teach CS?  OK, so there is a bit of an issue with job availability.  There is also a bit of a problem getting certified or getting an education in teaching CS.  And there is definitely no education program for school IT.  Details.

Flipped Programming

August 9, 2015

Here is the first programming assignment of the year for my Programming II/III kids.  We are going to walk to the nearest traffic signal and discuss what it would take to write a program to simulate a traffic light functioning: 3 different color lights, crosswalk button, two directions, countdown timer on the crosswalk and whatever I and the kids see.  This idea sort of came to me last week in Oregon after a day of mountain biking.  One of the people I was with sort of just triggered it.  Initially I thought the exercise a bit trivial; a timer, a counter and a sensor.  I started thinking what I would write this in.  Then it hit me, the exercise should not be the traffic program, the exercise should be what to do it with in the way of a language or a hardware.  Initially I was thinking of using the Arduino; little LEDs and a button and actually make an operational signal, but then it hit me again, this can be done with all sorts of things.  Digital simulation with lights on a monitor and a keyboard press.  Inputs could be signal duration depending on speed limit of the streets at the signal and traffic volume.  Another solution could be with Lego Mindstorms and the old railroad semaphore type signals.  The problem has now changed from having a solution (a language the kids are supposed to learn) with me trying to dream up a problem to use it with, to here is a problem, now how should we solve it?  Want real lights?  What do we have that will give us real lights?  Want just a graphical simulation?  What do we need in a language to get an interesting graphic?

I am trying to get my programming classes to evolve from strictly a programming class with a selected language to more of a computer science class with a set of problems that need solutions that computers can help with.  I am finding this is not easy.  A Programming I class simply does not have a clue as to what tools are available to work with or how difficult some tools are to use.  At the moment Programming 1 is “Here is Scratch, here is what we are going to do with it.”  I want to reverse that.  I want “Here is what we want to do, now let’s find something to do it with.” The list of possible somethings at this level limits the possibilities.  I think I need to focus more on the pseudo-code approach at this level.  I just need a way to make it interesting.  Simple games like Lights Out are very good for pseudo-coding and just plain thinking about.  A very simple game to play and yet requires some excellent problem solving.

Over the years my usual strategy to get kids interested in programming, and as an off shoot CS, was through games and game writing languages.  Overall I still think this is a good strategy for some kids.  The problem solving I am after is there but I still want to broaden their thinking, especially in the upper level kids.  I still have to keep the class interesting to attract kids, it is still an elective that can die if it gets a reputation of being boring or excessively difficult.  With the upper level kids I have a bit more flexibility, they are already invested and hooked.

Now I need to start looking at exercise ideas for kids to consider and build on.  I have a few that I have used previously but they are a bit geeky; one involves searching Shakespeare’s Sonnets for the nth Sonnet or how many times the word xxx is used (uber-geeky but cross curricular), another involves computing the nth term of various Taylor expansions (real geeky but again cross curricular).  I need to get ideas that are not quite so geeky.

 

Mountain biking this week

August 5, 2015

I am in Oregon this week mountain biking.  Three friends and I are doing the McKenzie River Trail and some of the other area trails.  The McKenzie river trail is a bucket list trail for mountain bikers.  We did it today.  The first 5 miles is this flowy, smooth high speed thing.  Absolute heaven.  The middle 10 miles had moments of heaven and moments of hell.  The McKenzie river area is volcanic.  For long stretches the trail is lots and lots of very nasty sharp volcanic rock.  Extremely technical riding.  If you fall you bleed a lot.  Lots of hike-a-bike for those of us not into bleeding.  The last 15 miles is back into heaven.  We did 30 miles today in about 6 hours.  Wasted is the word.  The last 15 miles was so fun I simply did not want to stop.  I should have stopped more.  Explains the wasted.  I am so tired from trying to keep up with the 20 something speed demon that is with us I am falling asleep typing this.  I really need to learn to act my age.  Nah.  No fun in that.  Ibuprofen is cheap and has only a few bad side effects.  I only have to survive 2 more days of riding and one of my friends can drive home while I am passed out in the back seat.

When I get back it is back to the techie world again.  Tuesday I have a consultant building a new domain controller for the school.  The old one is Server 2003 and is starting to have issues.  The new one will be Server 2012 and getting the two to share may be fun to watch.  I also have to figure out what I am going to do with my programing classes and figure out what Math II is all about.  I taught Math II several years ago but cannot remember exactly what is in the course.  Math II should be easy to plan.  We have a curriculum.  Programming is another issue completely.  We have no curriculum.  I wing it depending on who is in the class.  A couple of the kids took my Python course as sophomores.  They are going to retake it for college credit.  (Sophomore are not eligible for college credit in dual credit courses.)  So I need to rewrite the course so they are not doing the same stuff we already did.  This wil require that I think and plan.  No fun.  The fact that they are already ahead of the game will let me do some off the wall stuff (Project Spark anyone?) so I think we can have some directed fun.  Teaching programming just allows so many directions.  It is really hard to do something that is not worthwhile for the kids going on to college with it.  Make them think and solve.  That is all I have to do.

Time to pass out.  Old men need their sleep.

Fly fishing

August 2, 2015

The wife and I went fly fishing on the Middle Fork of the Flathead River yesterday.  The Middle Fork is the southern border of Glacier National Park.  One of the teachers I work with is a professional guide during the summer and she offered us a float.  The wife is getting into fly fishing, she is in charge of the Trout Unlimited kid’s camp here in western Montana.  So of course off we went.  The wife had a blast.  I had fun.  The fish were not big but they were hitting and good fighters.  The wife landed maybe 15, I was more in the 8 count but I had the biggest.  Now I like fly fishing but I am not psycho about it.  The wife and our guide are near psycho about it.  Our guide teaches so she can fly fish.  My wife wants to retire and fish across the nation.  Me, I would rather go mountain biking.

The scenery was cool, the river was cool and being with the wife when she was having so much fun was even cooler.

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


Follow

Get every new post delivered to your Inbox.