10012 Things
Every Self-Respecting Computer Scientist Should Know
but might not learn in CS101-CS390

This Document: //www.cs.virginia.edu/evans/cs390/
Slides: //www.cs.virginia.edu/evans/cs390/cs390-2003.ppt

Research Links

Programming the Swarm (//swarm.cs.virginia.edu) — how can we get robust, secure, predictable behavior from lots of unpredictable, independent parts operating in hostile environments?

Splint (//www.splint.org) — secure programming using lightweight state analysis. How can we identify likely security vulnerabilities by analyzing code?

Sampling of recent Fourth-Year Thesis projects

In progress:

2002: 2001:

1001 Questions

What is Computer Science?

Computer science is the study of information processes. It is not a natural science since it deals primarily with unnatural, abstract stuff like numbers, graphs, strings and procedures. Rather, it is more like mathematics. The key difference between computer science and mathematics is that where mathematics is declarative (it deals with what is knowledge), computer science is imperative (it deals with how to knowledge). Computer science centers on understanding how to describe procedures (that is, precise methods for manipulating information) and to reason about the information processes they encode.

I do not know when I have been so tantalized by anything, and should be ashamed to say how much time I have spent upont it, in vain. These Functional Equations are complete Will-o-the-Wisps to me. The moment I fancy I have really at last got hold of something tangible and substantial, it all receded further and further and vanishes again into thin air...
Ada Byron, letter to Augustus De Morgan, 27 November 1841.
From Ada, the Enchantress of Numbers: A Selection from the Letters of Lord Byron's Daughter and Her Description of the First Computer, by Betty A. Toole, 1998.)

For more information: Ada Byron, CS200 Lecture 1

What problem did the first electronic programmable computer solve?

If you want to try and break a simple variant of the Lorenz Cipher, try CS200 Problem Set 4. If you are up for a bigger challenge, try breaking the Enigma variant on CS588 Problem Set 2.

Why was the first "personal computer" built?

  • Some Funny Things Happened on the Way to the Moon, Richard H. Battin, 1989.
  • One Giant Leap: The Apollo Guidance Computer, Dag Spicer, from Dr. Dobb's Journal. (Includes computer specs.)

    The MIT Instrumentation Lab had been designing software for the Apollo onboard guidance system even before the word software was invented. I still remember the first time I told my wife that I was in charge of "Apollo Software". She exhorted me: "Please don't tell any of our friends!"
    Some Funny Things Happened on the Way to the Moon, Richard H. Battin, 1989.

  • Is Computer Science a science, engineering or other?

    The Liberal Arts

    Trivium (Language)
       Grammar: study of meaning in written expression
       Rhetoric: comprehension of verbal and written discourse
       Logic: argumentative discourse for discovering truth

    Quandrivium (Number)
       Arithmetic: understanding numbers
       Geometry: quantification of space
       Music: number in time
       Astronomy: laws of the planets and stars
             Read Neil deGrasse Tyson's Science's Endless Golden Age (attached)
             For more on Golden Ages, Goalden Ages and Grade Deflation, see CS200 Lecture 15.

    What are the world's most complex programs?

    Molecular structure of Nucleic Acids, James Watson and Francis Crick. Letter to Nature, sent 2 April 1953 (50 years ago today!).
    50 Years of the Double Helix
    NCBI Human Genome Resources

    What is abstraction?

    Abstractions hide information. Computer scientists learn several types of abstraction including:
    • Procedural Abstraction (CS101) — abstract what to do from specific values to do it to
    • Data Abstraction (CS201)— abstract away data representation details from what you can do with it
    • Abstraction by Specification (CS340) — Abstract away how details by saying what a procedure does

    Who was the first object-oriented programmer?

    By the word operation, we mean any process which alters the mutual relation of two or more things, be this relation of what kind it may. This is the most general definition, and would include all subjects in the universe. Again, it might act upon other things besides number, were objects found whose mutual fundamental relations could be expressed by those of the abstract science of operations, and which should be also susceptible of adaptations to the action of the operating notation and mechanism of the engine. Supposing, for instance, that the fundamental relations of pitched sounds in the science of harmony and of musical composition...
    Ada Byron, 1843

    And they showed me really three things. But I was so blinded by the first one I didn't even really see the other two. One of the things they showed me was object oriented programming they showed me that but I didn't even see that. The other one they showed me was a networked computer system...they had over a hundred Alto computers all networked using email etc., etc., I didn't even see that. I was so blinded by the first thing they showed me which was the graphical user interface. I thought it was the best thing I'd ever seen in my life. Now remember it was very flawed, what we saw was incomplete, they'd done a bunch of things wrong. But we didn't know that at the time but still though they had the germ of the idea was there and they'd done it very well and within you know ten minutes it was obvious to me that all computers would work like this some day.
    Steve Jobs (on seeing a Smalltalk demo on his 1979 visit to Xerox PARC)

    Bjarne Stroustrup. What is "Object-Oriented Programming"?. Proceedings of the First European Software Festival, 1991.
    Daniel Ingalls. Design Principles Behind Smalltalk. BYTE Magazine, August 1981.

    Who invented the Internet?

    Available within the network will be functions and services to which you subscribe on a regular basis and others that you call for when you need them. In the former group will be investment guidance, tax counseling, selective dissemination of information in your field of specialization, announcement of cultural, sport, and entertainment events that fit your interests, etc. In the latter group will be dictionaries, encyclopedias, indexes, catalogues, editing programs, teaching programs, testing programs, programming systems, data bases, and — most important — communication, display, and modeling programs. All these will be — at some late date in the history of networking - systematized and coherent; you will be able to get along in one basic language up to the point at which you choose a specialized language for its power or terseness.
    The Computer as a Communication Device, J.C.R. Licklider and Robert W. Taylor, Science and Technology, 1968.

    If you're not sure how close today's Internet comes to achieving the speed of light, see CS200 Lecture 28.

    Why should we say goodbye to "Hello World"?

    C++ Standard Core Language Issues List
           206 things about C++ that language committee isn't sure about, try to find 6 of them that relate to the "Hello World" program.
    For what I think a reasonable first program should be, see CS200 Problem Set 1.

    CS 655 David Evans
    University of Virginia
    Department of Computer Science
    David Evans
    evans@virginia.edu