Programming as the New Literacy

Computer Science Teacher
Computer Science Teacher - Thoughts and Information from Alfred Thompson

Programming as the New Literacy

  • Comments 11

Regular readers know that I have been pushing this idea of programming and computer science as being a liberal art - something that everyone should learn some thing about. Recently I came across an article by Marc Prensky that says pretty much the same thing.  One key quote is:

I am one of these last, in that I believe fluency with multiple spoken languages will continue to be important, and that multimedia, interactivity, and other game-derived devices will be increasingly significant tools for communicating twenty-first-century thought. Nonetheless, I firmly believe that the true key literacy of the new century lies outside all these domains.
 
I believe the single skill that will, above all others, distinguish a literate person is programming literacy, the ability to make digital technology do whatever, within the possible one wants it to do -- to bend digital technology to one's needs, purposes, and will, just as in the present we bend words and images. Some call this skill human-machine interaction; some call it procedural literacy. Others just call it programming.

The whole article is worth reading especially the parts where he talks about there once being a time when people did not read and write but rather hired people to do those things for them. I find that a most fascinating analogy. Does it go to far? I'm not sure it does at all.

For years we have had jokes at the expense of people who could not program their VCRs to show the correct time. Newer VCRs do not show the time and in fact get the time from external sources. But today a lot of people have DVRs to record their TV shows and one still has to do some "programming" of a sort to get them to work. Beyond that though people who work with information, numbers, text, data of any kind, are increasingly having to do some of what we call programming to get the most out if them.

We use Boolean expressions to do searches not just in databases but in Internet search engines. We use more and more complicated decision structures with our spreadsheets. I see a time when more and more applications will include the ability to customize them with programming. It may not be programming in Java or C++ and it sure will not be in COBOL but of course the concepts are largely constant.

Will the person who says "I can't program" someday find themselves in the same situation as a person who today says "I can't read?" Perhaps not to the same degree but to some degree I think it could happen. What do you think? More importantly what do your children or your students think? Send them to the article and ask them if it makes sense to them? Is is scary to them or do they think they are ready for that sort of future?

Of course the question for schools (and for parents) is, if this is indeed the future are we doing enough to prepare today's young people for it? If not, how do we fix that? OK well DreamSpark is one attempt to help but a lot more is needed in our schools.

[Note: Lots of comments and not everyone agrees. Always a good thing. Be sure to add your opinion.]

  • Programming as the new literacy is an interesting concept, but I suspect that in a world where literacy in reading and writing is diminishing at an ever increasing rate, it is problematic.  I expect that the machinery (devices, applications, etc.) will become increasingly intelligent in an effort to compensate for the decrease in the users' abilities to articulate their desires. Programming as an art (or science, or discipline) requires a fundamental understanding of problem domains and tools that is well beyond the masses' abilities and interests.  The future may be more dystopian than utopian as a result.

    DJ

  • I posted a comment (copied below) to an article posted on the CSTA web site about just this issue.  In fact, my dept. is pushing this various strategy - CS in the liberal arts tradition - in order to make in-roads with the established core disciplines.  Jury's out on whether it will work.  

    Original article: http://blog.acm.org/archives/csta/2008/02/rethinking_cs_e.html

    ----My Comment-----

    ...

    To take Dan's approach suggests going down a path that is, I think, only a slight degree away from the mere skills training we K-12 CS educators have been lamenting about for years. If you view high school as a vocational endeavor then, fine, you don't have to read the rest of this. The view Dan takes is teaching computing as a means to an end; an attempt to convince students and the community that, hey, this stuff is useful for solving real problems that might occur in your life. This is an approach that smacks of what I call the Computer Science persecution complex. To succumb to it means that CS will remain mired in the "non-academic classes" category in k-12 schools. Dan brings up the lamentable car analogy in order to equate CS education with what? Driver's Ed.? This is what I'm talking about.

    I think CS needs to be taught in the tradition of liberal arts. We don't teach CS because it's merely useful. We also don't teach it (I agree with Dan on this one) in order to turn out legions of hard-core CS types. Rather we should teach CS because CS provides a way to think about and organize the world in a way currently untapped by the traditional "core" of academic classes (Math, English, History, Science, Language).

    Do you hear English teachers trying to convince people that it's worthwhile to study literature deeply because those skills will be useful to them later in life? Or math teachers saying it's worthwhile to study calculus to prepare students for all of the calculus problems they're likely to encounter in life after school (likely, zero)? No.

    In the liberal arts tradition, it's useful to study these things deeply because you have to really dive in in order to access the mode of thinking unique to that discipline. Being armed with an arsenal of thinking modes is what makes us better thinkers and better people. The joy of education is to move beyond the utilitarian nature of the subject and to "get your hands dirty" with the real stuff that makes the discipline in the first place.

    The discipline of Computer Science encompasses the big ideas of our time - the biggest ideas since the Industrial Revolution. These ideas are profound and deep. How can you appreciate the problems you're solving with the computer if you've never tried programming something? How can you appreciate a program if you've never wrestled with the idea of an electronic logic device? How can you appreciate that without thinking about the digital representation of information? etc. Dan's "technology story" IS appropriate to teach students, and I don't think it's off-putting. I've found teenagers to be quite eager to demystify the machines that are so integral to their lives.

    As such, I agree with Dan that CS has been on the sidelines long enough. It's time to get in the fray, but we face resistance from the established cores of education. My view is that the way in is to stop trying to convince people CS is merely useful. The way in is to convince people that they need to have experienced what it's like to *think* as a computer scientist. It is difficult to argue with the notion that students need to be in touch with the big and deep ideas that have transformed the age we live in.

    In 1907 John Dewey wrote an essay called "The School and Society." He opens by saying, "The change that overshadows and even controls all others is the industrial one...That this change should not affect education in some other than a superficial way is inconceivable." That was 100 years ago. If you replace "industrial" with "technological" you have Dewey for the 21st century. This is the path we should follow.

    Baker Franke

    Computer Science Dept.

    The University of Chicago Laboratory Schools

  • Brian Harvey, UC Berkeley, 1983:

    http://www.cs.berkeley.edu/~bh/stop.html

    I find this a much more reasonable approach.

  • Ben, I disagree.

    That article from 1983 is correct in sentiment, but we know so much more now about what a computer is and more importantly what it *means* in our lives.  Among other things, in 1983 it would have been terribly difficult to predict the interconnected-ness of all the machines we use.

    As Fadi Deek points out in his writing related to the ACM K-12 task force: the car analogy falls flat because a car (or the register at McDonald's, your ipod, or any individual piece of software) are all single-purpose devices.  

    Although the inner workings are complex, ultimately you know what the fundamental purpose of a car is - to get you from point A to B.  This understanding of its fundamental purpose makes its high level operation possible, and even easy.

    So, turn this on computing education.  What's the fundamental purpose of a computer?  This is a tougher question to answer.  Well, a computer's fundamental purpose is to process information.  *What* information and *how* it needs to be processed is the REAL question.  And to come up with the correct answers depends both on the context of the IT-related task you're presented with and your understanding of the fundamental underpinnings of the machine as an information processor.  

    The "Literacy" that students need is really the ability to adapt to new technologies or new uses of the machine.  You can't adapt, I argue, without understanding some of the foundations of computer science.  Teaching use of the computer as a tool in various disciplines should be left to the domain experts not the CS teachers.  But to really operate as a citizen in the digital world you need to be comfortable when confronted with information processing tasks and see solutions to those problems in terms of computing, not in spite of them.

  • Hello

    I was interested in your comments about programming skills being the 21c version of basic literacy. I agree with this and spent some time developing an easy-to-use programming language called Ubercode. This was an alternative to languages such as Basic which had unhelpful features such as goto statements, unstructured function calls etc. Although as it turns out Basic has improved somewhat and beginners feel they should learn a language called 'Basic' :)

    Anyway I would like to know if you think there is any need for other beginner languages, or if the newer versions of VB.NET are simple enough for beginners. If you're interested there is an intro to Ubercode at http://www.ubercode.com/start-to-program.html and I would be happy to answer any questions.

    Kind regards, Will Rayer

  • Will, I do like new  simple languages. I've looked at Alice, Scratch, Phrogram, Leopard and several others. This is the first I have heard of Ubercode and I will give it a good look.

  • It's interesting and strange for me to argue this position as a programmer, holder of a computer science degree, and computer science educator -- but, nonetheless, I think there is a great risk in mistaking our own interests, training, and way of looking at the world for universal truth and significance.

    Here's what I believe: The general population does not need to understand data structures, loops, or the idea of a compiler in order to adapt effectively to well-designed interfaces for applying computational power.  Consider the process of searching with Google, or creating a pivot table in Excel or compositing digital video.  I know people who are very good at all of these things who are not programmers.

    I also know that my programming background makes me see and understand these computational processes in particular way.  But I do not think everyone must see as I see to "operate as a citizen".  Now, I think people do all need to understand the concept of variables and the concept of functions.  But that's algebra or, at most, a very boring programming language.  Really, we should talk about the general population needing some basic numeracy skills and statistical sense, before we even begin talking about how they ought to learn computer science.

    Perhaps our differences are simply in scope.  I am suggesting that it would be a mistake to force everyone at a given college to take a programming class, whereas it would not be such a bad idea for everyone there to take, say, a world literature class.  I appreciate the idea that CS could be used as a tool for teaching modalities of thought, much as traditional "core" subjects are.  I believe that some very significant changes to the curriculum would be required, sacrificing some of the overwhelming practicality and utility of computer programming to gain more universal conceptual scope.  After investing all that work, I'm not sure it's much better than approaching the same types of ideas via, say, a discrete math or calculus course.  What are your thoughts?

  • Ben, perhaps we just disagree about scope, but I think the language we use also makes a big difference.  I understand your point about tempering our own interests against what's good for the masses, and I believe I have.  My worry about emphasizing the utility of CS is that it will forever be relegated as a non-academic subject.  Also, emphasizing the utility is counter to education in the liberal arts tradition for which I advocate.

    My belief is that there are ideas unique to CS, or certainly made more prevalent by CS in the information age, that don't come across even in a discrete math course.  (At the very least I would have to argue that the concepts covered in a Discrete math course (that pertain to CS) are better illuminated in CS a course -

    made less abstract.)

    Big Ideas that are unique to CS that I think everyone would benefit from grappling with include:

    1. The digital representation of information.  This, of course, is fundamental to all computing.

    2. The representation and structure of information.

    3. Algorithmic methods to handle information

    On point 2, I suppose we disagree because I do think every student should think about data structures.  Not necessarily the canonical structures you learn in your typically CS course, but the *concept* of structuring information is so vital to the technological/information age, that I think all students should have thought about it and have some practice throughout their primary and secondary schooling and certainly before graduating from high school.

    Now, you might say that I'm just talking about information science, (or even library science in this country) which, to a previous generation, was a very specialized skill.  But information science as it pertains to CS is a bit different since we now need to think about structuring information and data with an eye toward how a machine can processes it easily and efficiently, not to mention the question of exactly *how* or *what* "easy and efficient" processing actually means (i.e. algorithms).

    The success of students in the future, I believe, will be tied to their ability to grapple with massive amounts of data and make sense of it - this is true for any walk of life.  The sheer volume of data that is permeating virtually everything is the most significant change to people's lives in the last 100 years.  An able person must be able to understand how to handle and process (or structure so that a machine can process) an enormous amount of information.  This is true now in almost every science, business, art...you name it.

    Now, I don't think students *need* to program to learn some of these things, nor do we have to "put them through" a traditional CS course.  I think there's a lot of room to be creative with how we get children to interact and play with these ideas.  The digital representation of information is just an encoding scheme.  There are many fun and creative ways to get children to develop their own information encodings.  You don't even need a computer.

    Similarly, there are many ways you can get children to think about the structure of information, as well as algorithms, without a computer

    So now I've done it.  I started out by saying I didn't want to focus on the utility of CS, and then I went on to do just that, so let me make the larger point:

    I don't think students need CS in what we computer scientists think of as "traditional" CS.  However, the information age has brought some profound changes to the way things work and this should affect our children's education in more than a superficial way.  Thus, the *reason* to study computer science is not to enable all children to become computer scientists, but to enable children to make more and better sense of the world around them.  We teach the big ideas of CS in order to make our students better thinkers; to enable them to see intersections between CS and other disciplines.  Yes, there is overlap between CS and other disciplines, OF COURSE THERE IS! in the same way that there are intersections between math and physics, english and history, and well, pretty much anything you want to draw intersections between.

    This is the spirit of the liberal arts education.  To open the mind and spark many modes of thinking simultaneously.  Really, it's what makes us human.

  • I really think Alfred should go to a third world country to visite a school.  After that he can tell us if programming can still be a new Literacy.

    A.D.

  • Well I note that programming software is included with Nick Negraponte's XO computer (the one laptop computer project) and he has visited third world countries. I don't think programming replaces anything BTW. It is additive on reading, writing and math. In fact I believe that it supports all three.

Page 1 of 1 (11 items)