Monday, September 26, 2016

Interesting Links 26 September 2016

We celebrated my grandson’s second birthday yesterday. Somehow I couldn’t get into putting this post together afterwards. It felt like work. Having grandchildren changes perceptions. But now I am at work and have things to avoid doing so this feels like a good idea. Ever have a day like that? Plus there are some good links that really should be shared.

We Have to Start Thinking About Cybersecurity in Space I’m not sure I want to but we probably do.

Students ask me "What other kinds of jobs can a person get with a computer science degree besides a developer?" Other jobs in CS post by Marty Stepp Lecturer, Computer Science Department, Stanford University

How six scrappy young inventors built a breakthrough text-to-Braille translator device Spoiler alert: The whole team is young women.

Barriers to Stack Overflow Use for Females by Mark @guzdial For myself I wonder how the field, especially via the Internet, acts towards beginners of all kinds.

Are you developing primary computing in your school? Find out what has worked in Hampshire, England http://code-it.co.uk/cpd

How Microsoft wants to 'solve cancer' using computer science via @CNNMoney Quite a story. Computer science means getting involved in a lot of big deals.

Why I Teach Kids to Code at the EE Times by ex-Microsoft person (and friend of mine) Lynn Langit via @eetimes She’s doing some great work.

Humor. Or is it? I showed the below to my students so we could talk about is.

"Spaces or tabs?" "Semicolons."

Friday, September 23, 2016

When But It Works Isn’t Enough

I saw this image on Twitter recently. It was captioned:

"Spaces or tabs?"
"Semicolons."

Semi

It’s all perfectly legal C or C++ code. And a decent compiler will handle it just fine. But oh is it ripe for bad things to happen. Of course this is just a humorous example. No one would ever do it. Right?

On the other hand I have seen some code that was pretty hard to read. Students need to learn the value of programs that people can read as well as the computer. Somethings that get in the way of people understanding code can lead to things the computer gets wrong as well. At best they make it hard to update, modify, enhance, or fix programs. A working program that is unreadable by people is not as useful as one that people can read.

Another  of the things I see regularly is student code that compiles and executes and gives the correct answers but is horribly inefficient. Or it takes advantage (often unintentionally) of side effects that are not always going to be consistent, for example across different libraries. Or they just plain do things the hard way.

I’ve been working with my students on loops and if statements. We created a program that works just fine for small samples but it doesn’t scale easily. By adding arrays we can make it much more scalable but we haven’t introduced arrays yet.  When we do they’ll see better, easier ways to do man things. This particular program will seem obvious to almost every student. Not all optimizations are as obvious though. This is something we have to teach.

Beginners are often ready to settle for “it works. it gives the right answer. What more does it need?” Eventually many of them will get to a point where performance is an issue. Or maintainability will be an issue. Sure many will never get there but increasingly I think we do students a disservice if we are willing to accept work that is not as good as it could/should be for the level of knowledge.

Thursday, September 22, 2016

Bug Reports

I saw the following tweet earlier today.  Still earlier in the day I read a post on Mark Guzdial’s blog about Barriers to Stack Overflow Use for Females which had me thinking about how people ask for help on Stack Overflow.

What is the connection? Well it seems to me that one source of frustration and negativity on Stack Overflow is related to people not reporting bugs well. In general beginners do a poor job of reporting bugs. Experts, like those on Stack Overflow, often lack patience with poor bug reports.  Teachers don’t have the option to be impatient though. It is our job to work with students to help them understand. That means helping them learn to report bugs.

A student will often start by reporting “my program doesn’t work.” Somehow they think that is enough information. Of course it is not. The definition of a program not working is a broad one. “Why doesn’t your program work? Because you have done something wrong.” Two completely accurate statements without a trace of enlightenment in them.

Often I mind myself asking “What does ‘doesn’t work’ mean?” The process of analysis and developing an understanding of the basic problem has to be taught. Students don’t always know how to describe the problem.  It is as if they stop thinking when something unexpected happens. Part of teaching has to be to help students look for and acquire more information about the problems they are seeing.

