Summer fun

July 13, 2014

It is July.  I am not supposed to work in July.  So far I have not been in school for 3 days in July.  (The wife and I took a short road trip in the convertible.)  New laptops to setup, servers to upgrade, strange network cables to track down and label, software to upgrade and so on.  Some of these cannot be done while school is in session or while the building is busy.  So I work in July.  That is actually OK with me.  If I took the month off I would blow money like nobody’s business.  Of course I do not work hard; after all I am not supposed to work in July.

Next week I have to move the school’s QuickBooks to a new server.  I know nothing about QB and if I make a booboo it would be bad.  Hopefully QB has English speaking support.  Should be fun.

It is interesting the breadth of knowledge a school IT guy should know for the job.  Networking, software of all types, server installation and maintenance, computer repair, wireless issues, domain controller and group policy stuff, purchasing of all the above, and so on.  Too bad I do not have that breadth of knowledge.  That is what I love about this job.  There is always something new to learn and figure out.

This job has changed my teaching style.  My students always complain that I do not show them how to do things; I make them learn it themselves, they have to read the book (OMG!), dig around on the internet and perhaps do some trial and error fiddling around.  In CS it seems it is more important to be able to learn quickly than it is to have a huge knowledge base.  The field is too big and changes too fast to not be able to learn quickly.  Teaching kids how to learn is a lot more work than lecture and regurgitate.   The average kid is not too crazy about it either; they will always take the easy way.

Block Code Languages Work

June 26, 2014

To block code, or to not block code, that is the question.  Whether ‘tis nobler of the mind to suffer the slings and arrows of outrageous block coding or to take arms against a sea of block coding languages and by opposing end them?

It kind of breaks down after that thank goodness.

In this on-line APCS-Principles class I am taking they are using Snap!, a version of Scratch.  This has stimulated some conversation in regards to the viability of block (or drag-and-drop) languages (Scratch, Alice, Snap!, Kodu, App Inventor, Mindstorms NXT-G, etc) as teaching languages.  Alfred Thompson has also written in his blog lately about the subject.  I have taught using block code languages pretty much for as long as they have been around.  They have a purpose and are great for that purpose.  Many purists poo-poo these languages because they have no real world uses; they are not what the commercial world uses.  This is education, not the commercial or real world.  There are a lot of things used for education that have no real world applications.  They are just stepping stones.

We as teachers do have to be very careful when using block languages.  They are a teaching tool.  If all we taught was a block code language and ended it there I believe this would be comparable to having drivers ed kids do nothing but the simulator and assume they therefore know how to drive.  There are block code languages that are for real world applications.  I understand some of the commercial robotics languages are block code so non-coders can program industrial robots.  We need to at least show kids a typical line code language before they escape high school.  In my Frosh/Soph Programming I we spend most of the semester in Scratch and Small Basic but the last few weeks we dabble in VB.  Build a form and make a button on the form do something.  Just enough to see what a grown-up IDE and language is all about.  (Part of this lesson is actually installing VB on the computer.  Installing software is one of those topics that seems to be overlooked in most school syllabi due to restrictions on student access to school computers.  That is what a temporary admin account is all about.)

For beginners block coding is fun and having fun is what teachers want in an introductory elective.  (No fun, no students.  No students, no elective.)  They do not have to remember some strange syntax, everything they can use is listed right there on the screen.  Dig around a little bit through the options on the left and maybe read (OMG!) a tiny bit of a help file and they are off building the next great computer game.  We are not building coders here, we are introducing a thinking style and some fundamental concepts – sequence, conditional and iteration.  Throw in some Boolean operations (and the word “Boolean”) for good measure and we have the start of a real programming class.

Block code languages are like an introductory drug, it may be enough to get some kids interested in hanging around for the “hard” stuff.  So what if that is all they want to learn?  It is the concepts behind programming that are the learning target here.  Most kids are only going to take that one semester of CS/programming and for most that is all they are going to need.  Teaching a block language gives time to teach a lot of non-programing CS content that a “professional” language course would not have time to cover.

