I've made the point before that, even without Colossus, Turing, or ENIAC, electronic computing would have been developed by IBM, one step at a time, for business computing. IBM came out with the IBM 601 mechanical multiplier as a punch card machine in 1931. At last, businesses could multiply order quantity times price per unit to get a total price, and invoices could be generated without manual arithmetic. IBM slowly ground forward, with the IBM 602 in 1946, which could both multiply and divide. Next was the 602A, a more reliable 602. The 602A was used for some engineering work. But it only had storage for 6 numbers, and took several seconds to do a multiply.

Then IBM introduced the IBM 603, in 1946. This used vacuum tubes, and did the same job as the 602, but much faster. IBM built 100 of those machines, to find out if they could put electronics in the field, service it, and keep it working reliably. It worked, so they followed up with the IBM 604, in 1948. This was a better 603, with more memory, more plugboard-programmed steps, and more compact packaging.

Then came the IBM 605, in 1949. This was a 604 with I/O capability. It was possible to cable together an IBM 605, an IBM 527 punch, an IBM 412-418 tabulator with card reader and printer, and some IBM 941 storage units (16 numbers each!), creating a Card Programmed Calculator. This was almost a programmable computer.[1] The program had to be on cards, and was executed as the cards were read, one at a time. Up to 10 instructions could be stored internally, allowing small loops, but otherwise you could only execute the program once before putting in more cards. There were still plugboards involved, lots of them; each machine had its own plugboard, although there were general-purpose plugboards for card-programmed mode. The whole CPC setup was clunky, but it got work done.

By now it was obvious that everything would be much easier if the program could be stored in some memory device. There were already a few "giant computers" by this point, including the IBM 701 Defense Calculator, but they were very expensive and only for huge organizations or the military. In 1953, IBM came out with the IBM 650, which was a real computer with the program and data stored on a drum rotating at 12,500 rpm. Each instruction specified the address of the next one, so you could get multiple instructions per rev by careful positioning. Don Knuth wrote an angular-optimizing assembler for the IBM 650, called SOAP III. The IBM 650 was the first mass produced computer - about 2000 were made. It was affordable by mid-sized businesses and was a big commercial success. Williams tube machines were faster, but far more expensive per bit.

This shows how much of a limitation memory devices were in the early days. Electronic arithmetic without moving parts was in a production product by 1946, but memory was very limited for years afterward. (ENIAC had storage for 20 10-digit numbers. Colossus wasn't a general-purpose computer, it was a key-tester, like a Bitcoin ASIC.) It was clear early on that stored-program computers were the way to go, but the memory cost had to come way down before programs could be stored.

Von Neumann, in his classic "Report on the EDVAC"[2], put the whole architecture together, describing what to do once some decent memory devices became available. It's an interesting read today, one of the basic documents of the history of computing. Von Neumann concludes that about 2^18 bits of memory, organized as 8K of 32 bit words, was needed to get useful mathematical work done. The program was expected to occupy about 1.5K words, with the rest reserved for data. Then he looks at the delay line problem - the delay line can store large numbers of bits, but the more it stores, the longer the access time. More delay lines in parallel help on speed, but increase the machine size and cost. Based on how long it takes to do a multiply, he proposes having 256 delay lines storing 1Kb each. The actual machine built was smaller - 1,000 44-bit words, made up of 128 delay lines. Memory cost was still a very big problem.

Computing remained memory-limited for decades. Core memory was a million dollars a megabyte in 1970. Superminis of the early 1980s might have 4MB. PCs had 1MB. Not until the 1990s did memory get cheap, and stopped dominating the cost of a computer.

[1] http://www.mirrorservice.org/sites/www.bitsavers.org/pdf/ibm...
[2] https://sites.google.com/site/michaeldgodfrey/vonneumann/vne...