1-1.프로그래머

1-1-가.프로그램

1장은 이 책의 도입부이며 프로그래밍에 관련된 교양적인 내용을 다룬다. 대부분 이미 알고 있는 내용들이라 조금 지루한 감이 있겠지만 문법 공부를 하기 전의 준비 운동 정도로 생각하고 가벼운 마음으로 읽어 보도록 하자. 지금 이 책을 읽고 있는 사람은 의심의 여지없이 프로그래머가 되고 싶어하는 사람들일 것이다. 프로그래머(Programmer)란 프로그램을 제작하는 사람이라는 뜻인데 프로그래머에 대한 정확한 정의를 내리기 전에 프로그램이란 과연 무엇인지부터 정의해 보자.

컴퓨터라는 기계는 사람이 지시한 명령을 수행할 수 있는 능력을 가지고 있다. 사람이 1+2를 계산하라는 명령을 내리면 계산을 통해 3이라는 결과를 만들어 내며 결과를 화면으로 출력하라는 명령을 내리면 어김없이 그 값을 화면에 출력한다. 계산식이 다소 복잡하더라도 정확하고 신속하게 사람의 명령을 실행한다.

그러나 컴퓨터 혼자서는 어떤 일도 하지 못하며 반드시 사람의 명령이 필요하다. 매번 사람이 컴퓨터에게 이렇게 해라, 저렇게 해라고 지시를 내려야만 이 지시대로 동작한다. 이런 식이라면 사람이 컴퓨터를 위해 일일이 지시를 내려야 하므로 컴퓨터가 사람을 위해 일을 하는 것이 아니라 오히려 컴퓨터가 사람을 부려먹는 꼴이 될 것이다. 실제로 초창기의 컴퓨터(ENIAC 등)는 명령을 기억할 공간이 좁거나 아예 없어 사람이 케이블 연결을 바꾸거나 이진 스위치를 조작해야 동작하는 식이었다.

다행히 현대의 컴퓨터는 여러 개의 명령을 순서대로 실행할 수 있는 능력이 있으므로 매번 사람이 명령을 내릴 필요없이 일련의 명령들을 한꺼번에 전달할 수 있다. 1+2를 계산해서 화면에 출력하라, 입력되는 모든 값을 저장하고 합계와 평균을 구해 프린터로 인쇄하라는 식으로 작업에 필요한 명령들을 전달하면 컴퓨터는 이 명령들을 순차적으로 실행한다. 이런 명령의 집합이 바로 프로그램이며 보통 수백~수만 개의 명령들이 모여 하나의 실용적인 프로그램이 된다.

그렇다면 명령을 무조건 모아 놓기만 하면 다 프로그램이 되는가 하면 그렇지는 않다. 프로그램이란 현실의 문제를 해결하기 위해 존재한다. 예를 들어 계산 프로그램은 주어진 값을 연산해서 결과를 출력하는 동작을 하므로 계산하라, 출력하라는 명령이 필요할 것이다. 문제를 해결하기 위한 명령들은 실행 순서를 지켜야 한다. 만약 계산 프로그램에게 출력하라, 계산하라는 명령을 내린다면 순서가 틀렸으므로 제 역할을 하지 못할 것이다.

또한 조건에 따라 적절한 명령을 선택해야 하고 어떤 명령들은 여러 번 반복 처리해야 하는 것들도 있고 때로는 실행중에 사용자와 상호작용을 할 필요도 있다. 그래서 명령들끼리는 순서가 있을 뿐만 아니라 논리적으로 긴밀하게 연관되어 있어야 한다. 프로그램의 정의를 좀 더 정확하게 내려 보면 다음과 같다.

 

프로그램 : 문제를 풀기 위한 명령들의 조직적인 집합

 

프로그램의 고전적인 정의는 이렇지만 최근의 그래픽 환경에서는 명령 외에 프로그램의 외형을 장식하는 데이터까지도 프로그램의 일부로 포함된다. 예를 들어 프로그램의 배경을 장식하는 그림이나 사용자와의 대화를 위한 대화상자, 사운드, 아이콘, 메뉴 등도 프로그램을 구성하는 일부분이다. 또한 프로그램 사용법을 설명하는 도움말이나 주의 사항 등의 문서도 프로그램의 일부라고 할 수 있다.