Computer Architecture is the science and art of selecting and interconnecting software and hardware components to create computers that meet functional, performance and cost goals.
A common problem in computer architecture is coping with complexity. Much of it resulting from the need to increase the performance and scale of the computer system while meeting design goals and requirements.
The design goals of computer architecture are very often:
Technology is constantly changing, mostly due to Moore’s Law which stipulates an exponential rate of transistor miniaturization. Often an improvement crosses a possibility threshold, which permits new applications that become its own self-sustaining market, such as smartphones.
Sometimes the improvement comes as a technological disruption, such as the transistor, microprocessors, multicore systems, and flash-based solid-state storage. Disruptions are necessary for scaling systems which can’t continue scaling forever. Software disruptions in the form of new algorithms, such as public key cryptography, enabled the scaling of cryptosystems for the internet age.