It seems that this course's curriculum centers on the hardware/algorithmic/mathematical level more than the semantics and ontology of modern object programming. The latter is much more philosophically interesting to me, and to me it's that side of things that gets closer to the pertinent philosophical questions that are raised by the dominance of computers in our society.<p>Also, no reference at all to the massive amount on The Philosophy of Technology written in the last hundred years? No Heidegger, Ellul, McLuhan?<p>It seems to me that abstract, domain-level programming concerns like object hierarchies are more essential than algorithms or binary math to the intersection between Computer Science and Philosophy. Once you get past the parallels between, say Philosophical Logic and Digital Logic (the first six weeks of both classes cover many of the same rules -- DeMorgan, etc.), I think the most pressing concerns are best addressed within the realm of the Humanities, Liberal Arts, and a broad Philosophical discourse.<p>The curriculum I'd like to see might have topics like:<p>* Christopher Alexander, Aristotle and the Gang of Four: Are Design Patterns Nominalist or Formalist/Realist in nature? (You could go for a while on this one. I'd love to see the GOF's appropriation of Alexander critiqued, and maybe brought into contact with the concerns raised in Heidegger's essay <i>The Question Concerning Technology</i>).<p>* Building, Dwelling, Coding<p>* The Question Concerning Technology Revisited: Are we now Standing Reserves of Information?<p>* Russell, Pierce, Saussure and the semantics of type systems<p>* Bergson and Agile -- the relationship between intuition and iterative process<p>Or something like that. You get the idea (or not...)
Along similar lines, Scott Aaronson recently wrote a long essay entitled "Why Philosophers Should Care About Computational Complexity." <a href="http://www.scottaaronson.com/blog/?p=735" rel="nofollow">http://www.scottaaronson.com/blog/?p=735</a>
What is abstraction? Here is an informal casual answer that works quite well.<p>An abstraction unites something <i>fixed</i> with something <i>varying</i>. It specifies something fixed that ecompasses a set of variants.<p>For example, an 8 bit number fits this straightforwardly. The number of bits and their interpretation as successive powers of 2 is what is fixed; the actual values of the bits is what varies.<p>It seems quite a good definition: it is simple, and discrete -- it is <i>measurable</i>, and it very neatly fits software/computation. It is pretty much built-in to the basics of what we commonly take as computation, the bit -- a single element (fixed) with two values (varying between 0 or 1). And everything follows on top of that.<p>And furthermore, this definition can even be seen as somehow quasi-fundamental, as inevitably arising in how natural systems behave (well, with a little imagination maybe -- it is worth a ponder) . . .<p><a href="http://www.hxa.name/notes/note-hxa7241-20110410T0910Z.html" rel="nofollow">http://www.hxa.name/notes/note-hxa7241-20110410T0910Z.html</a>