Dijkstra’s Truths about Computing Education Aren’t: The many kinds of programming

December 7, 2020 at 7:00 am 6 comments

ACM Turing Award laureate Edsger Dijkstra had several popular pieces about computer science education. I did my Blog@CACM post on one of these (see post here), “On the cruelty of really teaching computer science,” which may be the most-cited computing education paper ever. Modern learning sciences and computing education research have shown him to be mostly wrong. Dijkstra encouraged us to avoid metaphor in learning the “radical novelty” of computing, which we now know is likely impossible. Instead, the study of metaphor in computing education gives us new insights into how we learn and teach about programming. So far, I’m not aware of any evidence of anyone teaching or learning CS without metaphor.

After my Blog@CACM post, I learned on Twitter about Briana Bettin’s dissertation about metaphors in CS (see link here). Briana considers the potential damage from Dijkstra’s essay on computing education. How many CS teachers think that analogy and metaphors are bad, citing Dijkstra, when the reality is that they are critical?

The second most popular of his computing education essays is “How do we tell truths that might hurt?” (See link here). This essay is known for zingers like:

It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.

He goes on to critique those who use social science methods and anthropomorphic terms when describing computing. He’s wrong about those, too (as I described in the Blog@CACM post), but I’ll just take up the Basic comment here.

Today, we can consider Dijkstra’s comments in light of research on brain plasticity (see example article here). It wasn’t until 2002 that we had evidence of how even adult brains can grow and reorganize their neural networks. We can always learn and regenerate, even as adults. Changing minds is always hard. The way to achieve change is through motivating change — being able to show that change is in the person’s best interest (see example here). Maybe people stick with Basic (or for me, with HyperTalk and Smalltalk) because the options aren’t obviously better enough to overcome inertia. The onus isn’t on the adult learner to change. It’s on the teacher to motivate change.

There are computer scientists, like Dijkstra, who believe that innate differences separate those who can program from those who can not, a difference that is sometimes called the “Geek Gene.” An interview with Donald Knuth (another Turing Award laureate) last year quoted him saying that only one person in 50 will “groove with programming” (see interview here). We have a lot of evidence that there is no Geek Gene (see this blog post here), i.e., we have note yet identified innate differences that prevent someone from learning to program. Good teaching overcomes many innate differences (see blog post here making this argument).

Of course, there are innate differences between people, but that fact doesn’t have to limit who can program. Computers are the most flexible medium that humans have ever created. To argue that only a small percentage of people can “groove with programming” or that learning a specific programming language “mentally mutilates” is to define programming in a very narrow way. There are lots of activities that are programming. Remember that most Scratch programs have only Forever loops (if any loops at all), and Bootstrap:Algebra doesn’t have students write structures to control repetition. Students are still programming in Scratch and Bootstrap:Algebra. Maybe only one in 50 will be able to read and understand all of Knuth’s The Art of Computer Programming (I’m not one of those), and maybe people who programmed in Basic are unlikely to delve into Dijkstra’s ideas about concurrent and distributed programming (that’s me again). Let’s accept a wide range of abilities and interests (and endpoints) without denigrating those who will learn and work differently.

Entry filed under: Uncategorized. Tags: , , .

Purpose-first programming: A programming learning approach for learners who care most about what code achieves: Katie Cunningham’s Defense The goal of the first CS course should be to promote confidence if we’re going to increase diversity in CS: Paying off on a bet

6 Comments Add your own

  • 1. orcmid  |  December 7, 2020 at 11:12 am

    I am willing to align around this with one qualification. Some of Dijkstra’s papers are valuable for what problems he encountered and how he brought them to heal. To name just two: the invention of semaphores in one case, and the promotion of guarded operations as a means of assuring termination and demonstrating achievement of a desired representation.

    It is not to be expected that everyone deal with these, or maybe even know much about them these days. There remain situations in which these and other contributions matter. It would be strange for software engineering discipline to ignore them.

    Dijkstra’s theses about how programming should be taught and learned, and what computer science is or is not, do not stand up in the face of our historical and contemporary experience and the drive to popularization. Nevertheless, Dijkstra had strong concerns about the chasing of complexity and how that ultimately leads to unfortunate bit rot (or bankruptcy by technical debt). His notion of how these matters are to be addressed in software-development education and practice may not hold up. The issues remain.

    Reply
    • 2. Mark Guzdial  |  December 7, 2020 at 11:35 am

      I completely agree that Dijkstra made important contributions — he deserved his Turing Award. I’m not recommending that software engineering or anyone else ignore them. I don’t speak as a software engineer. I critique what he wrote about education. From my perspective as an education researcher, he was wrong.

      Reply
  • 3. Bryn Jeffries  |  December 7, 2020 at 5:03 pm

    The idea of innate ability is common to many subjects, particularly in STEM, and it can come from the students as much as the teachers. I was always saddened by the number of people, upon my telling them I was a physicist, who would promptly tell me that they had always been bad a physics. And then there’s always the peril of linking innate ability to demographic differences…

    Reply
  • 4. Richard Millwood  |  December 9, 2020 at 1:11 pm

    I am tempted to remark, why should a successful software engineer and computer scientist be good at education? What is in their education to support that, apart from having been educated in their own way?

    Also amused that you use “the reality is” when you ask: “How many CS teachers think that analogy and metaphors are bad, citing Dijkstra, when the reality is that they are critical?”.

    Perhaps we should ask CS teachers, and at the same moment, what do they think alternative is, and how real is it?

    But I’d also like to add, that analogy and metaphor are not simply teaching tools, they are the creative stuff of learners’ imaginative response to constructively make sense of computing. Surely we hope to steer them to the most effective analagy and metaphor?

    Reply
    • 5. orcmid  |  December 9, 2020 at 3:18 pm

      It is valuable to note that the first generation of Turing Award recipients (1966-1985) were operating in a regime where there was no K-12 STEM emphasis and CS Education Research was hardly an organized thing. It did not prevent there being a fair amount of soap-boxing in the same interval. With regard to metaphor, there was some attention to Christopher Alexander’s “Notes on the Synthesis of Form” and “A Pattern Language.” CS was at a collegiate and vocational level.

      The second generation would include disparate views of Alan Kaye and of Peter Naur (recognized late in 2005) along with the serious emergence of computers as consumer devices having GUI housed operating systems and commodity software. The public Internet was blossoming.

      After that, there was greater concern for affordance and the manner in which computer systems were evocative as instruments of human activity. Here metaphor is very important for its explanatory power. It is also important to avoid attributions of agency that remove the instrument’s behavior (!) from human responsibility for how people are effected by them, especially when experiencing some sort of breakdown (including a metaphor clash) having no means of remedy.

      Dijkstra was not pointing at this. Dijkstra’s concern was about software badly written and essentially impossible to reason about and hence, to maintain (i.e., repair and extend) in a manner that preserves whatever the purposive use was intended to be. He was also talking about a very different notions of digital computation, software development, and computer science than the evolved forms in today’s world. The presumption of solutions to technology-related problems via more-and-better technology was not original with Dijkstra and continues unabated.

      The pummeling of BASIC is not unlike the pummeling of “Von Neumann style” in John Backus’s false contrast.

      Reply
  • 6. Mohana Seelan  |  December 21, 2020 at 8:06 pm

    “There are computer scientists, like Dijkstra, who believe that innate differences separate those who can program from those who can not, a difference that is sometimes called the “Geek Gene.””

    The first thought that comes to mind is that Dijkstra was the kind of man who did not believe in growth-mindset learning, like many of my fellow STEM peers. As you’ve pointed out, research on brain plasticity and research by Carol Dwek point to the contrary.

    Humans tend to distill information into categories and labels (potentially why stereotyping/prejudice is so hard to consciously address), and many of us like to tell ourselves that we’re simply not good at something. Maybe we do this because it’s easier to do that than expend energy on something we don’t like. Perhaps Dijkstra was privileged to have naturally excelled at a subject that turned out to be so influential, but the same cannot be said about everyone. As programming becomes more essential, the broad and more diverse types of students aren’t just the Dijkstra types.

    “Let’s accept a wide range of abilities and interests (and endpoints) without denigrating those who will learn and work differently.”

    I completely agree with this. I have found that most beginning programmers, many of whom are first-gen students, benefit more from normalizing struggle and growth than spotlighting “natural” ability. In my opinion, students respond most positively to mentors (instructors/TAs/etc.) that have shared their own challenges with programming or any subject where they did not have the “Geek Gene.”

    Reply

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Trackback this post  |  Subscribe to the comments via RSS Feed


Enter your email address to follow this blog and receive notifications of new posts by email.

Join 9,004 other followers

Feeds

Recent Posts

Blog Stats

  • 1,875,390 hits
December 2020
M T W T F S S
 123456
78910111213
14151617181920
21222324252627
28293031  

CS Teaching Tips


%d bloggers like this: