Many GIS tasks can be repetitive or be sufficiently intricate that a mere human will make a mistake while performing the task. Since many GIS operations depend on the steps that occurred before, mistakes have a tendency to compound as successive processing steps work on them. Oftentimes the only fix is to start over at the step where the error occurred; if, of course, you can find it.
This is where scripting comes in. Users write programs that define to the GIS what processing is to be done, when it should occur, and what to do with the output. In recent years the go-to scripting language became Python, an object-oriented scripting language which is fully implemented in both ArcGIS and Quantum GIS. Indeed Python now functions as the command line in ArcGIS, and its visual modeling utility, ModelBuilder, can export model sequences directly as Python scripts. In the past, GIS applications would use a variety of languages, particularly VBA, and ESRI’s custom scripting language for ArcInfo, called Arc Macro Language (AML). You can still find scripts written in ESRI Avenue written for ArcView 3.x as well. While .NET languages are still used for GIS application programming, most GIS scripting has coalesced around Python.
Regardless of the language you use, scripting can be a good way of formalizing repetitive workflows to get work done more efficiently in a standardized way, and far quicker than doing the same process steps manually. Many a GIS practitioner got their start not through geography, but through scripting, GIS application development, and web programming. As always, the decision to automate a process is somewhat complicated– often the time investment to automate a workflow far exceeds the time it would take to just do the job by “hand”. Thus scripted solutions tend to happen with processes that need to be performed on a regular basis, with large amounts of data, and where human error is very likely.
GIS users certainly don’t need to learn how to write a single line of code to use GIS, but scripting often can help users do work more quickly, more elegantly, and sometimes (definitely not always) more easily than doing work manually.