Daughter Graduates: Good and Bad

May 15, 2017

My daughter graduated from the University of Montana Saturday with a BA in Psychology.  Yesterday she was only five years old.  What happened?  She is not really sure where she is going from here but it really does not bother me.  She has a couple of retail jobs and wants to take some time to think.  She knows to go anywhere in psychology she has to get the doctorate.  She is looking at forensic psychology which means leaving Missoula.  Now that does bother me.  She was only five yesterday.


Teaching Programming with BYOD

May 10, 2017

Bring Your Own Device.  It is a solution and it is a problem.  All my programming classes are BYOD.  I have loaner laptops for those that cannot afford a laptop but that really is not much different from BYOD.

Why BYOD?  Many reasons.  The school has two computer labs.  One is in a classroom so it is out.  The main school lab is pretty sterile, computers in rows elbow to elbow.  Just not what I would consider an atmosphere for thought and exploration.  It is also used regularly so putting a programming class in there is going to be a pain for other teachers.  I used to have computers lining the walls of the room in which I teach.  I would install all the software and have things pretty cookbook.  But then I had problems with privileges when the kids wanted a sprite, needed to save locally, saving on Google Drive and half a dozen other issues because the kids were not administrators.  I wanted the kids to learn how to download and install the software they were using.  Getting Python up and running with an editor is not always a trivial exercise.  The kids should know how to troubleshoot an install.  BYOD allows those that want to work at home to do so.  Admittedly I do not get a large number of those students but there are enough to justify the BYOD hassle.  Perhaps the biggest reason for BYOD is I want the kids to know about their device.  The kids can run apps, download from Steam and get Netflix to work but changing resolution, hooking up a second monitor in extended display and installing a Google Drive folder are not tasks the techno generation seem familiar with.  So BYOD it is.

A big advantage of BYOD is the kids that own their own laptop (most of them) have a better device than anything the school owns.  There is just something about working on an i7 with 16 GB of RAM and a dedicated video processor that make a Python or Unity assignment run better than on one of the ten year old school loaner laptops or lab towers.  The only way I get to see really cool hardware is when a kids brings it in.  BYOD eliminates any administrator install issues (unless the computer has something like Network Nanny on it.  I had a long discussion with a parent over that one.)

The big disadvantage of BYOD is you are now dealing with five different brands, weird malware, fourteen viruses and a partridge in a pear tree.  I actually like dealing with all these issues.  At the beginning of the semester the kids learn all sorts of software and hardware issues.  Cool.  Another somewhat interesting disadvantage is the kids that are working on 11-inch computers.  My eyes do not see that small any more.  A Unity project on an 11-inch screen is just silly.  Then there is the kid with the Mac.  Kid, you are on your own.  If you want to borrow a PC I have some.  Even worse is the kid with the Chromebook.  It is always an interesting conversation with the parents about how that new, cheap Chromebook is not going to do the trick for anything we are going to do in my programming classes.  A sad, sad moment.

Some lessons learned:

  1. Teach file management. The kids keep forgetting where they save things or they scatter files everywhere.
  2. Stress saving to Google Drive or the like. Backpacks are rough on computers and I have had a couple kids kill their computers by not being careful.  Bad, very bad.
  3. They need a mouse. Trying to do something like Unity without a mouse is not practical.
  4. Bring the power cord every day.
  5. All sorts of things are on that BYOD laptop so watch them like a hawk.
  6. Expect weird issues so be flexible.
  7. Have some kind of central file storage area for assignments, YouTube videos and what not the kids can have access to. Something like Google Classroom or a Google shared folder.
  8. Have enough power outlets in the room. My school was built in 1922.  Electricity was a fad at the time.  The classrooms have two outlets.  I had to have maintenance run conduit and outlets around the room.  Laptops do not pull a lot of amperage so there is no problem with the breaker.
  9. The internet content filter is going to cause a problem. Be on a first name basis with the person that controls it.  In my case it is me.
  10. Read #6 again. Several times.

After several years of BYOD programming I would never do it any other way.  Yes, it can be a pain at times but the advantages for the student far outweigh that pain.

First programming language hoopla

May 8, 2017

The first language discussion is warming up again.  Universities seem to be abandoning Java for something else and the conversations start (see here and here).  Even the University of Montana is switching their intro CS major language from Java to Python.  The news folks and non-educators (professional programmers are always the best) start coming up with all these “great” suggestions as to what should be the first university level language.  If you read comments by the people that actually teach (two of which are the here and here above) they will pretty much agree that IT DOES NOT MATTER!!!  A good teacher who understands who he or she is teaching to can make almost any language do the trick.  Yes, there are better languages for teaching and some may be a bit too limited to really be a good first college level language but the number that would actually do the trick is pretty high.  I think I understand why UM is switching.  Montana suffers a major shortage of high school programming courses.  Most Montana schools offer nothing in the area of programming.  Incoming college kids looking at CS are coming in with little to no background in programming.  Stepping into a full blown Java course with that background is guaranteed to reduce the number of students looking at CS as a major.  I can still remember (admittedly vaguely) my first CS programming course in the early 90s (the FORTRAN in the early 70s does not count).  I sat down with about 100 college freshman.  By the end of the quarter there were maybe 25 of us left.  The instructor was one of the worst I have ever had in my long college experience.  He knew Java in and out but could not understand we did not know Java in and out.  The first programming language should not be intended to reduce the number of possible CS students.  It should be something tempting, interesting and an introduction to a possible future.  It should be taught by an instructor that understands how to teach, not a very smart CS adjunct that has no idea of how students learn.  Years ago I saw some statistics on the percentage of freshmen that change majors from CS after the first semester.  If that first programming course is intended to keep the shortage of CS majors steady, it is working well.

That first language really does not matter.  What does matter is the objective of the course, (rite of passage or introduction to CS) and the quality of the instructor.  If we want more students looking at CS we have to have a gentler introduction to CS than the usual “death by Java” type intro class.  I was a math adjunct at the University of Montana for ten years.  The math program had courses stating at the very bottom, about middle school math, so an incoming student had about four levels to step into depending on their math background.  Those bottom level courses would not give college credit but they prepared students with poor backgrounds for entrance to college math.  They were taught by middle school or high school teachers working on masters degrees or retired teachers.  CS needs a scheme like this to attract students and keep students (although the extreme shortage of CS teachers might be a bit of an issue).

As Mike Zamansky said in his post “There’s no single best universal answer. Each choice giveth and each choice taketh away.”  Remember, no matter what that intro language is, it will not be the language some employer the student interviews with is using.

Why teach game programming? Why not?

May 3, 2017

Next October I will be doing a presentation on my year of teaching game programming with Unity at the Montana Educators Association convention here in Missoula.  Being well aware that procrastination kills I started an outline of what I want to do.  After reading Dan Meyer’s post “How I Present” I figured I would not build the PowerPoint first.  I am sitting here doodling along making notes for my witty yet enlightening presentation when it hits me, why am I teaching game programming with Unity in the first place?  Not the Unity part, but the game programming part.  (I do this “why am I teaching blank” regularly.  I keeps life from getting boring and simple.)  The first line in my out line is “Why Game Programming”.  I really want to get a good answer to myself for that question and not just a “because it is fun”.  (Although that may be enough.)

I have been teaching game programming with some language for a long time now.  No great innovation there.  If there is a programming teacher in the world that has not used game programming as a fun incentive I would be very surprised.  Back in the mid 80’s I used Pascal and Apple BASIC.  The games were just the text based Dungeon & Dragons things (“Go North”) or simple Pong like things.  When Scratch came along all sorts of new games were possible and the sprites were of much higher quality.  Then smart phones started turning up in class and the kids were captivated by the games.  Some of them looked very easy in design so I looked for a programming app.  I found Corona.  I gave teaching Corona a try.  The course worked, sort of.  The programming required by Corona was a bit more than many of the students in the class were capable of.  The step from Scratch to Corona was simply too big, there was a level of complication in the IDE management, files, importing, event management and so on that I was not comfortable teaching.  (The drag-and-drop progression to line code discussion comes along here.)  I was simply too used to teaching with languages that were complete packages designed for teaching, like Scratch, Small Basic and Alice.  But, and this is a big “but”, the kids wanted to learn Corona programming.  They saw a goal that was cool, having an app on their phone that they wrote.  At the time I was still in the traditional mindset of teaching coding with the game as an incidental.  It was a programming course that ended up with a game as the final product.  Due to work load (school techie, two or three math courses and a couple of programming courses) I backed off on the gaming programming direction for a while.  My programming classes still wrote games in whatever flavor language we were using but they were not very fancy.  I dabbled in GameMaker but it just did not tickle my fancy.

About this time my programming class sizes started to drop.  What used to be 10-15 was looking like 4-5.  There is no two ways about it, programming is not easy and it can be as exciting as watching grass grow, especially if you are not a programming/computer geek.  I was low on geeks.  I wanted something that would attract the non-geeks of the school into taking programming and would possibly get them hooked into going farther in CS and programming.

Some kid showed me Microsoft’s Project Spark.  Oh my.  Oh my again.  I am thinking I may have to limit class sizes.  It was not really programming in the traditional coding sense but boy does it look like fun and I was trying increase the fun factor in my programming classes.  I was getting all set to roll on a semester of Project Spark when Microsoft killed it.  (I am still really, really sad about that.)  I had a scheme to get kids into my programming classes and with the demise of Project Spark I had a bit of a problem with my scheme.  Now what?  I had tinkered with Unity a year or two previously and found the tutorials wanting.  Desperate, I looked again.  I found better tutorials.  I found tutorials that did cool things in Unity.  I was back with the scheme.

That is the history.  Now for the “why teach game programming”.  It is very simple and can be stated in one word, “numbers”.  Numbers in seats.  As bad as it sounds numbers rule education.  If only two kids sign up for class the class disappears.  A program can disappear this way.  I needed numbers.  For an elective like programming to have numbers it has to be fun.  To be fun it has to be something the kids relate as fun, not what geeks who like to program relate as fun.  So game programming it is.  The trick was to not throw out the baby with the bath water.

Teaching game programming with Unity at the introductory coding level is really not teaching “programming”.  It is definitely teaching application use with a little code cutting and pasting.  My intent with Unity was to not teach programming but to teach the application and to have the kids see coding as an incidental.  I want to teach the kids how to learn.  They get to see the power of knowing how to code.  This is the applications side, kind of like in a math course.  The big math student question is always “How am I going to use this in real life.”  For programming here it is.  Yes, it is “black box” coding, just like “black box” math but it is also “here is a super cool thing you can do with code”.

Is teaching Unity a college prep course?  Not even close.  Is it an introduction to something cool that is going to temp kids to take the college prep courses?  I sure hope so but even if it does not bring them into my traditional Python programming classes it does get them seeing and thinking about code and the power of coding.

Skills.  By far the biggest skill the kids learn is following directions.  They watch YouTube tutorials, read text tutorials, listen to me give brief lectures, all involve following directions.  Does not sound to impressive does it?  The thing is if you can follow directions you can learn almost anything.  Of course I mess things up by making them build their own game by using the techniques they learned from the tutorials so the class is not just following directions.

Most of my programming students are not going into a programming or a CS career.  Teaching Unity, even if it is mostly cut and pasting code snippets, gives the students a look at big time programming.  Will they understand the code they were cut and pasting?  Not really but I think there is enough seepage that even the oblivious will come away with something.

