Keyboards and Assembly Lines

There’s some great writing out there on how technology interacts with education, but every now and then I see something that really misses the mark.

This episode: Edukwest, “With the Coding Hype Keyboards Become the New Assembly Lines”:

With the technology space in the broadest sense being probably the only space in which new jobs can be created in the coming decades a new hype is making the rounds in education: teach kids, better toddlers, how to code. This will solve all our problems, like MOOCs did.

…I don’t think that people get the right idea of what this technology industry led hype is all about. It’s not about providing kids with a better future, it’s about ensuring a pool of cheap workers in the next decade and beyond.

The bottom line is that for Facebook, Google, Microsoft and all the others keyboards are the new Tin Lizzy assembly lines and they need skilled, cheap workers to fill them. Nothing less and surely nothing more. The moment coding becomes a basic skill like reading and writing the only thing that will give you an edge over your fellow working bees are either entrepreneurial skills or creativity, two aspects that the education system is ignoring completely. Maybe it is time to launch a campaign.

The author here misunderstands the push for earlier technical education in students.

“Coding” isn’t a binary skill

I hope someday that basic programming concepts are taught the same way basic math, English, and social studies concepts are: in scaffolded, age-appropriate chunks that build on themselves over time.

Taking Algebra in 8th grade does not mean that you have to do multivariate calculus at your job ten years down the line, but I wouldn’t hire somebody for any business position who couldn’t reason around concepts like slopes, intercepts, and dependent variables.

I think of coding as a spectrum, and in terms of building early competency in students, any of these are steps forward:

  • Using conditional (“if…then…”) logic in Excel
  • Getting a process to iterate multiple times to solve a problem.
  • Using basic SQL paradigms like JOIN (or even VLOOKUP)
  • Running basic descriptive statistics
  • Trying to plug multiple components or processes into each other with something like Zapier or IFTTT.

I see many bright students leave a 12th-grade calculus class, able to find integrals by hand, but unable to match up two spreadsheets on a common key. That’s sad: we need to value using tech to problem-solve as a fundamental K-12 skillset.

Coding is democratic

With the advent of web-based editors, Chromebooks, JSFiddle, and other lightweight, web-based programming tools, as well as Codecademy, Khan Academy, and other online tutorials, programming is open to anybody, anywhere, with very few resources required. If a school can scrape together a computer lab, or take a trip to a public library, its students can start to learn.

Furthermore, at least at the early stages (again, we’re building familiarity, not training senior architects), programming makes good pedagogy easy.

A huge part of Teach for America’s training framework covers managing effective, prompt, and ongoing assessment and feedback.

The faster students get feedback on their performance, the faster, better, and more happily they learn. Get something wrong on a low-stakes quiz and find out two minutes later? It’s simple and painless to try it again. Get a paper back a week after submission with a big “F” on it? Not only is there a lot more mental anguish, but learning is lost– the revision and iteration doesn’t happen. On the flip side, rapid, positive feedback accelerates mastery and small wins keep learners happy and motivated.

Fast feedback is built into programming by nature. Something either works, or it doesn’t,
and modern tools like the browser console, Light Table, requestbin, etc. make it easy to understand where the error lies. Some of the better tutorial software even helps students through the early stages by looking for those failures and intelligently providing hints to succeed. Finally, when it comes to searching for help, it’s easy to google a particular error string or post on Stack Overflow or ask a mentor: “I did this, and this came out. What do I need to change?”

Necessary caveat: the answers are not nearly as cut-and-dry when doing production engineering, but we’re a long ways off from having that problem.

Coding is creative

This paragraph reinforces a common misunderstanding– that programming is rote work:

The moment coding becomes a basic skill like reading and writing the only thing that will give you an edge over your fellow working bees are either entrepreneurial skills or creativity, two aspects that the education system is ignoring completely.

Software development, as a hobby, academic study, or job, is a really creative and collaborative pursuit. Engineers spend a lot of their time coding. They also spend a lot of time working with others, brainstorming, designing systems, and reviewing others’ work. While there are savant-maverick types that can get by with barely any interpersonal skills, they’re a rarity within companies– your average successful engineer is as collaborative and creative as any other employee.

Writing an application is also a great entrepreneurial exercise.

At its core, being an entrepreneur is about creating value for others, and done right, is basically testing assumptions you have about peoples’ problems and potential solutions until you find something they (or someone) will pay for.

Software is great for this because the cost of iteration (for kids, at least) is basically zero. Did something wrong? Revert your last commit. Want to start over? Make a new file.

Not that coding is by any means the only creative or entrepreneurial activity kids should be doing. I think design thinking, customer development, and basic unit economics should be taught from elementary school, and school projects should look more like JIRA boards than three-ring binders.

Every company is a tech company. Every job is a tech job.

First off, there’s nothing wrong wrong with building education that supports underserved talent markets. Hasn’t improving STEM education in America been the rallying cry for education reform for the past several decades? The push to teach code is a reaction to the fact that companies desperately need engineers and technology-competent people, and the realization that we simply don’t have enough right now.

That said, I’m not a professional engineer. I work very closely with engineers, and I have a few front-end commits in the PD codebase, but I’d need a lot (lot) more learning to get to the point where I’d contributing meaningfully to a production application.

Over the years, though, every piece of technical knowledge I’ve gained has multiplied my effectiveness in the work I do.

As a teacher, simple conditional excel formulas helped me measure my students’ learning. Working on a customer support team, VB scripts helped normalize data we had to import for customers, saving hours of manual spreadsheet work. And in Product Management, SQL and a basic knowledge of programming and web development are incredibly helpful, if not absolutely necessary to succeed. In almost every job, more competence with technology produces better opportunities.

This is a privilege issue.

If you have middle-class parents, likely in the technology sector themselves, tech knowledge often bubbles up to the kids through osmosis, in the same way that middle-class kids tend to do okay in English courses even with little or low-quality instruction.

Not teaching code in schools restricts the people learning it to:
* Those with parents who know how to teach it, or at least where to look for resources
* Those with the tech resources to start to do something with it
* Those with the free time and/or proximity to classes
* Those with the self-confidence to start

Teaching tech in schools is about getting everyone on a level playing field, and reducing the connection between your choices later in life and who you happened to be born to. Kids don’t have to become programmers, in the same way that studying Egypt in 8th grade doesn’t mean you have to become an ancient-world historian. But knowing the contours of the technology world, knowing the language and of power, and being able to engage with technical colleagues and allies is breaking down barriers and closing the outcomes gap.

When I had lab time with my 7th and 8th-graders at Aptos MS, I showed them programming lessons on both Codecademy and Khan Academy, as well as did some very basic classroom lessons on variables, operators, if-else functions, and some other programming basics. Some of them took to it immediately, blazing through the lessons and using the knowledge they found to solve problems they saw around them (one 8th grader wrote a standardized test-prep program in python). Others saw it as a curiosity, something to be filed away with geometric proofs, the American revolution, Huckleberry Finn, and everything else that simmers in the back of your head.

But my kids know programming is out there, they know it’s not scary, and they know it’s a useful tool they can access later in. And that’s a mindset we need to build for every child as early as possible.