Another problem is a lack of vocabulary. What is a stack overflow anyway? Sure an experienced person knows but the student decides that maybe he can have his function call itself soon discovers that “something bad happens” even if he doesn’t understand why it happened.

One of the things I have to get students to share when they have troubles is what problem are they drying to solve. What they think is the solution my be breaking because it really isn’t a good way (or a way at all) to do what they need. Explaining the problem they are hoping to solve often leads directly to understanding what is really going wrong with a project.

Student’s usually want and sometimes need hints (Would You Like a Hint? ) but we have to help them learn how to report/explain their issues first. If not we’re not really helping them learn at all. We’d just be giving answers away.

Monday, September 19, 2016

Interesting Links 19 September 2016

The big news last week was the launch of the CSforAll Consortium  with over 180 members committed to K12 CS Education. That was not all I picked up last week though. I’m pleased to have a good bunch of links to share with you today.  Let’s start with some CSTA news in case you missed it!
Have you seen the new @csteachersorg Standards Video  Computer Science Teachers Association standards announcement video.
ACM and the CSTA announced new awards for teaching excellence in computer science funded by the Infosys Foundation. Very exciting! Are you a good candidate? Check it out soon.

Interested in hosting a Family Code Night? there is a free kit for elementary schools available online. Sets start people thinking about (and in) code early.
  There is a new drone programming course for schools, Drones 101 from @gotynker I think I need a drone. Are you using one or more with students?
Robot Reinforces Learning Interesting article on the Blo0g @ACM  about “Quinn provides feedback to the students through an easily recognizable facial emotion set, here smiling to indicate approval.”






Friday, September 16, 2016

Computer Science–Because it is Magic

Seems like a number of people have been blogging  about computer science for everyone this week. This may well be related to this week’s Computer Science For All Summit at the White House and the announcement of the new CS For All Consortium. Or maybe coincidence. I don’t really know. What I do know is that today brought a post by Mehran Sahami (a really smart guy who teaches at Stanford) called Why Computer Science Education in K-12 Settings Is Becoming Increasingly Essential. It does a very good addressing some of the concerns about trying to teach CS to everyone. But there was one, in my opinion, money quote.

Arthur C. Clarke mused that “any sufficiently advanced technology is indistinguishable from magic.” Providing a CS education can potentially lead a child who wishes that magic really existed in the world to realize that maybe it does, and inspire them to use that magic for our common good.

Computer science is a lot like magic to a lot of people. I even hear students from time to time explain “It’s like magic” when their program works right. Yes, they do say that.  After all the years I have been writing code it still sometimes feels like magic.

But magic or science, computer science does have the power to change the world for the common good. That is sort of magical itself.

Teaching Beyond Programmer’s Programs

There is a difference between computer science and software engineering. There are some big and important differences. There is of course a lot of overlap. In any course advertised as “computer science” there is some tension about how much software engineering to include. In some senses this comes most into play when talking about the difference between a program that is usable only by the original programmer and one useable by just about anyone.

I have a bunch of the first type. For example I have a phone app that I use to keep track of the rotating schedule my school uses. It works well for me but I couldn’t easily hand it off to other teachers to use (even if they had Windows Phones) because it uses some initialization files that are not really that easy to set up. If I wanted to make this program easily usable by other teachers I’d have a lot of extra work to do. That may be the best example of the difference in my mind – software engineering is about making programs lots of people can use without deep CS knowledge or knowledge of how the program works internally.

Now of course Human Computer Interaction (HCI) is part of any good university computer science program but just how much of that can fit in a high school single semester course is an open question. Even a year long course, especially an Advanced Placement course, has limited room for software engineering concepts. Still I feel like it is important to include as much as does fit.

A program that does everything is is supposed to do but that is very hard to use soon becomes unused. The benefit of using a program must far outweigh the cost/work of using it. Not just a little because momentum (we’ve always done it this way) can be a lot to overcome.