Teaching an elective is a balancing game.  The elective has to be interesting enough to attract students but not so watered down that it does not justify its existence in the curriculum.  I really believe gaming programming with Unity is a viable option.  Kids that take it as an only CS course will get something worthwhile out of it.

Would it be possible to teach C# using Unity?  Maybe but learning Unity itself just takes so much time that to really get the full programming experience with C# would take a couple of years at least.  Would a C# course then a Unity course help with learning Unity?  The answer is of course but so much of the Unity C# code is Unity specific that the C# pre-course might not be a big enough advantage to justify the time.

I plan to hang with the Unity game programming (or some high level 3D game IDE) because it is fun, has a good amount of problem solving, has some coding, and requires the kids to follow directions closely.  My CS college bound kids will get a solid dose of Python their Junior or Senior year.  I will also keep the Java course alive.

CS End of Year Summary

April 21, 2017

There are about six weeks of school left.  Four weeks for the seniors.  It is time to look back on the year and consider how things worked out.  This year I only taught one CS course, two sections of “Introduction to Game Programming”.  The course looked at Gamemaker and Unity.

I had three advanced students also look at Blender and Amazon Lumberyard.  The Lumberyard was just for them to make a quick comparison with Unity.  The three advanced students knew nothing more than the rest of the students in the classes about the various software, they were just into it a lot more so I separated them from the crowd and turned them loose.  This was a great decision.  Two (senior boys) of the three worked in tandem.  Incredible team.  The third was a quiet sophomore girl who is an uber-geek.  She worked by herself in the same small room (my office) as the two boys.  Although she did not work with the seniors she was not treated separately by them and did contribute to conversations.    Not a bad dynamic at all.  If I am able I will try to separate the dedicated from the not so dedicated in future classes.  I do realize it has to be done in such a way that it does not cause any tension.  In this case it worked out perfectly.

Prior to deciding to offer this course I knew nothing about Unity, Blender or Lumberyard.  I had dabbled in Gamemaker enough to understand the scheme but not enough to really be proficient.  Since my expertise was nonexistent, I knew this was going to be a course taught by on-line tutorials, YouTube and anything else I could round up.  It was not going to be a lecture course.  My programming course involve very little lecture anyway so no great change there.  The biggest issue for me was finding and previewing the tutorials and YouTube videos.  I have learned from previous errors to always work through the videos before presenting them to the class to use.  There is some bad stuff out there.

Initially I thought of this as being a programming course.  The more I and the kids got into it the more I realized it is less programming and more like a building course.  Using tutorials you do more typing code than learning code.  It is a lot of “type this and see what happens”.  It is possible to learn some coding this way but it is not to efficient.  It is easy to just cut and paste, with no attention paid to what you just cut and pasted.  I had to shift my “teach coding” mind set to “teach problem solving” mind set.  Of the seventeen kids in the course I would say about half got to the point where they could build what they wanted for a game from just looking on-line for solutions.  They could recognize coding errors and understand what the code was doing.  The other half can cut and paste.  Four cannot read directions or follow a simple video tutorial.  Experience with other classes tells me that overall that is really not bad.  The scary thing for me is that the seven freshmen in the course were only surpassed by my three advanced students.  I have to dream up cool and exciting programming and CS stuff for them for another three years.  eeek.

I do plan to continue offering this “Introduction to Game Programming” course.  It is a great way to get kids started with some fun building using cookbook coding.  It is my idea of a great introductory drug.  It is possible for those that want to work in the game writing field to take something like Unity and run with it.

I do not think the course can really be turned into a true programming course at this level.  The background required in C#, in particular the Unity specific code required from C#, is just more than we have time for.  There are also aspects of coding that just do not come into play with the Unity environment.  The idea of code for loops and iteration come to mind.  For a true coding class I will stick with Small Basic and Python.  I am not says a good coding class could not be made using Unity and C# but the time involved would likely be more than a high school student could commit.  Or a high school teacher.  To really teach programming with Unity the focus would have to change.  Right now everything is “Unity using C#”.  It would have to switch to “C# using Unity”.  Not quite as tempting or as catchy.

