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.

 

A little in-service. Finally.

January 30, 2017

I am excited, but then I excite easily.  My local university, University of Montana, on my local campus, as opposed to half way across the State, which is a long, long way away, is offering what could be considered an in-service course for programming teachers.  It is a modification the U.C.  Berkeley Beauty and Joy of Computing.  It seems to have been re-branded the Joy and Beauty of Computing (the J before the B).  Not sure how or why but I am not being fussy.  Yes, it is a bit of a canned course but again, I am not going to be fussy.  The course is wrapped around Python, which is great for me.  I need to do some upgrading of my present Python offering.  I am hoping the course will not turn out to be simply the JBS course.  I do not need a low level Python course, I can read and the course is intended to be a self-guided course.  What I want is how to teach the course, how the curriculum works, where the kids have problems and how best to address them.  You know, all the stuff a teacher needs to know to actually teach the course.  I will walk in with an open mind and if it turns out to be a Python programming course, well I will live with it but not happily.

Another happy piece of news is UofM is building a CS Ed minor.  I have only been trying to get something going over there for 10 years.   It supposed to be in place this fall.  It is still in the approval stage and the powers are being a bit closed mouth about it at the moment.  I am hoping (I hope a lot around here) that it is not just the CS minor with some Ed school courses thrown in for looks.  Considering the number of schools in Montana that want a full-time CS teacher (zero) a CS minor is a bit of over-kill.  What we need in Montana for now is a certification program that is practical for in-service teachers with little CS/programming to get started with.  I think the JBC course is intended to be the beginning of that route.

No matter what these two turn out to be they are both a step in some direction.

Human Experimentation with a Programming Class

January 20, 2017

This year I am teaching a course titled “Intro to Game Programming”.  With a broad title like that I can teach almost anything or any language.  I wanted to get a lot of kids into my programming classes so I figured if I give the course a cool name they will sign up.  They did.  I have 20 kids in the class this semester.  Not bad for a school of 175 kids.  I also wanted to look at game engines as a teaching tool so I guess you would call this live experimentation on humans.  Cool.

I originally started with GameMaker and Corona (Lua) but after looking at the future in my crystal ball, which is oh so reliable (it did not predict Trump but then nothing else did either), I have moved the class into a couple of industrial strength game engines.  I have part of the class in Unity and part in Amazon Lumberyard.  In both cases I just looked for really cheap or free textbooks.  In both cases I hit the jackpot.

For Unity we are working through Patrick Felica’s “Unity From Zero to Proficiency”.  This is actually a series of books that starts at the absolute “do not know didly” stage and advances to a fairly proficient level.  Patrick actually solicits advice and suggestions on improving his books so I give feedback from my students to him.  Considering the price, the resources and the readability it is a great way to go.  Are there errors in it?  Yup but so far they are things that can be figured out.

Amazon Lumberyard is a real experiment.  Amazon bought CryEngine and is revamping it.  The new Lumberyard version is new, as in maybe two years?  After reading the reviews comparing it to Unity I was not going to bother but the author of the textbook I use for Corona suggested I give it a try.  He would send me an early release of his new Lumberyard textbook to beta test with some kids.  New software?  New book?  Human experimentation?  What could go wrong!  Let’s go for it!  So I have three of my sharpest kids working through the book and taking editorial notes as they go.  The book is Dr. Brian Burton’s “Game Design Fundamentals with Amazon Lumberyard: Space Explorer”.  The book is a complete game building course starting with building the objects with Blender, shading with GIMP and then game building with Lumberyard.  The book is very incomplete at the moment.  Chapter 3 is about 8 lines, pictures are missing captions and so on.  Very early release.  I love it.  Instead of the kids just reading the tutorial and following along they actually have to figure out what Dr. Burton’s intent is and fill in the blanks.  I get editorial suggestions from them at the end of the period and forward them on to Dr. Burton.

At the moment the “programming” part of the course has not hit the traditional concept of coding.  We are building things now.  ZtoP uses Javascript for its language and Lumberyard uses Lua.  I know nothing of Javascript and I know Lua in a different environment.  No problem.  After taking a quick look at the programming chapters in ZtoP we should do just fine.  Dr. Burton has not written the chapters on programming for his book yet.  This might be a slight problem but there is always hope the chapters will arrive before the kids get to that point.  After all this is human experimentation so there is a bit of risk involved.

Learning by mistake

January 2, 2017

It is a method.  It is a long, slow and frustrating method but it does work.  For example my latest project is learning Unity.  Unity uses C# as its scripting language.  No big deal there, I know enough C# to get me in trouble so I should be OK.  I am learning through doing so I am building a little 2D platform game just as a learning exercise.  I got the basics down so I figured I would get cute and build a recycling elevator to carry my little character up to a higher platform.  Many hours and several days later the elevator still drops like a rock.  No continuous up and down like I want it to.  I have perused all the Googled suggestions, tried all the sample code and even, at this point, understand the code.  Owl boogers.  This should work.  I am at the point of just staring at the screen.  It works!  (The staring at the screen part, not the elevator part.)  Somehow I made my elevator platform a Rigid Body.  Rigid Bodies are subject to gravity.  If the platform is subject to gravity it falls off the screen.  I kill the Rigid Body component and the elevator works.

How has this helped?  I rewrote the code in about 5 different ways and I understand them all.  Before I was just cut-and-pasting with only a vague understanding of how this worked.  I know to watch out for the Rigid Body thing.  I know after hours of trying different code and scattering print statements all through the code to see what is happening that sitting back and staring at the screen is not a bad thing to do.  I know that even though I spent many hours trying to find the solution when it was actually something really simple having nothing to do with the code I was troubleshooting, I came away knowing a lot more than I did going in to the problem.

I also learned that although making mistakes like this leads to great learning experiences, it is still a royal pain in the ass.

Now I have to figure a way of teaching this technique to my students in a way that they do not think I am more of an idiot than they already know I am.

December 21, 2016

So I am happily going along with my one Python student teaching him what I know of Python (admittedly not much but it is an “easy” language and I have several books to learn from).  In my naive confidence that I can learn anything I decided to teach/learn more about recursion.  I have this little program that converts base 10 to base 2.

  1. def binary(n):
  2.    if n > 1:
  3.        binary(n//2)
  4.    print(n % 2,end = ”)
  5. dec = int(input(“Enter an integer: “))
  6. binary(dec)

I think I see how this works so we start to tear it apart.  We are OK with the “//” and the “%” operations.  Into the recursive loop we go.  Surprise!  I cannot figure out how it works.  So I do my usual thing when I cannot figure out some code, I throw in some print statements.  This method is tried and true.  It has clarified code for me for many years.

  1. def binary(n):
  2.    if n > 1:
  3.        print(“first”,n)         # added this for testing purposes
  4.        binary(n//2)
  5.        print(“second”,n)  # added this for testing purposes
  6.    print(“third” ,n % 2,end = ”)
  7. dec = int(input(“Enter an integer: “))
  8. binary(dec)

I input 22.  Here is the output.

first 22

first 11

first 5

first 2

third 1second 2

third 0second 5

third 1second 11

third 1second 22

third 0

Lines 1 – 4 are just fine, the recursion loop.  From there it goes to hell in a hand basket.  I do not understand how it even gets to the “second” print statement.  I had to call in the “Pro from Dover”, a friend of mine who teaches programming at the local university.  He emailed me how it works.  Nope.  It still was real fuzzy.  He is going to come over after the break and have a recursion sit-down with my student and I.

I actually like hitting things like this.  If I knew how to do it all what fun would that be?

Are you smarter than a sixth grader?

December 15, 2016

Tuesday in my middle school coding club I introduced the sixth graders to Lightbot.  Lightbot is a little online coding game.  It is a very simple game in concept.  Make the little robot move and jump and when it lands on a blue square turn a light on.  The coding language consists of little drag and drop icons, forward, right turn, left turn, jump, teleport and light on.  If you have too much spare time on your hands and love solving puzzles have at it.  Caution, it can be addicting.  I am happily going through the puzzles on the projector thinking the kids are working them along with me.  I ask one of the kids “Do you understand this one?”  He answers “I finished that one 10 minutes ago.  I am 3 ahead of that one.”  Everyone was ahead of me.  And I could not catch up.  Is there something wrong when a sixth grader can solve the puzzles several times faster than I can?

I went home and had a glass of wine.  Sixth graders cannot do that yet.

Base conversion program: always a good time

December 9, 2016

I only have one student taking my Python course this semester.  He is doing it pretty much independent study because I teach my senior Stats class at the same time.  The format is I lift some assignment from the book or I dream up something that will target what I want him to learn.  He is self-driven so it works out pretty well.  My latest idea to kill several birds with one stone is a program to convert bases.  I only want to convert bases 2, 10 and 16 just to keep it manageable.  It would be a two-part assignment.  The first part would just take the inputs through the usual Python input statement.  The second part would be to build a GUI with tkinter so there would be two sets of three radio buttons to select the conversion.  No big deal.  Should be doable.  There is a learning objective of understanding bases, learning and understanding a new package, the coding aspect and the algorithm development aspect. All reasonable I initially thought.

The student had not dealt with bases in a long time so we did a quick review.  While doing the review I noticed a pattern I had noticed before but diligently ignored before.  Converting from base 10 to any other base is not a big deal.  There is a nice algorithm.  Converting any base to base 10 is no problem.  There is an algorithm.  Converting base 2 to base 16 or the other direction directly is a big problem.  What I had noticed before was on any conversion I had always had base 10 involved.  If I wanted to convert base 5 to base 8 I always converted 5 to 10 and then 10 to 8.  Going directly is not so easy.  For example, convert 42 base 5 to base 8.  Converting the 2 is no problem, it is the ones place and ones are ones so long as the starting base is less than the destination base.  (Going the other direction, bigger base to smaller base is going to require an addition to the algorithm to handle when the ones are greater than the possible values for the destination base.  Convert 47 base 8 to base 5 for instance.  There are not 7 ones in base 5.)  The tricky stuff starts when trying to handle the 5s place.  40 base 5 = what in base 8?   4 * 5 = x * 8.  Still kind of using base 10 but not quite so directly.

As I type this I can see an algorithm taking shape.  The trouble is I do not want to teach the student my algorithm.  What I have to figure out is not the algorithm, but how to teach the student to develop the algorithm.   I am trying to avoid the standard math class teaching process; here is the algorithm as handed down from on high by the mathematics gods, memorize it and use it over and over until you have it ingrained in your memory.  I have a friend that teaches CS at the local university.  He states that his classes are full of kids that can program but almost none of them can solve coding problems.  Thinking and algorithm development are CS requirements.  Two things that kids hate to do and teachers hate to teach.  Both are very hard to learn and teach.

Well back to thinking.  And on a Friday at that.  I am a glutton for punishment.

Google VR. Ohhh, shiny.

December 2, 2016

I admit it, I like shiny objects.  A new shiny object comes along and I have to go look at it and play with it.  I like shiny objects in my programming classes.  Shiny objects attract students.  My latest shiny object is Unity.  I have been poking through the tutorials as mentioned in my previous post and decided this is one of the best shiny objects I have ever seen.  Then I stumbled on Unity with Google VR (Google Cardboard apps).  It is now so shiny it is blinding.  I found this tutorial (https://www.youtube.com/watch?v=AFGOhZJwoFw) on how to make Google Cardboard apps.  Ohhh, super shiny!!!

Now the question is: is this really programming or Computer Science?  I have to admit that I do not think it is the traditional concept of either.  But oh boy does it get the kids interested in the field.  It gets the kids wondering what else is out there that can take them in interesting directions.  Traditional programming and CS is not for everyone.  Just look at typical class sizes in a high school Java or Python course.  The percentage is real low.  I have said many times I am not training programmers in my classes, I am teaching kids how to learn to program.  (I am not a good enough programmer to teach programmers.)  I want my kids to come out of my classes saying “That was interesting.  Maybe I will take a closer look at CS/programming to see what else is out there.”  Unity is a hook.  Set the hook deep enough and maybe they will stay with it.  With shiny objects like this I can hook a whole lot of kids that normally would never look in this direction.

I will not retire my Python and Java courses, they still have their place for the kids that are really into programming but with Unity and Lumberyard (my next learning project) I can get a whole new population of kids thinking.