Abstract
Conventional computers are essentially calculators that receive instructions and data from, and store results and intermediate working to, addressable computer memory.
In memory, both instructions and data are represented as binary values that are stored in different memory locations.
When executed on early computers, programs had access to all memory locations -- all of the memory address space; today, conventional operating systems provide programs with a virtual address space that maps to portions of physical memory.
Typically, programs divide the memory address space into regions that are used for different purposes – these include the code region, dynamic memory, and the runtime stack.
Programs use the runtime stack to keep track of the equivalent of intermediate workings -- values that may be needed are put on the top of the stack, and values that are no longer needed are popped off the top of the stack.
While early programs were developed using assembly languages, which have a one-to-one mapping to machine code instructions, programs are typically now written in 'higher level' programming languages that abstract away from 'hardware level' concerns.
Abstraction is an incredibly important concept in computing, as it is only by using abstraction that we are able to create increasingly complex and powerful software programs that remain intellectually tractible.
A key abstraction, conceptually borrowed from mathematics, is that of the 'function', which is also referred to by other names such as 'routine', 'procedure', and 'method' -- though these different words often prescribe additional meaning in different contexts.
While some programs may be written that only use boolean and numerical values (which may also represent characters). Most programs use typed 'data structures', which are hierarchical structurings of such native values.
In programming, arrays represent some number of native or typed data structure that are stored consecutively in (virutal) memory; A subscript is used to offset from the base memory address of the start of the array.
Data structures may be passed into functions by either passing a copy of the data -- pass by values, or by passing a base memory address that the data structure is located at -- pass by reference.
Recursion