Stephen Gold is a computer hobbyist who creates, collects, maintains, and publishes open-source JVM software, including apps, libraries, and documentation.

He holds an advanced degree in Electrical Engineering. He resides in California with his (long-term) sweetheart. At the present time, he seeks neither employment nor funding nor romance.

His current software interests include:

You can follow his devlog at Tumblr.

Computer jargon

Digital devices (such as computers and phones) combine hardware and software. Hardware refers to the tangible parts, such as chips, circuit boards, buttons, and cables. Software is information, especially instructions that tell hardware what to do.

For example, a computer’s software determines what it does when the Enter key is pressed. Depending what software is running, the same hardware might respond differently to identical keystrokes.

Source code and open-source

Software, in its finished form, consists of long strings of numbers suitable for controlling a particular kind of device. Because strings of numbers are difficult for humans to understand, most software is authored in the form of source code (human-readable text) which is then translated (by a computer) into the desired numbers.

Open-source software refers to software whose source code is readily available.

Plenty of software is sold without its source code, in the belief that buyer needs only the numeric software that runs on their device. That might be true if the software were perfectly versatile and never became obsolete. But in order to substantially adapt or maintain a piece of software, one needs the source code. Lacking source code, buyers must rely on the vendor for customization and updates.

Software without its source code is like a pre-cooked meal. If the meal is too salty, you can’t do much except ask the cook to use less salt next time or try a different cook. Acquiring source code is like collecting recipes, so you can cook dishes at home and adapt them to your taste.

Apps and libraries

There are many kinds of software projects, including apps and libraries.

App is short for “application software.” An app is a piece of software whose function is clear to the end user, such as a word game, a web browser, or a video mixer.

A library, is a software building block, used in other (larger) projects. Libraries matter greatly to people who create and maintain software, but are mostly invisible to end users.

For instance, a web browser app might use a library to render images to a screen. Doing so would free the app developer from dealing with the quirks of every image format and type of screen. Writing software is time-consuming and painstaking work. A good library might get re-used in thousands of apps, resulting in huge savings of effort.

Pursuing the food analogy, apps are dishes ready to be eaten, and libraries are ingredients ready to be cooked. The availability of mass-produced ingredients like flour and cheese frees cooks from needing to grow their own wheat or raise their own livestock.

Repositories and commits

Software projects often involve collaboration, with hundreds of people making thousands of changes to the source code over many years. To help manage all this activity, most projects keep a history of all changes (and who made them, and why) in a special-purpose database called a repository. The individual changes are called commits.

Projects also use repositories to keep a history of all their officially-published products.

Artifacts and coordinates

In the world of JVM software, libraries are distributed in the form of pre-built software artifacts. Software developers needn’t build libraries from source code or explicitly download the artifacts. Instead, they can simply refer to them by their Maven coordinates.

Maven coordinates consist of three parts: a group ID, an artifact ID, and a version string. Given the coordinates of a library, software build tools automatically download the corresponding artifacts from the repositories that hold them.

Stephen’s open-source software projects at GitHub

Stephen publishes source code and build instructions for his open-source software projects at GitHub. He also releases artifacts to the Maven Central Repository, under the com.github.stephengold group ID.