Archive for February, 2017

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  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?

Unity and Rube Goldberg: A match made in heaven.

February 3, 2017

Ever give one of those assignments where you let your students run with it then come back in the room and ask, “How did you do that!”  I gave my programming students the assignment of building a simple Rube Goldberg using Unity.  I have a ball roll down a ramp and knock over some dominoes as a demo.  I have six freshman computer geeks in one class.  What they are coming up with is amazing.  Six unique scenarios but with lots of “How did you …?” conversations between them.  Just a cascade of events.  Teaching computer geeks how to do things on a computer is not teaching.  It is just getting out of the way so you do not get trampled.

My three advanced students are digging deep into Unity to find physics features I did not know about.  No book, just trial and error.  More cool ideas.

No programming is involved (yet), just fiddling, tinkering and exploring with lots of imagination thrown in for spice.  The bad thing about this is I cannot keep up.  Once we get through the programming section of the book I hope to come back to the Rube Goldberg.

On the never ending task of learning and teaching programming

February 2, 2017

When I taught math I never had to learn any new math from year to year.  The only change between years was an attempt to improve pedagogy.  Usually not a big deal.  Also math is a required course, I was going to get full classes no matter how exciting or boring the course material.  Teaching programming on the other hand is a constant battle with other electives for students and a battle to keep up with programming tools evolution.  There is always something new and cool I want to teach to attract kids into my programming classes: game programming, virtual reality, mobile apps, etc.  They are all viable and exciting ways to teach the basic and advanced levels of programming but also attract the non-programming, non-geek kids into programming.

If I look back at just the last two years teaching programming here are the things I have learned or at least dabbled in enough to evaluate for potential as a teaching tool or required I do some serious refreshing.

  • Project Spark (bad, bad on Microsoft for abandoning this software.)
  • TouchDevelop
  • Blender
  • Unity
  • Corona (knew it, forgot it, relearned it)
  • Kodu (knew it, forgot it, relearned it)
  • 3ds Max
  • Lumberyard (dabbled)
  • UnityScript
  • C# (as part of Unity)
  • GameMaker

In the last four months I have made a Unity maze and gotten it to work with a Bluetooth controller on my Android phone, built a yellow submarine with Blender (for you that remember it is the cover art for the Beatles album), made a 2D platform game in Unity using C#,  and am now learning UnityScript.

Looking back this is not atypical for a school year.  A programming teacher should always be looking down the road for what might make a new course or attract students into present courses.  That ten-year-old AP CS course with Java is just not going to cut the mustard any more.  It is possible to teach the same concepts and have a really cool game or phone app as a final product for a student to keep in a portfolio.

As a math teacher the math I taught last year will work for this year.  As a programming teacher the language/software/environment I taught with last year undoubtedly has a new version that will require some tweaking to get to work this year.  And that update may have some features that will require major time to figure out and integrate into the course.  And the computers you did it on last year may not be up to handling what you want to do this year which means you may have to punt.  (In my case I stole some newer computers from our library, replaced them with old computers, and bought some decent video cards for the stolen computers.  If the librarian ever notices, I am dead meat.)  As a programming teacher sitting on your laurels means you are falling behind.

Being a programming teacher is a never-ending cycle of looking and learning and staying ahead.  It is also being sure you do not throw out the baby with the bathwater.  If a programming teacher is bored with what they are teaching it is time get out of the game.  There is always, always something cool to teach.