What are the Fiction and Non-Fiction Equivalents of Computer Science?

I commented yesterday that I wanted to talk about something covered in Mark’s blog, namely if it was possible to create an analogy between Common Core standards in different disciplines with English Language Arts and CS as the two exemplars. In particular, Mark pondered, and I quote him verbatim:

”Students should read as much nonfiction as fiction.”  What does that mean in terms of the notations of computing? Students should read as many program proofs as programs?  Students should read as much code as comments?

This a great question and I’m not sure that I have much of an answer but I’ve been enjoying thinking about it. We bandy the terms syntax and semantics around in Computer Science a lot: the legal structures of the programs we write and the meanings of the components and the programs. Is it even meaningful to talk about fiction and non-fiction in these terms and where do these fit? I’ve gone in a slightly different direction from Mark but I hope to bring it back to his suggestions later on.

I’m not an English specialist, so please forgive me or provide constructive guidance as you need to, but both fiction and non-fiction rely upon the same syntactic elements and the same semantic elements in linguistic terms – so the fact that we must have legal programs with well-defined syntax and semantics pose no obstacle to a fictional/non-fictional interpretation.

Forgive me as I go to Wikipedia for definitions for fiction and non-fiction for a moment:

“Non-fiction (or nonfiction) is the form of any narrativeaccount, or other communicative work whose assertions and descriptions are understood to be factual.” (Warning, embedded Wikipedia links)

“Fiction is the form of any narrative or informative work that deals, in part or in whole, with information or events that are not factual, but rather, imaginary—that is, invented by the author” (Again, beware Wikipedia).

Now here we can start to see something that we can get our teeth into. Many computer programs model reality and are computerised representation of concrete systems, while others may have no physical analogue at all or model a system that has never or may never exist. Are our simulations and emulations of large-scale system non-fiction? If so, is a virtual reality fictional because it has never existed or non-fictional because we are simulating realistic gravity? (But, of course, fiction is often written in a real world setting but with imaginary elements.)

From a software engineering perspective, I can see an advantage to making statements regarding abstract representations and concrete analogues, much as I can see a separation in graphics and game design between narrative/event engine construction and the physics engine underneath.

Is this enough of a separation? Mark’s comments on proof versus program is an interesting one: if we had an idea (an author’s creation) then it is a fiction until we can determine that it exists, but proof or implementation provides this proof of existence. In my mind, a proof and a program are both non-fiction in terms of their reification, but the idea that they span may still be fictional. Comments versus code is also very interesting – comments do not change the behaviour of code but explain, from the author’s mind, what has happened. (Given some student code and comment combinations, I can happily see a code as non-fiction, comment as fiction modality – or even comment as magical reality!)

Of course, this is all an enjoyable mental exercise, but what can I take from this and use in my teaching. Is there a particular set of code or comments that students should read for maximum benefit and can we make a separation that, even if not partitioned so neatly across two sets, gives us the idea of what constitutes a balanced diet of the products of our discipline?

I’d love to see some discussion on this but, if nothing here, then I’m happy to buy the first round of drinks at HERDSA or ICER to start a really good conversation going!

2 Comments on “What are the Fiction and Non-Fiction Equivalents of Computer Science?”

  1. Alan Fekete says:

    I think the essential message from the English curriculum is not “students need to read both true and false material”; rather, in English there are two different genres which need such totally different skills and attitudes, so students should experience both in large amounts [and implicitly, that school curricula have erred in over-emphasising the creative self-expression side, rather than the inform/persuade side that is so important a form of communication in the adult world]. In CS, I would say the essentially equivalent notion is that there is programming-from-scratch, and there is programming-in-a-legacy-system, and that students need plenty of experience of each sort so they learn skills and attitudes for both. Teaching programming in the context of modifications/extensions to a large existing code-base is well established tradition; Bertrand Meyer’s “inverted curriculum” (SIGCSE’06) is a wonderful argument for this, demonstrated in his great intro textbook A Touch of Class (http://touch.ethz.ch/).


    • nickfalkner says:

      Thank you, Alan, for your comment. My apologies for not replying sooner but I wanted to respond to it properly and I’ve been a little short on time. I think your perspective is very insightful in terms of the research load requisite in non-fiction, compared with the focus on creativity and expression in fiction. From that approach, no-code-base and large-code-base certainly mirror the fiction/non-fiction divide. I haven’t read Meyer’s book, although I’m familiar with the underlying work and the inverted curriculum, but I look forward to doing so very soon.

      Thank you again for taking the time to comment and for providing such a thoughtful response!


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 )

Facebook photo

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

Connecting to %s