Unit 1. Foundations of functional programming
There are two major ways to understand the act of programming. The first, and historically more common, is the view that the programmer provides a sequence of instructions to a computer in order to make it behave a certain way. This model of programming ties the programmer to the design of a particular tool for programming, namely a computer. In this type of programming, the computer is a device that takes input, accesses memory, sends instructions to a processing unit, and finally delivers output to the user. This model of a computer is called von Neumann architecture, after the famous mathematician and physicist John von Neumann.
The programming language that best embodies this way of thinking about programs is C. A C program takes in data from the standard input controlled by the operating system, stores and retrieves necessary values in physical memory that frequently must be manually managed, requires the handling of pointers to a specific block of memory, and finally returns all output through the standard output controlled by the OS. When writing C programs, programmers must understand as much about the problem at hand as the physical architecture of the computer in front of them.