On which machine was the first programming language developed?

The first programming language was machine code, the native language of the machine. Every machine type has its own version of machine code but we can trace the earliest example of machine code back to the days of the semi-automatic weaving loom invented by Basile Bouchon in 1725.

Strictly-speaking, machine code is not a programming language. Programming languages are human languages, a means of producing machine code through symbolic abstractions that are much easier for humans to interpret than native machine code. It should also be noted that programming languages are never developed on a machine, the language is purely abstract and designed according to a specified proposals. The only thing that is actually developed on the machine is the implementation of the machine code program that physically converts the symbolic instruction code into the machine's own native machine code. Before we had any programming languages, all programs had to be written in the machine's own native machine code. Once we had one programming language, we could use it to create translators for other languages and indeed for other machines besides the one on which it executed.

Note that it's difficult to know precisely when programming languages were first used because there were many language pioneers working simultaneously, often sharing ideas and evolving designs to the point that it is difficult to determine at what point a language is "fit for human consumption", so to speak. To make matters worse, many early programming languages were proposed but never designed, while others were designed but never implemented.

Assembly language is the next step up from machine code. Like machine code, every machine type has its own version of assembly language, and is therefore a low-level language. Unlike machine code, code written in assembly language has to be translated into native machine code before it can be executed because machine code is the one and only language "understood" by the machine. Converting from assembly language to machine code is as tedious and as error prone as writing the machine code itself, however the actual conversion process is trivial enough that we can easily write a small machine code program (known as an assembler) to perform the conversion for us. The earliest known usage of an assembly language dates from 1949 on the EDSAC computer at Cambridge University, where the assembler (known as Initial Orders) was implemented in read-only memory. The inventors were Maurice Wilkes and W. Renwick.

High-level languages are more abstract than assembly languages and are generally more portable (not machine dependent). The first high-level programming language was probably Autocode in 1952 on the Mark I computer at the University of Manchester, or Short Code in the same year on the UNIVAC 1. Short Code was based upon an earlier implementation known as Brief Code in 1949 for the BINAC computer, but it was never tested or debugged. Autocode used a compiler program to convert the high-level symbolic code into machine code whereas Short Code used an interpretation program. The difference between the two is that the native machine code produced by a compiler can be stored and executed without any further translation whereas code written in an interpreted language has to be converted by the interpreter program every time it is executed. As a result, compiled programs perform better than interpreted programs.

Modern-day Java is an example of a programming language that is both compiled and interpreted. Unlike a traditional compiler, the Java compiler produces byte code which can then be interpreted to produce native machine code. The reason for this multi-conversion is that the same byte code can be executed upon any machine with a Java virtual machine implementation. That is, the byte code is the native language of the virtual machine and is much quicker to interpret than the higher-level source code would be. It also ensures that the intellectual property -- the source code itself -- is not revealed to the user.

It is worth noting that Plankalk├╝l was designed from 1943 to 1945 for the Z3 and therefore predates assembly language as well as Autocode and Short Code. However it was not actually implemented until 1998, more than 50 years after it was designed!