The first generation of computers used vacuum tubes, magnetic drums for storage, and were hardwired to perform specific calculations. They were very large, unreliable, and produced significant heat. Programming involved manipulating toggle switches to input programs in machine language. The introduction of transistors in the late 1940s led to more reliable, portable, and faster computers by replacing vacuum tubes. This allowed computing to advance from specialized machines to general purpose computers.