• About
  • Projects & Research
  • Publications
  • Archives
  • Categories
  • Posts Tagged ‘logic’

    Computer Science, the study of…? Mathematics.


    2010 - 04.30

    [Note: I wrote this more as a curiosity.  What follows is a dabbling into one perspective of what computer science is, a subfield of mathematics in this case. I think it would make an interesting series and invite requests.]

    One of my all time favorite quotes attributed to Edsger Dijkstra (one of the best known theorists and algorithms computer scientists) is:

    Computer science is as much about computers as astronomy is about telescopes.

    Djikstra felt very strongly that computer science should be viewed as a branch of mathematics. A radically novel subfield.

    First, the “divide and conquer” view of large systems (breaking a universe into galaxies into solar systems and so forth) does not work for programs. Changing one bit (abstracted away in the creator’s mind), changes the entire system. There are no too small to matter parts.

    Second, computer science relies on discrete numbers. A bit is a one or a zero (excluding quantum computing systems). Our logic depends on yes/no choice:

    if (x) : then y
    else : z

    We pick branches; we do not go down multiple paths. A discrete system is antithesis to the analog perspective we humans have. We have the notion of “gray areas.” We can have proportions (like one third) that can only be estimated by a computer.

    He was also adamant against software engineering, or as he called it, “The Doomed Discipline” as it cannot guarantee correctness. Consider testing: while one can find bugs through testing, one cannot prove there are no bugs in the code. (Not finding something is not definitive proof.)

    In regards, to how he felt computer science should go, he demanded formality. Language should be accurate. Errors are not an infection or insect, and, hence, not a “bug.” Software and hardware are inanimate things; they should not be personified (they are genderless and do not desire, need, want, etc. anything).

    And, our very beloved proofs. While not as formal as those in a mathematics course, there must be irrefutable logic to them. As this is a model-centric view, each program is an independent model. So, students need to be able to justify that their program (their proof) is sound.


    For more information about Dijkstra’s views, I recommend his 1998 paper, “The Cruelty of Really Teaching Computer Science.”