"여생의 대부분을 내가 작성한 프로그램의 에러를 찾아내는 데 쓰게 될 것 같다는 깨달음이 강하게 밀려왔다"
-모리스 윌크스, 1985
알고리즙은 추상적이고 이상적인 절차를 기술한 것으로, 구현에 필요한 세부 사항과 현실적인 고려 사항을 무시한다. 알고리즘은 정확하고 명료한 레시피이다. 의미가 완전히 알려져 있고 구체적으로 명시된 기본 연산으로 표현된다. 이러한 기본 연산을 사용하여 각 단계를 상세히 설명하고 모든 가능한 상황을 다룬다. 그리고 알고리즘은 결국 멈춰야 한다.
이와 대조적으로 프로그램(Program)은 추상적인 것과는 거리가 멀다. 프로그램은 실제 컴퓨터가 과제를 완료하기 위해 수행해야 하는 모든 단계를 구체적으로 서술한다. 알고리즘과 프로그램 간의 차이는 청사진과 건물 간의 차이와 비슷하다. 한쪽은 이상적인 것이고, 다른 쪽은 실재하는 것이다.
프로그램은 하나 이상의 알고리즘을 컴퓨터가 처리하는 형태로 볼 수 있지만 실질적인 문제:불충분한 메모리, 제한된 프로세서, 잘못된 입력 데이터, 하드웨어 결함, 네트워크 연결 불량, 그리고 인간 자체의 문제도 포함된다.
결론적인 예시로 알고리즘은 요리 레시피라면 프로그램은 적군의 공격을 받는 동악 군인들이 먹을 1개춸치 식사를 로봇에게 준비하도록 하는 상세한 명령어 모음이라고 할 수 있다.
비유는 충분하니 실제 프로그래밍에서 어떤 일이 일어나는지 알아보자.
세상에는 아직 프로그래머가 충분히 많지 않아서, 우리가 원하고 필요로 하는 모든 것을 컴퓨터가 수행하도록 프로그래밍할 수 없다. 그래서 컴퓨터가 세부 사항을 더 많이 처리하도록 하는 것인데, 이는 프로그래밍 언어에 대한 논의로 이어진다.
컴퓨터 자원을 관리하는 일의 경우는 하드웨어가 복잡해졌기 때문에 컴퓨터가 자신의 동작을 직접 제어하도록 하며, 이는 운영체제로 이어진다.