Archive for May, 2011

End of school year

May 24, 2011

This is the last week of school for us.  Kids are done this Thursday.  Then I have to get to work.  Being the school techie I am on an eleven month contract so during the summer I fix all the stuff I had been ignoring during the school year.  This summer my list includes upgrading the Exchange server to Exchange 2010, trying to get WSUS to work and building a new Moodle server.  The old Moodle server died as in dumpster dead.  Better yet I am going to try and virtualize some of these apps because I really cannot afford to buy more servers.  Which means I have to know more about virtualization other than the correct spelling.  Which also means I probably ought to upgrade from Server 2003 to Server 2008. 

I also spend a good part of the summer writing course material and deciding what I want to teach the programming kids.  Since the school has no defined curriculum for programming and what there is I wrote, I pretty much get to do whatever I want.  The drawback is I do not have a nice text book we can just brainlessly stagger through; I actually have to plan things out a bit.

Next year there is a kid shortage, I have no sophomores or juniors coming in to programming.  Freshmen have no programming elective, their schedule is already full.  A bit strange but it happens at a small school.  I am a bit bummed.  The present batch of juniors will be with me next year as seniors.  I started with them as seventh graders with Alice.  I need to get back into the grade school more often to keep the flow of CS kids more constant.  Easier said than done.  Trying to get programming into the grade school is very difficult.  Their schedule is already crammed, none of the classroom teachers understand the need for programming and the computer time the kids do get is spent learning applications.  Learning applications is critical at that stage; it is amazing how many kids cannot use the common applications.   I was able to do Alice with those kids years ago because they were already familiar with the material they were going to miss in the regular apps class, and they were also sort of the pick of the litter.  I want those kids but I also want the “average” kids to see what programming is all about.  Getting the kids into programming young seems to get them hooked.

Technology in the classroom – does it make a difference?

May 23, 2011

This thread is not exactly on the topic of programming, but considering many, if not all, of the programming teachers I know are involved in the school technology debate or support it seemed relevant.  I do believe programming in the school is directly affected by the school’s philosophy regarding technology.

I have a K-8 principal that is a big technology in the classroom fan.  He is trying to pressure his teachers into using more technology in their rooms.  Of course his definition of technology is a bit fuzzy, his staff has little to no technology training, there is not a whole lot of technology available in their classrooms and there is no money earmarked for technology purchases.  These are minor, somewhat solvable, problems.  OK, maybe not so minor, but they are solvable.  My questions to my huge and avid reader pool are:

  1. Is there any conclusive evidence that technology in the classroom has improved the average student’s ability to learn?  
  2. Does a Smartboard (or other like devices) make a difference in how well a student learns, or does it just change the method of presentation? 
  3. Would students learn better if they all had an iPad?  Is there proof one way or the other?
  4. Is there evidence that a 1-1 laptop ratio has improved learning in the regular classroom?
  5. Should students have a Google Docs account so they can collaborate on projects?  (“Collaborate” seems to be a real big word in education circles now-a-days.) 
  6. Our K-8 is still following a fairly traditional curriculum.  In that environment would technology make enough of a student improvement to justify the expense?
  7. Applications like Moodle allow better communication between the teacher and the student but does this actually improve student learning?

For years there have been discussions regarding the use of graphing and algebraic solver calculators in math classes.  Do they really improve the understanding of the mathematics they are being used to solve?  I have seen so many pro and con papers that I no longer pay attention to the debate.  After 30 odd years of calculators the vote seems to be still out.

One of our history teachers has started to use Youtube extensively.  He regularly shows History channel movies on the particular topic of study.  Prior to Youtube he had to purchase videos and spend quite a bit of time locating the snippets of interest.  This particular use of technology has brought something into the classroom that was difficult or not previously available.  In this instance I would believe the use of technology may have improved student learning just for the fact that student interest is increased.

Technology in the classroom is expensive, and not just in the initial purchasing of the hardware.  To justify the expense it is usually necessary to train teaching staff, re-write curriculum to get the most out of the technology, and ensure there is an adequate support staff.  I see a lot of articles from companies promoting technology in the classroom and of the interesting (and expensive) things schools are doing with technology, but is this actually improving the student’s skills in math and science, and preparing the students for the university?

I am a big fan of technology but I cannot let my very unsubstantiated opinions influence how we spend our very limited school funds.  At the moment when a teacher asks me for some particular piece if technology, I ask them if they are planning on re-writing their curriculum to incorporate this piece of technology.  I always get a blank look in return.  I have a math teacher that uses a projector and eInstruction Mobi pad extensively.  He teaches from the back of the room (no longer the sage on the stage), records his board work with Smart Notebook, and posts his notes on Moodle.  It has taken him three years of writing and practice to get a system that works for him.  The time invested in his curriculum and methodology re-write has been and continues to be fairly extensive.  His opinion is that the method has improved the students’ learning.  He does not have test scores to prove this but he does have over 20 years teaching experience that allows him to make this seat-of-the-pants call.  I think I can go with this.

Most technology is not plug-and-play into the curriculum.  It takes a lot of commitment from multiple people to make the expense justified.  Is it worth it or do we have to do it no matter what the cost just to keep up with the world?

More on learning to learn

May 19, 2011

This is a continuation of an earlier blog.  I had more to say but was getting tired of reading my own writing.

I really do not care that my students can make a Christmas tree with Xs and Os and tabs.  If, for some strange reason, they have to make a Christmas tree with Xs and Os and tabs I want them to know where to go to learn how to make the Christmas tree in any language.

This perspective is sort of wrapped in with Alfred Thompson’s “What can you do with what you know” article and some of the other job interview conversations taking place on the blogs.  In 2000 I was interviewed and, strangely enough, got hired by a local software company.  Now realize I was not a CS major in any way, shape or form.  Just a high school math teacher that knew some simple programming.  The interview questions were rather simple.  Did I know what a database was?  I knew the answer to that one.  Could I program with SQL?  I had no idea what SQL really was but I think my answer got me the job.  I simply said “No, but I sure can learn how.”

I think employers want versatility and adaptability.  They want to hire people that can learn and learn quickly. You just have to look at some of the Google interview questions to see what some companies want.  They do not want to hire Java programmers or any particular language.  They want to hire smart people that can learn what the company needs and learn it quickly.  The only way to prepare students for that kind of market is to force students to practice learning on their own and not be constantly holding their hand.  Of course there is a fine line here, after all they are still kids and will need some guidance.

I just read an article on program language usage trends.  Looking at this article as a teacher it is possible to wonder “Am I teaching the correct language?”  Although this “which language” topic has been thrashed forever it is still an interesting topic.  My solution is to teach an initial language and then try to teach the kids how to learn a language.  Does this approach have drawbacks?  Sure, they cannot walk in to a college Java class and make a Christmas tree as quickly as a student who just took a year of Java.  But they are very capable of learning how to make that tree in any language.

Programming should not be just coding.  If a company wants just coders it is much cheaper to ship the job overseas (as the software company I was working for did).  Next year I am planning a Java segment for my advanced students.  The assignment will be to code some simple project in Java (maybe a Christmas with Xs and Os).  There will be no Java editor on the computers.  I have a couple of Java books floating around my office, I will set those out.  As the teacher I will be there to help the kids iron out any difficulties and frustrations they are having installing an editor (most likely Eclipse), help them understand how to dig up tutorials and read the books.  They will not become APCS level Java programmers this way.  But hopefully they will become more self sufficient programmers with a broader skill set that just coding.

7 rules for beginning programmers

May 18, 2011

I found this on the internet this morning.  I am going to post it on my programming lab wall.

  1. Do not write long procedures. A procedure should not have more than ten or twelve lines.
  2. Each procedure should have a clear purpose. It should not overlap in purpose with the procedures that went before or come after. A good program is a series of clear, non-overlapping procedures.
  3. Do not use fancy language features. If you’re using something more than variable declarations, procedure calls, control flow statements and arithmetic operators, there is something wrong. The use of simple language features compels you to think about what you are writing. Even difficult algorithms can be broken down into simple language features.
  4. Never use language features whose meaning you are not sure of. If you break this rule you should look for other work.
  5. The beginner should avoid using copy and paste, except when copying code from one program they have written to a new one they are writing. Use as few files as possible.
  6. Avoid the abstract. Always go for the concrete. [Ed. note: This one applies unchanged.]
  7. Every day, for six months at least, practice programming in this way. Short statements; short, clear, concrete procedures. It may be awkward, but it’s training you in the use of a programming language. It may even be getting rid of the bad programming language habits you picked up at the university. You may go beyond these rules after you have thoroughly understood and mastered them.


Programming portfolios

May 16, 2011

I really like the idea that at the end of the semester the kids have written something that is theirs, i.e. usually some sort of game. In Art and English classes portfolios are the common trend in high school. I think programming courses have to start in that direction, even at the high school level. The quality of the IDEs and the abilities of the students are now such that kids can write something that is fairly unique and, in some cases, actually marketable. It is amazing how much more effort kids will put into their own project as oppose to working on textbook projects.

Teaching students to learn programming

May 13, 2011

I had one of my better third semester programming students get a bit upset with me today.  I had given the class an assignment to write a simple pinball game using Corona.  He had been gone the last couple of weeks for various school sponsored reasons so was a bit behind.  His comment was “But I do not know anything about this language!”  I pointed at the computer and said “find an example and learn”.    Being a kid he huffed and puffed and ten minutes later had the idea of how to do what he wanted to do.  And of course this got me thinking on my expectations in my programming classes.  After X number of semesters what do I want them to be able to do?

Here is sort of my rough outline.

Sem 1: learn the syntax of a simple language (Scratch and Small Basic).  Understand common programming usages for If, While, For, global vs. local variables, use comments and write fairly simple programs.  Semester one involves a lot of instruction and guidance.  Lots of step-by-step.  Most of these kids are taking their one and only programming course.  I want them to come away from the class with the idea of what programming is; that programming is useful and that although it can be a bit geeky, it does not require that you be a genius to do it.  I also what them to get the idea that some really fun things can be done with it.  If a kid is interested in being a game writer they will get an idea of the work and planning involved and that it is not impossible.

Sem 2:  Program with Visual Basic (just ‘cause it is as good as any and we own some text books).  Teach the kids how to read the book problem, break the problem into pieces and build the pieces.  Much less step-by-step guidance but still lots of guidance.  Lots of forcing them to read the book.

Sem 3:  Learn a language (actually several) that we do not have a text book for.  Use an API, on-line resources and sample code to reach a fairly operational level in the language.  Hopefully learn how to learn.  I want them to be able to find and read the resources.

Kids hate to learn how to learn.  They want it handed to them in a nice package, hopefully in a step-by-step manner in a lecture.  (I kind of like it that way too but then I am also pretty lazy.)  For the Corona assignment I show them where to get the free download of Corona, how the website is laid out, which tutorials are halfway decent and some good sample code to look at.  At this stage I do not want to teach them to code, I want them to learn to code using the resources available.  The class becomes much more interactive.  The kids share the “how did you do that?” code.  They end up having to teach themselves to a large extent.  They learn how to learn.