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.

 

Advertisements

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());

}

}

 

“Guess what great idea we have come up with!”

April 10, 2019

Monday I am over at the elementary school checking their internet.  It seemed to be having a case of the slows so I was checking if the access points were acting up.  (They were, reboot and problem fixed. Everyone thinks I am a genius.) Anyway I stopped in to talk to the principal to let her know that another lab computer had gone to the big dead computer warehouse in the sky.  She says she is not to worried, next year there will be no computer lab. The lab will be on a cart with laptops and the teacher will be mobile. Surprise!

I would really be happy if these things were not a surprise.  There are only about twenty issues that need to addressed before this mobile lab thing becomes practical.  Foremost of which is where we are getting the money to buy 70 laptops? (Two floors, no elevator so need two mobile labs plus some spares.)  We are getting things sorted out one issue at a time and the powers do have hope of raising the money (private school, no tax funded education) for laptops, carts, extra access points, wireless printers and some yet to be determined things I have yet to think of.  (Surprise!) Luckily all I have to do is find vendors and bids for “stuff”. I can let someone else figure where the money is coming from.

Events like this keep me from getting bored with this job.

Course Building 101 or How to Teach Something You Know Nothing About.

April 5, 2019

More tinkering and reading.  A couple readers suggested I look at W3Schools.com.  The dabrook.org link I posted sends you to the w3schools.com site.  Weird. Anyway I have started looking at the three tutorials. The UW course is very different from the other two.  The UW course is built for students and teachers with a teacher version and a student version.  This course is not just a coding in HTML course. It does quite a bit about how to build good web pages, discussing color, fonts, page design and so on.  (This sent me off on a bit of a Google tangent. I Googled “bad websites”. There are numerous articles about what is good and bad in website design. I want the kids to learn more than just how to code websites.  Part of this website business is knowing how to build good websites.) I am starting to like this UW course a lot.

I have been playing with two editors, Notepad++ and Visual Studio Code.  Notepad++ is very basic and is recommended by several sites as the best way to go for introducing HTML code.  It is solid as a brick, no whistles and bells. VSC on the other hand is big on whistles and bells. Auto-complete and WYSIWYG extensions.  Make a change in the HTML code and it automatically reflected in a window in the editor. It is a bit quirky but once figured out it is pretty slick.  After working in both editors through the same lesson there are arguments for both. Being lazy I like VSC. Being a teacher interested in retention I like Notepad++.  The teacher is going to win. Actually I do want to use both eventually. Start out with Notepad++ then maybe half way through the semester switch over to VSC. Of course the plan is subject to change.  (A great Marine Corps saying is “we don’t plan, we improvise”. I do that a lot.)

I also talked to my former student who is does commercial websites now.  His suggestion was to dabble a little in HTML, CSS and JavaScript then when we get serious go to WordPress.  He said the organizational requirements for websites can be massive if not using a tool like WordPress. Since I looking to get the course approved for dual-credit through the University of Montana (UM) I do not think the WordPress route is a possibility for fall semester.  Maybe if I get some students who want to go big time into website development I will offer a second semester using WordPress and get him in to help with the course.

My friend/guru from UM is coming over today and we will chat about the course.  He teaches the WDD courses at UM and is the one that has to approve my course for dual-credit.  UM is extremely flexible in regards to syllabus and teaching resources but if I do not have to reinvent the wheel for this course I will not.  The usual trouble with following the UM syllabus exactly is UM likes expensive textbooks and they also assume that the students have infinite hours outside of class to work on projects.  College students are take three to four courses. High school students are taking seven to eight and usually involved in some kind of extracurricular activity. Many high school students have extremely limited time outside class to work on projects so the lecture during class time and work on assignments out of class scheme is not always feasible.  So far I have never followed the UM syllabus for any of the dual credit courses I teach. They simply do not work for us.

This weekend I need to continue looking for resources.  The UW course looks good but something better may be out there.  I will also wander down to Barnes and Noble to look at what is on the shelves.  Since any book I buy is funded from my wallet I rarely buy anything but there have been exceptions.

One of the really fun things about teaching CS is if you ever get bored or feel in a rut you can grab something else in the field and build a course that is relevant for the students.  Learn something new and try to teach it to students with a higher IQ than yours. Oh joy.

Course Building 101 or Hoping I Get It Right

April 3, 2019

As I mentioned in my last post I want to offer a Web Design and Development (WDD) course next fall.  I know absolutely nothing about this topic. It is not something I have really been interested in over the years.  I have had a student dive into it a few years ago and actually ended up getting paid to build websites while he was going to school here.  I sort of looked over his shoulder but that was about it. The kid was smarter that i was so I just left him alone in this area. He was the stereo typical uber-geek.  But now it is time to bring this into my skill set. Most, if not all, of my blog readers are teachers. We understand the difference between just learning a new topic and learning it and being able to teach it.  It can be a bit of a tightrope walk at times. Personally I like to be good at something before I teach it but since I started teaching CS thirty some years ago that has not always been an option. Now that I think about it, that has never been an option.  So I am going to dive in to Web Design with no experience and no resources from a previous teacher. In the next series of posts I am going to try to explain the process I am going to go through to build a WDD course.

Here is my plan:

Step 1 – Google.

Step 2 – more Google.

Step 3 – contact a friend at the university that teaches WDD.

I have started Step 1, 2 and 3.  I Googled “web design curriculum” and just started hitting links.  One of my major requirements is my resources have to be free. All my courses have a $0 budget but I have had this budget constraint for the last 18 years so it does not bother me.  A nice thing about a $0 budget is I have never wasted money on something that I later thought was junk. I have found lots of junk but free junk can be trashed without feeling bad. So far I have found these three resources.  The UW course was updated on 2012 so it should still be good. The second is a commercial product that is pretty direct with little except the coding aspect. The third is an interactive tutorial. I am not a great fan of interactives (threatens job security) but I will give it a look over.

https://www.washington.edu/accesscomputing/webd2/student/index.html

https://www.how-to-build-websites.com/

http://dabrook.org/web-design-curriculum

I also have to find an editor.  Several articles suggest just using Notepad or some very basic text editor.  I have two reasons against this approach. First, I am lazy. Enough said. Second, I want to learn the tools that would actually be used by a semi-pro to build the HTML code.  For example in my Java class we are using Eclipse. So far we are having more trouble learning Eclipse than Java but I consider this part of the learning experience. That is why I have a guru friend at the university.  When we have an IDE or language issue he wanders over and lends a hand.

I just talked to my college guru.  He recommended Visual Studio Code. I have looked at VSC before and abandoned it because i could not get it working in minutes.  I have very little tolerance for IDEs I cannot figure out fairly quickly. (Small Basic spoiled me a few years ago.) I just spent a little more time with VSC and got it working with HTML.  I added a live HTML extension. Pretty slick. I will play with it some more.

Now I need to start working through the three resources I have found so far, look for some more, build a little knowledge and start thinking about how I am going to approach teaching WDD.  Piece of cake.

The Grass is Always Greener

March 29, 2019

It is spring break.  The weather is poor and I am financially inconvenienced so I figure I might as well evaluate and modifying my CS curriculum.   (What else do broke teachers do on spring break?)

Presently we offer Programming I (1 semester, Scratch, Small Basic), Programming II (1 semester, a mix of about 5 different languages or whatever interests us the teachers), Python (1 semester, college CS credit), Java (1 semester, college CS credit), Game Programming with Unity (1 or 2 semester) and Intro to Programming (1 semester, similar to Prog 2, college general credit).  After some head scratching and conversations with college instructors and people in the tech industry I want to make some modifications. I am going to bag the Game Programming for next year and bring in a Web Design and Development course and an App Development using Android Studio course. The Web Design would be based around HTML/CSS/JavaScript and would have no prerequisite.  Since I know zip about HTML, CSS or JavaScript it will have to be fairly basic this first time through. I know enough people in the industry that I can find some good help with the course. I want to attract some of the non-techie kids with this course. I hope I can get some of the kids that think computer stuff is not for them. Girls in particular. The school is at least 50% female and I only have one in my CS classes right now.  I need to find a solution to get them and the non-programmers involved in the tech classes. I have to show them that this stuff is not rocket science. (OK, it is, but if I want to attract non-techie students I have to convince them it isn’t.) I have found a couple of courses about Web Development, one of them through CodeHS. I would not use the CodeHS because it is not free. I still need to do some digging. Whatever I find has to teach both me and the kids.  I am old and the brain is getting fossilized so it has to be simple and good.

The App Dev with AS is to keep my programming geeks interested in new things and maybe attract some new blood.  Again I do not know AS but the amount of resources available is massive. I am not too worried about learning AS, after all it is just another IDE.  Since AS requires some programming skills I am thinking of having a programming prerequisite. The only CS teacher in the local public school is using AS in one of his classes so I will have a resource on the pedagogical aspect.  I have been hesitant in the past about introducing an AS course because AS looks pretty high level.

This year I sort of prepped some kids for the AS course by offering Java.  I started thinking about the AS course earlier this year but was not positive I was going to offer it.  Since I found another local teacher using it I will dive it. I hope those Java kids will hang with me. I think it is necessary to have my tech students work with phone apps.  Phone apps are the programs of now and the future. There will always be Windows, Mac, and Linux towers but I think the big money will be phone apps and software that interacts with phone apps.  I have no doubt that in 2 or 3 years the primary computer interface will be VR/AR glasses connected to a phone connected to a server on the internet. Connect that to some type of input device (mini joystick, Leap Motion hand tracker or like interface) and now you have something.  I want my kids to be able to come up with ideas for an environment like this, not just be users.

I am ignoring iPhone simply because I do not have Macs or money.  Android apps I can install directly from the computer to the phone.  Apple requires the Apple store as an in-between. Not convenient. Besides, I use an Android.  (App Inventor for iPhone is in beta at the moment.)

Now I just have to find some students, some teaching resources, learn HTML, CSS, JavaScript, Android Studio, build some lessons and try to guess what surprises are going to come along that I have not thought of.  I will save that for next weekend.