Monday, August 26, 2013

Time to unpack "everybody learn to code"

Two articles crossed my path this morning: (1) a NYTimes editorial on the impact of technology and automation on middle-tier jobs (arguing that middle-tier jobs will need to integrate using automated data with human skills of adaptation and communication); and (2) a Slate piece from a software engineer striking back on the recent "everyone should learn to code" frenzy (roughly: quality coding is hard and people don't need to understand the details of computers to work with them).

These articles help highlight two key problems. First, each of "everybody", "learn", and "code" has wildly different meanings for different contexts and we tend to conflate them when talking about this question in general terms.  Second, the recent surge of activity around programming education for all has fixated on roughly a single answer to this question (lessons in scripting via something like Python), and that answer isn't suitable to address the challenges raised in the NYTimes piece.

The current incarnation of online coding classes can serve a particular interpretation of "everyone" and "code" well: if your job will require you to script some data or an application, knowing basic scripting is a good idea (I'm avoiding the question of instructional design/choices in many of the current tools, many of which give me great cause for concern -- that's another post for another day).  Learning basic scripting will not, however, particularly help those looking to attain jobs that blend working with automated tools and applying human skills.  Yes, those jobs require someone to be able to think about aspects of computation (what is possible, where potential consequences lie, etc), but writing scripts isn't necessarily the right way to get there.  Or, to be more precise, writing scripts for the kinds of general, application-centric activities that seem to be common in online programming classes isn't necessarily the approach to get there.

There's a huge challenge and opportunity here for computing educators to articulate contextualized learning goals for "everyone" who will need to blend their work with computational processes, and then to design instruction that meets those goals.  In being too narrow about how we think of "everybody", "learn", and "code", we're just setting ourselves up to argue without making meaningful headway towards solving a significant problem.


No comments: