I’ve been thinking a lot recently how computer science is taught in a vacuum, isolated from its history. From the outside this appears to be true in many other related disciplines like math and engineering, but I’m not very familiar with them. Computer science has a rich intellectual history, which I’m only starting to explore on my own time, which intersects with literary theory (Ted Nelson), media studies, psychology (Papert), philosophy (Turing) and of course mathematics.
I don’t have anything as concrete as a syllabus, but I’d love to teach an introductory computer science course that incorporates some of the seminal readings collected in The New Media Reader. Probably not a first programming course, but with relatively few pre-requisites. I think that the revolutionary and ambitious dreams that computer scientists had in the fields infancy, while it was still discovering its boundaries, are some of the most invigorating ideas I’ve ever read about.
One of my absolute favorite undergrad courses was “Theoretical Foundations of Computer Science”. Traditionally it was taught as a math-y theory course, going over Turing machines, grammars, a little bit of complexity and computability theory. The semester I took it, the professor covered those topics on the Monday and Wednesday sections, and reserved Fridays for discussing our weekly readings from Godel, Escher, Bach. Relating the occassionally dry, but deep and important, math concepts to the higher philosophical reflections on consciousness and the nature of the self worked really well for me. To be sure, some of my classmates were bored out of their skulls by the wishy washy humanities bits, but others thrived.
I’ve also been reading (slowly, in free time) some histories of computing. Ceruzzi’s A History of Modern Computing, going over the business history of the computer industry. Where Wizards Stay Up Late, exploring the early days of computer networking. Up next is The Dream Machine about JCR Licklider. I’m also somewhat haphazardly reading excerpts from NMR of the more “primary source” articles that introduce some of these fundamental ideas.
I have no idea if learning these stories will actually make me a better programmer (is that even the goal?), or if teaching these will benefit students. I think and hope they will. Understanding what other people tried, and more importantly why they tried it, expands my understanding of what is possible with computation and what it should be used for.
I’d like to continue incorporating history of computation into the work I do, and maybe someday I’ll get to explore the notion a little more formally.