Archive for August, 2011

The true meaning of “computer science”

August 18, 2011

School starts next week.  In the last two weeks I have:
1. installed OS’s on donated computers (requires finding the drivers),
2. continued my lesson on never buying refurbished computers (I bought a batch a couple of years ago, they die in weird ways),
3. started learning about Citrix Zen virtualizations,
4. installed Moodle on said virtualization (still got issues with that),
5. tried to get Windows7 computers to talk to my domain after they have been off for two months (after a while I reformatted the computers to XP),
6. figured out how to get some of my XP machines to get back on the domain after having been off for two months,
7. learned something funky is going on with Windows Update in that a bunch of my new installs are going to a Windows Support page that tells me something is wrong with Windows Update.  The solution is to reinstall Windows Update Agent.  I have a couple of hours into that solution.
8. Trial and errored my way through Dell’s list of network drivers to find out which of the seven is the correct one for the computers I just reformatted.
9. Learned about Office Word forms, ActiveX controls on forms and why they are a pain in the rear.  One of my principals wants to do teacher evaluations on his iPad.  One solution is to buy $300 worth of software, learn the software and build the form.  Being the foolish yet ingenious soul that I am I thought it might be better to build the form in Word then use remote control software to access his PC and the form.  This should save money.  If I had more time it would be an interesting project.  Did I mention school starts next week?
10. Learned I am supposed to give an in-service presentation on “technology tools” to the teaching staff.  I only have a 45 minute block so Google Docs and Skydrive should fill the time.
Things I have not done:
1. Looked at what I am supposed to teach in my sophomore Geometry class.  I have not taught sophomores or Geometry in about 15 years.
2. Clarified what I want to teach in Programming 1.  Troy has been teaching Programming 1 for the last 4 years, I know what he covers but I am just not sure if that is what I want to do or the way I want to do it.
3. Firmed up my Advanced Programming curriculum by trying it out.  I am doing some Lego robots to start off with but have not had time to fiddle with them.  I have used them before but am a bit rusty.
4. Rewritten my Stats class like I had planned.
5. Played with Kodu.  I was going to do that in the evenings but it crashes my laptop.  The laptop was donated two years ago and was about 5 years old then.  The video card is not a happy camper with Kodu.
6. Practiced with Google Docs and Skydrive for that presentation.

7.  Prepped sub material for the two weeks I will be gone in September for National Guard.  Bad, bad timing for that.
So Saturday I am going for a motorcycle ride.  I plan to speed excessively (the thing is good for about 155 mph, I am good for about 130), drag my toes around lots of corners and generally scare the bejezes out of myself.  Although this has nothing to do with computer science it does help relieve a little pressure.  Sunday I have to work on that teacher eval form.  He wants it week after next.
Did I mention school starts next week?

How to learn to program – assignment 1, 2 and sort of 3.

August 6, 2011
This year I will have an odd mix in my “advanced” programming class.  I will have two sharp Senior boys that have been taking programming from me off and on for three years.  During the same period I will have one scary smart Junior girl that took Programming I from the other programming teacher last year.  She is operational in Scratch and a bit in Small Basic, our two Programming I languages.  Our Programming I is a one semester taste of programming that is taken by sophomores.  It is an elective so class sizes will vary from 5 (last year) to 25 (year before).  As a result of the mixed class I need to dream up assignments that are interesting and that the boys have not done.  My goal is getting the kids to write a game for Droid using the Corona IDE.  I need to start somewhat easy to get the girl up to speed and used to my teaching style.  I can be a bit of a shock, I am not much of a hand holder, if they want to fail I am perfectly willing to let them.

My first assignment I will adapt (plagiarize is such a nasty word) from an online robotics course I took through Montana State University-Bozeman using Lego Mindstorms robot kits.  The course had some NASA support so I think the idea is fair game.  The script is that NASA has landed a small rover on Mars.  The small rover is assigned the task of removing rocks from a field for a larger ship to land on.  The simulated field is the size of a 4X4 sheet of plywood and the rocks are shaped exactly like empty aluminum pop cans.  The plywood has a strip of black tape about 3 inches from the edge as the boundary of the field.  The trick is to remove the cans from the field without leaving the field (which results in falling off the table the plywood is on.)  Having the plywood on the table is sort of critical, it is necessary to have the cans fall out of sight or the robot will keep pushing them.  These are not smart robots.  The Lego robot has two common languages, NXT-G, an icon based language that comes with the kit, and RobotC, a not-free, C based language I happen to have some licenses for.  Supposedly the robot can also be controlled by, VPL and C#.  I have seen code samples and I do not want to commit the time needed to go from “huh?” to “ah ha!”.  The trick here is to have the kids work on the logic required to accomplish the task before they touch the robot.  It will be a war.  The scheme is to build the logic, get a feel for the syntax of NXT-G, code something up, give it a try.  Give it lots of trys.  I love teaching with the robots, they actually do something physical with the code and coding errors get some of the coolest results.  (Be sure to catch the robot before it hits the floor, it takes a while to reassemble.)  Now some may argue that this trial and error approach may promote “hacking”.  No argument here.  Every new language I have learned I did by initially hacking, then once I had an idea how it worked I would learn the refinements.  (But I still hack a lot.)  Once they have the robot working in NXT-G the next assignment will be to get it doing the same thing in RobotC.  Can they apply the logic they developed to a new language?  Here is where I start sitting a little farther back.  If they have a question they have to look at the API, the documentation (yuck) or find a code snippet.  At this stage I want them to start finding resources on their own.  I will be there to help them decipher documentation.  I do not want to evaluate the solution; I want to evaluate searching for the solution.  Having only three kids makes this goal fairly easy.  After the kids get these working will come the piece-de-resistance, can they do this simulation in Kodu?  They have to switch mediums and languages.  Does Kodu even have a way of detecting objects at a distance and if not what is a solution?  Beats me but I think it will be fun learning and trying.