Some block code languages I like (Scratch, Kodu), some not so much (Alice, NXT-G).  For the right teacher in the right class they all do the right job.

Beer and cheesecake win every time

June 23, 2014

Kids have been gone two weeks now and I am already starting to fall behind.  I have an eleven month contract because I work on the school computers in the summer.  All the things kids have managed to do to the computers during the school year I now have time to fix.  It is truly amazing what they can do to a computer that I have no idea how they did it.  We do long term loans of laptops to students.  When I get those back I have to reformat them completely.  If I was clever I would find some free imaging software that is actually understandable.  No luck so far.  No big deal.  I have 10 Win7 DVDs so I just get a bunch cranking at the same time.  It just takes time.

I have been working on a University of Alabama on-line APCS-Principals course.  The course is intended for teachers that want to see what it is all about.  Very interesting.  I really like the idea behind the course, less programming, more CS.  The course is really useful for me in that there is a large number of teachers on the course’s blog.  A good chance to talk to peers and get ideas.  There is quite a cross section of attendees.  All the way from people who do not really understand the binary number system and are intimidated by Scratch to people who have whole APCS courses built and have been teaching it for many years.

I got my first motorcycle trip for the year in.  Four days in the saddle to Oregon.  We were planning on about an 1800 mile trip but only did about 1400 miles.  Two days of rain slowed us down.  We even hit snow on one of the passes in Oregon.  Snow is a bad thing on a motorcycle.  We got as far as Bend and came home.  It was still a great trip.  Lots of little back roads with lots of sharp corners.  Found some excellent micro brews and good food.  No speeding tickets.  That is one of the advantages of riding with a friend who is on a Harley-Davidson.  I have to slow down and wait a lot.  He did get pulled over with only a warning.  Chuckle.  Someday I really have to sell the high speed sport-tourer I ride and get something more suitable to my age and hand-and-eye coordination.  But there is just something about 145 mph.

I did a mountain bike race last week.  I had not raced in years so I figured it was time for self-humiliation again.  Got second in my class.  Of course there were only 3 people in my class but whatever.  Most people my age know better and have switched to golf.  The guy that got first in my class was competitive with the young guys.  I passed him on the first downhill then he just disappeared on the climb.  The race was a series of loops.  The experts did two big loops, about 12 miles per loop.  The sports (me) did the big loop and then part of the big loop, about 17 miles total.  To give an idea of how fast the experts are the overall winner lapped me twice.  He was not sweating either time.  All the other experts only lapped me once.  I almost killed myself trying to not get lapped by the second place.  It is the little successes in life that count.  I can pretty much smoke everyone on the downhills (no brains) but the uphills are where races are won and I do not go up very well.  If I cut out beer and cheesecake I could go up faster.  I like beer and cheesecake better than racing.  It was a fun day.

How expensive are good teachers?

June 3, 2014

I got in a fun discussion with some of the school techs across the State today.  A tech job opened up at one of the big school districts (5000+ K-12).  The salary is $80,000.  I commented that seems excessive considering highest teacher salary for the district was $10,000 lower.  One of the smarter techs pointed out the 9 month versus 12 month detail.  OK, so $80,000 is in the neighborhood if a senior teacher was paid for 12 months.  I can let that go.  The argument that came up that did not make sense was that a tech for this position has to be highly qualified and that to attract personnel of this caliber requires a good salary.  With very little thought that implies teachers do not need to be highly qualified or high salaries are not needed to attract good teachers?   Something wrong there.

Could this be one of the issues with US education in that it is more important to attract good administration personnel than to attract good teachers?  In my mind it is important that both be good to ensure a good school.

Computer Science in Montana Schools

May 27, 2014

This is by far my favorite topic to get excited about.  Getting things set up for the CSCI 135 Java dual-credit course for next year got me started again.  The person I am coordinating this class with is a friend from the university.  He is just starting to delve into the issue of CS in Montana high schools and asked my opinion on the topic.  Let’s poke the hornets’ nest.  I positioned myself into my usual meditative state (recline in chair and look at ceiling) and thunk a bit.

I see three major issues with CS in Montana high schools, and I think these carry to any high school in the US.

  1. Incentive for the schools to offer the course.
  2. Place in an already full curriculum.
  3. Shortage of teachers.

1. What incentive is there for a high school to offer a CS course?  Many administrations and teachers think of CS as a trade similar to auto shop or accounting.  Job training and not academics.  The argument is the high school claims they are preparing their students for a liberal arts college and not for a technical school.  To some extent this is true.  Most high school courses teach primarily programming.  Programming is a trade.

How about the argument that CS teaches problem solving skills?  So there is nothing else in the present curriculum that does this?  As a math teacher I beg to differ.

Some folk argue that an incentive would be that there are a lot of high paying jobs in CS.  Very few courses in high school prepare students for the job market, except for maybe auto shop and wood shop.  None of the math I teach prepares students for the job market.  They learned job math back in about the third grade.  It is fairly obvious looking at high school curriculums that high schools have very little interest in preparing kids for the job market.  If they were there would be less literature or history and more welding and computer tech.

My argument for CS sort of ties in with “Those who don’t know history are doomed to repeat it.”  “Those who do not know any Computer Science are doomed to be taken advantage of by those who do.”  Computers have become ubiquitous throughout the world.  They are starting to control the world.  People should know something about an element of their life with so much power over them.  Studying CS helps control the thought behind a favorite quote of mine from Arthur C. Clark, “Any sufficiently advanced technology is indistinguishable from magic.”  We cannot let American society believe in magic.

2. The list of required courses varies from school to school.  My high school requires 4 years of English, 3 Math, 3 sciences, 1 practical art (tech or business) and some odds and ends (history, art, theology).  We are considering requiring 4 years of math.  Public schools usually require 2 math and 2 science, depending on state requirements.  But how many kids interested in CS are only taking the minimums?  CS kids are usually the calculus track gang.  They are the 4 years of math, 4 science, music, etc, etc.  Squeezing another course in an already crammed schedule can be a challenge.  Kids of the caliber to take CS are usually buried course-wise and the councilor will point out to them that CS is not a requirement for any college.  Pretty much a course killer.

In Montana the majority of the schools are small, less than two hundred kids.  It is pretty hard to justify opening a new course when only 4 or 5 kids are going to take the class.  The same can be said for using valuable and scarce staff time for the course.

The only solution I can see is a shift in priority and realize that one year of CS is more important than 4 years of English or Math or Science.  With the lack of CS emphasis on University entrance requirements that is going to be fairly impossible to implement.  Heck, even as a CS proponent I am not convinced that losing one of those 4 years is a good way to go except for kids looking at CS as a college major or minor.

3. Teachers.  There are no CS teachers.  There is very little inclination by college education departments to offer a CS certification.  After all, high schools are not clamoring for CS teachers, colleges are not requiring CS from high schools for entry and there is nobody to teach the course if universities did decide to offer it.  There is also very little incentive for a prospective teacher to seek a CS certification, there are no jobs in it.

