The ENIAC was the first programmable, electronic, general-purpose digital computer. However, it was programmed by "rewiring", and this is what I do not understand.

When we say "programming by rewiring", what does that actually mean? Is it similar to programming an FPGA? Was ENIAC basically a non-IC FPGA?

What is the "magic" of ENIAC that made it "programmable"?

  • 15
    It was "programmable" because the machine did not have a fixed function. Rewiring, as the linked article says, wasn't a matter of dismantling and resoldering, but linking the components together through plugboards. So it was like a giant solderless breadboard. It perhaps owed something to the telephone exchanges of its day. Commented Sep 23, 2023 at 18:09
  • 7
    There are a number of functional units (such as accumulators that were capable of addition and subtraction). The interconnections between units determines what the overall computer is calculating. Thus, it's programmable in a similar sense to the way one can program an electronic analogue computer.
    – dave
    Commented Sep 23, 2023 at 18:21
  • 3
    There's a whole class of computing devices called analog computers, not as meaning "mechanical", but as in the opposite of digital. You could wire them up to calculate all kinds of things, math functions and physics simulations etc. en.wikipedia.org/wiki/… Commented Sep 24, 2023 at 6:03
  • 3
    @Brian Colossus wasn't a general purpose computer. It could be programmed but only in a specific subdomain of computing. It was definitely not Turing complete.
    – JeremyP
    Commented Sep 24, 2023 at 11:21
  • 4
    @JeremyP I have yet to see a really Turing complete machine. Most lack that pesky infinite tape ... ;) Commented Sep 25, 2023 at 4:27

6 Answers 6


The ENIAC was the first programmable, electronic, general-purpose digital computer.

A debatable claim, as each of those attributes (*1) is flawed in one way or another.

When we say "programming by rewiring", what does that actually mean?

ENIAC was just a bunch of components (mostly accumulators *2) which needed to be connected by plugging of wires to create a data path as well as control logic and dialing of knobs to select certain functions to be performed. Each of the 20 accumulators had 12 knobs to be set to the right combination to determinate what it will do with incoming pulses in relation to its content and when and what it will pulse out (*3).

After that the parts became a special one-function computer.

Well, that is if everything worked out - which it mostly didn't. Not so much because of logical errors as due to timing issues. Accumulators receiving their input too late, or control pulses being not recognised and so on.

With that structure the ENIAC did rather resemble a contemporary accounting machine like the IBM 402 than anything we think of a computer today. Including programming by wiring function blocks like the 402 did by using a plugboard. The main difference was being tube based instead of electro-mechanical (*4).

Is it similar to programming an FPGA?

Kinda, but not really. Programming an FPGA is done by storing information in memory cells which in turn control connections between elements (gates etc.) and buses. ENIAC in turn was physically rewired each time to solve a new task.

In addition, each of the elements had controls to set what subfunction was to be done.

In that form it became a 'new' one-function machine.

The closest equivalent would be a number of TTL ICs on a breadboard which can be (re)wired to create a desired circuitry. Or maybe those nice 1970s trainers like Heathkit's ET-3xxx series, or Tandy's Science Fair sets. In fact, for all building blocks of the ENIAC (Clock, Sequencing, Accumulators, Multiplexers, etc.) similar units existed as TTL or combination thereof.

It wasn't until later that those connections were put into a formalized scheme which in turn could be 'programmed' by flipping switches instead of plugging wires. Again later when those switches were replaced by a loadable control store - at that point the comparison with an FPGA becomes more likely.

What is the "magic" of ENIAC that makes it "programmable"?

The magic was not being a single function device but being reconfigurable by rewiring. All in the basic sense of 'programmable' is that there's a procedure that can be changed.

*1 - If at all, and using all those adjectives with their modern meaning, then the Manchester Baby is, IMHO, the first machine that fits. Maybe less capable than ENIAC, but by no doubt regarding those requirements.

*2 - Today one would call them rather ALU with a register included plus logic attached to control transfers of input or results (values or signals).

*3 - ENIAC was for most parts a serial design.