As a method of teaching a language, the goal of most programming courses, the above plan sort of sucks.  (I really could not think of a better word.)  But for teaching how to learn a language, to find out what a language can do, to have the logic figured before trying to type code, to not be afraid to tinker in a new language, I think it will work.  Luckily I teach at a private school, I am the only one that teaches any advanced programming and nobody pays any attention to what I am doing in my programming class so I can do this kind of stuff.

It is also nice I am writing in my own blog so I can use words like “suck” and “stuff” and mis-spell the heck out of “piece-de-resistance”.

Why schools should offer CS and other notes

August 4, 2011

The University of Montana here in Missoula had its big Education Technology Conference this week.  Big for us is 150 teachers.  I went to some sectionals; some good, some bad and some should have had the presenter taken out and shot.  But whatever.  Anyway, I was sitting next to a friend of mine who is a CS prof at the local technical college which is part of the U of M system.  He says to me “We need to get more kids coding.  How are we going to do it?”  In my usual brilliant manner I replied “Unnhh.”  So after a bit of time to consider the question I want to clarify the problem for myself.  Now this following logic is based on the Montana experience I have.
1. At present most school administrations/curriculum directors do not consider CS a necessary field of study so it is not offered.
2. Since it is not offered there is no demand for CS teachers.
3. Since there is no demand for CS teachers the university system sees no reason to offer course work in CS for teachers.  (This is almost a direct quote from the Dean of Education at UofM.)
4. As a result there is an extreme shortage of CS teachers that can actually teach CS.
5. Since there are not many CS teachers there are not many proponents for CS education at the ground level.
6. Sort of as a result of 1 thru 5 CS text books are not written by people who teach kids so most are as exciting as watching paint dry and as a result most CS courses are dead boring to a non-programmers.
7. Due to a shortage of CS geek kids we need mainstream kids in CS classes.
8. Since CS is an elective and electives need to be interesting to get kids to take them, we do not get many kids coding.
9. Since we do not get many kids coding class sizes are small and the administration simply cannot justify the expense.
Now I am sure with a little work and some more numbers I can get the logic to go back to number 1.  It seems to break down to four major issues: no kids, no teachers, no education programs for teachers and no interest by schools.  I see no interest by schools as the keystone.  If that were to change all the other issues would change with it.  To start with I think we need a clear, simple reason why schools should offer CS as either a required course or as a strongly supported elective.  Saying CS improves cognitive reasoning or logical thought processes or some other vague gobbly gook is not going to do the trick.  We need something to convince kids and councilors to replace two semesters of Physics, AP Calculus, AP English or whatever with at least two semesters of CS.  Something concrete like jobs, money, colleges want it (got a problem there), future careers and so on.  We need to temp freshman and sophomores into CS so they can build to those upper CS classes.  We need to break into the middle school curriculum somehow.
So I have started my own little agenda for the year.  These are things that I think I am capable of doing and still have a teaching job and a family life.
1.  Tempt kids into my CS class by making the classes interesting.  Teaching programming by writing games for the Android and iOS devices is a beginning.  Win Phones are out simply because they do not exist around here.  I have started on this already.
2. Research into reasons schools should offer CS.  Something in the curriculum has to be replaced or majorly modified to get this to happen so this had better be good.  The reasoning has to be something a non-computer education enthused administrator would see as a convincing argument.
3. At the next Education Technology Conference I will offer a couple of sectionals: “Why CS is Needed in Your School’s Curriculum”, and “Tools for Teaching Programming grades 5 – 12”.  I have a feeling the first one is going to be a hard sell.  As for tools for K – 4, that is not my cup of tea.  I have enough problems talking to 5th graders.
4. Figure a way to get CS into the 5 – 8 curriculums.
5. Consider some after school programs for 5 – 8: Lego robotics, Scratch, Alice, Kodu.  Due to other after school obligations this maybe a bit tricky but still I think it may be the only way to get into the elementary school.
6. Work on changing my teaching philosophy and technique.  I presently teach kids how to program.  I want to teach kids how to learn programming.  The first method is lecture based with lots of show and tell.  The second is discovery based with lots of trial and error.  I am going to do this shift for my math teaching also.
7. Learn Kodu better.  Get kids addicted to something fun when they are young and they will be an addict for life.  I think Kodu is a way to get those little ones started.
I like goals I can actually accomplish.  I think I can do these.