There is one huge drawback to teaching Unity.  It sucks time like a black hole.  You get this cool idea for a game and four hours later you come up for air.  I am really glad I did not set up a comfortable place to work on my computer at home.  I would never get out of the house.

Technology in the classroom: A warm and fuzzy worm

April 12, 2017

Larry Cuban has one of the best blogs for creating head scratching questions.  His posts on school reform and classroom practice always make me sit back and think.  His latest post on “Have Silicon Valley Teachers Using Technology Daily Altered Their Classroom Practice?” really has me sitting and thinking.  Larry posted some of his “Yes” and “No” replies to his study and they are interesting.  It seems a consistent thread that the changes the teachers made are in how the material is presented (electronic textbooks, electronic handouts, better access to resources) and not a change how the topic is structured.  (By “structured” I mean teaching the same math (or whatever) the same way, just with an electronic textbook and on-line resources.)

I also follow Dan Meyer’s blog on Math Education.  I do not always agree with Dan’s views on use of technology in the classroom, some of his ideas are a bit too tech intensive for my mind, sometimes the math would be lost in the many issues that can happen when trying to teach with tech,  but they are always food for thought.  What I like about Dan’s approach is that his ideas are not just a fancier way of presenting the same math.  He suggests completely different approaches of teaching a broad concept.  For example using a phone camera to record the flight of a basketball, then derive the formula for parabola as opposed to memorize the general forms of the parabolic function then find ways to use it.  His approach is often looking at a problem then developing the math.  An approach I am a big fan of.

From what I can see in my small little world of western Montana, and from my broader reading, education has not changed with the introduction of technology in the classroom.  Things like interactive boards, electronic textbooks, clickers, and so on do not seem to have changed how the teacher waves their hands at the front of the room.  Are these “presentation” technologies really improving on how much a student understands and retains when they walk out of the classroom at the end of the period or two years down the road?  Does a digital book really make a difference other than the weight if the student’s backpack?

There have been changes in classroom practice, which fits under the umbrella of teaching, with the use of paperless classrooms, video presentations (Khan Academy like or home grown), clickers, interactive boards, iPads, 1-1 laptops and so on.  It still seems to me that a teacher from fifty years ago could step into the modern classroom and still operate comfortably.  No, they could not operate all the tech presentation devices but with a whiteboard they could easily teach the curriculum.  I am not sure if this is a good thing or a bad thing.  It does seem strange to me that given the advances in tech we really have not changed the fundamental process of teaching most subjects.  The “sage on the stage” still seems to be the norm.  Is there nothing better?  I am not saying there is but with the years of education research with and without technology it just seems strange this is the preferred method for teaching. I know there are exceptions to the rule out there but those teachers that are exceptions seem to have developed their teaching methods independently through their own blood, sweat and tears.  Our student teachers are still coming in with the same fundamental teaching techniques I started with.

I remember the old saying “We teach how we are taught”.  Most of the present generation of teachers were not taught with technology and therefore use it as an add-on.  Presentation methods and maybe an easier way to hand out and collect homework are our concessions to technology.  Is this all tech in the classroom has to offer?

To really use the power of technology we would have to change how we measure learning success.  The present standardized tests would be worthless.  Using and teaching with technology assumes the student has access to said technology.  What would happen if a kid showed up at the ACT with a Chromebook in hand?  What a can of worms.  Now imagine the discussions out of the “let’s use technology to the fullest” approach.  Teachers would be up in arms immediately.  Math teachers would be making statements (and most make complete sense) such as: “Students should know how to do such and such by hand”, “Math is not a black box”, etc.  English teachers would have the plagiarism and file sharing issues to give them bad dreams.  Foreign language teachers would be out of a job.  Now let us bring in the economic issues.  Not every kid can afford a computer.  Not every school can afford to give out computers.  Staff training would be a nightmare.  All those standardized test companies would have to start from scratch.  Politicians would get involved and then things would turn into a real mess.

Somewhere in there is a dividing line as to how far we should go with tech in the schools.  In my math classes I assume a graphing calculator.  If they need the square root 3459 I assume they are going to use the calculator, i.e. the black box.  (When is the last time anyone found a square root using the long division looking algorithm? When is the last time you saw someone whip out a slide rule to compute a square root?  OK.  I admit it.  I have a slide rule in my brief case for these occasions but then I am old and weird.)  So the calculator is an approved technology.  How about WolframAlpha?  Not so much.  “It is the devils tool and will corrupt the minds of our youth.”  Or something to that effect.  I show my students WolframAlpha on day two of class.  If I want them to know the factors of some ugly polynomial, WolframAlpha it is.  I do not want my students wasting their time.  I am more into the “here is why we want the factors” and even that is getting a bit dated.

“Technology in the classroom” is such a warm and fuzzy at the moment.  Technology for enhancing teacher presentation and communication is expanding and is an accepted use of technology.  Since the graphing calculator was accepted, (we are still having issues with the algebraic computation calculators) students using technology to actually solve problems has sort of hit a brick wall.  Deploying the total power of technology to the classroom is right back to that can of worms.

I do have a solution to tech in the classroom.  Introduce whatever you are comfortable with and then hope for the best.  Hey, I did not claim it was a good solution.  I rarely get any of those.


One ringy-dingy, two ringy-dingy

April 5, 2017

I am the IT guy at the school.  In a small school this means a whole bunch of things are mine.  Things like projectors, screens, sound systems and, worst of all, the bell system. I am the bell guy because the bells are rung by software.  Scheduling software I am sure was originally written in the 70’s, by evil trolls with large painful bunions.  A couple times a year I have to figure out how to use the software so I can change the bells for the new school year or fix holiday dates that have changed.  This software is an excellent example of not-user-friendly.  But it is good practice for my problem solving skills, which is a euphemism for “How in the heck does the %^$# software work?”  The bells were not ringing in the elementary school after spring break.  Of course the first thing I checked was the hardware.  I push the button, the bells ring.  Nuts, that means it is the scheduling software.  Nuts again.  I pull up the software.  I am pretty sure this was originally written for DOS 1 beta.  I email the company to find out if there was ever a manual written for the software.  Nope.  Bummer.  (Who writes software with no manual?)  I stare and tinker.  An hour later I have an epiphany.  “You’re kidding me.  That’s how it works?!”  I got it now.  If I was clever (never one of my stronger features) I would write my own manual on how this misbegotten piece of trash works but I only have to monkey with it once a year so I will let the bunion ridden trolls call this a victory.  All I care about is the bells are ringing and I do not have to deal with them for another year.  Maybe.

Codecademy Python: Not ready for prime time

March 24, 2017

This summer I will be taking the Joy and Beauty of Computing course on Python at my local university.  From eight to five face to face for five days.  As a pre-requisite, we are working through the Codecademy course on Python.  Online tutorials are tedious.  That is to be expected.  This tutorial is not only tedious but it is a pure brain killer.  It is also full of errors.  I am halfway decent at programming in Python.  (The other half is pretty much hit and miss.)  My knowledge is well beyond what the tutorial is teaching so I can easily pick up the errors in the tutorial.  The first thing that hit me immediately was the fact that Python uses indents to distinguish code blocks seems to have completely skipped the authors list of “important things about Python”.  The indents are just magically there.  “Magically there” is a real bad thing for a tutorial intended for beginners.  Another little detail is the difference between “true” and “True”.  One is a string, the other is a Boolean.  In one of the quizzes, the answer to a question involving “true” is string, which was correct for the question asked.  The previous section had introduced the idea of the Boolean “True” but nowhere was it mentioned that “true” and “True” were different.  For a novice this could be just a bit confusing.

There is an even bigger issue beyond the errors in this tutorial.  The course offered at the local university is intended for beginning programming teachers.  (I am doing it for the professional development credits.  Only thing in the area.)  For some teachers this may be their first encounter with programming.  To give novice programming teachers the idea that tutorials like this are a viable way to teach programming to kids is an absolute and unforgivable sin.

There are people out there that can get through a tutorial like this and benefit.  I suspect they are few and far between.  Is it possible to write an interesting tutorial for something like Python?  I think so.  My thought is that the tutorial should offer an interesting problem up front, think about the problem away from the computer, strategize on how to use the computer to solve it, then investigate the tools (code) to use to solve the problem.  This Codecademy approach is like handing a kid an English – Spanish dictionary then tell them to go shopping in a town market in Mexico.  The result is not Spanish, it is words stuck together in a weird way.  I feel the same is true on tutorials that stress coding vocabulary and syntax.  Without something to do with it, it is just a bunch of unrelated code snippets that probably do not mean much to begin with.

Back in the days when dinosaurs still walked the Earth and I was learning my first programming language, Terrapin Logo, lessons had a different approach.  They started with a goal, “Draw a square”.  First think what a square is, then walk a square, then have someone give directions to someone to walk the square, then write the directions to draw a square.  By the time we hit the computer we knew what we wanted to do in pretty good detail.  Then the lesson went to the things Logo can do.  We did not start with the tools and then go to the task.  Perhaps this teaching style is out of vogue?  Or maybe the people that write these tutorials do not have the slightest idea of how kids learn or how to get kids interested in what they are learning.  This opinion is only backed by 30 year of experience teaching beginning programmers and making sure to the best of my ability kids have fun programming.

A programming teacher needs a repertoire

February 27, 2017

“Is it possible to code a simulation for a roller coaster or Ferris wheel using touch develop? I have 2 students who want to attempt to do this for a science project they have coming up in 2 – 3 months. Anyone have any ideas?”

This request came from the Microsoft Computer Science Teachers Network (Yammer) Touch Develop group.  I do not know anything more about the request, like grade level, course or teacher background so I cannot really give a lot of help.  What it does do is get me started on a conversation in programming diversity.  Not race or sex diversity, but language/environment diversity.

Sometimes kids will come up with the coolest ideas for a project.  I love it when they get their own ideas because they want to take ownership, which really gets them motivated.  However, that cool idea (like a Ferris wheel or roller coaster sim) sometimes just does not fit the language or environments being taught.  What should a programming teacher do?  Option 1:  tell the kid they cannot do it.  Sit down and get back on task with the required curriculum.  Not my favorite option.  Option 2: try to get the idea to fit the language the class is working on.  This option is not all that bad.  It sometimes leads to interesting places.  Sometimes the idea will actually fit with the language and the curriculum.  This is the win-win of Option 2.  Option 3:  Option 2 is not feasible because although the language might be able to do the kid’s idea, it just is not a good fit.  Or the idea does not fit the language at all.  Then it is time to pull something out of the hat that will do the trick.  Here is where programming diversity come into play.

A programming teacher needs a repertoire of languages and/or environments.  This is not to say they need to be an expert in these, but they should at least be at a level where they know they exist, and know where to find resources.  For the Ferris wheel and roller coaster idea, I would immediately think of Alice.  I have seen an amusement park in the tutorial examples.  I would also look at the Small Basic LitDev extension examples.  It would be 2D and require some major head scratching to decide what the finished product would look like but it is still a good thing to think on.  I would also start thinking this might be a good project for Unity, either 2D or 3D.  I would think of these options because I have been looking at programming languages and environments for a long time.

One way to get this repertoire is to have many years of experience and no life other than digging around the internet looking for solutions to Option 3.  Another way is to luck on to a good CS Ed methods course that would look at languages and environments that would show a beginning CS teacher what is out there.  This discussion of such a fantasy course is a discussion for a completely new blog post.

