* Los programas para calculadoras electromecánicas tempranas: Las máquinas como el motor analítico (diseñado por Charles Babbage, aunque nunca se construyeron completamente) y el Zuse Z3 tenía programas que controlaban su operación, aunque en formas muy rudimentarias en comparación con el software moderno. Estos programas a menudo se implementaron utilizando tarjetas o cintas perforadas. Estos son candidatos fuertes por ser los primeros, aunque posiblemente no sea un "software" como lo entendemos hoy.
* Programas de lenguaje de ensamblaje temprano: A medida que surgieron computadoras electrónicas, los programas se escribieron en lenguajes de ensamblaje:lenguajes de programación de bajo nivel que correspondían directamente a las instrucciones de la máquina. Estos todavía estaban muy cerca del hardware, pero representaban un paso significativo para abstraer el proceso de programación.
* Los primeros lenguajes de programación de alto nivel: Lenguajes como Fortran (1957) y Cobol (1959) fueron innovadores porque permitieron a los programadores escribir código en una forma más legible por humanos, que luego se tradujo en instrucciones de la máquina. Estos están más cerca de lo que reconoceríamos como software hoy.
Es difícil decir definitivamente cuál fue "primero" porque el desarrollo no fue lineal. Diferentes tipos de programas se desarrollaron simultáneamente en diferentes máquinas. El "primer" software depende en gran medida de cómo defina el "software" y qué criterios priorice.