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