Keith Douglas' Web Page

About me Find out who I am and what I do.
My resumé A copy of my resumé and other documentation about my education and work experience for employers and the curious.
Reviews, theses, articles, presentations A collection of papers from my work, categorized and annotated.
Current research projects What I am currently working on, including some non-research material.
Interesting people People professionally "connected" to me in some way.
Interesting organizations Organizations I am "connected" to. (Some rather loosely.)
Intellectual/professional influences Influences on my work, including an organization chart. Here you can also buy many good books on philosophy and other subjects via I have included brief reviews of hundreds of books.
Professional resources Research sources, associates programs, etc.
What is the philosophy of computing? A brief introduction to my primary professional interest.
My intellectual heroes A partial list of important people. Limited to the dead.
My educational philosophy As a sometime teacher I've developed one. Includes book resources.

IT and Me

Most of my education has been in philosophy. Any philosopher needs a subject to philosophize about, so, given my long-time interest in computing, I have cultivated my skills and knowledge in computing and information technology related areas. This led to my academic work in philosophy of computing. It has also provided another area of relative expertise careerwise which I pursue it along with more academic and research/policy jobs. To this end, I have put up this page to detail said computing and IT skills. Since some readers may be interested in brief descriptions of courses and in my experience with team work, I have indicated some of that as well. Next, I include a brief section about tools I have used, and finally another about areas in computing where I would be most useful (and happy) employmentwise. I hope to make use of these in my new job at Stats Canada.

Academically, I first took a McGill University Faculty of Arts minor in computer science while an undergraduate. I took the following courses:

Introduction to Computer Science 1
- Pascal and C programming languages; introduction to data structures via linked lists
Introduction to Computer Science 2
- Data structures and algorithms: linked lists, trees, stacks, queues, hashing, huffman codes, sorting and searching
Principles of Assembly Languages
- Computer number systems and arithmetic, 680x0 assembly languages
- Worked in pairs for programming assignments
Programming Languages and Paradigms
- Scheme, introduction to interpreters and their implementation
Files and Databases
- Data structures and algorithms on secondary storage (tries, b-trees, etc.), introduction to databases with Relix
Introduction to Database Systems
- Oracle SQL, modeling (modeling languages; entity-relationship diagrams; normalization), ODBC, Designer 2000
- Many assignments and a project done in team of 5

In the philosophy department, I took two philosophy of science courses which, in part, treated on themes in computer technology. (Topics were: artificial intelligence and similarity in computer programs.)

Next, while an M.A. student in philosophy at the University of British Columbia, I took Theory of Computing (basic automata theory, parsing, uncomputability) in the computer science department. I also took two philosophy courses which had some level of IT relevance. One was Non-Classical Logics, which focused around the belief revision literature. This material is of interest to those developing deductive databases and the like. I also took a course Ethical Issues in Public Policy: Ethics for Robots, which included hands-on design and programming of Lego Mindstorms robot kits (using, in my case, NQC). Many of these programming/design projects involved anticipating similar constructions of others without knowing specifications (so as to simulate in some ways the ethical situations being modeled). These were most often groups of 7 or 8.

Then, at Carnegie Mellon University (CMU), while studying Logic and Computation, I took the following computing related courses from the comptuer science department:

Fundamental Structures of Computer Science I
- Object oriented data structures and algorithms (union-find, queues, searching, compression, game-playing, etc.)
- Worked in team of two for 3 of 6 assignments
Fundamental Structures of Computer Science II
- ML, continuations, signatures, ADTs, functional programming
- One assignment done in group of 3
Introduction to Computer Systems
- computer arithmetic, 80x86 assembly language, compilation process, linkers, caches, virtual memory, threads, sockets
- 5 of 7 assignments in team of 2

I also took Computer Architecture (computer arithmetic, microprocessors, virtual memory, caches, Verilog, pipelining, MIPS assembly language) from the electrical and computer engineering department and several philosophy courses having to do (in part) with theoretical or applied aspects of computing: Logic and Computation (first graduate course in logic proper, introduction to metatheory, brief introduction to computational approaches to logic); Minds, Machines and Knowledge (concepts and cognition, nonclassical logics, epistemology, AI; additionally I once TA'd this course); Computability and Incompleteness (Gödel's incompleteness theorems, models of computability, lambda calculus); Probability and AI (Bayesian networks). Further, I took several directed reading courses in this broad area: Issues in Multimedia Authoring (see my proposed version [syllabus, student project ideas in Acrobat Reader format] of this course for some of the flavour), History of Computability (leading up to and slightly after Turing's "On Computable Numbers ..." paper), and two semesters worth of reading course on Super-Turing Computation. The latter two subjects formed my M.S. thesis research. See it for further details.

Upon my return to Montreal, I attended courses at the McGill Networking Academy, and obtained the CCNA certification. These courses correspond to Cisco's CCNA 1-4. The courses here involved teamwork, including a team of 2 skills exam at the end of what Cisco calls CCNA 4.

Not only have I studied the above areas, but I have worked both as a volunteer and for pay in web design and implementation and in other IT related areas. I have developed online courses at CMU (primarily XML markup, HTML/CSS implementation). For other work, I have used various other online instruction (e.g. Blackboard, WebCT) tools as a TA and as a student. I also worked on implementation and as a consultant for implementation of department pages. I have volunteered my computing skills to the Social Justice Committee. My focus there has been primarily implementation and design of two revisions of their website. I have worked with other volunteers in this area, most notably with those interested in art and design and am in the process of teaching various people associated with the SJC on how to implement changes and additions for themselves. I have also done some minor technical support, infrastructure maintenance and purchase advising for the SJC. My resumé details the chronology of these and related activities.

Finally, I pride myself on learning all that I can as pertains to computing, reading various websites, additional texts, etc. to keep abreast of developments in the industry and academic subareas. Most recently on my own time I have been refreshing my knowledge of the Java APIs.

As of July 23 2007, I am a CS recurit at Statistics Canadaand have been working as an "apprentice" database administrator.

Tools used for large projects
The following is an unordered list of languages (programming, simulation and markup) each used for at least 10 hours of work.

C, Pascal, BASIC, Java, Scheme, Assembly languages (680x0, 80x86, MIPS), LogoWriter, JavaScript, Oracle SQL, Microsoft T-SQL, ML, NQC; Verilog; HTML, XML.

Similarly, the following is a list of IT-related (i.e. not office, graphics, etc.) software that I have used for more than 10 hours of work. Listed are primarily development tools.

Ant, CVS, gcc, CodeWarrior, Think C, Think Pascal, Turbo Pascal, Dreamweaver, RealBASIC, Aqua Data Studio, Oracle Designer 2000, SPIM, a Sun-based version of Verilog, javac (Sun/Apple), javadoc, Filemaker Pro, Textwrangler/BBEdit Lite, TextPad, RedGate SQL Backup, Server Management Studio, Remote Desktop, and (as a client) VMWare.

And finally, I list productivity applications, again with 10 hours or more of use.

Word, Excel, PowerPoint, AppleWorks, Fireworks, Pages, Keynote, iMovie, TeXShop, GraphicConverter.