*4 - Ken Shirriff has provided a very nice and detailed description about how a 402 was plugboard programmed to perform iterations over input data. The terms used ((sub)total, etc.) are applications specific and may need some thinking to reveal the modern equivalence behind.

  • 2
    Worth adding that the Manchester Baby was the first stored-program computer, and was thus much more like what we think of as a computer. Commented Sep 23, 2023 at 18:43
  • 3
    @JohnDallman yes, of course, it was. But even if it's program would come from a tape - like the Z3 had - it would still better qualify to those attributes. The only real difference with the Z3 is the later being electro-mecanical. Neither of them did need rewiring and electronic debugging as part of that. So programmable in today's sense is way on the side of them. Likewise the GP part can be disputed for the same reason.
    – Raffzahn
    Commented Sep 23, 2023 at 18:49
  • 1
    Then if you add the adjective "usable" to the list, you arrive at EDSAC, according to Prof Wilkes anyway.
    – OrangeDog
    Commented Sep 24, 2023 at 20:57
  • 1
    Some FPGAs store configuration data in memory cells, but I think the term "FPGA" is also used to describe devices which have grids of wires connected by anti-fuses, which would physically establish direct electrical connections between inputs and outputs. Programming circuitry would need to be able to drive wires to voltages beyond normal operating range, and connections once established couldn't be changed, but programming of that kind of device could be viewed as similar to programming an ENIAC, where inputs to some circuits would each be physically connected to one other circuit's output.
    – supercat
    Commented Sep 25, 2023 at 16:35

"Programmable" means different things to different people. I have a couple of "programmable unijunction transistors" in a drawer: "programmable" means you can set their switching thresholds with resistors, unlike a real unijunction transistor with its fixed threshold.

The designers and users of the Eniac certainly thought of it as programmable from the beginning. The wiring that did the programming was like a manual telephone switchboard of the time: you connected the things that needed to talk to each other with "patch cords" that routed data and control signals to where they needed to go. Conceived as temporary, like a telephone circuit.

But in 1948, it was programmed to emulate a stored-program computer reading instructions from one of its "function tables". This slowed down computation, but speeded up programming so much that programming by patch cord was never used again. Source: "The Computer from Pascal to von Neumann, H. H. Goldstine, Princeton University Press 1972.


To avoid confusion, I'll take the word programmable to mean adaptable to perform different computations. In a modern computer, this is done by loading numbers into memory that are interpreted by the control logic of a processor as instructions on what to do with its computational resources.

At first, ENIAC had no such central authority responsible for controlling all of its computational resources. What it had instead were a relatively large number of accumulators, multipliers, a few function tables, and assorted other units. You wouldn't be far off to think of one of the accumulators as a combination of a register and a very simple ALU.

Where configuration/programming came into play is that all of these units could be flexibly interconnected. These interconnections are how data was transmitted from one unit to another, and sending data to a unit is what triggered it to do its job. (Add, multiply, read a function table, read a punched card, etc.)

There were also a few functional units explicitly dedicated to sending sets of pulses for loops. (And some loops were accomplished by physically reloading the machine with a new set of punch cards with output from the previous computation.)

The net of all this was a set of computer building blocks that could be rewired into what was essentially a specific computer for a specific task. This design derives from the fact that memory was (very) expensive, the stored program concept was slightly in the future, and ENIAC was built with very conservative engineering. The goal was a working machine to support hte war, and not to push the boundaries of what could be done. (This also explains the sheer number of tubes for its comparatively limited functionality).

In practice, this approach gave a machine that was very time consuming and error prone to reconfigure. Think in terms of days. However, it also came with one notable 'runtime' advantage. Lacking much of a central control authority, there was nothing stopping the machine from being configured in a way where multiple functional units were operating at the same time. Aside from how they might be wired together, two accumulators are totally independent and can proceed in parallel. (This is analogous in modern terms to a data flow graph with two parallel streams.... both can run in parallel if you have the CPU resources to do it.)

I'm mentioning this because the design of the machine was not static over its lifetime. It received several sets of upgrades over its operational life. One such upgrade was a programming system that let the machine take instructions from a function table. If you've seen a picture of ENIAC, these are the large wheeled boxes with arrays of switches on the side.

What the upgrade did is hardwire the machine in a specific configuration and use a function table to drive that configuration to achieve specific computations. If you like, this is analogous to implementing an interpreter of sorts over the existing ENIAC hardware, and then running that interpreted language.

Due to the newly added central controller, this eliminated the ability to run computational units in parallel. I've seen estimates as high as a six fold loss in computational rate. However, this cost was repaid by a dramatically faster reconfiguration process. While the operators had the ability to switch back to the older, faster style of configuration, my understanding is that they never did.

If you want to find out more, one book I'd recommend on the subject is "Eniac in Action". It covers the machine, but also specifically also how it was used over its operational life.

More details here, also.


Plugboards are just a way of writing programs. Here is a later example of an IBM plugboard.

IBM plugboard

  • 1
    It would have been a good idea to add what this shows (a 402 plugboard) as well as where the picture was taken from (Wiki).
    – Raffzahn
    Commented Sep 28, 2023 at 12:47

So, when you build a mechanical computer such as the Antikythera mechanism, the behavior of the system, the nature or range of the output never really changes. It's dedicated to a specific type of calculation, in this case analog descriptions of planetary motion. There can be no reconfiguring the system to produce different outputs without disassembling the gear trains and using different gears and moving around the location of axes, etc. In essence, it does one thing.

ENIAC was different because the components in the system could be changed according to the needs of the operator by making (relatively) easy adjustments in the system without having to redesign and install new circuits. This is what software is, in effect: a description of a series of changes of state to the system that alter the behavior of the system itself. The notion of Turing completeness is that hardware implements a Turing machine which is an abstraction that says that ignoring certain constraints (like limited memory or instructions), anything that is computable can be accomplished by the machine. ENIAC was Turing complete.

Compare that to an old-fashioned digital wrist watch. You can program it by indicating what times you want alarms to sound or what time it is now, but in a traditional digital wrist watch, the way it is configured simply doesn't allow you to calculate physics equations. Wrist watches don't have to worry about whether or not they halt when executing instructions. Wrist watches are not general-purpose.

Like the Altair 8800, computation relied on a series of clumsy mechanisms that required manual entry to reconfigure the system. But ENIAC, being Turing complete, could use those clumsy cables like switches or transistors function today to do three things: execute instructions in sequence, iterate them, choose among branches given values. This is what makes something a general purpose computer. From the article:

ENIAC could be programmed to perform complex sequences of operations, including loops, branches, and subroutines. However, instead of the stored-program computers that exist today, ENIAC was just a large collection of arithmetic machines, which originally had programs set up into the machine by a combination of plugboard wiring and three portable function tables (containing 1,200 ten-way switches each). The task of taking a problem and mapping it onto the machine was complex, and usually took weeks.

So, the notion of programmable here hinges on two ideas. Easily reconfiguring the operation of the system (switches, cables, transistors) as opposed to having to redesign the working portions of the architecture to encompass a collection of operations (sequencing, iteration, and branching) to transform any set of symbols in anyway desired by mapping them on the numbers in the machine by the use of an encoding scheme.

The latter description is exactly how the modern PC functions with the advantage of having a very sophisticated arithmetic-logic unit in it to perform a range of primitive operations, and the benefits of storing instructions as data and then executing them without having to manually reconfigure state at every operation. This is why the PC can do just about anything you can think of that can be computed (within the constraints of the physical system itself).

  • 1
    re when you build a mechanical computer (...) the behavior of the system, the nature or range of the output never really changes. Analytical Engine. Mechanical. Turing complete (with the usual finite-memory caveat). Programmable from Jacquard cards. Never completed, but that's not a requirement.
    – dave
    Commented Sep 25, 2023 at 22:26
  • @another-dave. True enough. I'll qualify as intended to the reference in question with 'such'.
    – J D
    Commented Sep 25, 2023 at 22:27
  • 1
    English debugged for accuracy.
    – J D
    Commented Sep 25, 2023 at 22:30
  • Al of the highlightend points (sequence, iteration, condition) can as well be observed at a 1936 Dehomag D11.
    – Raffzahn
    Commented Sep 25, 2023 at 23:23
  • @Raffzahn Your predecessor already pointed out the analytical engine was Turing Complete, so your comment adds not explanatory nor clarificatory value; nor have I made the claim that ENIAC was the first Turing complete machine so your comment seems to have missed the substance of both the question and answer. An FPGA is programmed with a design language like VHDL using a microprocessor and keyboard and is generally done so not to be Turing-complete (although one could). ENIAC is programmed with electricity and wires and is Turing complete (sequence, iteration, condition)...
    – J D
    Commented Sep 26, 2023 at 4:53

Look at the description... this is a one time only programmable computer. Therefore one has several individual programs for different outcomes. Just stop and insert the next .. change when needed.

  • 1
    What does this even mean? What is "one time only programmable"? What does "insert" mean?
    – dave
    Commented Sep 25, 2023 at 22:29

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .