Teaching coding: The missing steps

It seems like every day someone is introducing a new tool to get kids into coding. Just recently Apple introduced their Swift Playground, with animations of kids making a weird pear-shaped blob thing move around a 3D world. We have the now-venerable Scratch, and Scratch Jr. for the really little kids, we have Hopscotch, we have the Hour of Code, we have Khan Academy coding and new tools that allow kids to program robots with Scratch-like code chunks. So that means that this generation should produce a huge new batch of computer-literate coders, right?

Missing Steps
Some steps are missing

Alas, probably not. I’m glad these first steps to coding are there, and they are essential. We also have plenty of steps higher up the mountain where adults, college-age kids or particularly motivated high-schoolers can learn more advanced coding: places like Udacity, Coursera, Pluralsight, Code School and so on. What we lack now is the tools, and maybe more importantly the teachers, to get people from these lower steps to the higher ones. It’s like staircase with the middle twenty steps replace by ropes and those wall-knob attachments from rock-climbing gyms. Some people will still get to the higher steps, but not many. Most will get to the top of the bottom row of steps, look around and say “that was fun, I made the robot move and turn; I wonder what we’re doing in art?”

But that’s fine, right? So most kids don’t go on and learn about networking. That’s advanced computer stuff! It’s not like every single computer is attached to some giant computer netw…oh.

Today we’re surrounded by computers, but unlike even ten or fifteen years ago, almost none of those computers does anything by itself!

Even applications that were once entirely local, like Microsoft Office or the Adobe Creative Cloud projects now depend on regular network connections. Remember the last time you were in a coffee shop and the WiFi didn’t work? I bet you didn’t get much done. You probably just put your computer away and got a book out or interacted with actual humans. Almost all computer work today involves having to download something from somewhere or look something up on Google. Even games are networked more often than not.

And it’s just going to get worse. More and more services are moving to the cloud; lots of organizations don’t even use Office anymore in exchange for Google Drive. More and more jobs involve getting complex data from a big cloud using APIs. And when the Internet of Things blows up, even your toaster will have an API.

Move the things around the little screen
Code can do ANYTHING!…in that window

But the programs the kids are learning to do, even a fairly advanced learning environment like Greenfoot that uses actual Java and begins to teach kids about objects and classes, all basically involve moving little shapes around a little screen on the side of the code. And sure sometimes you can blow the little screen up to your full screen, but it’s still a cozy little sandbox that has no contact with the rest of the world, unlike pretty much every other app they interact with.

I’m not saying there is anything wrong with these programs! I use many of them in my teaching. But there are very few places to go now when a kid is ready to get outside of that sandbox. Sure they can start learning Python, and if they’re patient they’ll stick with writing console apps for a month or two until they are able to start using PyGame and make some graphics. They can get into physical computing and start learning Arduino if they have the electronics gear and other hardware to make it possible. But as I mentioned, most Arduino programs (of the sorts most kids do) are actually very simple.

What is needed are tools that make it easy for kids to make simple network requests and access simple databases, tools that take some of the hard parts out (like making complicated database connection strings or working out complex network handshakes), while allowing kids to do the part that’s actually not that hard.

And the ideas aren’t that hard! SQL queries like “SELECT temperature FROM WeatherDatabase WHERE year>1990” or adding parameters to an http query like “?field=accidents&city=Omaha” are not that hard to to understand even for a middle schooler. But getting to the point where you can do that is. For now. It’s time for a tool to change that.

 

 

Tech Project Idea: Make It Easier to Vote in Local Elections

There was an election today for state senate and some judges where I live. Most people didn’t vote; I almost didn’t either except that I saw a tweet from the mayor telling me about it. As it happened I knew about a state senate candidate I supported because a friend had told me about her, so I went to vote. There were a couple of local judge positions where I didn’t know who to vote for, so I picked randomly. Afterwards, I thought how ironic it is that the elections we’re most likely to vote in (president, Senate and House of Representatives) are also the ones where our vote is least likely to matter. In small local elections for positions like state legislature, city councillor, civil court judge and so on the vote count can be in the thousands or even less, and small number of votes really count.

But it’s not so easy. It’s easy enough to get out and vote, but if you don’t know who you’re voting for it doesn’t do much good. Yes, with a little more research I could have found out about the civil court judge positions I got to vote for, who was running and what their positions are. But it would take awhile even to figure out what the races were; I know because I did try to look before I went. And I only knew about the person I voted for because a person I trusted told me about her. I assume the candidates did their best to get their name and positions out, but they were facing an overwhelming flood of competing news. I’m sure the newspaper must have mentioned them at some point, but in spite of my reading the news all the time I never saw it.

But it doesn’t have to be that way. All this information is publicly available, just not very well aggregated. Some websites are working hard to do this. The best one I found is BallotPedia, which has a pretty good collection of what’s going on, including a list of the state senators. It even has a place where you can enter your address and see a sample ballot – but only for the general election. With enough searching I could still have figured out who was running today, but not quickly.

But there is no reason a website couldn’t allow you to put in your address and tell exactly who is running for what that you can vote for, what day the election is happening, where your polling place is, links to all the candidates’ web pages and news stories about them and information about their voting record if they are in office. You could also register to get emails to inform you about various off-season elections, such as for bond issues.

There may be no profit motive for a private company to do this and it might be too difficult for a nonprofit, but it’s something the US government could set up very easily, for an amount that would be a pittance by US government standards (five or ten million dollars a year would be more than enough).

The best part is it’s not something that has to be done nationally right away. Small groups could do local or state versions of the same thing. It could be an advanced student project or college level programming project. You could start as small as you want. If it worked in smaller areas it could be expanded and get bigger and bigger until it covered the whole country. Imagine if countless small organizations began, and started to come together to makes something bigger.