컴퓨터는 크게 하드웨어(실체가 있는 요소)와 소프트웨어(형태가 없는 추상적 요소)로 구성된다.
프로그램(Program) : 컴퓨터를 구성하는 장치(CPU, 메모리, 입출력 장치, 하드디스크 등)를 조작하여, 원하는 결과를 얻도록 작업 순서를 나열해 놓은 명령어들의 집합으로 소프트웨어에 해당한다.
처음에는 컴퓨터의 구조가 소프트웨어와 하드웨어(CPU, 메모리, 디스크 등)의 두 개 계층으로 단순한 구조로 만들어졌다.
소프트웨어의 초기 모델은 하드웨어의 명령어로 작성되었다.
운영체제가 나오면서 Application(응용 소프트웨어), 운영체제, 하드웨어로 3계층의 구조가 되었다.
기존 하드웨어는 운영체제에 의해 자동으로 동작하도록 구조화된다.
프로그램은 운영체제를 거쳐 실행되도록 구조가 계층화되었다. 그러면서 프로그램이 하드웨어에 독립적으로 바뀌게 되었다.
운영체제는 하드웨어와 상호 작용하는 역할을 맡게 되었고, Application(응용 소프트웨어)은 특정 작업을 보다 편리하게 처리할 목적으로 프로그램을 다루는 역할을 수행하게 되었다.
소프트웨어 개발자들은 프로그램이 하드웨어에 종속되는 문제를 피하게 되었지만, 이제는 운영체제에 프로그램이 종속되는 문제를 만나게 되었다.

프로그래밍 : CPU의 관점에서 각 주변 장치(하드웨어)를 어떠한 순서로 어떻게 제어할지를 생각하면서 명령어들을 나열하는 과정
프로그래밍 예시
1. CPU에서 메모리에 100을 저장하도록 명령을 내린다.
2. CPU는 메모리에 저장된 100을 읽어서 출력하도록 출력 장치에 명령을 내린다.