In the Chronicle: What counts as “programming”? Will it be different for “the rest of us”?

April 18, 2012 at 10:38 am 17 comments

Interesting question, beyond asking what is computational thinking: If you require “programming,” what counts as “programming”?  The Chronicle asks, does typesetting in LaTeX count?

I’m interested in how the non-CS community will answer that question.  What will programming look like for “everyone else,” the non-CS majors, those who aren’t professional software developers?  I’m fascinated by CSound, the music and sound synthesis language.  There are no looping structures, just go-to.  If your first thought is “it looks like assembly language,” check your CS-informed biases at the door, please.  If you don’t know what “assembly language” is, what is CSound?  Almost none of the examples include looping or conditionals.  But for me, it’s definitely programming.  What is our bottomline of what is programming, and in particular, for what communities of practice?

We’ve discussed this before here at the blog, and I suggested that the definition of “programming” be broadly defined to include any creative work that gets a computer to work beyond its basic feature set. So, for example, learning to use MS Word to write a paper — while that’s important — would not count as “programming”, but learning to typeset a research paper in LATEX with a bibliography would (probably) count. Georgia Tech’s approach of using of media computation would seem especially attractive to students who wouldn’t normally count themselves among CS enthusiasts.

via Making Computer Science a Requirement? – Casting Out Nines – The Chronicle of Higher Education.

Entry filed under: Uncategorized. Tags: , , .

Mathematics Awareness Month is Computational Thinking month Massive open, on-line courses: With the faculty, or against the faculty?

17 Comments Add your own

  • 1. Andy Ko  |  April 18, 2012 at 11:00 am

    I’ve always liked Alan Blackwell’s definition from his VL/HCC 202 paper. In fewer words, programming is the use of a notation to express the future behavior of a computer. This is in contrast to other forms of computer use, which involve direct manipulation and immediate feedback.

    This definition is more permissive than most. People can program with LaTeX and HTML because they are notations used to express the future appearance of a document, whereas Word can only be used to express the current appearance (though Word’s cross-references start to blur this distinction). The definition doesn’t include things like modifying parameters in configuration dialogs (which affect the future behavior of a computer), because these dialogs lack a notation.

    From a computing education perspective, this definition is useful. Reasoning about and devising future behavior in a notation requires the precision of thought and disciplined planning that’s implied throughout discourse on computational thinking. Programming, by this definition, isn’t the only ways to engage these skills, but it’s one that is certainly empowering, especially since the definition accommodates nearly any domain-specific language such as CSound and anything else.

    • 2. Cecily  |  April 18, 2012 at 11:32 am

      I __LIKE__ this definition, on a lot of different levels. I agree that notation is a critical element of programming, and I also like the implications of a “future appearance”. I am also glad that it would include handcoding HTML, an important programming skill in my opinion, but would exclude using Dreamweaver to drag and drop a WYSIWIG web page.

    • 3. Mark Guzdial  |  April 18, 2012 at 2:36 pm

      I like that this definition includes the notion of agency, which we know is a big problem in learning to program. “It’s not going to be me who is going to execute the instructions. The agent will not know what I know, will not understand what I wanted to have happen.” The notation is for the computer, and it will execute the notation sometime in the future.

    • 4. nickfalkner  |  April 19, 2012 at 9:39 am

      I think that’s a great definition. To get around the ‘cross-referencing’ blur, I suspect we would have to decide if the abstract concept of naming something is considered programming. However, it is 11pm here so that may not be the most cogent of thoughts.

  • 5. alanone1  |  April 18, 2012 at 11:06 am

    I think these are good examples why “programming” per se is not a good category: too many ways to do it that have below threshold concepts.

    Much better to identify the important concepts and then find or make a kind of programming that promotes illumination and understanding of the important concepts



    • 6. chaikens  |  April 18, 2012 at 12:22 pm

      I agree… One of the threshold concepts is that the programmed behavior depends on and changes the state of stored and mostly invisible information. As long as there are precisely understandable rules for what the state is, how it changes, and how an expression of the program controls the behavior, how formal is the programming language I think is less important.


  • 7. Thad  |  April 18, 2012 at 12:19 pm

    I don’t usually try to defend the ignorant masses (meaning those who use Office), but it’s a fine line when we say LaTeX is programming but Word is not. Does our definition allow us to omit Excel while still including LaTex?

    • 8. gasstationwithoutpumps  |  April 18, 2012 at 2:54 pm

      Excel programming is programming, but data entry in a table is not.

      I’m a bit dubious about LaTeX as programming—although it is certainly possible to do things in LaTeX that qualify as programming, most users are just doing typing in templates others have provided.

      Csound is a blast from the past, though. It looks a lot like the score language that CCRMA was using in the late 1970s for digital synthesis of music.

    • 9. chaikens  |  April 18, 2012 at 4:41 pm

      Most serious software today, including Word and Excel, but also Photoshop, 3D modeling/animation, etc, and free/open source variants, have scripting interfaces. Not-just copying use of those certainly qualifies as programming. A good reason to teach more people programming is help them better use today’s general and specialized software when they become professionals.

  • 10. Christian  |  April 19, 2012 at 1:33 am

    LaTeX is just a bunch of TeX macros and TeX is Turing complete (a friend of mine wrote an evaluator for the lambda-calculus in TeX), so LaTeX is a programming language in all its generality. Now, there are programming languages that are not Turing complete, like total functional languages, including Gallina (Coq) and Epigram, or regular expressions.

    My personal criteria pour deciding if a language is a programming language are: (1) use of a formal notation (grammar); (2) recursion (even bridled to ensure termination) and conditionals or, equivalently, loops, or gotos+conditionals; (3) a semantics written at least in excellent English (see the ALGOL 60 report), at best, a formal semantics.

    Notice that I don’t even require the actual existence of an interpreter for the language in question, just like Latin is a human language with no native speaker. I also don’t care about the apparent look of what is computed. For instance, PostScript is a Turing complete language.

    Perhaps the underlying characteristic concept of a programming language is a mechanism for feedback: the control flow should be able to loop.

    I don’t know enough of HTML, but I would say that it is not a programming language. It may be a data specification language, like ASN.1 in telecommunications. There is nothing wrong with that, and these languages can be extremely difficult to master.

    • 11. gasstationwithoutpumps  |  April 19, 2012 at 2:22 am

      The question isn’t whether LaTeX is a programming language (it clearly is), but whether teaching students to format documents using LaTeX teaches them anything about programming. I would argue that it only does in fairly minor ways—like “a notation to express the future behavior of a computer”. Most students using LaTeX to format a document will be just typing into copied templates. That’s ritual magic, not programming.

      • 12. Christian  |  April 19, 2012 at 7:23 am

        I totally agree.

      • 13. nickfalkner  |  April 19, 2012 at 9:43 am

        Indeed. The ability to deconstruct and reinterpret the symbols is vital, as it allows the translation of abstract procedure to algorithm to code. A template based approach is far too restrictive.

        As an aside, I am working on some projects involving large-scale automated network configuration, to address some major policy-into-reality issues at the international ISP level and the use of ‘magical template glue’ to try and assemble working BGP (or MPLS, OSPF) configurations is widespread. Rather than working on determining network ‘atoms’ and a grammar for their assembly, templates are the more usual resort. And, unsurprisingly, this only allows you to assemble templates in fixed ways, with no real span of the solution space because the bases aren’t bases.

  • 14. chaikens  |  April 19, 2012 at 10:10 am

    The comments and this being a CS Education blog lead to: Can we classify programming-like languages or technologies in terms of whether skill in one of them facilitates learning demonstrable skills in others? And how strong is the transferral, and perhaps when is it negative (as Dijkstra said: “The use of COBOL cripples the mind”)

    Reminds me that a manager once told me it is easier to train employees who program in C to program in Java, but not vise-versa.


    • 15. Mark Guzdial  |  April 19, 2012 at 10:15 am

      Great comment, Seth — agreed! I just finished reading Juha Sorva’s thesis, and I was struck again about how important it is for students to develop some strong mental model of the notional model of the computer. That can transfer, but *not* getting a mental model cannot transfer. In other words: It’s better to learn something well, than a broad stroke (all of Java or Python, anyone?) but not really understanding anything at the level that a student could predict behavior. (And I wish we’d stop quoting that Dijkstra paper. Do any of his claims have any empirical support?)

      • 16. chaikens  |  April 19, 2012 at 12:02 pm

        I agree about Dijkstra’s unsupported railings. But investigating how misconceptions are learned would be interesting.

  • […] and it’s on the path, but it’s not the final goal.  I really do mean programming in Andy Ko’s sense and for all the reasons that Alan Perlis said.  The ability to define processes for an insanely […]


Leave a Reply

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

You are commenting using your 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 10,184 other subscribers


Recent Posts

Blog Stats

  • 2,054,191 hits
April 2012

CS Teaching Tips

%d bloggers like this: