Dark theme

Dictionary of terms used


This is a brief dictionary of terms used in our various courses. For fuller details, click the word, which will link to more information.

Abstraction
The degree to which a computing language hides the complications of how the underlying computing hardware works when allowing a programmer to solve a particular problem or adjust the computer in some way. Although most languages (especially third generation languages) still require programmers to think through a sequence of tasks, the highest level of abstraction would be for a computer to automatically find the solution to issues or prempt adjustments.
Access control
Code to control access to the variables and procedures inside objects. Often centres on keywords such as "public" or "private", which limit whether other classes of object can or can't use the variables or procedures.
Accessor method
A procedure for getting the value of a variable inside an object. Often called a "getter", as generally such procedures are named "get" and then the variable name. Often associated with direct access to the object being limited through access control.
Algorithms
A comprehensive description of the pathway to gain a result. This may be enacted in code, but generally is written in pseudocode first. In general algorithms should be decided on prior to coding. Well known algorithms are distributed as exemplar solutions similar to patterns, the distinction being one of scale – algorithms deal with a series of statements whereas patterns deal with overall code structure.
All caps / Screaming snake case
All caps is the format of writing everything in capitals, e.g. ALL CAPS. Screaming snake case is a commonly used format for variables (mainly 'constants' that you don't expect to change) where all caps are linked with underscores, e.g. SCREAMING_SNAKE_CASE. It is named after the more common snake_case. Alternatives include camelCase, snake_case, and PascalCase. See case styles.
Anti-patterns
Anti-patterns, in contrast to patterns, detail poor ways of dealing with issues as warnings, though these are sometimes more controversial than patterns.
Applications
A piece of software, like a word processor, that provides services to users. c.f. systems.
Application Object
A gateway into the objects that make up an application in some kinds of applications that allow extension scripting.
Application Programming Interface (API)
A set of ways of interacting with code, usually generated by other people, and the associated documentation (which is often also called the API). Classically, this is via calls to procedures inside objects within libraries.
Arguments
Values passed into a program or procedure. These are usually used to set parameters within the code.
American Standard Code for Information Interchange (ASCII)
A character encoding used to represent human language characters (principly English) in binary, for example 1000001 (decimal 65) was "A". ASCII forms the foundation of most subsequent, more international, character sets.
Assembly code / Assembler
Human readable shortcuts mapping, or closely mapping, onto the machine code instructions which control a computer. These short names are converted into the equivalent binary code to run.
Assignment
The process of attaching an identifying label to a value; e.g. a = 10; to create a variable with a value.
Asynchronous programming
A variety of coding structures where, rather than the program running from beginning to end as it is written in a file, the code execution splits, with some elements waiting for a signal to run. Associated with, for example, callbacks and event based programming.
Atom
In languages, the smallest units with meaning, for example, a variable name or keyword; the building blocks of a language.
Binary Code
Binary code can be represented as one and zeros, but is essentially the encoding of a sequence of on and off electrical pulses which control the computer. Ultimately all code resolves to such sequences. Binary code is still at the heart of the machine code that operates computers, but is also used in some data storage formats such as image formats.
Block
A unit of code where a variable has scope. This is usually marked by punctuation.
Braces
{} Sometimes known as curly brackets.
Brackets
[] Sometimes known as square brackets.
Buffer
A buffer is a portion of memory which temporarily stores data being sent to or received from an external device, such as a keyboard. A buffer can sit between two devices that have different speeds for handling data. This provides a more consistant data stream and prevents hardware issues.
Bug
An issues with code. Generally bugs are divided into syntax or other issues that stop code compiling and issues with program logic that cause it to fail when running. A large part of being a programmer is debugging.
Bytecode
An intermediate code between source code and machine code. Such code is often run on a virtual machine/runtime environment which runs machine code when it meets a bytecode instruction. Sometimes (e.g. in Java) bytecode can be produced and distributed for running multiple times (in which we might talk of compiling the source to bytecode and then the bytecode being interpreted), or (e.g. in Python) produced once as part of an interpreter run.
Callback
A widely adopted functional programming form in which a procedure is passed into another, with the assumption that at some point the second procedure will run the first, potentially passing in arguments like data.
Camel case
Camel case is the practice of writing compound words or phrases without intervening spaces or punctuation, starting each word with a capital letter, e.g. camelCase. The difference of having a lower case start is enough to mark it out from PascalCase. Alternatives include snake_case, SCREAMING_SNAKE_CASE, and PascalCase. See case styles.
Class
In Object Orientated Programming a class is an extensible programming template for creating objects which represent real world entities. A class may provide variables and proceedures for instances.
Class variable
A variable defined as associated with a class, for example by being declared within the class but outside of any procedure. Such variables can often be accessed directly from the class without first turning it into an object. Also known as "class attributes".
Client-server architecture
A common architecture for systems on the internet, including the web. A piece of "client" software on one machine talks to "server" software on another, which sends it data that it "hosts". In general, each server can serve several clients symultaneously. A more generic version is the n-tier architecture.
Code Repository
A location for storing code. Often these include services for allowing a team to work symultaneously on the code, resolving conficts. Often they are also are public, as part of an Open Source effort. Finally, they may also include facilities for version control.
Cohesion
Cohesion is the purity of purpose of the class; the degree to which it focuses on a single clear task. High cohesion leads to more reusable and easier to understand code.
Communication protocol
A standard for constructing and handling communications between machines, for example over the internet. Examples include TCP/IP.
Coupling
Coupling is the degree to which two classes 'know about each other', that is, the degree to which they utilise each other's internal code. High coupling is generally regarded as a bad thing, encouraging side effects and reducing the reuseability of code. Ideally, classes should communicate through their APIs.
Comment
A comment is a human-readable explanation or annotation of the source code of a program.
Concurrent programming
The splitting of a program into dissimilar parts that run symultaneously to achieve an aim, for example on a multi-core chip machine. Contrast with the similar parallel programming which tends to split programs into similar parts that run on multiple machines.
Constructor
A procedure specifically for creating and/or initalising an object. There is often a special way of calling such a procedure during instantiation.
Control scripting
Script production to manage or organise systems, for example file systems and software installations.
Command-line interfaces / command prompt / terminal
An interface through which users interact with software. On windows computers this is generally called a command prompt (though this is formally the actual input point); on Linux this is generally called a shell or shell prompt (though the shell is formally the software you're interacting with); on Macs, this is generally called a terminal (though terminals are more generally a text interface to a system which may be elsewhere). Command-line interfaces generally contrast with GUIs.
Compiler
Converts one programming language into another; usually high level language into a low level language like machine code. Generally, when people talk about a compiler informally (which we do) they talk about something that produces a piece of code that will then run multiple times without recompiling. This is because modern IDEs disguise a lot under a single compilation button. In reality, compilers do one stage in the process of producing code that runs (for example, a "linker" is often needed to join compiled code together).
Component Object Model (COM)
An interface based inter-process communication system at the heart of Microsoft software and systems. Used to, for example, allow data from one application to be cut and pasted into another.
Computational thinking
The art and science of thinking in a way that allows a problem to be tackled by a computer. Computational thinking centres on a logical approach that breaks issues down into smaller component parts and orders attempts on them such that they are possible, but also includes issues like pattern recognition (have I seen something like this issue before), decomposition (what are the sub-problems here), and abstraction (what are the general ways people solve these types of issues).
Condition
An expression that usually controls the control flow by evaluating to either "true" or "false". Generally conditions compare two things (e.g. "is variable A equal to some value?"), but may embed these comparisons within Boolean logic (e.g. "is variable A equal to some value OR variable B equal to some other value?").
Continuous integration
A development technique where code is continually added into a central version of a product in small development cycles, usually when it can show it matches Unit Tests in a process of test-driven development.
Constant
A variable whose value either cannot change, or is not intended to be changed. Some languages provide special provision for restricting change in some variables. Constants are usually denoted with a special name formats, such as SCREAMING_SNAKE_CASE.
Control Flow
The order in which a program executes. A program will usually have a starting point (for example, the top of a specific file), but the path of the execution can skip around any give file, or between files, depending on control flow structures, usually keywords. Standard control flow includes branching based on a condition; looping through several values or until some condition is satisfied; procedures which are called and return some value and which may or may not be in some other object.
Debugging
The process of finding and fixing issues with code, otherwise known as bugs. This may be done by looking through the code manually; printing out key messages as the software runs; getting a computer to identify the issues when they stop something happening; or running through the code a line at a time to see where it is failing with a "debugger".
Declaration
The announcement in code that a variable, procedure, or class exists. In some languages (e.g. Python) the first assignment of a variable is taken implicitly as the declaration; in others there is syntax allocated specifically to doing this (for example in manifest typing).
Declarative programming
A programming paradigm in which the programmer says what the result of a program should look like, and works backwards from this (in contrast with imperative programming in which a result is stepped towards.
Decorator
A design pattern in which functionality is wrapped around pre-existing code (for example a class) with other code. However, in Python, also a specific form of this, where code or processing can be injected into code using the "@" symbol: a type of syntactic sugar to make such code clearer and hide complicated framework or toolkit code.
Delimiter
A delimiter is a character or a sequence of characters used to specify the boundary between two seperate pieces of plain text or other data streams. For example, a comma will seperate pieces of information in a Comma-Separated Values (CSV) file.
Deprecation
Discouraging the use of some piece of code, often a procedure identified in an API. This is usually because a more efficient solution (or one that fits better with the code philosophy) exists, though rarely it may be a warning that the code will not be supported, or will be removed in the future.
Deserialisation
Deserialisation is the process of converting a series of bytes into an usable object or data structure. The opposite process is known as serialisation.
Design by contract
A component of some development processes whereby the interfaces that code will use to communicate are designed first. If code matches these interfaces and produces the expected results, it should work as a whole. Essentially related to test-driven development.
Development process
The project management structure centred on code development within which code is built.
Domain Name / Domain Name Service (DNS)
A domain name is a human memorable address for a machine on the global network. It is an alias for an IP address, the lookup being completed by a call (or "DNS lookup") to the Domain Name Service, a distributed list of names and addresses scattered across the network.
Duck typing
The idea that in code, any object can be used in a situation as long as it has the variables and procedures inside it to match the use it will be submitted to. For arguments to procedures, this is formally a type of "polymorphic parameterisation" and works well with an inheritance hierarchy. A part of parametric polymorphism.
Dunder
An alias for the double underscore "__" notation. Coined by Mark Jackson, 2008.
Document Object Model (DOM)
A broad API or view of a page of nested markup that treats the page like a tree structure for the purposes of navigation.
Dunder
An operator (".") usually used to find elements inside an object, class, or library.
Dynamic languages
Dynamic programming languages are high level languages which are able to execute many common programming behaviours at runtime rather than deciding what to do at compile time. Alternatively, static programming languages need to be compiled into machine code before runtime.
Encapsulation
One of the main tenets of Object Oriented Programming; that data and the procedures to act on it should be within the same object/class, and that direct access to the internal workings of that object/class should be restricted, access instead being through the API.
Encoding
Encoding is the process of converting information, characters for example, into another form or representation using a set of specific rules. Most often used to describe the representation of human language characters as binary allowing characters to be stored and displayed. Generally, for example, the foundations of character encoding lie in ASCII, which represented 128 different characters as seven bit binary numbers. The letter 'A' for example was represented by the code: 1000001.
Escape characters
Escape characters are a way of writing characters that are either hard to display on a keyboard, or have additional meanings in a language and therefore are hard to put into a literal. Generally these are represented using a backslash, for example "\n" represents the invisible "newline" character which is found at the end of a line of text and causes text to drop a line, and, because of its use in escape characters "\\" represents "\". However, alternative schemes exist, in, for example HTML.
Evaluation
The determination of the result of an expression.
Event based programming
An asynchronous programming structure where the code waits for signals from a graphical user interface before running the appropriate code "registered" (or "bound") to the GUI element.
Exception handling
The capture of an issue raised by whatever is running a program; usually associated with encapsulating the issue as an object and allowing the coder to deal with it before the issue breaks the program. In some languages (e.g. Java), coders are forced to pre-emptively deal with issues if they might arise; in others, exception catching is optional.
Execute / Run
Starting a computer working through the process of acting on code to achieve its associated task / execution of the code. The period when this is happening is known as "runtime".
Expression
A chunk of code that evaluates to some value (e.g. 2 + 2). Expressions may or may not have side effects.
Extension (or Embedded) scripting
Script production to control an application while embedded inside it. Some applications (e.g. ArcGIS; Microsoft Office) provide an environment in which scripts can run; an API for controlling the application; and an application object to use to talk to the application.
First generation language
The earliest kind of computing language, initially programmed by adjusting hardware like switches. The code was represented as binary code statements, each of which would cause a cascade of changes through a computer as electrical pulses adjusted the hardware. Manipulating the cascades allowed the completion of mathematical and hardware tasks that built into a solution to a problem or an adjustment of the machine. Such languages are still at the core of computers in the machine code, but are rarely used directly by programmers.
A language where abstraction is at such a level that the programmer doesn't even consider tasks that need to be undertaken to fulfil a solution (c.f. Fourth Generation Languages), but concentrates of defining what would qualify as a solution and leaving it to the computer to solve it.
Firewall
Software that controls communications into and out of a computer, with the aim of preventing security issues. A firewall might, for example, close unnecessary ports or limit incoming messages to only responses replying to messages initialised on the machine.
Flushing
Flushing is the forcible writing of data out of a stream. Occasionally data can be stored in a buffer longer than you might like (for example if another program is reading data as you're writing it, data might get missed is it stays a while in memory), flush forces data writing.
Fourth generation language
A language that has such a high level of abstraction that the programmer does not need to know anything about the underlying computation or hardware, but concentrates on defining a sequence of tasks that need completing, for example by dragging and dropping them into a timeline.
Free variable
A variable in Python which can be used in a block, but which isn't declared within it, or limited to its scope, while not being global. One needs to be aware that often while it is ok to use a free variable in Python, assignment in a block can cause the variable to become a new local variable both back and forth throughout a block.
Function
In general a synonym for a procedure, though some languages utilise apparent synonyms for slightly different things, so, for example, Python distinguishes between a function (procedure) and method (procedure in an object), and VBA distinguishes between a subroutine (a piece of code called without returning a value) and a function (a call built into an expression and returning a value &ndash though there are also more subtle differences).
Functional programming
A branch of declarative programing in which the solution desired from the program is expressed, and then as nested sequence of function calls put together to generate the desired result. In general, this aims to reduce the number of stateful variables, preventing side effects. Functional languages were less popular than Imperative languages because they are less intuitive to write, but have risen in popularity because the reduction of side effects allows programs to be more easily split between processors on modern multi-processor machines.
Garbage collection
Garbage collection is a form of automatic memory management. Objects which are no longer in use by a programme are removed from memory. This is usually determined by seeing when the program no longer holds references to the object, and when, therefore, it can no longer be identified for use within the code.
Global/Module variable
A global variable can be seen anywhere within a program or runtime environment. A module variable is similar, but the scope is limited to, or through, a module.
Glue scripting
Script production to pull together several other pieces of software and code to achieve some goal, for example an analysis.
Graphical User Interface (GUI)
The graphical interface through which users interact with software. On personal computers this is generally centred on the "WIMP" structure (Windows; Icons; Menus; Pointer). GUIs generally contrast with Command-line interfaces.
High level language
A language with a high (or 'strong') level of abstraction, that is, its representation disguises the complications of the underlying machine code that controls the hardware closely.
HyperText Markup Language (HTML)
A system for 'marking up' (structuring and enabling) the hypertext pages of the World Wide Web.
HyperText Transfer Protocol (HTTP)
A protocol for the gaining and sending of hypertext over the internet, almost exclusively used for web communication.
Hypertext
A text or text system in which terms are linked to additional information. Although hypertexts have a long history include such things as encyclopedias, the best known example is now the World Wide Web.
Identifier
An identifier is a lexical token (i.e. a label) for an entity such as a variable or procedure.
Indentation
Although indentation is not a requirement of most programming languages' syntax, it is good practice to distinguish nesting in code by indenting it. In some languages, most notably Python, it is demanded in the syntax as distinguishing between blocks of code and to clarify the link between control flow constructs. An indent refers to the white space to the left of the first element in a line of source code. A "dedent" is the opposite. For most languages the assumption is that TABs will be used for indenting, though Python standards suggest four spaces.
Instance
An object of some specific class is regarded as an "instance" of that class, created by a process of "instantiation".
Instance variable
A variable inside an object, created with the object, and existing all the time the object exists, as distinct from variables associated only with procedures or (more rarely) a class. In general such variables are declared inside a class but outside procedures. They may be destinguished from class variables by whether they are called from objects, or have special handling (for example Python's self.variable_name setup).
Imperative programming
A programming paradigm in which a series of statements are run sequentially to adjust the computers state, usually held between statements by variables. A series of statements build up to create the programmatic result (in contrast to declarative programming).
Import
The process of linking a library to code in Java and Python. In Python, the period during which this occurs is known as "import time".
Instructions
Informally a request for the computer to do anything, but more formally a single command in machine code. A computer's "instruction set" is the set of commands that can be issued to change the hardware state.
Interface
In object oriented programming, interface has two meanings: the first is the public procedures for interacting with a object (see API), the second is a description of the former which a class can claim to implement (for example, through an inheritance system; albeit one where no concrete code is inherited). Interfaces of this second type allows classes to promise they will match certain structures or APIs. These are sometimes called Abstract Base Classes or Abstract classes (though these can have slighly different meanings), and are, generically, essentially a form of communication protocol. Interfaces more generally are the code and software utilised to communicate with a computer or program, e.g. a Graphical User Interface.
Internet
The global network of computers. Although connections are enacted utilising a number of protocols, it is often regarded as those elements specifically utilising the TCP/IP protocols.
Interpreter
Directly runs human readable source code once (rather than producing code that cannot be read by a human that can be run multiple times like a compiler). In practice, the interpreter may produce one-use bytecode (a stage which might be called compilation) and ask a virtual machine/runtime environment to actually run the code (which might be called interpretation).
Integrated Development Environment (IDE)
A text editor with extra functionality to help with writing code. Generally include one or more of: syntax colouring; line numbering; push button running; error identification and help; autocomplete of keywords and procedure names; GUI building help.
Inheritance
One of the main tenets of Object Oriented Programming. In an object oriented system, when a class inherits from another class, it invisibly picks up code from within the other class, without having to explicitly implement it itself. The class inheriting code is known as the subclass, while the one it inherits is known as the superclass. In general, objects are built up in an inheritance hierarchy of increased complication with superclasses representing the more generic behaviours and properties. Inheritance plays well with duck typing, where subclasses can be treated like superclasses in code that only uses superclass APIs.
Implicit typing
Broadly, the opposite of manifest typing in which data types are associated with values rather than variable labels. As values can't usually be predicted prior to the program running, this is usually associated with dynamic languages.
Instance variable
A variable whose scope is an object, and with which each object has its own copy. There is often some cross-over in the declaration of these and class variables, though access to them is through objects.
IP address
A numerical address for a machine on the global network, working as part of the TCP/IP. It is common for such addresses to be also allocated a human-memorable name, the lookup being completed by a call to the Domain Name Service.
Iterator
A design pattern and associated implementations in which ordered data is held in an object which, when requested gives the coder the data one element at a time.
Keywords
Words used in a programming language for a special purpose, and not available for other uses such as variable names.
Keyword arguments
Parameters attributed values based on the name with which arguments are passed into a procedure. Known as "kwargs" in Python.
Lambda function
While the term "lamdba functions" has a wide range of related uses, what it usually means in coding is a short procedure with no name that can be embedded within code. Such functions are often self contained, with the scope of internally declared variables being limited to the lambda. This limits side effects, and can make lambda functions popular for concurrent programming.
Legacy code
Code that is, in some sense, unsupported or otherwise out of date. Usually this is code in an older language which is still used either because there isn't the will, knowledge, money, or time to replace it. Legacy code can be very stable where hardware is reliable and sofware isolated from the internet, but it is liable to sudden, confusing, and expensive failure where these are not true.
Literal
A literal is a notation for representing a fixed value in source code. Literals are often used to initialise values. "Hello" could be a string/text literal, for example.
Libraries
A library is a collection of resources made available for other coders to use. Libraries can be loaded into a program as it is compiled, or later as the code is running/starting (a "dynamically linked library" or DLL). Libraries are often synonymously associated with "class libraries" (collections of classes used in object oriented programming) and "packages" (a bundled set of code with a specific namespace). Libraries may be a collection of files, a collection of files in an encapulating file format (e.g. a zip file), or a single file (for example, many Javascript libraries, or Python modules).
Literate programming
A form of programming in which human language is the chief component describing the logic in documentation, and the code itself is there as a backgrounded element. This is heavily documentation-led programming, in broad, but not exact, contrast to Self-documenting code.
Local variable
A variable whose scope is limited to a sub-element of a class or program, for example, a procedure.
Low level language
A lanaguage with a low level of abstraction, that is, its representation maps onto the underlying machine code that controls the hardware closely.
Machine code
The instructions, directly (more or less) controlling the hardware of a computer. At the lowest level 'numerical' machine code is written in written in binary. The level to which a language hides the complications of the machine code is the abstraction.
Manifest typing
Manifest typing is the process of explicitly identifying a variable's type when it is first used or declared. Manifest typing is usually associated with static programming languages as the object type of the variable is assigned at compile time. Alternatively, languages which use 'Implicit Typing', deduce a variable's type at runtime and do not require explicit identification of a variable's type upon declaration.
Markup
A language which imposes a structure and/or semantics on plain text. Probably the most common markup language is html.
Marshalling
Marshalling is the process of converting objects or data structures into a format (usually a series of bytes) so the can be stored or transmitted. Storage maybe in a file or in memory buffer. This process is sometimes known as serialisation. The opposite process is known as deserialisation or demarshalling.
Memory (Computer memory)
The computer hardware devices involved in storing information for immediate use in a computer. Usually divided on most machines into Read Only Memory (ROM) (largely used for starting the system); Random Access Memory (RAM) (used for quick storage associated with running programs); and Hard Drive Memory (long-term data and software storage). Excess use of RAM can lead to the use of "Virtual Memory" stored on the harddrive, and dramatically slow programs.
Method chaining
A construction usable where procedures returning objects containing other procedures can be chained together rather than attaching each procedure call result to a separate variable, thus:
a = b.c().d().e()
Module / Package
A collection of code that can be called upon to do specific jobs. This can include libraries of classes for use in code. In Java and Python, packages have a namespace, whereas in Python a module doesn't. Packages in some languages can be associated with a package manager for installing the packages and ensuring new code recognises the location of the packages on a system.
Mutator method
A procedure for setting the value of a variable inside an object. Often called a "setter", as generally such procedures are named "set" and then the variable name. Often associated with direct access to the object being limited through access control.
N-tier architecture
A common architecture for enterprise (business) systems, especially on networks such as the internet. This architecture involves splitting core functionalities likely to take significant processing across different machines, each running a separate piece of software that acts as both a client and server in communicating with other machines to do a job. And example of a 3-tier system is a database holding data, working with "middleware" which does data processing, and a client that does visualisation.
Name mangling
The automated alteration of variable or procedure names for some purpose during the preparation of code for running; often so that elements with the same name don't clash (as a replacement for, or supplement to, a namespace).
Namespace
A name or series of names used to identify code and other resources from each other. Examples include a file directory tree, but often namespaces attempt to name code uniquely, for example through a combination of unique internet addresses and file locations. Unique namespaces allow a programmer to talk about code in a unique manner. For example, there might be any number of code files called "mycode.txt". If we want to use a specific "mycode.txt" in our program, how do we talk about it? Adding an internet address owned by the developer of mycode.txt to the name makes that version unique.
Native code
Generally code compiled to machine code for a particular system. Interpreted code can sometimes link with, and make use of, native code, and some virtual machines will make use of pre-existing and highly optimised native code to run popular or intense source code instructions rather than compiling everything anew.
Null object
A null object is a behaviourless object often attached to a variable to show it isn't attached to anything useful or hasn't been initialised. It can be used, for example, to remove a variable label from its current value but leaving the variable label in existence. Different languages have different names for this: Python uses 'None'; Java has 'null'; and VBA has several different null objects (Null; Nothing; Empty) with slightly different meanings.
Object
A collection of code accessed via a variable label and defined by a class which acts as the type of the variable/object. Multiple objects can be instantiated from a single class, essentially copying the class code. Usually classes/objects try to represent objects in the real world or collections of procedures to deal with specific data. Variables and procedures with the object can be accessed via the dot operator.
Object Oriented Programming (OOP)
A programming paradigm in which code doing a specific set of jobs, usually on a particular kind of data, is separated off into "objects" that encapsulate those jobs (and data) and make them available for other code to use. Essentially this is an extension of procedural programming, but the procedures are in source code files external to the main body of the code that initially starts running. In addition, there are generic descriptions of such objects ("classes") which can also inherit procedures from other classes. One big advantage of OOP is that code is usually made up of a small percentage of new code, and a very large percentage of code written by others and made available to do complicated jobs (for example, displaying text on a screen).
Ontology
Ontology is a structured knowledge framework, for example, formal naming and definition of the types, properties and relationships that exist for entities. It usually details the associatated objects' semantics.
Open Source Software
Open source software is software for which the source code is publicly available, and may be adjusted and distributed under the limitations of an Open Source License. Licenses are ratified by the Open Source Initiative.
Operating System
Software managing the interaction with file systems and other hardward, therefore controling the running of other software. Classic OS include Windows and various systems matching the POSIX specification.
Operators
Symbols in a computing language that act on surrounding code or values. Operators may be uniary (work on one thing) or binary (work on two things) or more. They may be prefix (before the thing operated on), infix (between two) or postfix (after the thing). Example operators working on values include the infix binary "+", which usually adds two numbers. Example operators working on code include the infix binary "." which finds code inside an object. Operators generally have precedence.
Ordered data
Ordered data has a sequence in which one data point is ahead of another in a store based on some key piece of information. This doesn't, however, mean than this matches a natural order and the data is sorted as we would intuitively think of it; order, may, for example, be on the basis of when elements where added to the store.
Ousterhout's Dichotomy
John Ousterhout's division of high level languages into systems (or application) languages (with high flexibility/power, high speed, and a complicated learning curve) and scripting languages (with low power, low speed, but an easy learning curve). As Ousterhout has pointed out, better scripting language design, faster computer speeds, and a greater flexibility in the computing elements pulled into languages is resulting in something of a convergence and/or equalisation.
Overloading
In an class, the notion that you can have multiple versions of the same procedure and the system will utilise the one that matches up with the parameters sent. Some languages allow this, while others, like Python, do not (or, at least, not easily). Part of "ad hoc polymorphism".
Overriding
In an object inheritance hierarchy, the notion that a subclass can provide a procedure or variable with the same declaration as one that would be inherited from the superclass, and that this new subclass element has precidence over the superclass one.
Package / Module
A collection of code that can be called upon to do specific jobs. This can include libraries of classes for use in code. In Java and Python, packages have a namespace, whereas in Python a module doesn't. Packages in some languages can be associated with a package manager for installing the packages and ensuring new code recognises the location of the packages on a system.
Parameters
Variables within code which don't initially have values, but which can be set up to make the code run in different ways. Parameterization allows the building of flexible code that can be run for different purposes or in a different manner. Often set up using arguments. See keyword arguments and positional parameters.
Parentheses
() Sometimes known as curved brackets. Often used to denote the arguments of a function.
Parallel programming
The separation of code execution into similar parts running symultaneously and occasionally communicating to unify on a job; for example the breaking up of an image for image processing on different machines. Contrast with the similar concurrent programming where generally a program is broken into dissimilar parts to run on a single multi-core chip machine.
Pascal case
Pascal case is the practice of writing compound words or phrases by capitalising every work in a sequence, removing the spaces, e.g. PascalCase. The difference (a first capital) is enough to mark it out from the more common camelCase. Alternatives include camelCase, SCREAMING_SNAKE_CASE, and snake_case. See case styles.
Pass by assignment/sharing
When a procedure recieves data that isn't a copy of an argument passed in, but rather a reference to the value/object associated with it in memory. This means it can adjust the value and the value will change outside the procedure. Contrasted with pass by value and pass by reference, the latter being different in that in pass by assignment one can't adjust what the external argument variable is refering to.
Pass by reference
When a procedure recieves data that isn't a copy of an argument passed in, but rather a reference to the variable associated with it in memory. This means it can adjust the variable and the variable will change outside the procedure. Contrasted with pass by value and pass by assignment/sharing, the latter being different in that in pass by assignment one can't adjust what the external argument variable is refering to.
Pass by value
When a procedure recieves data as an argument, the data is copied and a whole new variable is created for the procedure. This usually means that changes to the value are limited to the procedure, and variables external to the procedure are unaffected. Contrasted with pass by reference and pass by assignment/sharing.
Patterns / Software design pattern
Patterns are community recognised descriptions of how to structure code to solve specific issues. They generally describe the overall structure and approach to code, and in this sense are distinguished from algorithms, which are generally series of suggested statements, though some patterns do reach this level of detail. c.f. antipatterns.
Polymorphism
One of the main tenets of Object Oriented Programming; that access to key procedures should be made as simple as possible by allowing flexibility in terms of the arguments passed in.
Positional parameters
Parameters attributed values based on the order in which arguments are passed into a procedure and the order in which parameters are listed to receive them.
POSIX
A set of standards for constructing operating systems, the most notable versions of which are the Linux family, MacOS, and UNIX.
Precedence
The language-dependent order in which operators (usually mathematical operators) are processes in an expression (usually a mathematical equation) for the sake of computational ease. In most languages, nesting parts of the expression in parentheses will override the operator sequence and improve human readability, so 2 * 3 + 2 is ambiguous depending on whether addition or multiplication is done first, whereas (2 * 3) + 2 is clear.
Primitives
Primitives are core data types built into the language with a definite space set aside for each type in memory. Increasingly languages are moving away from primitives to have all data stored in objects.
Procedures
A programming paradigm in which code that is frequently used is cut off as a separate "procedure" such that it can be "called", that is run, from another piece of code before the execution returns to the calling code. In most languages there is a way of passing information into the procedure to adjust its behaviour or results and for procedures to return some value to the code that called it. Depending on the language and use, procedures are also called methods, subroutines, routines, or functions. While these terms are often synonymous, they sometimes denote subtle differences in treatment.
Procedural programming
Programming using procedures rather than jumps to labelled point within the body of a program using control flow constructions like goto. This reduces spaghetti code
Port
A number which acts as a flag on incoming communications to a machine, flagging which software the message should be directed to. As only one piece of software can 'listen' to a port at a time, the port numbers up to 1024 are assigned to key software. Ports are a weak point, as any message going to an open port will be directed to any software listening to the port, and so firewalls frequently close ports and/or only allow software that begins communications to receive incoming messages.
Punctuation
Symbols used to structure code, and demanded by the syntax. We might distinguish between punctuation, which marks syntaxic position, and operators that act on surrounding code.
Pseudocode
Not code that runs, but rather informal indicative code-like text that conveys the idea of code that might be developed by replacing the pseudocode with real code.
Reference
A mechanism for allowing code to access data stored in memory; typically a variable would reference some value or object. More than one variable label may reference the same data/code. When data/code in memory has no references, it can no longer be spoken of in high level languages, and is usually garbage collected.
Run / Execute
Starting a computer working through the process of acting on code to achieve its associated task / execution of the code; the time this occurs in is known as runtime.
Runtime Environment
See Virtual Machine / Runtime Environment.
Screaming snake case / All caps
All caps is the format of writing everything in capitals, e.g. ALL CAPS. Screaming snake case is a commonly used format for variables (mainly 'constants' that you don't expect to change) where all caps are linked with underscores, e.g. SCREAMING_SNAKE_CASE. It is named after the more common snake_case. Alternatives include camelCase, snake_case, and PascalCase. See case styles.
Scope
The areas where a variable exists and can be utilised within code (see blocks). In modern languages, different variables can usually have the same name as long as they have different scope. Generally, variables have scope (or are "bound") where they are declared.
Scripts
A short program designed to achieve a specific job, rather than provide a more flexible service to either users (as with applications) or software (as with systems). Generally (but not always) written in a scripting lanaguage. Amongst other classifications, scripts include code to pull other software together to achieve jobs (glue scripting), control or manage systems (control scripting), and control or manage software applications from a position embedded inside them (extension scripting).
Scripting languages
In Ousterhout's dichotomy, a language used for programming scripts, as opposed to a systems (or application) language. Amongst other classifications, scripts include code to pull other software together to achieve jobs (glue scripting), control or manage systems (control scripting), and control or manage software applications from a position embedded inside them (extension scripting). Some languages are specific to one of these remits but others cross several.
Second generation language
The earliest kind of easily human-readable coding language, using short codes to represent collections of underlying hardware operations. Still relatively low level i.e. with low levels of abstraction. .
Self-documenting code
A form of programming in which code is written in a way that reduces the need for comments, for example by having clear variable names and a structure which encourages code readability. This is comment-light programming, in broad, but not exact, contrast to Literate Programming.
Semantics
"Semantics" has a wide variety of meanings in computing, but in analysis is usually used to describe the meaning or context of data, that is, how it represents objects in the real world. Semantic information is often captured or associated with an ontology.
Serialisation
Serialisation is the process of converting objects or data structures into a format (usually a series of bytes) so the can be stored or transmitted. Storage maybe in a file or in memory buffer. This process is sometimes known as marshalling. The opposite process is known as deserialisation.
Side effects
A procedure or expression which affects code elsewhere, usually by changing a variable. Although use varies, expressions assigned to a variable, or procedures returning a value to be attached to a variable are not generally regarded in that respect as having a side effect.
Snake case
Snake case is the practice of writing compound words or phrases by replacing intervening spaces with a single underscore, e.g. snake_case Alternatives include camelCase, SCREAMING_SNAKE_CASE, and PascalCase. See case styles.
Socket
A software representation of a connection to a computer over the internet. Often used with a stream to send data between machines.
Sorted data
Sorted data is ordered on some key piece of information. Informally, we usually think of sorted data as matching a natural or human-defined order: for example numerical order or by alphabetical position.
Source code
Human readable text containing instructions for a computer, that is ultimately converted to something a computer can read
Spaghetti code
Code that is hard to follow because of an over-complicated control flow.
State / Stateful
State is the configuration of a computer, as stored in memory. A computer is stateful if it can have state. Usually when people use "state", they mean Program State, that is, the state determined by a specific program and associated with variables (i.e. not including any state formed by the code itself running other than values placed in memory).
Statements
A statement is the smallest unit of programming that can be evaluated to completion and ask the computer to do a task. Usually this corresponds to a line of code.
Static programming languages
Static programming languages are high level programming languages whose source code must be complied into machine code before the program can run. Static programme languages use Ahead-Of-Time (AOT) compiling to produce optimised code which saves disk space, memory and battery-life at runtime; they generally run more efficiently than dynamic languages.
Standard streams
stdin, stout and sterr are three standard streams associated with running programs, representing input, output, and error logging, respectively. For most programs, these are the keyboard, screen, and screen respectively. They can be redirected (for example to push a file into a program or write to a file), and the stout of one program can be connected to the stin of another using a "pipe" to chain the programs together.
Stream
A software connection down which data can flow; they can be imagined as a pipeline. Streams usually connect to resources outside a specific program, but can be used internally as well; for example to temporarily collect an arbitrary number of points of data, later converted to a more constrained object.
Subclass
In an inheritance hierarchy, the class doing the inheriting from a superclass. Sometimes called a "child class" or "derived class".
Superclass
In an inheritance hierarchy, the class from which the inheriting is done by a subclass. Sometimes called a "parent class" or "base class".
Syntactic sugar
Syntax that doesn't add new meaning to a language, but which makes complicated code simplier to express, or which hides it away. For example, in Python, the notion that procedure calls that look like: object.procedure() are actually usually running as Class.procedure(object).
Syntax
The structuring and sequence of terms that is necessary in any given location to get a program to work. In some respects the computational equivalent of grammar.
Systems
A piece of software providing services to other software. A common example is an operating system. c.f. applications.
Systems (or Application) programming languages
In Ousterhout's dichotomy, a language used for programming full systems or applications, as opposed to a scripting language.
TCP/IP
The combination of two protocols, the Transmission Control Protocol and the Internet Protocol, used for communication over the internet.
Test driven development
A development process centred on building Unit Tests early in the process and building code to satisfy the tests. See also design by contract.
Third generation language
Computing languages reading more like human languages and mathematic than something interpreted by a machine, hiding almost all of the actual action of the hardware (c.f. Second Generation Languages) and therefore classed as high level, that is, having high levels of abstraction.
Thread
A fraction of a program process separated off and running as a separate entity, communicating with the main program ("main thread") and other threads when needed. In theory, this could run on a different core chip in the computer, meaning it would run in synchronously (concurrently) with other threads, improving performance, but threads have other uses; for example, keeping track of multiple users.
Type
A definition of a specific form of data, usually in a variable; these can be simple types like "integer" or container types like "list", or complicated types of code with their own variables and procedures inside, i.e. classes.
Unified Modelling Language (UML)
A set of standards for drawing code, code flow, and uses, as diagrams.
Uniform Resource Locator (URL)
An addressing system that locates machines on a network, the files on a machine to access, and a method for getting them. Informally, this is now used so often for the web it is called a "web address". URLs are a more specific form of Uniform Resource Identifier (URI).
Unit test
Code to test that other code meets a set of requirements, usually centred on the API. Often associated with test-driven development.
Variables
A set of values or code held inside the computer with an attached label to refer to it. Variables are considered to hold the state of the computer with respect to the program running. Variables have scope. See local; free; class; instance; and local variables.
Version control
Version control systems keep track of changes to code, allowing developers to roll back changes.
Virtual Machine / Runtime Environment
Process Virtual Machines are programs that act as a platform in which to run other software. They may include an interpreter, and will usually add security to prevent code run within them from damaging the local Operating System. Runtime Environment is an older term for the specific element running the code. Process Virtual Machines are not to be confused with System Virtual Machines, which recreate a whole computer inside another, for example allowing you to run Linux inside Windows.
World Wide Web
The World Wide Web, or "the Web", is an internet-based system of hypertext resources and associated media.