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?

12 Replies to “Turing on programming”

  1. 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. IME, well-written Lisp and Forth programs are entirely boilerplate-free, meaning all of the “quite mechanical” tasks were performed by the machine.

  3. 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. 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. 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. 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. 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. 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. 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.

    1. 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.

      1. 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.


Comments are closed.