Programming: for the mindset, not just the job market

In the time since I’ve started this blog, teaching kids to code has gotten really…well, trendy. Yet, from what I’ve seen and heard, probing into the reasons people think we should teach programming are connected to the future of the job market.

But there’s a lot more to it than that. Getting students programming, when done well, helps them develop computational thinking, a set of skills and approaches that are relevant to just about any field of study or career. Computational thinking as a mindset is the ability to look at a problem and say, “I have the tools to solve this: I can break it into steps, and I can compare them to problems I know how to solve. I can evaluate my process, and I can find and fix errors. I can persevere when it’s tough. I can work with others who have different ideas, and I know that the best work often comes from collaborating with them.” In a nutshell, it’s the stuff math teachers are referring to when they say, “Look, even if you never solve a system of two equations again, the way of thinking you’re learning from algebra is useful later in life.”

Furthermore, though, and perhaps more importantly, that mindset is not just relevant to other content areas – it can be taught and/or reinforced there too. Based on that belief, two fellow members of the Minnesota Coding in the Classroom Cohort and I gave a presentation today at the MN STEM Network Conference entitled Computational Thinking as a Habit of Mind. And since I had intended to make #tooltimetuesday a regular feature on this blog a hundred million years ago, I thought I’d pass along the resource list we shared with attendees. It contains instructions for the four unplugged (meaning computer-free) activities we did as part of our session, a Padlet containing a graphic that breaks down computational thinking and participants’ thoughts on where those elements appear in their career or content area, and a list of further sources to explore.

If you check it out, note that it’s intended to be a living document – feel free to add resources of your own, favorite computational thinking activities, or ideas for how to adapt activities to be relevant to your content area! Alternatively, leave some love in the comment section: which aspects of computational thinking do you see in your own life or line of work?


Sunday soapbox: knowledge isn’t the only gap

Two days ago I suggested that even people who won’t be professional programmers may benefit from being able to create something like a website or mobile app for their own business or personal use. The case study I gave  computer science professor Paul Pauca, who, along with some of his students, created an iPad application to help his son, diagnosed as a toddler with Pitt Hopkins Syndrome, communicate with his family and therapists. They shared it in the Apple app store, and a year later, 1100 copies had been downloaded.

It’s fantastic that hundreds of families were able to benefit from the work they did, especially given the typical prices of standalone augmented/assisted communication devices. But I can’t help but wonder: what if you didn’t have to wait for a team of students working on expensive degrees? What if a member of each of those hundreds of families had the tools to create their own application, tailored to their own child’s unique needs?

Reality check, though: even if we open up who has the software knowledge, we’ve still got to keep an eye on who has access to the hardware, something Pauca himself comments on here (with apologies for headline’s lack of persons-first language).

Last weekend I went to a seminar about AppInventor, where groups of teenage students worked through introductory tutorials while other teachers and I had a crash course in the software and a conversation about how to teach it to students. I spent the rest of the day swapping emails with a young teacher friend about her mental prototypes for apps she wishes she had for using in her (1:1 iPad) classroom. As I dug around for things that might be potentially useful to her, Android app designs from the morning rattling around in my head, I stumbled into this. The part that got me:

At Apple, we see the results of…inequality every day. Minorities are significantly underrepresented in the technology industry. We want to do our part to change this. We want to open the vast potential of all the world’s future inventors, future dreamers, and future leaders.

I’m frustrated because that doesn’t match up with my experience of the ed/tech world. I got jazzed watching high school kids get jazzed about creating apps…and then realized that being able to write and then use your own apps is a long way off because the iPad has the school technology market so thoroughly dominated. Saying that you want to open up the world to inventors does not jive with a development process that requires an Apple device and the ability to pay a $99 registration fee only to wait through an uncertain review period. I understand that the security that comes from keeping out third-party apps is a huge part of the draw for schools…but surely there has to be some middle ground.

But…not everyone will be a programmer, part 2

Yesterday’s post talked about the usefulness in other careers and day-to-day life of the factual knowledge gained from studying computer science, but another idea worth touching on is all of the transferable skills to be gained.

Programming is all about being empowered to create something, not just to memorize and regurgitate. Programming is setting an objective or choosing a task, imagining how to achieve it, and then breaking it down into steps small enough to implement. Learning to program pushes you to be resourceful: when you reach the end of your own knowledge, you have the tools to acquire more and then to make it your own by applying it to a project.  It’s about being able to check your own answers, see that your solution isn’t quite right, and then keep trying new ones until you get it. It’s the open-endedness of the humanities combined with math’s requirements of specificity and clarity. In that, it may not be just a liberal art, but perhaps even the liberal art.

Individually, programmers have to develop strategic thinking, thoroughness, self-reliance, and executive function. And that doesn’t even begin to touch on the interpersonal skills to be learned from working on a large project with a team! Can anyone who works with students (or employees, for that matter) honestly say they don’t wish those skills were better developed?


But…not everybody is going to become a programmer.

Oh. So history matters because we’ll all be historians? Kids need chemistry because all of them will be chemists? High school French is important because will become the ambassador to France?

If you’re saying that as a hint at a larger argument that maybe, probably, most of us aren’t entirely sure why high schools have the graduation requirements they do, then yes, by all means, let’s have that conversation.

But for this subject, I can point to concrete reasons. Jobs is part of it, yes, but another part is that even people who don’t do it professionally may be well served by being able to create themselves a website or application. And the bigger picture is that computation is happening in every field, and even if you’re not the one doing it, you’re well-served by being able to understand what’s being computed and why. Does it mean say that we’re focused on critical thinking when we’re missing a giant swath of background knowledge to think critically about? 

And that’s not to mention day-to-day life: In the face of recent credit card information theft, can you really argue that raising the average level of American tech savvy would be a waste of time, or that we wouldn’t do well to know just a little bit more about keeping ourselves and our identities safe online? By continuing to regard programming as a superpower rather than a basic skill, we put ourselves at the mercy of those who choose to use those powers for evil. That seems like reason enough to me.


Update: When I wrote the above paragraph, I hadn’t yet seen this: Americans are, in fact, more afraid of being hacked than of being murdered. Granted, that’s based on self-reported frequency of fearing something rather than intensity of fear, and I imagine having information stolen crosses most people’s minds any time they use a debit card, or whenever they walk into Target, Home Depot, or any other recently breached business, whereas most of us have fewer day-to-day reminders that homicides happen. Still, it seems telling. Keep yourself safe!

But…isn’t programming, like, hard?

Yesterday’s post was on the potential for real-life job preparation that computer science in schools could be. There are, of course, a number of reasons to argue with that idea, some more valid than others. Over the next few days, we’ll touch on a couple of them.

One of them goes like this: “Programming is what, like, the super duper smart guys in movies do! Isn’t that way too hard for kids?!”

In a word, nope.

We’ll talk at length later about this misrepresentation of computing in entertainment and culture more broadly (I’m looking at you, Apple Geniuses) and how it perpetuates both tech fear and stereotypes. For today, though, let’s just take a second to talk about what writing code is: it’s giving a computer a set of directions to complete a task. It can be done in any of a number of programming languages, which are just that: languages. And language is a thing our brains are naturally wired for.

Sure, many programming languages have more formal structures and rigid grammars than most human languages, and we have to write new ones consciously rather than letting them naturally evolve over time. At their core, though, they’re still languages, and kids in several countries (including Vietnam, Estonia, and now the UK) are picking them right up. I get as excited as anybody about kids in the news who write apps and Minecraft mods and whatnot – and I don’t mean to sell short anyone who’s motivated enough to seek out resources and dedicated enough to stick with a project – but I’m leery of seeing them heralded as prodigies.

Before fellow linguists jump down my throat, though, let me be clear about what I’m not saying here. We’ve convinced ourselves for a long time that kids are somehow magically still better language learners than adults, which may or may not be true. A huge difference between child and adult learners, though, when it comes to computers, is the fear I mentioned before. In learning, especially language learning, we talk about the affective filter, more or less the idea that if you’re scared or stressed out or anxious, it’s way harder to learn things. Kids are better learners of programming languages not because their brains are better wired but because they haven’t learned yet that they should panic about trying.

I’d really, really like to teach the Mommy and Me of programming, more or less : workshops wherein a parent/preliterate pair create an interactive storybook or holiday card together. My suspicion is that parents who would never seek out that kind of thing for themselves or be scared that their questions would be too dumb would give it a try if it were pitched as being for their children, and then they’d be able to see firsthand that it is something kids can learn. And, of course, there’s the added bonus of demonstrating to parents that screentime can be social time with their kids rather than isolating them…but that’s another story for another day.

We Need CS Because Jobs, Part 2

Oy. Sitting down to write tonight’s post, I’m realizing, is the first time I’ve sat down (well, other than on my bike) in sixteen hours now, and the long post I’d been drafting in my head is just not going to happen tonight.

Instead, I’m going to leave you with this article from Wired that neatly ties together a number of threads from yesterday.  Remember all those tech jobs there aren’t Americans to fill? We’ve been dealing with some of that workload – quality assurance, in particular – by outsourcing it to countries like India and China. However, software testing prices overseas are rising. As overseas software testers cease to charge rock-bottom prices, the article explains, the tradeoff of low cost for inefficiencies of time differences and language barriers are becoming less worthwhile to, well, anybody with software to test.  The article profiles a handful of people working toward “urban onshoring,” an attempt to transform struggling communities by bringing tech jobs to them.

Sure, a lot of jobs still are outsourced; sure, testing may not be the most glamorous software job in the world (for the record, though, the article addresses both of those concerns). However – and this is what really grabbed me about this piece – it’s a job with a starting salary of $35,000 a year that requires only eight weeks of training, even for people without college degrees. Given that, what could students be ready to do after eight years of regular computing instruction in schools? We’ve seen a lot of push in the last decade to get more students into college; however, we’ve also seen student debt increase steadily to a national total of $1.2 trillion and the economic disparity grow rather than shrink. What if, instead of pushing everyone to go to college, we equipped them to finish high school employable in jobs more lucrative than waiting tables and making lattes?

Why CS in Schools, Part 1

As I mentioned, this is the beginning of a series on why computer science has a place in our schools, why it’s not there now, and what to do about that. So tonight, as we’re watching polls close and results get tallied, let’s talk about numbers.

Specifically, numbers related to one of the clearest reasons to expose kids to computer science: jobs.

Tech-related jobs abound, but Americans qualified to do them, well, don’t abound. Nationwide, tech jobs outnumber CS grads three to one; on the west coast (what?!) it’s sixteen to one in California and an astonishing twenty-seven to one in Washington.  We’re on track to have a million unfilled computing positions by 2020! And note especially that we’re not just talking about software companies; two thirds of computing jobs are in other fields.


Jobs of any kind going unfilled when unemployment is still at nearly six percent would be unfortunate regardless of the quality of those positions. Given salaries in computing, though, it’s downright outrageous: the 2014 list of the best-paying college majors includes information technology, computer information systems, computer science, software engineering, and computer engineering. Software engineering and IT positions are among the top ten most common for people making anywhere from $48,000 to $207,000 a year, according to NPR (follow thing link for a less blurry and more interactive version of this diagram).


Note, too, that while many other math- and science-related majors appear on the best college investment list, they don’t (other than physicians) show up in the chart of most common jobs. We’ve seen a lot of push for more STEM in schools lately, but if we’re serious about preparing our kids for the jobs of tomorrow (and, frankly, today), it’s time for that to include exposure to computer programming:


Let’s change that.

(The first and last diagram, as well as much of my professional inspiration, come from