“I have a dream”

September 11, 2017

I tried to watch the XQ school thing on TV.  “Tried” is the word.  I did not realize what it was at first.  Some sort of weird musical?  After a few minutes I realized it was a really weird comment on the US high school system.  A few more minutes and I realized it was a lot of very un-knowledgeable people making very un-educated observations of what high schools should be.  Yes, there was sort of a grain of truth buried in with the dancing and singing but it mostly seemed to lack realism.  Did I miss something or was this really bad?

Here is my list for improving American high schools.

  1. Train administrators to be leaders, not bookkeepers.  Many years ago I worked on an EdD in Education Leadership.  The “Leadership” courses were budget management and teacher evaluation.  No conflict management, no personnel management, no how to get people to work for you in a positive manner, nothing how to actually lead.
  2. Eliminate tenure. If someone cannot teach, they should be asked to find a different job.
  3. Raise teacher pay and make it a difficult profession to get into.
  4. Require a Master’s degree and at least a year of student teaching with a master teacher.
  5. Disconnect school funding from local taxes.
  6. Do not expect all students to graduate from high school. Some are just too lazy or unwilling to put in the work.
  7. Do not attach funding to graduation rates.
  8. Reward students for academic improvement and/or good grades. Do not just give a grade and think that is reward enough.
  9. Make parents responsible for their student’s grades.  (This would probably affect 1-8 above.)

I probably can come up with a couple more but most of these are unrealistic enough.  There is no way most of these could be implemented but it is fun to dream.

 

Advertisements

The Crazy Season is on us.

September 3, 2017

The crazy season is here, also known as the school year.  I have it pretty easy as far as classes go this year.  My usual senior Stats with 17 students, a Math II with 3 students, a CS class with 2 sophomores and a girl doing a computer animation independent study.  I had these CS kids last year so this is just a continuation.  This year all my classes are on my B day.  My A day is pure techie.  This early in the school year that techie day is busy from 8 to 3.  All sorts of weird issues come up early in the crazy season.  How does a Smartboard that worked fine at the end of last year, then took the summer off, decide it no longer wants to work along the edges?  All sorts of weird things go screwy during the summer when no one is in the building.  Ghosts, that is what it is.  They come in at night during summer.  I am going to get a priest in to fix the problem. It is a Catholic school.  I can do that.

I have the CS kids back in Unity.  I am having them build a simple game for Google Cardboard.  Cardboards fit my class budget.  My class budget is whatever I am willing to spend out of my own wallet.  I really cannot count these Unity classes as programming in the strict sense.  Yes, we do use C# but it is mostly following what a tutorial says to type.  We do spend a lot of time diagnosing what the C# code is all about but that is not the same as understanding the Unity/C# coding to build from scratch.  I consider this more of a research and troubleshooting class than anything else.  Tutorials always have issues so they have to figure out what is going wrong.  Following directions closely may sound like a trivial thing to learn but it is a skill the kids have to get, especially if they actually go into the CS/programming field.  Once we have the Google Cardboard VR working I want them to introduce a Bluetooth controller to the VR project.  Then last I have this Kinect.  What can we do with a Kinect and Unity and VR?  VR and a Kinect?  No idea.  That is why I think of this more as a research class.  I will get them next year with a traditional Python programming class.  I can offer dual-credit to Juniors and Seniors.

The sophomore girl doing the animation independent study wants to make a movie.  She came to me this summer with the idea and I told her if she wrote up a course plan I would take a look and see if it was something she could do.  What she brought me was something a professional skilled at writing course proposals might write.  It definitely looks practical and fascinating.  It helps that her IQ is a whole bunch higher than mine.  I will provide her resources, motivation and then just get out of the way.  I do not want to get run over too bad.  This girl was my tech aide last year.  She was the best aide I have ever had.  She could figure out a solution to almost any computer problem.

One of the great things about teaching at a small school is I can offer kids courses on the fly like that and have classes with only two kids.  The course on the fly thing only works with the right students.  The self-motivation factor has to be high.  For the animation class she is on her own, I am teaching the stats class at the same time and I also know zip about animation software.  It only works with the right student.