A solution is in-service training but there is the same shortage of instructors.  I do see that CS4HS (http://googlecs4hsonline.org/) is starting some interesting in-service like courses to get teachers that are interested in teaching CS started.  There is also a CS Principals for teachers on-line course that looks very useful.  I signed up for both since there is no in-service for CS in the state of Montana.  It seems most CS teachers learned CS on-the-fly, staying a day or two ahead of the kids (if lucky) so walking into a class with nothing but an online in-service is nothing to be scared about.  I do not think trying to teach an APCS course with this type of background is a good idea but a Scratch, Small Basic and beginning Python type course is perfectly feasible.  Give it a couple of years before diving into an APCS type course.

 

Getting CS into schools seems to be a very grassroots movement.  There are some political mumblings at the high government levels but it is all words, not actions.  The independent nature of the US education system pretty much guarantees any high level government decisions are lost in the system.  Grassroots movements are slow.  I really do not think the US has time for a grassroots movement.  There are too many countries with a centralized education system that have major government support for computer science education.  Unless we can get some major fertilizer on that grass the US will fall out of the competition (mowed down?) for being a CS power in the world.  That would be bad.

A true CS course for next year

May 16, 2014

Next year I would like to shift my programming course to a true computer science course.  This means finding some guidelines.  If I were doing this for a math or science course I would typically round up some textbooks and pick through them to find the stuff I like and build the course around that core.  For CS this means finding a course outline, modifying it to fit my knowledge comfort level, maybe finding a textbook to use as a guide and deciding on some objectives.  CS has a little problem; textbooks are scarce and no one can seem to agree on what ”Computer Science” consists of.   I have never really taught a CS course, it has always been a programming course.  The reason I am looking at this now is I will be offering a dual-credit Java course next year.  The university course is one semester, I will do the same course in one year.  So this gives me lots of time to do a real CS course.  The extra time is because the average university student carries a much lighter load than one of my school’s students and therefore the college course is much higher paced.  A college student may have 3 to 5 classes, one or two of which may be basket weaving and underwater basket weaving.  Our kids are carrying 8 classes with again 1 or 2 that are not time intensive.  So I have to go course hunting.  I am hoping Google will be good to me.

Annual self review of my Python course

May 14, 2014

It is the annual self-review time.  How good do I feel I did this year?  The teaching load was light, only two classes of Programming II with a total of 19 kids.  The rest of the time is spent doing IT work.  The second semester would have been an easy semester except for the little detail of having to learn Python faster than most of the kids.  (I say most because there are a couple that were learning it faster than I was.  One of the things I have learned with experience is that there are kids out there that are smarter than me.  The trick is to just get out of the way and let them go.)

Lessons learned:

  1. Unique assignments for each kid is a pain to grade.  I tried this in an attempt to reduce “sharing”.  It sort of worked but not enough to justify the added grading time.
  2. Most of the kids understand a lot less than you think they do.  Proper questioning technique is a solution but that still will miss some key knowledge.
  3. The kids are not as excited about programming as I am.  This is the hardest thing for me when teaching programming.  I do programming because it is fun, like doing puzzles.  Most of the kids are there because there was not another elective offered at the time slot.  One out of ten think programming is fun.  Most are not puzzle solvers.
  4. Small programming assignments with a single teaching lesson works better than a large assignment/project broken into smaller parts.  I can make a bunch of small but similar programming assignments pretty easily.  Sort of drill and practice.
  5. Do not assume that the kids remember what they did yesterday.  Most do not.
  6. Python is easy to learn but is a boring language.  I like Corona better but Corona is more difficult to learn and has considerably more overhead.  With Corona you can make a colored ball bounce around the screen.  Hypnotizing.
  7. In a dual-credit class do not attempt to keep up with the university teacher.  Most university students have a lighter work load than high school kids.
  8. Learning the language and an editor just ahead of the kids is not a good strategy.  It can be done but there are gaps that can grab you.  I had a number of “If you find out how, let me know” moments.
  9. DO NOT assume Python code is the same on Windows and Mac.  Next year no Macs in the Python course.  I had to learn two languages (very similar but different enough to really mess things up) and two editors.  Never again.
  10. A working projector is a must.  Trying to write code on the board is not so hot, especially with my hand writing.

Many items in the list are well known.  It just helps to write them down again so they get refreshed in my head again.

Right now I am considering offering a dual-credit Java course.  The dual-credit Python course gave the kids 3 General college credits.  The Java course would be 3 CS credits.  I have the text the university uses and it is extremely boring.  I am not sure I can do another semester of boring.  I want the kids to make a silly little game for their cell phone.  It is amazing how hard they will work if the objective is cool.  Making Hang-man in Python is nowhere near as cool as making Whack-a-Mole with Corona.  Right now I am considering the game “Don’t step on the white tile”.  (Look in the iTunes store.)  Looks like a Corona project candidate.  Of course this violates #4 above.  Nuts on #4.

Over all the year was a success.  Every semester I teach programming I try something different.  A new language or a new assignment or a new strategy.  Someday I will get the perfect course designed and then retire.

Professional Development and some other weird stuff.

May 9, 2014

Out of curiosity I asked one of our student teachers what the local Dept of Ed is doing in the way of computer training for prospective teachers.  He said it was a joke.  In the one class he had he was taught how to make a PowerPoint, how to do a pod cast and how to run a Smart board.  I know the teacher he had.  She has not been in a classroom in 30 years and is definitely not a tech person.  We are doomed.  I got on line and checked the other two teacher producing schools in Montana thinking that U of M might be an exception.  Nope.  MSU has a required “Society and Computers” type course and Western has a “Technology in the Classroom” required course.  Both have very warm and fuzzy course descriptions.

This little bit of query and research came about from a school tech coordinators meeting I had just attended.  Every month the school techies get together and chat about issues, some relevant, some just BS.  The topic of training our teachers to handle some of their own tech issues came up.  From there we went to teacher professional development and the lack there of.  My elementary school is purchasing Smart projectors.  At $2000 each this is a major budget out lay for us.  By the start of next year we will have 13 of them in the elementary building, which is most of the classrooms.  Now you would think that spending $2000 per device per teacher would justify spending for some teacher time for professional development.  Nope.  From the conversation with the other techs in the group this lack of budget for PD is the norm in this area, not the exception.  Why is it that administrations are so reluctant to pay for PD?  Especially tech PD?  They just spent a fortune on the hardware and now expect it to perform magic in the classroom all by itself?  Fascinating concept.  From here we wandered to state of teacher training in the area of tech.  Since there is none all we could do was complain about the lack but we actually did come up with a solution.  The solution is hire some teaching professors that have actually taught with technology and fire a bunch that have not.  Opps, tenure.  Nuts.  That plan will not work.

Now let’s do a little thinking here.  To be a university professor and teach in the education department you need a PhD of some kind, usually in Education.  Most good classroom teachers do not get PhDs because a PhD will take them away from the classroom and cost money most teachers do not have.  Teachers do not recoup that money because most school district pay scales top out at a master’s degree.  So very few teachers experienced with teaching with technology end up with PhDs teaching at a university.  So we are pretty much guaranteed that there will be little teacher tech training for prospective teachers.

Is there a solution?  Sure.  Eliminate tenure.  Retire some of the teacher ed professors who have not seen the inside of an elementary or high school classroom in 20 years.  Hire some experienced teachers through a sabbatical program to teach from classroom experience for one year.

Teacher education seems to be frozen in time.  And that time is somewhere around the 1970s.  Teacher education programs need constant updates and those updates should come from experience classroom teachers, not research oriented professors who do not know how to use teaching technology or who do not know what to do when a fight breaks out in the classroom.

And I am starting to wander something terrible here.  Must be that 12% beer I had last night.  Nectar of the Gods.  I better post this before I get started on the present state of school funding.

Programming quizzes – You think I would learn.

April 29, 2014

I gave what I thought was an easy quiz last week.  Four questions.  Two asked for a short program.  Two gave a short program and asked for the coding mistakes to be corrected.  All with pencil and paper.  After giving the quiz I made the key.  After 30 years of doing this you would think I would remember a cardinal rule of quizzing – make the key, then give the quiz.  Yes, the quiz was easy, especially after I sat there and thought for a minute or two.  The difficulty is the difference between programming with a pencil and programming with the IDE up and running in front of you.  When I code I tinker as I go.  I stare at the ceiling or doodle some notes of issues I see.  I try something, see if it works and if it does I then look for a possibly better solution.  Taking a quiz is not the same as writing a program.  With a quiz there is usually a time factor involved and a pressure factor.  Both have a tendency to mess with my programming skills so I can imagine what it does to the kids’ programming skills.  In real life I have never had to look through a program on paper to find errors.  Coding errors are indicated by a number of things.  The program does not run, the program runs but gives the wrong answer, the equivalent of the blue screen of death occurs or, given the language, the IDE flags the error to indicate your typing ain’t so hot or your understanding of the syntax is wanting

Giving a quiz where the kids have to write a quick script by hand just seems so logical to do, especially to a math teacher like me.  It should test knowledge of the language, program design, algorithm development, and a couple other odds and ends in there.  After deep consideration I think a quiz of this type does very little of the above.  Maybe it tests quick knowledge of the language.  At this stage (first and second semester) the kids are still not at the comfortable stage with the language.  How good were you in the first semester of French?  (Is there a correlation between learning a foreign language and a computer language?  Sort of, especially if you talk to those that want to classify computer programming with the foreign language department.  Gurk.)  Do I really care about quick knowledge of the language?  Not so much.  I want them to be able to solve problems with the language and speed really is not that big a deal.  Program design is next.  Program design should take some time and some tinkering.  I usually do not get a well designed program until after I have gotten something working and sit back and look at it.  Then I get the “I wonder if” brain cells working and start experimenting.  That is what I want my students to do.  Tinker.  Is there any algorithm development in 10 line quiz scripts?  Again, not so much.  More like “how did I do this last time?”  I think I am going to bag hand written quizzes.  I will give quizzes where they can use their computers and their previous programs for reference.  It still will not address what I think the goals of a programming class should be but it keeps the kids honest.  A quiz does require they do their own work.  It eliminates “collaboration”.   Of course I promote collaboration when they are doing programs so there is a bit of a contradiction there but the quiz does catch those that are just along for the ride.

Does a pen and paper quiz/test fit in to a programming course at all?  I can see them for things other than coding problems but I am just not a fan of the time factor that is usually part of a quiz.  Now if I can just remember this the next time I feel the need to give a quiz.

Still alive

April 21, 2014

I made it back from Moab alive.  Three days of incredible riding.  On day two I fell over and got a little bang on my elbow.  On day three it was still hurting.  By the trip home I was in serious pain.  My arm looked like one of Popeye’s arms.  The little bang got an infection and now my elbow is a very unhappy camper.  The Doc gave me some antibiotics but no result yet.  It is amazing what you can and cannot do when the elbow is not working.  I cannot scratch my nose with my left hand.  Next time I am going to wear knee and elbow pads.

Now it is time to get back to the teaching of programming.  The class has been working with a text file of Shakespeare’s Sonnets.  (Trying to throw in some culture here.) They have been doing simple things like counting letters and words in a sonnet.  No biggie, they are cruising through with no major problems.  Being oh so clever I gave them a little extra from the original assignment I stole the idea from.  The sonnets are all numbered in the following format.

end of sonnet

23.

start of next sonnet

The user input is the number of a sonnet.  The output is print the sonnet.  This is not a trivial problem for the kids.  They still have problems differentiating when something is a string and when it is a number.  The input is a string although it looks like a number (Python inputs are strings), the number in the sonnet is a string with an added period. The fun part comes when deciding where the end of the sonnet you want to print is.  Do you look for the next blank line or the next number?  If the next blank line then the code has to ignore the blank line right after the desired number.  Oh yes, and blank lines are really not blank, there is a end-of-line character in there.  If using the next number then the entered string number has to be converted to a number number (got that?), incremented by 1, then converted back to a string number so it can be located in the text file.  Neither method is complicated, it just requires the kids to realize what the have to do and what the issues are with each method.  They have to think and that is just so much work!  Poor kids.  I just love this job.


Follow

Get every new post delivered to your Inbox.