So we talk about it. Adding labels to a GUI project (especially when using Visual Studio with C# or Visual Basic) can be a trivial matter to implement but add a lot to usability. I have been thinking that  maybe I should take some programs and reduce or remove things that help usability or at least understandability to start some conversations going forward. Great more work. Maybe I think to much.

Thursday, September 15, 2016

White House Summit on #CSforAll & CS for All Consortium

Yesterday the White House hosted a major summit on Computer Science for All. I wasn’t there myself but was able to watch much of it via live streaming. It was a pretty inspiring event. Ruthe Farmer, Senior Policy Advisor for Tech Inclusion at the White House, was the host and organizer and collected a veritable who’s who of CS education people and organizations for the event. That the CTO of the US, Megan Smith, was the closing keynote is a good indication of official support of the event.

Probably the single biggest announcement, and there were a number of important programs announced, was the creation of the CS for All Consortium.

Computer Science for All is a bold new initiative to empower all US students from kindergarten through high school to learn computer science and be equipped with the computational thinking skills they need to be creators in the digital economy, not just consumers, and to be active citizens in our technology-driven world.

image

There are a lot of resources at the CS for All Consortium website and it is well worth checking out. You can also follow the CSforAll Consortium on Twitter @CSForAll and if you are on Twitter and interested in this important effort I encourage you to do so.

They’re on Facebook at https://www.facebook.com/csforallconsortium/ and Instagram at https://www.instagram.com/CSforAll/ so there is all that as well.

The Computer Science Teachers Association (of which I am a proud member) is a founding member of the Consortium and is on the steering committee. CSTA is a highlighted member of the Consortium so you can read about the CSTA role in the CS for All Consortium on the website. (You may find a quote from me if you scroll by the more important people quoted BTW.)

Monday, September 12, 2016

Interesting Links 12 September 2016

Is everyone back at school now? After a couple of short weeks school happens all five weekdays this week. I think I’m ready for a full week. Getting back into the full swing of things takes me a while. Looking around school I am not the only one. Hopefully you are all doing fine. Here are a few links to get your week started,.

PiBakery Dramatically Simplifies Setting Up the Raspberry Pi Looks like some useful software for people using the Raspberry Pi.

Photo published for PiBakery Dramatically Simplifies Setting Up the Raspberry Pi

What's an algorithm? by Harvard’s  David J. Malan   I may use this in class.

Using Makey Makey with TouchDevelop looks fun and easy

This Walmart Worker Built The Company An App In His Spare Time via @cora @buzzfeednews Are we in the golden age of the non-professional developer? Maybe we are.

Microsoft is betting that a more neurodiverse workforce is better for business by Vauhini Vara via @FastCompany About a special program to recruit and retain employees on the Autism spectrum.

Students ask me why people create new programming languages regularly. In this article developers of emerging programming languages shed light on their thinking. 3 New Programming Languages: What Their Creators Say

Wednesday, September 07, 2016

Of Dice and Men

In a college  I first learned about Stochastic analysis and Monti Carlo Simulations. Whoa! An academic sounding reason to play with random numbers. It was only later that I discovered randomness as applied to cryptography. By then I had long before  been fascinated by random numbers (or at least pseudo random numbers) in computer programs. I still love using them today. They just make programming more interesting.

In my college work in System Analysis (one of my two majors) we used random numbers as part of building simulations. I enjoyed doing them. I keep thinking I should come up with some simple simulations to have my students work though. Perhaps the old ski lift simulation. If I could remember the details. Maybe I am getting old.

Of course games are a regular use for random numbers in student projects. One of the classes I have students create with we talk about programming classes is a Die class. Binary DiceTo make it interesting I have to help them think beyond the normal six sided die with six values. I talk about two sided dice or as they soon realize – coins. And of course many sided dice such as those used in role playing games.

A while back my wife got me a set of Binary dice. Six sides but only two values – one or zero of course. The visual seems to help stimulate out of the box in thinking.

If I were teaching AP CS A and/or teaching inheritance the die class might be a fun one to use. Create a coin class or perhaps a dial class from the die class? I need to think about that more. Anyone reading doing something like that they could share?

Of course random numbers have other uses. I have a 20,000 entry database of names and birthdays that I created by randomly picking first and last names from lists I got at the Bureau of the Census (for example Frequently Occurring Surnames from the Census 2000) and then randomly making up months, days and years using random numbers,. That was actually fun to write. Having a dataset that large makes it obvious to students why a computerized system makes sense.

I’m not sure that my students catch my love of such programming projects. Or rather the fact of pseudo random numbers making them work in interesting ways. I do hope that it makes for projects that interest them though.You never know were something will lead. Randomness is everywhere.

Tuesday, September 06, 2016

Crowdsourcing Tech Terms for Students

Peter Vogel has been creating a list of tech terms for his ICT students for more than 20 years.  He edits and updates the list just before school starts for him in Vancouver BC Canada. .He discards terms no longer in the vernacular or no longer widely used, and tries to bring in as many new terms as he can reasonably fit. He runs a similar but much shorter list for his grade 11 students. It’s a very good list but he is looking for suggestions to make it better.

Here are 4 pages he has so far. Add any interesting terms to bottom of the list (which is presently alphabetized). The snippet below may say 2015-16 but the document shows the correct date range.

Again, if you wish to add a term, do so in the area at the bottom of the Google Doc.

Monday, September 05, 2016

Interesting Links 5 September 2016

It’s Labor Day in the US which means this is the last day of a four day weekend for me. It’s nice to have an extra long weekend this early in the school year. Making the adjustment from summer to back to school takes some work for me.  That doesn’t mean I don’t have links to share though.

Interested in a tool to transition students from Scratch to Java (via Greenfoot), check out this tool : ScratchFoot I don’t use either Java or Scratch much these days so I haven’t tried it but it looks interesting.

ScratchFoot provides a subclass of World and subclass of Actor which make available much of the functionality of Scratch in Greenfoot.
Using ScratchFoot, you should be able to convert many Scratch programs to use Greenfoot. This may be useful for

  • overcoming limitations of Scratch. E.g., when the Scratch canvas is just too small for your application, or when Scratch starts running too slowly because you have so many scripts running.
  • making the transition from the simple (and wonderful) world of Scratch to the more real world of Java programming.

Federal Aid for Code Schools - is this a good thing?  A lot of people seem to think it is. Mike Zamansky is someone I can always could on to give a contrary view of things for balance.

The Nerdy Teacher: was recommending Kano last week.   Honestly I don't think I "get it." The Kano Computer Kit.is a build it yourself computer kit based around the Raspberry Pi. Your mileage may vary as they say.

imageI probably need to add this Soccer Bot project to my list of robots for teaching programming. Pi Soccer Bot (Full Build Edition)

Build a football-kickin' robot and challenge your friends on the pitch! Customize it to gain an edge on the competition.

Mark Guzdial shared Cynthia Lee's excellent list of what CS teachers can do for inclusive teaching Are you doing these things?

Rule the arena with a Bluetooth controlled BBC micro:bit buggy The Micro:Bit as the heart of maker projects is something I do “get.”

I say some code for a BBC Micro:Bit  Binary clock at http://makeandshape.com/stuff/ I’m thinking there has to be a way using less code but haven’t had the time to try myself. A binary clock for the Micro:Bit has been on my plan list for a while though. Maybe I need to move it up the priority list? This was done in TouchDevelop BTW.

#csk8 20160907.png

Thursday, September 01, 2016

Scratch Resources from Ireland

A friend recently sent me a link to this site that looks like it will be very helpful for teachers who are using Scratch from MIT. Check it out at scratch.ie

image

Since 2007 Lero – the Irish Software Engineering Research Centre has been running an Education and Outreach Program to encourage students to discover and learn about computing and software development. We have developed Scratch lesson plans, to teach software development to students. Scratch is a visual programming language that makes it easy to create interactive stories, animations, games, music, and art and share these creations on the web.

Lero - Irish Software Engineering Research Centre