A programming language whose instructions, when read by a Postscript interpreter, produce graphical output.
Typically, Postscript programs are written by other programs like Adobe Illustrator or dvips. These are never meant to be read by humans.
This talk, however, is about Postscript programs written by humans.
Postscript has two beautiful features: (1) everything (well, almost) is drawn to within the accuracy of the output device and (2) everything is easily scaled. ADDANCHOR basic ANCHOR Basic operations
Computations are performed on a "stack"
3 4 1.5 add mul 
4 1.5 add mul 

1.5 add mul 
add mul 

mul 
ANCHOR Drawing lines
100 100 moveto 450 600 lineto strokeANCHOR Drawing circles
300 300 100 0 360 arc strokeANCHOR Filling circles
300 300 100 0 360 arc gsave 0.8 setgray fill grestore 10 setlinewidth strokeANCHOR Drawing Bezier curves
200 200 moveto 100 500 500 300 400 550 curveto strokeANCHOR Displaying text
100 100 moveto (g) showADDANCHOR transform ANCHOR The coordinate transformation
The initial coordinate transformation  
User space  Device space 
200 300 translate 

User space  Device space 
200 300 translate 45 rotate 

User space  Device space 
200 300 translate 0.8 3 scale 

User space  Device space 
Everything produced is passed through an affine coordinate transformation from user space into device space. This transformation has the form
or in the language of linear transformations
This is typically expressed in homogeneous coordinates
In this formalism,
200 300 translate [1 0 0.5 1 0 0] concat 

User space  Device space 
200 300 translate [0 1 1 0 0 0] concat 

User space  Device space 
Well, everything: lines, curves and text are all described in user space, then transformed into device space before rendered. To understand how this works, let's take a look under the hood. ADDANCHOR whatcando ANCHOR What can Postscript do?
Apparently, not much: ultimately everything in Postscript is described in terms of lines and Bezier curveseven circular arcs:
ANCHOR and text
There is, however, a great benefit to be gained. ADDANCHOR render ANCHOR How does Postscript render graphical information?
Postscript draws a line between two points
ANCHOR
recursively by drawing the lines between the endpoints and midpoint
ANCHOR
and again and again
ANCHOR
until finally
ANCHOR Bezier curves
The four points define the curve
where
ANCHOR The curve splits into two other Bezier curves whose control points are easily obtained.
ANCHOR Just keep dividing the smaller pieces
ANCHOR until
ANCHOR So what? This means that to transform a line or a curve, all we need to do is transform the control points. That's easy.
The Economics of Computing

After making a few widgets, the marginal cost of making more widgets is almost zero.  
Postscript is a full fledged programming language with loops and other good things.
The Elements, Book I, Proposition 1
ANCHOR
The Nine Point Circle
ANCHOR From calculus
ANCHOR Introducting Wooody, the loveable star of Toy Tale
Transform Wooody ANCHOR Wooody emotes
ANCHOR Orthogonal projection
ANCHOR Perspective projection
ANCHOR
and then
Let's see: we need
so we'll take
We can accomplish this by
ADDANCHOR resources LASTANCHOR Resources
Adobe, creators of Postscript
Ghostscript, a free Postscript interpreter and viewer
Guide to Postscript Programming
Bill Casselman's Geometry and Postscript, a text book used to teach PostScript within a Geometry course.
Bill Casselman's Mathematical Graphics resources page.
Peter Kleiweg's
Postscript page
P.S. All figures have been drawn in Postscript.