Computer Models and Languages
To understand what a computer can and cannot do, we investigate different styles of languages used to program computers, study machine learning, where the computer partly programs itself, and construct abstract models of computers for a more formal analysis of their capabilities and limitations. The focus is on programming languages substantially different than the object-oriented languages students are expected to be familiar with. We investigate their capabilities and strengths, and how they are implemented. We learn the basic properties of the three main abstract classes of computers: Finite State Machines, Context-Free Grammars, and Turing Machines. We learn some problems that cannot be solved by computer, and the implications of these unsolvable problems on computer technology.