It should be a busy but fun year.  Good kids and although the tech work load has gone way up it is fun and interesting work.

A day in the life of a small school techie

August 15, 2017

OK, so it actually was several days.  Thursday last week I went to my office to do a little work.  Yes, it is summer break but I usually go to school at least three days a week to see what went wonkers (“wonkers” – a highly technical term to replace the less technical term “weird shit happened”) over night.  I have a blue screen of death.  A brief message tells me something is corrupt.  After a few minutes of Googling on a second computer I find that I can restore the corrupt files through the BIOS.  I restore the corrupt files.  I reboot.  It reboots.  No blue screen of death.  No, wait.  I cannot log in.  “Domain controller not found.”  Golly, gee, shucks or at least words to that effect.  I log in to the local computer account with success.  That works.  I try to join the domain.  All sorts of interesting DNS errors.  I am back to golly, gee, shucks.  Time to go home and have a beer.

I wander in Friday to do some work.  The computer fairies did not fix my computer overnight.  Nuts, lazy little buggers.  I tinker.  I ping.  Everything is pingable.  I am confused.  Of course the browsers are dead but I have internet because I can ping Google.  It is Friday.  I go home.  There is beer.

I come in Monday.  Still no computer fairies.  (I am starting to suspect they do not exist.)  I am going to figure this out.  I discover one of my domain controller servers is off.  Actually unplugged.  What the heck?!  I fire it back up hoping that, for some odd reason (usually having to do with computer fairies), that that was the problem.  Nope, still DNS errors when trying to join the domain.  I have an epiphany.  I call my computer guru.  He comes in.  He is puzzled.  We tinker.  I have not tried a browser in a while.  Chrome comes up telling me it cannot connect to the internet due to either the firewall or antivirus product.  This is a new error.  The firewall is off.  We turned that off first thing.  This computer has run just fine with this AV product for years.  It cannot be the AV.  I uninstall the AV.  I try and join the domain.  The computer joins.  I log into the domain profile.  It works.  My guru and I stare at each other.

So here are the lessons learned.

  1. Computer fixing fairies may not exist.
  2. Never trust the fact something that has worked for years on the computer just fine will not go bonkers. (Evil computer fairies?)
  3. Have a guru. He may not be able to fix it but confusion deserves company.
  4. Always have beer in the fridge.

Comments on retaining CS teachers

August 8, 2017

This post started as a comment to Alfred Thompson’s post on “How to Retain Computer Science Teachers” but it started to get a bit long and wordy.  Long and wordy is more suited to a post of its own, especially when it is one of those posts where I wave my hands above my head for effect.

This may sound a bit weird but could the problem be that the people being hired to teach CS know too much about CS and not enough about teaching CS?  The chemistry, biology, Earth Science teachers are not leaving education to work in industry, at least in those fields.  Could that be because they are not specialized enough in those fields to be chemists, biologists or petroleum engineers?  They are generalists specializing in teaching these subjects, not field experts that are teaching.  They know a little about a lot.  CS seems to be backwards in education.  We are getting CS majors with a lot of knowledge in the field, enough to actually work in the field, and turning them into teachers.  Unless CS is supposed to be job training the teachers do not need that level of knowledge for K-12.  It would be nice but not necessary.  CS for education needs to less specific.  When getting an Education degree with a Math emphasis a pre-service teacher takes a lot of low level math courses and courses on how to teach math.  They do not take a lot of 300 and 400 level math courses like a math major would.  Since there are so few paths to teaching CS CS teachers end up with CS degrees.  This sort of leaves them totally unprepared to teach 5th graders and prepared to look for higher paying and no 5th graders jobs in industry.  CS Ed should be training teachers to teach CS K-12 which is a completely different education than a CS major would get.

If sounds like I am saying to retain CS teachers that it is necessary to dumb down the education that CS teachers are getting. What I mean to say is if a person is going into education, they do not have time in a 4-year education program to reach the skill level to be qualified for industry.  A teacher actually looking for a teaching job has to diversify their education.  Someone coming out of college with a CS degree and an education certificate is going to be fairly unemployable in most schools.  There are not many schools that need a pure CS teacher.  In Montana there are NO full-time CS teachers.  They all teach one or two sections of programming and something else.  So in that 4 years a pre-service teacher better be looking at a couple of teaching minors so they are more marketable.  So much for the time to get that a CS degree that industry wants to hire.  A CS Ed teacher should also be fluent in some languages that are not too hot in industry; Scratch, Alice, Small Basic, RobotC, and so on.  More time out of that CS degree.

Alfred makes some excellent points on strategies to retain CS teachers.  As the school IT guy these are all on my priory list.  Keeping teachers happy keeps them teaching.  Removing the hassle out of their already insane day keeps them happy.  Happy teachers keep teaching.

My feeling is that the CS teachers that left for industry would have left the education field anyway.  They are not teachers but CS people who have a desire to work in their field (and incidentally make a lot more money).  This is not a good thing or a bad thing, it is a logical career choice.  Retaining teachers in any field is a problem.  The money is not great and there is quite a bit of stress.  If we want to retain CS teachers we must have CS Ed programs that train teachers first and CS qualified teachers second.  And maybe biggest of all is let teachers teach.  Eliminate the paperwork overload.  IEPs, daily progress reports, constant disciple issues, and working with teachers that are in the field for the 3 months of summer.  (Do not get me started on tenure).

I better quit.  When I start waving my hands above my head I cannot type very well.

Mommy, where does curriculum come from?

July 27, 2017

Many years ago when I started this teaching business I thought the stork (a euphemism for textbook publishers) brought curriculum.  About year two of my teaching career the school was going to update the math curriculum so we ordered preview copies of textbooks and looked to see which fit what we wanted to do closest, then modified what we wanted to do to fit what the textbooks said we should do.  Poof, we had a four year curriculum.  After all, the authors of the textbooks had letters after their names and therefore should know more than we “no letters after our names” teachers.  But the seeds of doubt on the stork story were being planted at this time.  I had some Apple IIes and some TRS-80s and wanted to teach programming.  (At the time I did not know there was such a thing as CS.)  I checked on the stork.  In 1983 the stork did not deliver programming curriculum.  There was no watermelon patch (the internet) to look through so there was me, Seymour Papert’s “Mindstorms” and some programming magazines.  Curriculum appeared.  It was sort of an immaculate conception thing.  One day it was not there; the next day it was.  There was not a lot of thought, research, prep or anything else intellectual involved.  I needed something to do with these computers now, so I dreamed something up the day before school started and started building curriculum on the fly.  Thirty-plus years later I am still building curriculum on the fly.  The stork still has not showed up but luckily the watermelon patch has gotten real productive.  Just to keep the analogy going the watermelon patch can be pretty tricky, some are rotten and you really do not know it until you cut it open and others are not quite ripe.

Many years have gone by and for math curriculum I still rely on the stork, but now I no longer try to fit my curriculum to what the authors with the letters after their names say to do.  Now I know what I want to do (still no letters after my name but a whole lot of water under the bridge) so I see what the stork has to offer and cut-and-paste the heck out of it to make it do what I want it to do.  Cherry picking is just so much easier than growing my own.

For years I have had to cherry pick for my CS and programming curriculum.  The trouble is the cherries are really small and far apart, after all they are in a watermelon patch.  The stork just has not come through.  Since I have all that water under the bridge I have a pretty good idea of what I want to do and where to find resources in the watermelon patch.  The trouble is I have a lot of water under the bridge and therefore can separate the good watermelons from the bad.  Most of the new CS/programming teachers are living in a drought.  They could use a stork.

As much as I hate to say it, the stork has to come through if CS is going to succeed in small schools and rural states.  In Montana most schools are small and rural.  The experience just does not exist to build a decent curriculum or, in most cases, a decent syllabus.  No matter what our opinion of stork designed curriculum, the stork drives curriculum for many teachers, especially new ones, many schools and even a few states.  It has to come through if there is going to be some kind of homogeneous “sort of agreed upon” CS curriculum.  Those guys with the letters after their name do sometimes make sense.

