In a discussion with Karen Reid
yesterday about what should be in U of T's second-year CS hardware course, I learned something about my own beliefs that I hadn't realized before: I believe that in order to be a computer scientist, a person must
know (or must once have known) how logic gates, cleverly combined, can do things like add numbers. I don't know if it's a holdover from my degree in engineering, or whether it's a ghostly memory of the epiphany I had in Prof. Michael Levison's CS210 class at Queen's
in 1981-82 when I suddenly understood how deterministic collections of circuits could make choices (i.e., execute 'if' statements). I doubt we'll ever agree on a definition of what computer science is, but this, the idea that programs are data, trees & recursion, and how garbage-collected object-oriented languages actually work are all marked "must know" in my mind. What's in that category in yours?