프로그래머(Programmer)는 프로그램을 만드는 사람이다. 프로그램이 명령의 집합이므로 이런 프로그램을 만드는 프로그래머는 컴퓨터에게 지시를 내리는 사람이라고 할 수 있다. 프로그래머는 컴퓨터를 움직이고 동작하도록 하므로 단순히 컴퓨터를 사용하는 일반 사용자(User)에 비해 훨씬 더 적극적인 위치에 있다.

컴퓨터는 사람의 말을 직접 알아 듣지 못하며 오로지 이진수(전기의 통함과 끊어짐)만을 인식하므로 컴퓨터에게 명령을 내릴 때는 컴퓨터가 알아들을 수 있는 일정한 형식을 갖춘 명령을 사용해야 한다. 또한 컴퓨터가 계산한 결과도 사람이 바로 이해할 수 없는 형태를 띠기 때문에 사람이 이 결과를 볼 수 있도록 해야 한다. 1+2를 계산하고 싶다면 이 명령을 기계가 이해할 수 있는 형식의 명령으로 바꾸어 전달해야 하며 그 결과도 사람이 알 수 있도록 변환해야 한다. 이런 의미에서 볼 때 프로그래머는 사용자와 컴퓨터 사이를 중계하는 통역자의 역할을 한다고 할 수 있다.

사용자 삽입 이미지


프로그래머가 하는 일이란 문제 해결에 필요한 명령을 골라 컴퓨터가 알아들을 수 있는 형태로 바꾼 후 이 명령들이 순서대로 동작할 수 있도록 조직적으로 배치하는 것이다. 통역자가 통역을 제대로 하기 위해서는 양쪽의 언어를 모두 이해하고 있어야 한다. 프로그래머는 기계와 사람 사이의 통역자이므로 기계를 잘 이해해야 함은 물론이고 사람도 잘 이해하고 있어야 한다.

기계의 언어를 다루어야 하므로 기계의 구조와 동작 방식을 잘 이해하고 기계적으로 사고할 수 있는 능력이 필요함은 당연하다. 또한 최근에는 프로그램이 처리하는 일들이 복잡해져서 사람에 대한 이해도 과거보다 훨씬 더 중요하고 어려워졌다. 예를 들어 은행 전산 프로그램을 작성하려면 프로그래머가 은행 업무에 먼저 통달해야 하며 프렌차이즈, 병원 등의 소프트웨어 개발자도 마찬가지다. 이처럼 개발자가 프로그램이 하는 업무를 먼저 익히는 과정을 업무파악이라고 하는데 업무가 복잡한 경우 전체 개발 일정의 80%를 차지하기도 한다.

과거에는 인간의 영역이었던 일들을 이제는 컴퓨터가 대신하는 경우가 점점 많아지고 있다. 불과 10여년 전만 하더라도 은행업무를 처리하기 위해 은행원들이 원장과 통장에 입출금 내역을 직접 기록하고 관리했었으나 요즘은 컴퓨터가 이런 작업을 대신 하며 은행원들은 컴퓨터만 조작한다. 덕분에 은행은 훨씬 더 복잡한 업무를 처리할 수 있게 되었고 온라인도 가능해졌다. 내가 초등학교에 다닐 때는 통장과 도장을 들고 500원을 맡기면 예쁜 은행 누나가 원장과 통장에 "500원 입금"을 볼펜으로 쓰고 주판으로 합계를 계산해 주었다. 요즘 세대에게 이런 얘기를 하면 정말 그런 시절이 있었느냐고 의심을 한다.

공장 자동화가 일반화되면서 부품을 생산, 조립, 테스트, 포장하는 일들도 컴퓨터가 대신 하고 있다. 컴퓨터 관련 기술이 발전하면 할수록 이런 현상은 더욱 더 가속화되어 컴퓨터가 할 수 있는 일들은 점점 더 많아진다. 컴퓨터가 사람의 일을 대신하게 됨으로써 이제 공장이나 은행에서는 옛날처럼 많은 직원을 채용할 필요가 없어졌다. 대부분의 일은 컴퓨터가 처리하므로 컴퓨터를 관리하고 운영할 수 있는 소수의 직원만 필요하다.

컴퓨터가 더 많은 일을 하기 위해서는 더 많은 소프트웨어가 필요하며 따라서 프로그래머의 수요는 앞으로도 더욱 더 늘어날 것이다. 컴퓨터로 인해 공장에서는 많은 직원을 채용할 필요가 없어졌지만 컴퓨터를 운영하기 위해서 더 많은 프로그래머가 필요해진 것이다. 은행 창구의 직원은 줄어들었지만 본사의 전산실 직원들이 훨씬 더 많이 늘어났다. 결국 컴퓨터가 산업 전반에 도입됨으로써 사람들의 직장을 뺏어간 것이 아니라 사람의 근무 형태를 바꾸어 놓은 것이다.

현대 사회에서 프로그래머는 더 이상 특수한 직업이 아니다. 보통의 일반적인 직업인이되 컴퓨터를 동작시키는 일을 하는 정신 노동자일 뿐이다. 이상으로 프로그램과 프로그래머의 정의를 내려 보았는데 프로그램의 정의에서 볼 수 있듯이 프로그래머에게는 두 가지 능력이 요구된다.

 

문법 : 프로그램을 구성하는 단위가 명령이므로 규칙에 맞게 명령을 정확하게 작성하는 지식이 필요하다. 명령을 올바르게 기술하는 규칙을 문법이라고 한다. 문법은 이 책을 통해 배우게 되며 단순한 약속들의 집합일 뿐이므로 열심히만 하면 누구나 100% 익힐 수 있다.

작문 : 프로그램은 단순한 명령의 나열이 아니라 조직적인 집합이므로 작성한 명령을 논리적으로 배치하는 기술이 필요하다. 일정한 공식이 존재하지 않으며 실제 문제에 따라 적용되는 작문법은 천차 만별로 달라지므로 인간의 창조력이 요구되며 외운다고 해서 쉽게 얻어지는 것이 아니다. 책이나 강사로부터 약간의 도움을 받을 수는 있으나 결국은 스스로 터득하는 방법밖에 없다.

 

두 가지 능력 중에 특히 작문 능력은 단기간게 쉽게 숙달되지 않는 특징이 있다. 그래서 경력에 따라 프로그래머의 급이 매겨지는 것이며 쉽게 얻을 수 없기 때문에 애써 배울 가치가 있는 것이다. 너무 성급하게 결과를 기대하지 말고 꾸준히 노력하도록 하자.

Posted by 테티스
,

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

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

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

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

사용자 삽입 이미지

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

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

 

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

 

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

Posted by 테티스
,