A curriculum is more than a semester syllabus.  It is a multi-year program that builds from the beginning to a penultimate course, be it an AP course in some form, a locally developed course or a dual-credit course.  The stork has the power and time to produce something that big.  Those of us making our curriculum with little cherries are purely in survival mode.  What the stork brings also gets shared nation-wide.  It gets teachers looking at the same load of stork poop.  The teachers may not like what comes down but at least there will be a lot more big cherries to pick from.

Are there any K-12 curriculum writing projects in progress?  Maybe I just am looking in the wrong parts of the watermelon patch.  Many years ago I watched the grandfather of the UCSMP math curriculum be developed and written.  (It was written at the University of Montana.)  It was big news in math teaching circles.  The NCTM Journal promoted the curriculum writing project.  I can find no news on CS curriculum writing projects.  The CSTA has a good set of Standards built but I can find no curriculum development based on those.  The CSTA site has some curriculum outlines but these are not to useful to beginning CS teachers.  Beginning teachers need something with suggested assignments, pedagogical suggestions, and hand holding.  Something that says “Do this, this and this.”  Something that is 100% canned and ready to go.  Something that will work for a couple of years until the teacher learns how to wander the watermelon patch to find the tasty ripe ones.

At this point we need some people with letters after their names to step up and write some good stork poop.  I am not thinking someone should come up with a K-12 curriculum.  I am thinking more like a two or three year curriculum that is not two or three years of programming in language X.  It would include programming but would address other CS topics.  Of course what those “other CS topics” are is part of the Great Debate.

I am so glad I have no letters after my name and besides, as can be seen by my mixing of storks, watermelons, cherries and bridges, my writing style is not fit for public dissemination.

Why teach coding? Because it is all we know.

July 20, 2017

Schools are all about teaching coding.  From talking to teachers and looking at what high schools are offering it looks like there is no intent to teach CS or programming (by my definition programming includes UI design, algorithm development, problem solving techniques, pseudo code, flow charting, code design (away from the computer), and a large number of other tasks that are done away from the computer).  Most of the courses I have seen offered (admittedly a small sample but I feel it is very representative of the high school norm) are syntax courses: Python 101, Java 101, Scratch, or whatever.  Teaching problem solving or computational thinking is purely accidental.  Now why is this?  I see it as a combination of several things.

First, and maybe most common, many people (administrators in particular) think CS and coding are synonomious.  Opps.  They are not.  Coding is typing programs.  CS includes coding as a small subset of topics.  Of course, what topics are part of CS seems to still be up in the air.  When I decide I have to have EdD. after my name I will define high school CS and all the topics it should include and build a curriculum to address those topics.  Until that time I will avoid defining high school CS like it was the Black Plague.

Second on my list is that coding is comparatively easy to teach compared to full blown CS.  There are a lot of resourses out there for teaching coding.  Free textbooks, tutorials, coding academies, dozens of great languages, cool game engines and so on and so on.  A new coding teacher can stay a day or two ahead of the kids in the book/tutorial and come out with a halfway decent coding course.  To teach CS or even programming you actually have to know stuff.  You should probably have actually taken some college level courses in CS.  You should probably be able to at least spell pedagogy, even if you are not sure what it means.

Third, and most intimidating to me, is that CS is not really well defined.  If I want to offer an Algebra II course I can pick up one of a couple dozen textbooks that will give me a great idea of what Algebra II consists of.  That textbook will have the somewhat agreed upon topics, scope and sequence, and many pedagogical suggestions.  CS seems to have absolutely nothing.  Get a group of K – 16 computer teachers in a room and ask them what CS should include.  The middle school teacher (for example) is going to say Office and Photoshop.  High school teacher #1 (for example) is going to say that is not CS.  High school teacher #2 is going to say it needs to be taught so where else but in CS is it going to go?  High school teacher #3 suggests that the English department should teach Word, the Math department should teach Excel and the Publications or Art teacher should teach Photoshop.  (Hell immediately freezes over.)  The college teacher is going to say something the K-12 teachers do not understand because they have never taken a college CS course, they have only attended one-week summer in-services on coding.

The first teaching job I had was as a math teacher.  That first year I followed the book exactly.  I had four years of college math and did not have a clue as to how to help a student learn how to complete the square.  The book did.  A new CS teacher does not have this guide.  They are on their own.  So what are they to do?  Teach something where there are many guides available.  Coding.  Kind of a loop thing we have going here.

 

It is not about coding

July 13, 2017

I was chatting with a teacher friend of mine about the difficulties he was having teaching programming in his technology class. He teaches a section on robotics in his practical technology classes using RobotC and Lego Mindstorms.  He is not a programming teacher; he is a machine shop teacher who has graduated to some very advanced computer controlled manufacturing machines.  He offers an engineering class with the robotics section and his thought was he should be able to teach the kids the syntax of RobotC and they should be able to figure out their robot projects from there.  It is not working out.  The kids simply cannot figure out what to do.  My friend suffers from what I see a lot in inexperienced programming teachers, the idea the programming is all about knowing how to type code.

Many beginning programming teachers have a fixation on coding.  (I differentiate programming and coding.  Coding to me is writing and typing code.  Programming is the complete package: algorithm design, building a user interface, and a whole lot of things that are done before sitting down in front of a keyboard.  I do this just so I can separate the two behaviors.)  I have attended two week long summer camps for teachers, one from Microsoft about Touch Develop, and the other just this summer about a curriculum written at Montana State University on how to teach Python.  Although both camps were for teachers neither dealt with any pedagogy on how to teach coding or programming.  Both stressed syntax and how to read the curriculum they had designed.  It was implied in both camps that although pedagogy was important it was something that would somehow be easier that coding and syntax.

This is where I start waving my hands above my head and using phrases like “Are you out of your frigging mind!?”  To teach programming, or even coding, it would help to actually know how to teach programming and coding.  It is necessary to know to step away from the computer and teach kids how to plan and think.  Things like how to disassemble a problem into manageable parts.  These are not skills the kids are adept at.  These are skills many teachers are not adept at and therefore need to be taught to teachers.  Previously I talked about how surprised I was at the lack of knowledge the new teachers had towards how to teach programming.  Little things like having the kids write the procedure for building a peanut butter and jelly sandwich then having a second kid follow those directions, or when programming with turtle graphics having the kids either walk or use something like a toy car to follow the desired path. To those of us that have been teaching programming since FORTRAN was popular these are common teaching strategies.  To new teachers they seem to be a revelation.

My friend feels he should be able to point the kids at syntax, and from there they should be able to figure it out.  After all, he figured it out that way.  The trouble with that strategy is he is not a 16 year old male whos brain is still not completely wired.  Those thinking skills that require logical steps, organized thinking, and all sorts of brain skills required to program have to be taught.  Considering the students my friend has (he does not get high-level thinkers or computer geeks) what he wants to do in a couple of weeks might be difficult in a couple of months.

My friend’s goal is to teach problem solving.  Teaching coding does not teach all the preliminary work needed to teach or learn problem solving.  Without that preliminary structure, he is just going to frustrate himself and his students.

Going Old School, not quite clay tablets but close

July 5, 2017

I am going to be teaching Math II again next year.  The course is some Algebra, some Geometry and some of whatever comes to mind as I go along.  The students are a good group, just not mathematically oriented.   I do have a major problem when I teach this course, I get bored.  And if I am bored then the kids have to be beyond bored.  If I start progressing through the book page by page and chapter by chapter then we all go into a vegetative state.  High school math textbooks are not designed to teach math, they are designed to force math down the throats of unwilling students and to give the teacher a lazy way of doing it.  OK, a bit of an exaggeration but textbooks put me to sleep so they have to kill the kids.  I need to start digging up some interesting stuff that will still get some real math taught.  I think I am going to approach this two ways, no-tech and high-tech (sort of).

No-tech.  Most of my math students have zip for estimating skills, no ability to do simple math in their head, think Satan brought fractions to Man and that using the WAG method to start solving a math problem is a cardinal sin.  (Catholic school, we can think things like that.)  (What is the WAG method you may ask?  I was taught this method in one of my calculus courses many years ago.  It has held up to the advancement of technology well.  It is still one of my favorite problem solving strategies.  So what is it?  Well you start with a wild assed guess (WAG) and go from there.  Clever huh?  What do you want?  I have spent the last two days troubleshooting laptops and reimaging computers so I am just a bit giddy and more than a bit brain fried.)  So in an effort to address some of these student handicaps (I think they are handicaps) I am going old school.  No calculators.  There will be tears and protests.  I expect picketing.  But that is OK, we are not going completely “device” free.  I collect slide rules.  Yup, we are going really old school.  I am going to reintroduce the slide rule to a math class in 2017.  Those of you that have used a slide rule remember the lesson when using a slide rule (other than knowing how to work the thing), you have to have an idea what the answer should look like.  If multiplying 23 X 562 you have to know the answer is somewhere in the 10,000 to 12,000 range.  It is all about place value and being able to do some simple math in your head.  Slide rules also lead into addition as multiplication.  (Adding exponents.)  It should be interesting.

High-tech (sort of).  I want to do a lot more with Excel.  Build some number crunching spreadsheets.   I was considering doing some turtle geometry but that may be a bit to tech intensive.  Teaching them a language and some geometry might be more than this group can handle.  I will have to think about this more.  Using tech with student often brings in a level of complication that these kids have problems with.  The problem is more often than not a focus issue.  Cruising the internet is a lot more interesting than doing a geometry problem on the computer.  These are not the kids that get interested in what math can do for them and why it is interesting.  These are the kids that find school an inconvenience to their social life.  One thing I am going to de-tech is phones.  Last time I taught this course I allowed the use of phones as a calculator.  Not a good idea.  At this age the kids are simply not mature enough to not get distracted by cat videos.

I have to be somewhat careful what I do with these kids.  The course is pretty algebra intensive in order to get them ready for a pre-calculus course.  The teacher they will get for Math 3 and pre-calc is big into old school hand algebra methods.  Me, I am more into WolframAlpha and just solving problems.  If I point out to the kids that factoring polynomials by hand can be done on only on a special set of polynomials so do not bother learning how to factor polynomials their Math 3 teacher would not be happy with me.  So I cannot abandon this ancient math.  Standardized tests seem to like this stuff.  I rather like to do this stuff too but then I think Project Euler is a fun website.  And I collect slide rules.

A week of in-service: Another Python course

June 20, 2017

I just spent a week in an in-service/seminar with twenty teachers on a high school Python curriculum written at Montana State University.  The curriculum is “The Joy and Beauty of Computing” (JBC) and I believe is adapted from a curriculum developed at Berkeley.  It is used at MSU as their introductory programming course.  I had perused the curriculum several years ago and was not impressed enough to change my present curriculum.  It was fairly standard and did not offer me enough to deviate from my core of “How to Think Like a Computer Scientist: Learning with Python 3 Documentation; 3rd Edition” by Wentworth, et al.  The University of Montana wrote a grant to train teachers how to use the JBC curriculum so I jumped in.  Attending these events is very revealing, both about the curriculum and the state of teaching programming in Montana.  I really went to the in-service to meet the other teachers and to get a network started.

I had the opportunity to meet programming and prospective programming teachers from all over Montana.  A couple had come from as far as Wolf Point, an eight-hour drive.  What a broad spectrum.  Everything from a former professional programmer who is now a teacher to an English teacher who had been directed to offer a programming course next year and has never programmed in her life.  There were several business teachers with about the same experience and directive.  (The English teacher sat right next to me.  Poor lady.  Not a clue what she was getting into.  Not a computational thinker.)  Only a couple of us had actually done any CS/programming teaching.     It was a bit interesting talking to the teachers that had been give the directive to offer a programming course at their school.  It was a “come up with something” type of directive.  Not a lot of research or experience guidance behind the directive. As could be expected for a weeklong summer event like this it was an enthusiastic and involve bunch.

Now to the JBC curriculum.  It still does not excite me.  It is missing about 90% of what the programming curriculum needs for beginning programming teachers.  It is almost exclusively a syntax course.  There is very little on how to program prior to hitting keys on the keyboard.  We were doing a semester in a week so admittedly the preliminary work the teacher would do was being greatly compressed but most of the teachers attending did not even understand there was preliminary work to do.  All the pre-planning required to write a program has been ignored in an attempt to get the kids coding.  In the exercises we did I found myself doing exactly what I teach my students not to do, planning at the keyboard and filling those gaps with trial and error.  Most of the teachers there assumed that was the normal programming procedure.  The teacher with professional experience and I had to do a lot of demonstrating.  Little things like have kids walk through the turtle moves were “great ideas”, where she and I considered them required techniques.

As a core the JBC curriculum has what is needed, some syntax and some exercises, but it would involve a lot of work to get it ready for use by teachers who want to really teach programming and computational thinking.

I have said it before and I will say it again, teaching syntax is the easy part of teaching programming.  Teaching the computational thinking skills needed to make that syntax easy is the really hard part.

 

Flint’s perfect strategy on how to teach programming

June 6, 2017

Alfred Thompson had this link to a set of nice simple Python projects.  The projects are great ideas.  It is the implementation that I think is extremely poor.  “Instruct the students to input the following code:”.   Is there a worse line to use when teaching anything?  This is the universal approach to programming tutorials.  I admit I use a lot of online tutorials.  And I admit I am sometimes very lazy and tell the kids to just type in the code.  I also admit that this approach is almost worthless for any long-term retention of code or of understanding how to program.  (Hopefully there is a mountain of research to back that up but I am happy with my seat of the pants feel that 30 years of teaching programming has given me.)  Following tutorials is a great way to learn how to follow tutorials, and maybe get a little programming syntax on the way.  But for actually learning how to program, how to understand a programming language and how to learn to build a project or do a task from scratch I claim they are basically worthless.  Proving that might take a dissertation, or maybe just common sense.

This leads me to my present project.  I am working on Flint’s Perfect Strategy For Teaching Programming.  I figure if I stretch this out long enough I might get an EdD dissertation started just in case I develop a severe mental instability and decide to start an EdD.

Flint’s perfect strategy for teaching programming breaks down into some fundamental concepts.  Here are a few.  The rest are still in the warm and fuzzy stage.

  1. Programming is designing and defining before any code is typed.
  2. Programming is algorithm development, not trial and error, hit or miss or just luck.
  3. Programming class is a thinking class, not a typing class.
  4. Programming is knowing what you are going to do before you try to do it.
  5. Programming is not learning syntax, but you do have to learn syntax to program.
  6. Programming is 90% planning, 10% coding. But that coding seems to take 90% of your time.
  7. Programming is not language specific or even CS specific. (Big discussion here of transferable skills.)
  8. I figure there are fifty or sixty more. I will work on those.

Here is a rough example of Flint’s perfect strategy for teaching programming.

Have the kids close their laptops or put them in their backpacks.  If you are in a lab turn off the monitors or the computer.  If you do not do this they will not listen or think.  They want to hammer keys and not pay attention to your wisdom.  This is a simple program I just did with my freshmen to give them a very brief intro to Python.  This group of freshman had all programmed in some language before so a large amount of intro stuff was not needed.  The program assignment was: given the number of sides as an input, draw a regular polygon using turtle graphics.  We started with the concept of a biological turtle that draws on a piece of paper.  What skills do we need to teach this turtle?  We then looked at polygons, angles and side lengths.  Once they had the idea of a polygon completely understood, we looked at what it takes to draw something with a turtle.  Things like a turtle, a piece of paper, a pen, a distance and an angle.  We then sketch out the instructions that this biological turtle would need to know to draw the polygon.  Right turn, left turn, forward and so on.  Once all the design stuff is done we start discussing what Python might need to do this.  What a library is all about.  That a graphics window is different from a text window or a Windows window.  We did a rough flow chart, some pseudo-code and how do you think a programming language might say these things. We still have not touched a keyboard.  We probably spent an hour before touching the keyboard even on this simple program.

Once they have done a couple of turtle projects the pre-keyboard work will shift more to the task definition and less on the needs of Python.

For this first program I actually built the program on the board for them, correct syntax and all.  I wanted to discuss variables types and dot notation.

We also discussed different types of loops.  It you want to loop through something 5 times, a loop that can count is the way to go.  Do not know how many times you are looping then we need a different type of loop.  We discuss these things non-syntactically.  This group of students was already familiar with For loops so we only had to look at the Python syntax for a For loop.

So they get the polygon program typed in.  They are happy.  They got to type.  I then up the ante.  Here is an addition to the task.   All the sides have to be random colors.  At this stage a tutorial would say “type this”.  We sit down without the computer again and talk about what we will need.  Random numbers, pen colors, how many colors do we want to deal with (2553?) or do we want just some favorites.  We talk about rgb colors and why 255.  We are now into decimal to binary conversions.  Some will know why 255 and how to do this but most will have forgotten.  Once we have talked about what we want to do I let them open their computers and have at it.  This time I give them no code.  They have the internet and they have Google.  Let me see what you can find.  I have given up worrying that they will copy some snippet from stackoverflow or the like and be done without understanding what the snippet does.  It is extremely rare that anything from stackoverflow is direct copy, paste and work.  It takes a while but they do eventually get the concept that the stackoverflow type websites give ideas on how to solve a coding problem.  They rarely give a solution.  Having small classes where I can actually see what they are doing and how they are getting there makes it fairly easy to monitor the cut-and-paste issue.

This example is very basic.  The focus is on design before code.  Programming projects like those mentioned are excellent for this teaching strategy.  I do the Shakespeare Insults project.  There are so many decisions to make before a computer is even looked at in this project that it makes an excellent project to build.    My data file is different from the one in the example.  My file consists of about 30 lines, each with three words separated by commas.  The program randomly selects two words and plugs them into a sentence involving someone’s mother and sister.  One early decision the kids have to make is are the words from two different random lines or just two random words from one random three word line.  How will the decision affect the program flow?  Excellent time for a flow chart.  The amount of pre-keyboard work with this program can be extensive.  I have seen this program coded in three very different ways so it can be a lot of fun.

There is a drawback to Flint’s perfect strategy for teaching programming.  It takes time.  Lots of time.  This polygon program can be described and typed in minutes.  We took over an hour.  Some of that extra time was because this is their first encounter with Python but all of these freshmen had done some programming so they understood most of the programming concepts.  Another drawback to Flint’s perfect strategy for teaching programming is the kids are very resistant to the approach.  They do not want to plan, they what to do trial and error at the keyboard.  They have not learned an important axiom of programming: “three hours of trial and error coding will save fifteen minutes of planning”.  (I wish I knew who came up with that.  They deserve an award.)  The kids want to hammer keys for an hour then complain how it does not work.  Run-time errors forever.

Another issue with Flint’s perfect strategy for teaching programming is that it is a lot of work for the teacher.  It does not lend itself to large coding projects so it is necessary to have a bunch of small projects that will target the lesson of the day.  The large projects often take more planning than the average kid will tolerate.  If the project can be broken down into smaller modules then the planning stage is manageable.  For an intro course I prefer the small targeted projects.  There is also the grading.  Instead of just grading a program as the end product, it is now necessary to grade programming plans, pseudo-code, flow charts, maybe all written in hand.  Ugh.  The kids’ handwriting is worse than mine.

Flint’s perfect strategy for teaching programming is not original.  I imagine many programming teachers use the same principle.  (A good example is Mike Zamansky’s blog on A* is Born.  Notice the focus on “we talk about” and “leads to a discussion” and the like.  Understanding is the principle.)   The problem is that many programming teachers do not understand what a good programming course should consist of.  Too many programming teachers think the purpose of a programming class is to have the students memorize syntax.  Memorizing syntax should never be the focus of a programming course.  I need to clarify to myself exactly (or at least as exactly as I ever get) what should be the focus of a programming course, write it all down and make a small fortune by publishing it.  By writing down random ideas I might actually come up with something that will make sense, at least to me.  The rest of you are on your own for that perfect strategy for teaching programming, at least until I get that EdD and publish.

Of course this whole conversation can lead back to a discussion of the lack of pre-service and in-service pedagogical training for CS and programming teachers.  Kind of a weird real life recursive loop.