Turing on programming

The process of constructing instruction tables should be very fascinating. There need be no real danger of it ever becoming a drudge, for any processes that are quite mechanical may be turned over to the machine itself.

– Turing, A. M., 1946, Proposed electronic calculator, report for National Physical Laboratory, Teddington

So was Turing wrong, or are we just doing it wrong?

This entry was posted in General. Bookmark the permalink. Both comments and trackbacks are currently closed.

12 Comments

  1. Sean McDirmid
    Posted June 24, 2012 at 5:57 am | Permalink

    I’m not sure if Turing ever envisioned how many instruction tables we’d wind up encoding; computing was very different back then. We’ve never been able to develop the abstraction capabilities to stop inventing wheels over and over again.

  2. Posted June 24, 2012 at 8:18 am | Permalink

    IME, well-written Lisp and Forth programs are entirely boilerplate-free, meaning all of the “quite mechanical” tasks were performed by the machine.

  3. Paul Sinnett
    Posted June 24, 2012 at 8:57 am | Permalink

    I’ve been programming professionally for about 15 years and as an amateur for 10 years before that. In that time, I’m sure there are many parts I’ve done mechanically more than once. But it’s never become a drudge. For me, he’s bang on.

    To attempt perfection and eliminate any possible automate-able part from the programming process is an exercise in compression and obfuscation. Such a task would be more drudge than the work it was intended to replace.

  4. Posted June 24, 2012 at 3:11 pm | Permalink

    Using Turing’s language: the job of turning those mechanical processes over to the machine involves writing instruction tables, and therefore creates mechanical meta-processes which can be turned over to the machine, which requires writing instruction tables, which creates mechanical meta-meta-processes, …

    And that’s where we currently are stuck: an endless rabbit-hole of “how do we write software?”.

    I guess if Turing was wrong about anything, it was about how easy it was to write software.

  5. Marc Coram
    Posted June 26, 2012 at 9:29 pm | Permalink

    I don’t think Turing was wrong. I think that we just haven’t found a way to integrate systems akin to MetaBorg (paper/pdf) deeply enough into our infrastructure/practice to dig ourselves out of our historical/syntactical/next-big-thing hole. Or as Simoni suggests, perhaps insufficient use of Lisp & Forth (Refal? Kernel? Subtext++?) is a sufficient cause.

  6. Posted June 27, 2012 at 10:55 am | Permalink

    That assumes programming is a drudge. While programming in some languages, like Java, is definitely a drudge to me, I haven’t found that to be the general case.

  7. Posted July 18, 2012 at 8:24 am | Permalink

    I think Turing was correct, and in fact I DO find myself automating the “drudge-like” portions of my work. That doesn’t mean I do _no_ drudge work: I usually need to do it the hard way a few times before I feel ready to automate it and some tasks are short enough (or hard enough to automate) that it’s faster to do it by hand than to automate it.

    But in a certain sense, the drudgery is “bounded” — if any _particular_ task takes significant amounts of effort and makes no creative demands then it will get automated. The programmer will still have to engage in drudge work, but it won’t be the SAME drudge work every day.

  8. John "Z-Bo" Zabroski
    Posted July 31, 2012 at 9:11 pm | Permalink

    No, With PLT Redexes and rewrite logic theories, I think we are making good progress towards Turing’s vision. Do you think he meant otherwise?

  9. Posted August 2, 2012 at 12:27 pm | Permalink

    Turing simply describes a compiler. He was right: nobody write “instruction tables” anymore, we write high-level code.

  10. philip andrew
    Posted September 18, 2012 at 1:44 am | Permalink

    What is the status of Coherence 2 or Subtext 2? Do you try to integrate them together?
    What language are you implementing this next one in?

    If you want people to use it on the UI, javascript seems good, also people are using NodeJS a lot more lately – so JS on the server side is a … ok but ugly option. Haskell if you want the academic people to follow it.

    • Posted September 27, 2012 at 8:36 am | Permalink

      Hi Philip,

      I owe everyone an update. Basically I realized I needed some kind of type system, and that has bogged me down all year. Teaching a new class this semester hasn’t helped either. With the new type system I will be up to Subtext 4.

      • Posted October 1, 2012 at 12:19 am | Permalink

        Hi Jonathan,

        Thats great! I hope Subtext 4 is something that I can use as a library or adapt to use as a component of sorts. I’m not sure how you implemented it this time or if you just had the time to do a paper rather than implementation. Here are some ideas/suggestions but I guess you already thought through many.

        For Subtext, I can imagine, as a Scala programmer I would like to be able to edit the Scala code using an editor like the Scala Worksheet https://github.com/scala-ide/scala-worksheet/wiki/Getting-Started where the text of the Scala code could be on the left and the right could be the Subtext editing area based on the Subtext 2 Schematic Table editing. My Scala code on the left could adapt as I adjusted the Schematic table on the right.
        Then I could open any class and edit with duel view of the code. Programmers screens are typically wide screen now, no need to worry about screen space where it used to be at 800 by 600.

        As a Scala programmer, even a simple implementation of Coherence could be useful as a code library to allow for the implementation of stateful classes. It could be implemented as just pure Scala code without any special editor. I am not sure why you said previously that Coherence was somehow not going to work, at least in the simple cases it appears to be very useful. You found that in other cases it did not work, but does that matter? Do you integrate Coherence into Subtext 4?

        If your goal is to get the academic community to use it and look at it then Haskell is a good basis for any of this, although they keep away from statefulness, integration of statefulness into Haskell could be acceptable to them if it didn’t break their pure functional world, although that seems impossible? The pure functional world relys on a mathematical world without state.

        If your goal is to get the widest usage from programmers just visiting this, then a Javascript library may be the way to go as its more easily adopted so quickly in the browser. It is also so easy to prototype within the browser and no tool-setup needed, something like js-bin http://jsbin.com/ to allow editing of code in the browser would be useful.
        This allows people to understand it more quickly and play with it.

        From my point of view, I would like to be able to use any of the code as a library on the JVM from my Scala code or from Javascript as I have some user interface work I am doing where I want to integrate the subtext editor into it. In this case I may want to do all the UI myself and use your code as a library.

        Philip

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