Monday, April 29, 2019

Game of Thrones and Computer Science

I confess that I have not watched a single episode of Game of Thrones.  That doesn’t mean I am oblivious to the social impact of the show. My online social media is full of it. So when Rita Tillson Vasak linked to this Slate article explaining why a recent episode was so hard to view I jumped to read it. The article talks about data compression and how a lot of compression made it hard for a lot of people to really view the scenes.

It talks about data compression in a way that assumes the reader has a clue as to what they are talking about. It uses the term “lossy video compression” and talks about the layers of compression involved in getting the digital image to your screen. I wonder how many people read that article without comprehending it very well. Hopefully my Advanced Placement Computer Science Principles students would get it all.

We talk about compression in AP CS P. I’ve also played with lossy compression with my Programming Honors students (Lossy Text Compression Project ). I talk about compression in terms of text, images, video, and music. I think students mostly get it.

Rita suggested this article as part of review for the APCSP exam (coming in less than two weeks!) and I think that is a great suggestion. I may use it next year when we talk about compression as well. I think it is a good visual and discussion as to what can go wrong in our attempts to get the most data through the smallest “pipe” in the least amount of time.

Showing specific examples of the effects, positive and negative, of computer science technology when it also ties into a social event can make a great impression.

Sunday, April 21, 2019

More Than One Way To Code a Solution (to a programming project)

Garth Flint has an interesting post about grading programming projects (It is never easy) in which he talks about the interesting solutions students come up with. It struck a cord with me on a couple of levels. Yes, it makes grading more difficult but it also means that students are thinking for themselves.  Or so I chose to believe. Sure some of them look up solutions on the internet but they have to understand them well enough to explain them and make them their own.

I figure that on average a class full of students will come up with three different ways of doing things. Sometimes only two but sometimes more than three. Sometimes I will take samples of the various solutions (with no names) and discuss them with the class. It gives me a chance to show that there is more than one way to do things AND to discuss optimization a little bit.

Occasionally students have come up with solutions that I had never thought of and were even better than how I had done it. I love it when that happens. I love new solutions. To it also emphasizes the value of a diverse group of people looking at a problem.

As Garth mentioned in his post, student ideas move quickly through a computer lab.  I struggle with that a bit. How much help is too much help? Where is the line between “he helped me with it” and “I copied it from her?” And how do you tell where the students are around that line? I could get pretty fanatical about it. I’m not sure how productive that is though. It probably adds as much stress on me as it does for students. I toss in quizzes as well and students who understand what they are doing do a lot better on then than students of get too much “help” with their projects. Using multiple forms of evaluation is a good practice anyway I’ve been told.

Generally I see projects as more effective as a learning experience than as an evaluative tool. Sure they help evaluate learning but a practice, an exploration of ideas, and a way to learn things is their highest value. If students come up with implementations differently for what I would come up with I see that as a learning win.

Thursday, April 18, 2019

What is in a name?

It’s been said that the three hardest things in programming are naming things and off by one errors. For some reason, this semester, my students are having the most trouble with naming things. Specifically, they seem to have trouble making the connection between names and objects.

For example, they will use the name of what looks like a text box but without actually instantiating the text box firs Or they will use a different name for the textbox than the name the textbox actually has. And they’ll be surprised at getting an error message that says “the name ‘x’ does not exist in the current context.” The same is true with undeclared variables. Often this is caused by not paying attention. I will set the name of an object while live coding and then use that name later in the code. If they were not paying attention any of the three times I point out the name declaration they may not use the same name in their own code but expect it to work later. After all, it worked when Mr. Thompson did it.

Now of course I have explained all of this numerous times. I think many times students are just expecting the system to fill in the blanks for them. It would be nice if the system would. Maybe one day we’ll have artificial intelligence built into development environments that will help with this sort of thing. But we are not there yet.

Our IDEs do a lot for us (developers) that they didn’t do for us back in the day. No autocorrect in punch cards. I know that some educators believe that using a fancy IDE with automatic features is a bad idea. Students should learn without them. They may have something of a point but I resist the idea because I don’t want to make programming to hard. I don’t run a weed out course. Plus these modern tools open the door for students to experiment. Intellisence in Visual Studio lets students see a lot more options then I have time to cover in class.

I keep coming back to naming things though. Selecting meaningful names is important. Making the connection between declaring and defining objects/variables and the names themselves is important.

Spring break started tonight. Figuring out how to address this is something to think on in a couple of days when I’m relaxed.

Monday, April 08, 2019

Teach Programming or Teach a Programming Language

For me, teaching is all about the concepts. Programming languages change. My first programming language was FORTRAN. This was the big language with I was in university. Today? Not so much. But loops and decision structures still exist. Over my career, I have learned a bunch of programming languages. I’m not sure I want to know how many but its a lot.

This morning I was reading Mark Guzdial’s blog as one does (Why we should explore more than one programming language across the curriculum) which comes as I am looking hard at my school’s computer science curriculum.  We teach several programming languages. Visual Basic in our freshmen course, App Inventor for our mobile app development course, C# in honors programming, JavaScript in AP CS Principles, and Java in AP CS A. SO potentially students can learn a bunch of languages during their time here.

Is this good or bad? Are there too many languages? Are these even the right languages? I believe that much is dependent on ones goals. Is our goal (in HS CS) to teach a programming language or to teach how to program (programming concepts).

As I started off this post, I believe that in the real world people who develop software, professionally or other wise, will need to learn new languages as time goes on. Mark has been writing a lot about task-specific languages (Task-specific programming languages: People aren’t dumb. Programming is hard.) and it is pretty clear to me that is a coming thing.

Teaching all programming classes using one programming language is probably a great way to teach that language but to quote Mark’s blog “We have no evidence currently that language-specific programming knowledge will transfer” So how do we prepare students who will have to learn new languages for new tasks?

Someone once said that the second programming language is the hardest one to learn. I can see how that could be the case. On the other hand learning programming languages does seem to get easier after that second one. I believe it is because learning a second language forces one to think beyond the syntax.

In one class, some years ago, I started showing my AP students who to do the same loop in a number of languages, including assembly language, and one student claimed later that was the most valuable lesson of the course. I still try to show multiple languages at times but since most of our students have already been exposed to several by the time they get to Advanced Placement that seems less necessary today.

Still I toy with the idea of writing a parallel programming book using several languages.  This is an idea borrowed from parallel translation Bibles where several translations of the Bible appear side by side on the page. A great study tool for religion that might work in programming as well.

Coming back to goals, I can see teaching a lot about one and only programming language as a somewhat reasonable way to prepare for a job but not for a career. I still remember getting my first programming job because I knew one language pretty well. Six months later I was handed a project specification and a language reference manual for a language I had never heard of and told “go to it.”

I truly believe that having a background in multiple languages was the difference between success and failure for me.