Archive for the ‘Uncategorized’ Category

20% of the high school is taking CS: Oh S#%@

June 11, 2019

I just counted heads for my next year’s classes.  Oik! Thirty-one kids signed up for my programming classes.  Intro to CS – 11, Python – 6, Game Making (Unity) – 7, App Dev with Android Studio – 7.  Only one kid is taking two classes. So 30 kids in CS out of a school of 160 kids. Not bad.  

I am going to have to work next year.  Hard. The Python and Game class are OK.  Been there, done that. Need to improve them of course but I can do that.  The Intro to CS is a survey of several kid level languages, Alice, micro:bit, Small Basic and so on, and is an independent study course.  I have done the course previously and need to do a major rewrite. Mostly a better description of the assignments with a rubric. I may not lay eyes on these kids several periods at a time so things have to be laid out nicely.  The Android Studio is going to be the challenge. I originally was not going to offer the course due to a lack of good computers. (The fact I know almost nothing about Android Studio is a minor inconvenience.) The emulator is dead slow if you do not have a decent processor and a good chunk of RAM.  I am getting some older i7 towers donated tomorrow so hopefully we will be OK. If they are too old then I will figure something else out. On top of these 4 courses I also have an Honors Math 2 (8 kids) and two sections of senior Stats (7 and 19). Let’s see, that gives me six preps and seven classes.  I am an idiot.

Years ago I thought I should stop volunteering.  I volunteered for the Marine Corps and got shot. I volunteered for the Army Guard and got blown up by IED.  I volunteered to teach what I thought would be useful for my students and I am probably going to have a heart attack.  Just dumb as a box of rocks.

Advertisements

CS Professional Development in Montana: Where should it go?

June 10, 2019

The last two summers I participated in professional development sponsored by University of Montana (UM) and Montana State University (MSU).  The first summer was an AP Principals course using App Inventor. The second was on the Python curriculum “Joy and Beauty of Computing” (JBC) (https://www.cs.montana.edu/paxton/classes/joy-and-beauty/) developed at MSU.  Both were designed for beginning programming teachers to build a curriculum with in their school without having a degree in CS.  Both were worthwhile for me just for the networking with other computer teachers.

Next summer the organizer from UM wants to start a course thread for the next level.  She is a CS teacher at UM. Her idea of the “next level” and my idea of the “next level” became extremely clear at a meeting I had with her last week.  They were very divergent. Her idea was more advanced Python concepts. JBC was very basic and even then it was difficult for most of the attendees. Only two of the twenty had much Python experience (me and a teacher who used to be a professional programmer.  She was way beyond me.) The others were business teacher types that had “volunteered” to teach programming at their school. I can imagine what response a higher level of programming course would get. On the other hand my “next level” is pedagogical. I want to offer a “how to teach programming/CS” type course.  Something in the way of directions and resources for teachers without a CS degree. Issues kids encounter, issues teachers encounter (especially when not familiar with teaching programming), interesting exercises suitable for beginning and intermediate teachers and students, where to find teaching help, CS Unplugged, programming language selection, fundamentals of programming, grading and all the other things I had to learn the hard way.  Montana has a very small core of experienced and trained CS teachers. Small in the sense of maybe 10. The rest are business, Math, and whoever-is-willing teachers that are trying to just keep their head above water. This group does not need or want high level programming. They want “how to”.

The university CS professors organizing these summer professional development opportunities are great for finding grants for high school level professional development and getting the resources necessary.  Beyond that most of them are out of their element. They have not taught in the high school, they really do not understand the knowledge level of most high school programming teachers and they usually do not understand high school kids.  If they have been in the high school to observe it was in an APCS class. Not a good measure of the typical high school kid. A CS/programming course needs to attract the typical high school kids if we are going to get the classroom numbers needed to justify a course offering.  When a high school has 100 – 200 kids (typical for Montana) the number of kids interested in APCS is pretty much zilch. The number of CS experienced teachers teaching in a school this size is likewise zilch. I am hoping I can convince the organizer to offer something that will attract the average Montana CS teacher.

Some of the old stuff was good stuff

June 10, 2019

How many of you gray hairs out there remember the early computer game Rocky’s Boots?  (https://www.myabandonware.com/game/rockys-boots-cp/play-cp)  Rocky’s Boots was published in 1982 by The Learning Company.  I started using it in my classes in 1983. I still think it is the coolest format for teaching logic gates.  Even if there is no need to teach logic gates it is a cool game which incidentally will teach logic gates. (The kids will never know what hit them.)  For many years I have been wanting to modernize this game. Make a 21st century Rocky’s Boots. There are only a dozen or so things I have no idea how to do.  Things like being able to drag an object close to another and having the them blink that they are close enough to connect and then having them connect automatically and recognize that this is a connection so something like a current will flow through the circuit created.  A minor glitch in my plans but I shall over come.

I am pretty sure this is one of those projects where I do not have the big kid programming expertise to accomplish.  After all, I am an untrained high school level programming teacher. But I really do not care. This is one of those cases where the destination is not really that important (although I would really love to build this), it is the journey that is the big thing.  I doubt that I can build this by myself. I am thinking I will have to find a brainiac over at the university. Some college kid needing a project. I will end up just going along for the ride. I am OK with this.

This does bring up the conversation about teaching logic gates in high school in the first place.  I am still thinking about that.

Last Day of School And Done with Java

June 7, 2019

Today is the last day of school.  My Java students are scrambling to turn in their final.  I gave each of them a unique project to solve and code.

  1. Solve a quadratic.  Input a, b,c. Output solutions either real or imaginary.  Plot the parabola on an xy axis.
  2. Given two sides and the included angle of a triangle find the other angles and sides. Draw the triangle.  Color the triangle.
  3. Input the lengths of the sides of a rectangle.  Draw the rectangle and diagonals. Color each of the 4 sectors formed with a different color.
  4. Input the number of sides and length of the side of a regular polygon.  Output the circumference and the area. Draw the polygon. Color the polygon.
  5. Input three vectors (length and angle  for each so six total inputs). Draw the vectors connected.  Draw the fourth vector to make an enclosed figure.
  6. Input the radii of two circles.  Draw the circles tangent to each other.  Color the circles two different colors.

Initially these look fairly simple.  But we did almost no graphical exercises in class so the students had to do a lot of Googling and trial and error.  They also have to figure out the math before they code. Sort of like how it happens in the real world. I gave the students their assignment 2 weeks before today.  I informed them that if they try to do the program only during class time or procrastinate until the final day they would not be done. I required they show me their progress at the end of each class period.  My idea of progress and their idea of progress did not match but I am a bit of a “sink or swim” teacher. So today is the last day. Small progress steps and procrastination have won the battle. They are presently in the other room trying to do six hours of work in two.  So far two of the six students have turned something that rates a decent grade. Is it too much for juniors to understand procrastination kills? I figure they have to learn some time. It is amazing how much they are getting done in panic mode. Some of their best work of the semester.

Some lessons learned on my part.  

  1. Require a more detailed progress report on the math they need to do for each assignment.  The students working on #2 and #5 did not know how to convert distance and angle to Cartesian coordinates and they did not demonstrate this inability until today.  They had the math, they just could not apply it.
  2. Build a grading rubric for each individual assignment.  I had a rubric that I gave to the students but it was general.  The assignments were different enough I needed to break it down a bit more.  My expectations were different from their understanding. Not unexpected but I can clarify this next time.
  3. The students found at least four ways to draw a line on a graphics frame.  Pick one I like and do a lecture on that method. I was very impressed how one of the students (#4) got his lines to draw the polygon.  It was the hard way but it worked.
  4. Do not do graphics and GUI stuff in Java.  These types of assignments are so much easier in other languages.  Ones that like graphic screens and GUIs. Visual Basic likes doing things like this.  
  5. Some kids can work in panic mode.  Others collapse and give up. I was amazed none collapsed and gave up.  Even my worst student came up with something worth grading.
  6. I did only two of the six assignments myself.  With the others I saw the solution so did not code them up.  I should have coded them up just so I could answer questions better for the students.  Maybe I could have eliminated the multiple paths for graphing that they came up with. Of course I now know those paths exist for Java where I did not before.
  7. I would call this final a success even with the difficulties.  The amount of digging the students did while in a full panic was amazing.
  8. Do not lose this assignment sheet.  These will work for the Python class in the Fall.  I might also try them in Visual Basic in the Python class just so they see a different IDE/language.

I just noticed I have six students registered for Python next Fall.  I can roll these over to that class. This all gives me something to work on in the summer.  Oh goodie.

 

OOP or is it Opps?

June 3, 2019

Last week of school.  I am happy with the way the year/semester went except for my Java course.  After hours of deliberation and self analysis I have decided I suck at object oriented programming (OOP).  I see that it is a philosophy that drives a coding schema and has some major advantages in the right situation.  I have a friend that teaches Java at the local university. He comes over and teaches a couple of my Java classes when I hit the OOP chapter.  I sit and listen to his presentation (he is an excellent teacher and does an excellent job of explaining) and the philosophy makes perfect sense and the change from procedural to OOP coding is there on the board.  An hour later I look at the OOP code and think “what a mess”. I go back to my old programming habits. I have narrowed my problem will OOP down to two problems. The first problem is I write mostly small programs where the old procedural coding method is the best.  Simple, straight forward. The second problem is my brain has started to fossilize. I can code up almost any high school level problem using my tried and true technique which has taken me years to learn while trying to teach at the same time. I can do this in several languages.  Since my coding technique is almost 100% self taught switching to a the new OOP paradigm may take a long time. I will most likely be dead by the time OOP becomes ingrained. And it still would not be the best way to code the types of coding problems I teach. Yup, fossilized. So I am going to surrender as far as Java goes.  It helps that the local university is also giving up on Java in their intro courses and going to Python. I will try OOP in Python and maybe it will break through the crust on my brain.

There is one minor problem with this surrender.  Next year I want to teach a web design course with HTML, CSS and JavaScript.  JavaScript. Nuts. Oh well, I will see how that works. I also have a couple of kids interested in an Android Studio course.  Back to JavaScript. More nuts.

 

And the answer is!

May 23, 2019

“We are looking at implementing a Coding curriculum – what is a great one?”  How do you answer this? This was asked on the Montana school techie network I am a member of.  The question makes me want to ask about 20 more questions.

EV3 and Python: a new IDE is available

May 13, 2019

I stumbled on to something cool the other day.  I have some Lego NXT and EV3 robots and I wanted to see if there was a way of using Python to program them.  As usual I hit Google. I found this – https://sites.google.com/site/ev3python/introduction.  Being the brilliant teacher that I am (and being buried with other tasks) I passed the link to my independent study sophomore and told him to have at it.  He did and it died. We could not get things to work. Bummer. Google again. This popped up this time. https://education.lego.com/en-us/support/mindstorms-ev3/python-for-ev3.  Interesting, it was not there last week when I did the search.  Posted April 19, 2019. It is fresh out of the box. This time we got things working.  We had to flash the card a couple of times to get it to stick but that was the only issue.

It uses Visual Studio Code and MicroPython so the programming interface is nice and it compiles pretty fast.  I cannot find an API so there is a lot of trial and error getting things to work.  Setup is easy for the EV3. Just flash a microSD card and stick into the EV3. The documentation is pretty poorly written as a language tutorial and is not kid friendly but with enough time and fiddling the robot does go.  I have my test kid working with it right now. We will see what happens. If I had more EV3s I would be very tempted to incorporate this into my Python course. The fact that everything is not laid out nice and pretty is actually a plus (if you have time).  The kids would have to figure things out using poor documentation. Isn’t that the way the world is normally?  Using Python to make something go across the floor is so much cooler that making something happen on a screen.  It is EV3 only which is a bit of an issue, I only have two.  I have 8 NXTs but I guess there are reaching the “old tech” stage.  There is a Python for the NXT but it in not VS Code based and is a bit of a hassle to set up and is a bit dated.

 

Stats Course: from calculator to spreadsheet: the beginning

May 9, 2019

I started giving the final for my Senior Stats class.  I broke the final into three parts, each to be taken on different days.  I have the time so why not spread it out, make the tests short and try to relieve test-taking stress.  The first and third parts are just the usual written test thing, no big deal. The second part is pure computer.  I handed out a couple sets of data and they had to find the statistics and compare the data with Google Sheets or Excel, whichever they feel the most comfortable with.  When done they share it with me. I handed out the data sets on a piece of paper and the students had to enter them by hand. I need a better way to do that. I have four different sets of data so I cannot just tell them to go look at a shared file to cut and paste.  I imagine I could send each student a data set to their email address. A bit of a pain. I need to figure this out a bit better. Not all the kids use their school email address but I guess I could require they know it. I would rather not have the kids typing in the data, too easy to make a typo and mess things up.

This is the first year I have really used computers to this extent.  I required the kids have access to a computer (I have loaners if needed and there are computers in the classroom).  I have done it in previous years with simple things and did more of a show and tell. This is the first year with confidence interval, ANOVA and so on on the computer and not on the TI calculator.

After a simple AAR (After Action Review, a military thing) I have some issues to figure out a bit better.  Getting data sets to the kids as I mentioned. Finding data sets to give to the kids. I know, there are a lot of sources for data sets out there but in most cases the data is in the wrong format for Google Sheets or the data is too massive for a high school class (or a high school Stats teacher). I need to do some more searching.  I want simple data sets with nice features that target the topic I am teaching. Or more simply said, I want pretty data that will not be difficult for beginners and will give the expected pretty graphs I want for them. Later I can give them ugly data to work on.

Transitioning from a traditional textbook stats course to a computer driven course is not trivial.  Problems that are a mess by hand methods become trivial with a spreadsheet. Deciding how much is lost by using a spreadsheet has to be considered.  Computing the mean by hand does not help understand the mean. Who would do a five set 100+ data point ANOVA by hand? No one. At least no one with a computer handy.  But between those extremes there are things that should be done by hand just to understand the foundations of the concept. Those are the things that I have to separate out.

A couple of the amazing things I learned this year, and which surprised me, is how little seniors know about spreadsheets and how much they do not want to know about spreadsheets.  I think it is going to be a shock to them when they find out how much their future employment is going to involve spreadsheets. Yikes.

CS curriculum again and forever

May 7, 2019

I am trying to figure out what I am going to teach next year.  Every year about this time I sits and thinks. There are some limitations.  My knowledge level, my interest level, the student’s interest, assets available (quality of computers, course materials, $$, etc.), and a biggie, what is eligible for dual-credit.  There are several other factors in there but at the moment the headache is the dual-credit thing. The University of Montana CS department is going through the throes of modernization.  After about 40 or 50 years they figured it was about time. Some of the old farts retired which opened things up to new blood.

This year I offered three dual-credit courses in CS:

  1. CSCI 100 – Intro to Programming, a very basic look at several programming languages.  The class is for students who have had no programming. It is usually independent study.
  2. CSCI 135 – Python
  3. CSCI 136 – Java

The university is changing CSCI 100 to something else.  What? I cannot seem to find out. I knew what the course was before because I know the instructor.  He has changed departments and is no longer going to teach it so I cannot find out what is going to happen to it.  The CSCI 136 is changing to a mostly Python with a little Java at the end. A “little Java”? Is there such a thing?  Disaster is coming.

I want to bring in a Web design and building course and an app builder course (not App Inventor) to the school’s curriculum.  (I don’t know diddly about web building or app building (other than App Inventor) but those are minor details.) For the last few weeks I have been looking around the internet for web building and app building resources.  Lots of good stuff out there. The question is (other than what to use in the course) can I get the kids dual-credit for this? I may have to wander over to the university and actually do a face-to-face with a human. How retro.

The university is also offering a game making course.  The difficulty is the course is a 300 level and dual-credit is not offered for 300 level courses.  Last week I went to a showing of the final projects for the university students in the course. Of the four projects three were well below the level of my students taking my game course.  The fourth was using a Vive VR system and was very good. Not beyond what my better students could do but very near the top.  I need to talk to someone over there it get a 200 level game course.

I have talked about the app course previously.  I looked at a number of app building softwares and had concluded that if the kids are going to build something decent it has to be with Android Studio.  (I have no Macs.) So for the last couple of weeks I have been tinkering with it. I have concluded we will not be doing an app builder course unless I can scrounge up some better computers.  Due to a shortage of Android phones among the students we would have to use the simulator. The simulator works, it just takes two or three minutes to open each time I run it. That quickly gets to be a pain.  Need better hardware. I am running over to the free recycle warehouse next week. He says he has some nice i5s. I will get twice as many as I need and rob RAM to build a better machine. Not sure that will make a difference in load time but it is worth a try.

Building curriculum is a pain.  I want to do some cool stuff and get those kids interested in CS all the foundational knowledge I can pitch at them.  I also want to temp those not interested in CS to give it a try. Basic programming in multiple languages, apps, game making, web design, VR, AR, AI, robotics, there just is not enough time in the school day, enough money to buy good equipment, or enough time in my life to build it all.  But it sure is fun trying.

Now back to getting the Lego EV3s working with Python.  Cool!

It is never easy

April 21, 2019

Grading programming is a royal pain.  Why cannot my students give me the same answers for an assignment?  They have to get clever. They have to find some snippet on the internet that works maybe better than the solution in the book.  Or maybe worse but it still works. I give no restrictions regarding finding help on the internet. I want them to know about stackoverflow but I demand they understand what they use from online resources.

Here is an example.  The assignment is to write a program to capitalize the first letter in every word of a sentence.  The only real requirement is to use a sub-procedure. The first sample is the book solution and also the one I thought of.  A very traditional solution. The second sample is what most of my students turned in. I asked the first student to turn this in where he found it.  He pointed to a stackoverflow example that was sort of doing the same task. With the toTitleCase function. He just had to build the code around that function.  Of course that function spread like wildfire. One student that works in another room turned in a more traditional solution but it was still different from the book solution.

I like that the kids dig for solutions.  To me that is the whole idea of programming and computer science in general.  Find solution to problems you do not know the answer to by researching the internet.  It can lead to plagiarism but realistically, how many programmers in the real world come up with unique solutions?  I require that the kids explain their solution, they cannot just cut and paste. It just makes it a real pain to grade.

The only way I think I could possibly control what the solution is going to look like would be to put all sorts of restrictions and requirements on the methods to be used.  This is counter to my philosophy of teaching. I believe students should find solutions, not be told solutions. If this means I lose something to plagiarism, so be it. What I gain is worth it.

Book solution.

import java.util.Scanner;

public class Ch4_1Caps1

{

public static void main(String[] args)

{

  Scanner input = new Scanner(System.in);

  String line;

   System.out.println(“Enter a line of text.”);

   line = input.nextLine();

   System.out.println();

   System.out.println(“Capitalized version:”);

   printCapitalized( line );

}    

static void printCapitalized( String str )

{

     char ch;       

     char prevCh;   

     int i;         

     prevCh = ‘.’;  

     for ( i = 0;  i < str.length();  i++ )

     {

        ch = str.charAt(i);

        if ( Character.isLetter(ch)  && ! Character.isLetter(prevCh) )

           System.out.print( Character.toUpperCase(ch) );

        else

           System.out.print( ch );

        prevCh = ch;  

     }

     System.out.println();

}

}

 

Student solution.

 

import java.util.Scanner;

public class Ch4_1Caps2

{

public static String toTitleCase(String word)

{

return Character.toUpperCase(word.charAt(0)) + word.substring(1);

}

public static void main(String[] args)

{

Scanner s = new Scanner(System.in);

System.out.println(“What do you want uppercase?: “);

String phrase = s.nextLine();

sub(phrase);

}

public static void sub(String phrase)

{

String[] splitPhrase = phrase.split(” “);

String result = “”;

   for(String word: splitPhrase)

   {

       result += toTitleCase(word) + ” “;

   }

   System.out.println(result.trim());

}

}