Syllabus of a sort
Goals
Intended goal:
- to provide actionable foundations for Computer Science that can be explained with clarity
- to put everyone at a level where they can fruitfully attend the modules that list Intro to CS as a prerequisite, including FPP
- to be useful to attendees who were already exposed to “coding”
- to be useful to attendees who “never wrote a line of code in their life”
- to synergize with everyone’s liberal arts and science education, including the scientific method
Unintended goal:
- to effectively prepare attendees for summer internships and stuff
Unexpected goals:
- to provide common-curriculum content
- to effectively prepare attendees to fruitfully attend modules at the School of Computing
Infrastructure
Material:
- a well-designed programming language (OCaml)
- a well-designed editor (Emacs) that makes it possible to edit at the speed of thought
- progressive and self-contained lecture notes
Rationale:
- the Great Equalizer: none of the attendees already know OCaml, so everybody can start on the same footing
- the very designs of OCaml and Emacs make it possible to progress logically
- the self-contained lecture notes mean that there is only one place to learn from: a firm place on which to put the OCaml and Emacs dual lever to lift the world of computing (yay for Archimedes!)
Imparted knowledge
- Aristotle’s four causes are relevant (cf. the college’s motto)
- soundness and completeness of data and of computations
- program processors (interpreters, compilers)
- programs as data objects (the halting problem, Kleene’s S-m-n function)
- connection with linguistics: grammars, abstract-syntax trees
- connection with mathematics: proof trees, logic, types
- incomplete testing as proving the presence of bugs, not their absence (Dijkstra), and complete testing as proving the absence of bugs
- code coverage
- induction and recursion as two sides of the same yin-yang diagram
- lexical scope
- observational equivalence and computational effects
- evaluation order, parameter passing
- computational costs: time and space
- correctness first, efficiency later
- demand-driven computation
- concrete and abstract data types
- modules
- imperative programming
- being methodical and expressing oneselves with clarity
Methodology
Objectively:
- go from what is known towards what is unknown (yet) – so, no forward references and no name dropping
- 50% testing & programming, 50% writing, 100% Computer Science: our narrative reflects our understanding
- third-person viewpoint through archetypal dialogues
- first-person viewpoint through reading the dialogues in class
- a variety of exercises and mini-projects to reinforce one’s learning (“it is useful because we keep reusing it”)
- live coding: everything is doable by each attendee
- group work to enable discussions and to increase the quality of feeback
Subjectively:
- the knowledge is snowballing as the semester unfolds
- a safe space where one can learn from one’s beginner’s mistakes, without penalty
- patience, availability, reactivity, intellectual respect, encouragement, esteem, enabling, empowerment
Version
Updated
[21 Jan 2023]
Created
[10 Jan 2023]