Algorithmic thinking is sometimes not enough—programming is also required. A computer program is the specification of a desired computation in a language communicable to physical computers. The act of constructing such computations is called programming and the languages for specifying programs are called programming languages. Programs are liminal artefacts and the consequences of this liminality are both huge and controversial, including the development of artificial intelligence (AI) and cognitive science. ‘The art, science, and engineering of programming’ explains language, thought, and reality in programming; the concepts and categories of programming languages; and programming as art, as a mathematical science, and as software engineering.