So if Option 3 is the best option does this mean the teacher should bail on the present curriculum and take off on a tangent?  This might not be feasible in most schools and is usually not that great an idea.  It should be a good poke in the ribs to look at what the curriculum is capable of flexing to or maybe if an after-school program is worthwhile.

A good CS/programming teacher has to be always on the prowl for course ideas.  The teaching of programming cannot stay static like math or history.  If a kid come to me with the idea of building a roller coaster here are some perfectly reasonable questions to ask them.  Do you want to print the parts with a 3D printer and actually assemble it?  Do you want to build it in Unity, then export it to your smart phone as a VR program and then ride it with Google Cardboard or Samsung Gear VR googles?  Do you want to build it as part of a 2D game then post your game on Play Store or itch.io?  Absolutely practical and real questions that are absolutely practical and real options.

The New CSTA Standards:Comments of a practicing CS teacher

February 6, 2017

I started looking at the new CSTA Standards today with more than my initial cursory glance.  I have to say they are very ambitious.   I also have to say they are also totally unrealistic.  I have been teaching CS for about 30 years.  With that experience I can understand or have a general idea as to what each of the 9-10 and 11-12 standards are saying.  Without being nitpicky I think they all have merit as part of a CS curriculum.  The trouble is there is just no way for the average school or average CS teacher to implement a curriculum that would contain more than say half of the standards.  The required teacher background would be the first major hurdle.  The teacher has to have knowledge of programming in several languages, which is not uncommon for an experienced CS teacher, but is uncommon for most new CS teachers that did not go through a CS degree program.  Then there are the standards relating to networking and hardware.  From looking at a few CS minor or CS Ed programs this is not even in the curriculum.  It is usually a program offered at junior or tech college or is gained by experience.  There is the standard relating to logic circuits and logic gates, knowledge of which would definitely not be in the lexicon of a teacher learning CS on the fly, which seems to be the predominant method of learning the job.

As an experienced CS teacher, I look through this list of standards with an understanding of the time involved to build a lesson to address the standard.  Many would be rolled up into some project so most are not a standalone task.  A few would be standalone.  I want to look at one as an example.  Standard 3B-N-4-35 “Simulate and discuss the issues (e.g. bandwidth, load, delay, topology) that impact network functionality.  (e.g. use free network simulators.)”  Very hardware oriented but also very relevant to the understanding of a fundaments issue in CS.  My problem with it is that final “e.g.”.  The simple task of finding a “free network simulators” is huge.  They do not grow on trees nor do they advertise themselves.  A teacher wanting to implement this standard is going to have to do a lot of time on the internet trying to find a “free network simulators”, whatever the heck that looks like.  They then have to figure out how the simulator works and then build something for the kids to do with it.  This is not trivial as far as time and effort goes.

Remember, a CS teacher does not have a nice list of textbooks to look through that address the standards.  This is not Math or Biology or Physics where publishers are producing great textbooks that address the standards.  CS teachers have to build their curriculum from scratch, usually on their own time.  Maybe in the future a publisher will decide it is worth the gamble to put out a CS textbook but I doubt it.  The thing would have to be updated regularly to just be sure something like that free network simulator is still around.

Has the effort the builders of the CSTA standards gone to waste?  Definitely not.  They have built something that a school looking to implement a CS curriculum can look through to get ideas.  A teacher looking through it can see weakness and strengths of their present program.

What I would like to see something that is a bit more prioritized.  I see this as the deluxe, platinum edition of a curriculum guide.  Something that a magnet school with a very experienced staff and a curriculum writing budget can use to build the ultimate of CS programs.  Most schools need something that is a bit more constrained and realistic.  They need the bronze edition.  Something that lists the very basics of what is needed to build a viable CS program.  Something a rural school with a business teacher that has just been told she is to offer a CS program next year can use as a guide.  This teacher also needs stage two, how to build the program with a list of assets and resources for those basic standards.  Wouldn’t that be handy?