Hiding details. When a language is more abstract, you can write programs using a smaller number of (individually more powerful) operations.
An object-oriented language designed by a committee for the DoD in the late 1970s. Turned out about like you would expect.
A general term for several kinds of work that attempt to make machines think. The more mathematical have had some success (e.g. in computer vision).
A programming language initially designed in 1958 by a committee (bad) of very smart (good) people. Rarely used to write programs, but had a great influence on succeeding languages.
A method for doing something. Recipes are examples of algorithms.
Letters and digits.
Application Program Interface. The list of commands an operating system or library will accept from applications.
An extremely succinct language designed in the early 1960s by Ken Iverson. Used especially in numerical applications. Its modern descendant is J.
A program that is not infrastructure. E.g. a word processor, but not an operating system. Not a precise term.
A vaporware Lisp dialect.
What in school you called a matrix: an n-dimensional collection of numbered pigeonholes for storing data.
Application Service Provider. A company that lets you use software on their computers via a network, as opposed to installing and running the software on your own computer.
A more programmer-friendly form of machine language. The commands are the same but you can use more convenient names.
Bondage & discipline language. A language that makes the programmer follow strict rules.
The rate at which a connection can transmit data.
Using Bayes’s Rule, which says how to combine statistical evidence.
When used with an article (e.g. “a binary”), object code. When used without an article, a way of representing numbers in base 2 instead of the more familiar base 10. Successive digits (starting from the right) represent powers of two instead of powers of ten. So 101, in binary, represents the number we write as 5 in decimal. Most computers represent data in binary, because it’s easier to design circuits with two states (on or off) than ten.
Performing simple transformations to large areas of a computer’s memory. For example, moving a window on the screen.
A programmer who makes programs longer than they should be.
Describes a language in which programs have subsidiary parts instead of simply being a list of commands.
The inability to understand the power of programming languages more powerful than the ones you’re used to thinking in.
A style of programming that works from the other direction than the earlier top-down style. Instead of subdividing a task down into smaller units, you build a “language” of ideas up toward your task. The two techniques can be combined.
Constrained by a particular resource. E.g. I/O-bound, memory-bound, CPU-bound.
A machine language goto command.
That the number of lines of code programmers can produce per day is constant, regardless of the of the language they’re using.
A mistake in a program. Predates computers; in the early twentieth century it was common to speak of “ironing out the bugs” in a Broadway play.
A segment of memory used to hold a sequence of data the program expects as input, or is accumulating for output.
See Notes.
Any language like machine language, but not of any specific computer. Because byte code is like machine language, it is easy to write a byte code interpreter, which reads byte code programs and executes the corresponding machine language commands.
A beautifully simple language developed by Dennis Ritchie in the early 1970s. Widely used in infrastructure like operating systems and routers.
An attempt to add object-oriented capabilities to C, designed by Bjarne Stroustrup in 1983. Popular because its syntax is like C’s, and it can be intermixed with C programs.
Common Gateway Interface script. A program that a web server runs when it needs to compute something (e.g. search results) rather than just sending you a pre-existing web page. The key limitation of CGI scripts is that they generate only one page before terminating, rather than remaining in memory and having an ongoing conversation with the user, like desktop software.
A way of summing up all the information in a file to get one number that can be used to identify it. One (not very good) way to calculate a checksum, for example, would be to use the number of characters.
See infinite loop.
In object-oriented programming, a data type.
The series of HTTP requests sent to a web server by one specific user. Usually equates to the series of web pages they visited.
A computer or device that submits requests to a server.
A primitive language designed in the early 1960s for use in business applications. Only recently succeeded by Java as the most popular language.
When unqualified, source code.
Located, especially at an ISP.
Part of a program that is ignored by the computer. Usually inserted as an annotation for human readers.
A popular dialect of Lisp designed by a committee in the 1980s.
A program that translates programs written in a more powerful, succinct language (a high-level language) into the simpler commands (machine language) that the computer hardware understands. See also: interpreter.
The time complexity of an algorithm is how fast the time required to complete it grows as the size of the input grows. For example, if you have to search a room for a specific person by looking at each in turn, the time required to find him will be proportionate to the number of people. Such an algorithm is called O (n), meaning it takes time proportionate to n, the size of the data. Whereas if you wanted to find the two people in the room who looked most like siblings, you’d probably take time proportionate to the square of the number of people, because you might have to compare every pair, and the number of pairs is the square of the number of people. Such an algorithm is O (n 2).
A high-level language expression (or statement) in which different code is executed depending on whether or not some condition is true. For example: if it is sunny, then go for a walk, otherwise stay inside and read.
Filtering email based on what it says, rather than, for example, where on the Internet it came from.
Central Processing Unit. The part of a computer, usually now a single chip, where computations are carried out. The concept is growing blurred, because there are now processors within e.g. graphics cards and hard disks.
When a bug causes an operating system or application to stop working. Or, when applied to hard disks, a hardware malfunction.
Debris.
The minimum time required to execute a machine instruction. A computer with a clock speed of 1 GHz has a billion cycles per second, meaning it can execute up to a billion machine instructions per second.
Defense Advanced Research Projects Agency. Has funded much of the computer research in the United States.
A format for data with multiple parts. For example, you could use one consisting of a pair of numbers to represent points on a graph.
A category of data that a language can deal with. Typical data types include integers (1
), floating-point numbers, which in school you called decimals (1.234
), and character strings (”monster
“).
The opposite of static typing.
Finding and fixing mistakes in a program.
An element of a program that is more of a description than a command. The most common are type declarations, where you say what type of values a variable may have.
Said of practices supported by a standard whose authors now wish they had not allowed them.
A competition where the best design wins, rather than e.g. marketing or control of sales outlets.
Component of an operating system that knows how to talk to a specific device, like a printer.
An unselective and microscopically thorough comparison between two versions of something. From the Unix diff utility, which compares files.
A language defined within another language, usually for a specific kind of problem. For example, if you define a series of commands for manipulating images, you can start to think of them as a language for manipulating images. See bottom-up programming.
Euphemism for unsophisticated user.
Software to help in writing programs, e.g. editors and profilers.
A quantum of code that when executed yields a value. E.g. the expression 2+3
will yield 5
.
One of the parts of a data structure.
A sequence of characters or binary digits, usually stored on disk.
A programming language widely used for numerical applications. Originally designed by a group at IBM in 1956, it has evolved greatly since.
An open source dialect of Unix.
Software distributed for free.
A subroutine that, when called, yields a value, which becomes the value of the call. In some languages, functions are a data type.
Recovering memory that is no longer needed by a program automatically, instead of requiring the programmer to explicitly (and often mistakenly) declare when he is finished using it.
A program to sequence or move data between applications.
A command that transfers control to another part of a program. Because there is no mechanism for returning to a goto, as there is to a subroutine call, programs that use gotos tend to become spaghetti. Rare now.
“Any sufficiently complicated C or Fortran program contains an ad hoc informally-specified bug-ridden slow implementation of half of Common Lisp."
A solution that somehow breaks the rules. Can be either good or bad.
(1) A good programmer. (2) Someone who breaks into computers.
A data structure like a database in which you can store chunks of data under individual keys and later retrieve the data stored under a given key.
The part at the top of an email containing information about it. The average user sees only the From, To, Date, Subject, and Cc lines, but there are others describing e.g. the path the email took.
Rule of thumb.
Substantially more abstract than machine language.
HyperText Markup Language. The notation used to express web pages.
HyperText Transfer Protocol. The protocol that web browsers and servers use to communicate with one another.
Like an outline, source code is indented to show its structure. When code says to do a list of things n times, for example, the list of things is usually indented to show that it’s within a loop. In most languages indentation is something you add to make programs easier to read, but in some (e.g. Python) it is significant, meaning it affects the behavior of the program.
See circular definition.
Like a compiler, an interpreter accepts programs written in a high-level language, but instead of translating the whole program into machine language and then running that, the interpreter examines the program one piece at a time and executes the corresponding machine language commands.
Part of a program that gets executed particularly often.
To modify a program to keep track of everything it does, so that if it’s slow or uses too much memory, you can find out why.
A computer with an Intel processor.
Input and output. Usually, printing and reading characters or binary data.
Information Technology. Computer infrastructure, or the people in charge of maintaining it. Term used mainly in big or non technical companies.
An attempt at a better C++ by James Gosling. Originally called Oak, it was renamed Java by Sun when they adopted it in the hope of inserting a Sun-controlled layer between operating systems and applications. That didn’t work, but Java is popular anyway, partly due to Sun’s huge marketing effort, and partly because there is demand for a better C++.
A scripting language for web browsers designed by Brendan Eich. It has no intrinsic connection to Java, which is in most ways inferior. Unduly maligned because it is used mainly to do cheesy things on web sites.
A bad hack. (Rhymes with stooge.)
A startup in the earliest phase, when the potential founders are not sure they want to start a company.
Software an organization still needs, which is not written the way they wish it were, and which they can’t afford to or don’t dare to rewrite.
A function that refers to a variable defined not within it, but in the surrounding code. The accumulator generators on Section 13.7 yield closures.
Language for Smart People. A language that puts power over safety.
A collection of existing code for performing a specific task.
An open source dialect of Unix. Called GNU Linux by the fastidious, because while the kernel (the innermost part) was written by Linus Torvalds, more of the code comes from Richard Stallman’s GNU Project.
A family of languages deriving from one John McCarthy discovered in the late 1950s. The two best known dialects are Common Lisp and Scheme. Recent open source languages contain increasing amounts of Lisp DNA.
A series of pieces of data, often of varying types, which can be joined together like trains to make bigger lists.
A way of referring directly to data in a high-level language. In most languages, the literal representation of five is 5
. (The expression
2+3
has the same value, but is not a literal representation.)
Less abstract; allowing only simple commands, like machine language.
One machine language command.
The list of commands a processor knows how to obey. Also, a sequence of such commands.
A program that generates programs. The means for doing this vary between languages, so a “macro” in one language may mean something much more powerful than in another.
A big computer based on designs from the 1960s and 70s.
The worry that one is not as smart as mathematicians, especially when manifested in work with a gratuitously mathematical flavor.
When the interpreter of a language is written in that language. More a technique for describing languages than implementing them.
In object-oriented programming, a subroutine considered as a property of some class of things. For example, the area method of the circle class might be a subroutine for calculating the areas of circles.
A group of subroutines and variables considered as a unit. Generally only specifically noted ones are accessible to code outside the module.
The official version of Moore’s Lawis that the number of transistors on a chip doubles every two years. But most people use the term to mean that processors get twice as fast every 18 months. Arguably more business plan than law, because Gordon Moore was a founder of Intel.
Performing straightforward operations on large amounts of numerical data.
A term with many meanings. In the most general sense, an instance of a data type. E.g. a particular string, or a particular integer.
Machine language, as the output of a compiler.
A way of organizing programs so that the code for performing a certain task on different classes of data is broken up into separate pieces (methods) for each. See Section 10.7.
That one should prefer the simpler of two theories.
Software whose source code is freely distributed and can be modified by anyone, usually on the condition that the modifications also be made freely available. Linux and FreeBSD are well-known open source operating systems.
Independent of one another and therefore combinable in many ways. Classic Lego is more orthogonal than a plastic model kit.
The program that controls the running of other programs. Unix, FreeBSD, Linux, OSX, and the Windows family are operating systems.
Changing a program to make it more efficient.
A computer whose hardware can perform multiple computations simultaneously. Not a sharply delineated category, because all modern processors use some amount of parallelism to increase speed.
That the resources required to complete a task will expand to consume the resources available.
A program that reads input and produces a parse tree.
The data structure into which a compiler translates the characters that make up your program, as the first stage of translating it into machine language.
Algol derivative designed in the early 1970s by Niklaus Wirth.
A piece of code released to fix a flaw in an earlier program.
Personal Digital Assistant. A small computer you carry with you. Usually has an easier but more limited interface than a regular computer.
An open source language developed by Larry Wall. Initially intended for manipulating strings of characters, it became popular because this is a large part of what programmers do. Famous for its complex (but concise) syntax, and its rapid and promiscuous evolution.
A way of joining operating system commands so that the output of one becomes the input of another.
A piece of data whose value is the location in memory of another.
Finding things in memory by adding certain amounts to already known locations. A low-level technique.
Character in the cartoon strip Dilbert by Scott Adams. Generically, an inept and overbearing middle manager.
When applied to growth, means that y grows as a power of x, e.g. as the square or cube of x. The resulting curve gets steeper over time.
Able to be moved to new hardware. Programs written in high-level languages are (more) portable than machine language programs, because they assume (almost) nothing about the hardware.
Web site.
Deciding too early what a program should do.
Tuning a program for performance before you’re finished writing it. The software equivalent of marrying young.
In an operating system that can control multiple programs at once (as all modern OSes can), one of those programs.
A high-level language is what the compiler uses as input to generate object code. (Just kidding; see Chapter 10.)
A program that watches your program while it’s running and tells you which parts consume most resources. See inner loop.
A language for expressing algorithms “on paper” rather than to computers. Arguably, this whole concept is an artifact of using languages that are too low-level.
An open source language developed by Guido van Rossum. Strongly object-oriented in flavor, it is seen by fans as a cleaner alternative to Perl.
Quality Assurance. In software, people who detect and catalog bugs.
An algorithm that refers to itself. A policeman’s algorithm for interrogating people is recursive: ask the person if they know about the crime, or if they know anyone who does, and if they do, interrogate them too.
Redundant Array of Independent Disks. A piece of hardware that uses multiple hard disks to simulate one hard disk that (in theory) never crashes.
A toplevel.
A pattern used like a sieve to retrieve elements of strings.
Reduced Instruction Set Computer. A computer whose machine language commands do little, but run fast. The aim is to make a better target for compilers, in the same way fine granularity film yields sharper images.
A newer open source competitor for Perl and Python developed by Yukihiro “matz” Matsumoto.
To look at a series of characters and divide it up into tokens.
An elegant but prim dialect of Lisp designed by Guy Steele and Gerry Sussman in 1975.
A language used to customize a program. Sometimes open source languages like Perl and Python are called scripting languages, but this usage is meaningless.
A computer on a net work that responds to requests from other computers.
Search for Extra-Terrestrial Intelligence etc. A project to search the electromagnetic background for signals from other life forms, using the spare cycles of desktop computers connected to the Internet.
A token, or zero or more s-expressions enclosed in parentheses.
The canonical object-oriented language, designed by Alan Kay in 1972.
In Unix, a channel through which processes can communicate across a network.
A formal term for programmer.
Code whose structure has so many twists and turns that no one can understand it, including the author.
Unsolicited mass email, usually advertising. From a Monty Python skit in which Vikings drown out conversation with choruses of “Spam, Spam, Spam.”
Specification. An informal description of what a program should do.
Secure SHell. A program for connecting securely to a remote computer.
Secure Sockets Layer. A protocol for transmitting data securely over the Web.
A theoretical machine that can be in some set of possible states, with connections between states when certain conditions are true.
A quantum of code that does not yield a value. To be any use it must thus have some effect, e.g. print something. Arguably, this whole concept is a mistake; in some languages there are only expressions.
A language is statically typed if the type of value that every variable can have has to be known at the time the program is written.
A sequence of characters, usually denoted "like this
“.
A distinct chunk of code. When at some point in a program you want to run this code, you call it, and when the subroutine is finished, control returns to the point where the call occurred. In a cookbook, a recipe for making icing might be a subroutine of a cake recipe, and the call might be “make icing using the recipe on page x.”
A concept included in another. Baking is a subset of cooking.
Nontechnical people, especially managers. Derives from the clothes they wore before they started dressing like hackers during the 1990s.
A data type whose instances are tokens. Like strings except (a) a symbol is a single unit, not a sequence of characters, and (b) there is generally only one symbol with a given name, whereas there might be several strings containing the same characters.
The form used to express the ideas in a program. To give x
the value 10
, different languages might say x=10
, x<-10
,or (=x 10)
.
Someone who installs computer hardware and software and keeps networks running properly.
The implicit belief by system administrators that the infrastructure they oversee is an end in itself, rather than a tool there for users. More generally, the attitude that customers are a nuisance, rather than the reason your job exists. Endemic in jobs not exposed to competition.
A program written to satisfy some temporary need.
A sequence of characters as one unit. A more general term for “word.”
An interface to a programming language in which you have an ongoing conversation with the language, as you do with Unix, rather than simply compiling programs and then running them.
A data structure each instance of which can refer to two or more other instances. For example, a family tree.
A language is Turing-complete if any program written in it can be translated into a Turing machine program and vice versa. All programming languages are Turing-complete, meaning they are all (in a theoretical sense) equivalent in power. Aka Turing-equivalent.
A simple imaginary computer whose properties are used to prove theorems about computation. It is currently believed that you can’t get anything more powerful, in the sense that you can’t define a computer whose programs couldn’t be translated into Turing machine programs. But no one can say for sure, because “computer” isn’t formally defined.
Data type.
A protocol for broadcasting information on networks.
User Interface.
The operating system from which most current ones derive. The term is used both generically and is a trademark of a company that ended up with the rights to an early variant. Originally developed at Bell Labs by Ken Thompson and Dennis Ritchie in the early 1970s.
A one dimensional array; a sequence.
Percentage of time a computer, particularly a server, is doing what it is supposed to. Also, the time since a computer last crashed.
Uniform Resource Locator. The address of a web page. More precisely, a request to a web server, usually for a web page, but possibly to run a program (e.g. a web search).
Software that is talked about but not yet available.
One who supplies money to start or refinance a company in return for some of the stock.
The very first version of something, with the implication that it will be incomplete or broken.
A popular computer terminal in the 1980s.
A server that responds to HTTP requests.
In an unresponsive state. Said especially of servers.
“What you see is what you get.” (Pronounced whizzy wig.) E.g. a word processor where what you see on the screen looks like the page that will come out of your printer.
A format for organizing data.
3.14.142.62