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]

Table Of Contents

Previous topic

Syllabus

Next topic

Food for thought