Monday, July 19, 2010

A manifesto in the form of a sequence of seemingly unrelated ideas

  • Programming is a social activity. Sure there are cases where you are working with a fixed set of libraries you know well, and you're trying to generate something interesting within this vocabulary of thought, but most industrial coding seems to consist of cobbling various libraries together.
  • Computing is a social activity. (no explanation needed)
  • (completely unrelated) Things that only the "dorky kids" did in my generation are the exact things "all the kids" seem to be doing in subsequent generations.
  • Programming is the fundamental activity people do with computers, much like "driving" is the fundamental activity people do with cars
  • Learning to program only *seems* hard because we try to force students from zero to programming-literacy in one college semester, then fail them if they fall behind on the interesting stuff that depends on that basic literacy. Imagine if we spent a year slowly teaching programming for every year we taught kids about reading, writing or arithmetic.
  • Analogy between modern professional programmers and ancient scribes.
    • Elite group of educated scholars
    • Write using needlessly difficult technology (either "C" or "All caps and no punctuation")
    • Mostly write things like "So and so owes the king 15 sheep" / modern day business software
  • Analogy between programming and other basic intellectual tasks.
    • Perhaps in the future being a "professional programmer" will be as weird as being a "professional writer" or a "professional mathematician" today
    • But, likewise, everyone will need to do a little reading/programming/arithmetic
    • There may be many "high school programming teachers"
  • Printing press analogies
    • Looking at computers and the internet to day and getting interested in them as "fascinating machines" is like looking at the first printing presses and becoming obsessed with the screw mechanism.
    • Omitting the rest of the analogy

3 comments:

  1. I agree with all, except the printing press analogy. With cache aware algorithm design as an example, understanding hardware structure can be very important in programming. The prose in a book, however, do not effect how well the printing press will work.

    ReplyDelete
  2. While programming my be the root activity from which all things spawn, it's not what most people do when using a computer, and so I can't say that it's fundamental. People mostly use computer to communicating, either by creating or consuming content. Sure, someone could stretch definition of programming to say that when I click "Post Comment", I'm "programming" because it results in some SQL statement being written an executed, by those details are so abstracted away It's meaningless to me.

    Yes, programming itself is a way of communicating, and more importantly the programs I create have much greater impact than the uncompiled source will ever have, and while all of this is important, it is not required.

    ReplyDelete
  3. Jonathan, surely you find it to be easier to manage and manipulate content if you can script it a little bit? (In the meantime, I am more than willing to acquiesce to your dual claims that content and communication are also fundamental)

    The usual objection to my "in the future, everyone will program" line of thought (it is, in some sense, only an interesting thought because it is so controversial) involves the use of the phrase "my grandma." The rebuttal to this (admittedly, in this context, a strawman) argument is somewhat informative about the time scales I'm thinking about : eventually many of the kids who are growing up text messaging and twittering today will become somebody's grandparents.

    In the meantime, what I think we'll begin to see is an increasing number of people learning to program whose jobs are not primarily "computer programming." The first wave may be visible as a series of disciplines in the physical and biological sciences beginning to require more coursework in computation than in traditional mathematics. I fully expect biology to be among the first sciences to clearly and obviously fit this criteria (a discipline like physics may adopt computation first and fastest, but in a way that blurs the line between what is "math" and what is "computation")

    Bobo, I don't really expect the average human to worry about caching algorithms, even in a fully programming-literate future. I'd imagine something somewhere between Python and BASIC, but with better parallelism support, to be a decent choice for a general-purpose non-professional programming language. It is possible that the ideal language for "widespread programming literacy" would have a large and rich vocabulary, but not the sort of complex logical "grammar" and style which pervade programming as I practice it now (after all, the average human seems to have trouble with algebra, but little trouble learning to read, or picking up a first language)

    Odd thought : I don't think I'm coming up with anything that somebody at Microsoft didn't think up already : after all, it is often claimed that Excel is the most widely used programming language in the world.

    ReplyDelete