On Programming and David Corbin’s Challenge: “I defy anyone to pick a hardware platform, and programming language; then provide a small (one page) sample of code, and be able to COMPLETELY describe what happens when the code executes.”

Among the comments that are listed in my recent post about On Programming: Compiler Experts Discuss The Lost Art of Programming in Assembly Language, you can find the following challenge from David Corbin, President / Chief Architect at Dynamic Concepts Development Corp.:

I defy anyone to pick a hardware platform, and programming language; then provide a small (one page) sample of code, and be able to COMPLETELY describe what happens when the code executes. I have given this challenge many times since the time I was humbled by the same challenge back in 1978; never once has a person completed it – nor should anyone be expected to.

As it happens, I solved the problem a decade before Corbin first posed the question.

In the late 60’s I was a sysadmin for the CDC 6600 — then the world’s largest supercomputer — at NYU’s Courant Institute of Mathematical Sciences (CIMS).

Early one June day I was told that the fiscal year would end a few weeks later, and that I should make sure to use up all the time that had been allocated to me, to show our sponsors that we made full use of our funding.

I thus wrote the following FORTRAN program.

PROGRAM MAIN
10 GOTO 10
END

I then ran it several times with different time limits until the account went dry.

Here is my complete description:

The program wastes time in an efficient fashion.

Though some may quibble with the language, I think the intent is clear, and that any programmer can describe what happens when the program is executed.

One page is more than enough. Three lines suffice.

The program ran correctly the first time.

I thought of rewriting it in assembly language, to make it even more efficient using an in-stack loop.

However, that would have been a waste of my time …

Advertisements

3 Comments

  1. Posted May 4, 2009 at 12:07 | Permalink | Reply

    Dave,

    Thank you for picking up on my challenge, and elevating it to a blog post.

    The key word in the challenge is COMPLETELY. I will grant your analysis covers the typically relevant points, but it is far from the complete picture. As I saind in an additional comment on the original discussion:

    I have spend a significant part of the past 32 years dealing with some of the most demanding types of software systems including Military, Space and Biomedical – including implants. “COMPLETE” understanding has included the following items:

    * Power dissipation of alternate implementations.

    * Number of state transistions of memory locations (when memory technology is known to have a “limited” number of cycles.

    When I was given the challenge (late in 1978), I was a young and somewhat arrogant developer who had very good in-depth knowledge of the DEC PDP-8. This included system level programming (changes to the TSS/8 operating system), as well as having reverse engineered large assembly language programs [the source was in French, with was totally meaningless to me].

    I was basically bragging, that there was nothing about the PDP-8 that I did not know.

    One of the senior engineers at Digital was within earshot, and brought over a simple program (not that much more complex than your sample). He then asked if I thought I knew everything about the program. Of course I answered Yes.

    He then pulled out some schematics and Polaroid photos, and challenged me to attach the appropriate pictures (some were from the program executing, others were “red-herrings”) to the correct points on the schematic.

    Naturaly I was not able to do this; and it was clearly shown that my knowledge was NOT complete.

    This situation is true in almost every aspect of life. One needs to understand the major items and their relevance to their situation. There are millions of things that happen around us every day where we do not have COMPLETE understanding.

    Even in other areas of science, simple approximations are typically used rather than more “accurate” methodologies, simply because they are “good enough” [case in point: Newtonian Physics].

    I am confident (if I pulled some of the CDC 6600 documentation from one of the musuems or classic computer societies that I am involved with) that I could ask many very low level questions about that code when running on the machine, that you would not know [then or now] off the top of your head.

    So in the context of the statement [made by another member of the original discussion]:

    …”a programmer responsible for code doesn’t understand that code COMPLETELY”…

    I stand by my challenge, that for even the simplest pieces of code, there are aspects of it which the person does not understand. The relevance of that iformation is outside the scope of the challenge, as is the persons ability to do research in order to gain additional understanding should the need arise…

    • Posted May 4, 2009 at 13:25 | Permalink | Reply

      David,

      I guessed you were thinking along these lines. For example, how many flip-flops changed state, and so forth.

      I do agree the key point is to think “outside the box.” Most programmers live within the conventional one. For example, once you program in SPITBOL or OCaml, your view of programming languages. The conventional languages — C, C++, Java, Python, and lately Ruby — are remarkably similar in their surface syntax and semantics. Most programmers think of pattern-matching as writing a regular expression, and have no idea about SNOBOL/SPITBOL’s elegant and much more powerful pattern matching capabilities.

      • Posted May 4, 2009 at 14:39 | Permalink

        I don’t like inside or outside of “the” box. Rather I believe people have to determine “which” box is the appropriate one for their specific circumstance. And that was a big part of the background for the original challenge. Attempting to understand “COMPLETELY” is impossible, figuring out WHAT is important to understand at any given time is critical.

        Regarding the similarity of “surface syntax”. I believe this actually contributes to many of the “problems” with software development today. People are to a “right” way in language X; then they move on to language Y – and only make the necessary “surface” changes to ge tthe program to compile and produce apparently correct results. They completely miss the differences in paradigms and how to write code that makes the most effective and appropriate use of the given language.

3 Trackbacks

  1. […] The Wayward Word Press WordPress gave me a blog to see how I was going to handle it « On Programming and David Corbin’s Challenge: “I defy anyone to pick a hardware platform,… […]

  2. […] to handle it « On Baseball: The Brooklyn Dodgers, Roger Clemens, Michael Shields On Programming and David Corbin’s Challenge: “I defy anyone to pick a hardware platform,… […]

  3. […] Programming: The Dave Shields Hacker’s Challenge In response to my recent post, On Programming and David Corbin’s Challenge: “I defy anyone to pick a hardware platform, and pro…, David Corbin, the creator of the Corbin Challenge, just sent me the following note via […]

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 )

Twitter picture

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

Facebook photo

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

Google+ photo

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

Connecting to %s

  • Pages

  • May 2009
    M T W T F S S
    « Apr   Jun »
     123
    45678910
    11121314151617
    18192021222324
    25262728293031
  • RSS The Wayward Word Press

  • Recent Comments

    russurquhart1 on SPITBOL for OSX is now av…
    dave porter on On being the maintainer, sole…
    daveshields on On being the maintainer, sole…
    Paul Tallett on On being the maintainer, sole…
    mrrdev on On being the maintainer, sole…
  • Archives

  • Blog Stats

  • Top Posts

  • Top Rated

  • Recent Posts

  • Archives

  • Top Rated

  • %d bloggers like this: