애플리케이션
이색취재 어떤 프로그래밍 언어를 선택할 것인가
BASIC언어를 이용하여 ‘1+1’이라는 명령을 내리게 되면 금방 ‘2’라는 결과를 출력한다. 처음 컴퓨터에 명령을 내리는 사람이라면 너무나 놀랍다.그래서 다시 한번 ‘257+132’라고 혹시나 하는 마음으로 입력시키면 금방 ‘389’라고 대답한다.이렇게 컴퓨터는 신기하고 뛰어난 능력을 가진 기계이다. 하지만 더욱 놀라운 것은 누가 어떤 목적으로 사용하느냐에 따라 그 모습은 수천가지로 바뀐다. 예를 들어 컴퓨터를 이용하여 게임을 한다면 게임기가 되고, 그림을 그리면 컴퓨터화가가 되고, 또 컴퓨터를 이용하여 작곡을 하면 컴퓨터작곡가가 된다. 이렇게 컴퓨터는 같은 모양을 하고 있으면서도 그 사용에 따라 여러가지 모습을 가지게 된다. 그러면 컴퓨터 사용의 차이라는 것은 무엇을 의미하는 것일까? 바로 ‘프로그램(소프트웨어)’의 차이를 말하는 것이다. 컴퓨터가 게임기가 되는 것은 게임 프로그램을 사용했기 때문이며, 컴퓨터작곡가가 되는 것은 음악 프로그램을 사용하였기 때문이다. 이 프로그램들은 프로그래밍 언어로 이루어져 있다. 따라서 우리가 친구에게 이야기 하고자 할 때 말을 하는 것처럼, 이것은 컴퓨터에게 사람의 생각을 전달한다.
최근 한창 인기있는 MSX용 게임. [알레스트2]
프로그래밍언어가 만들어지기까지
최초의 컴퓨터로 알려진 애니악은 길이가 30m에 높이 3m, 무게가 30t이었다. 지금 우리 눈앞에 있는 PC와 비교해 보라. 아마 아직까지도 애니악같은 컴퓨터를 사용하여야 한다면 컴퓨터는 벌써 우리 생활에서 사라졌을 것이다. 또 우리가 직접 컴퓨터에게 내리는 명령도 0과 1이라는 기계적인 언어밖에 없다면 아무리 성능 좋은 컴퓨터가 발명되어도 사용하고자 하는 사람들은 별로 없을 것이다. 처음 사용하였던 프로그래밍언어는 최초의 무식한(?) 컴퓨터에 걸맞는 기계어Machine Language라는 언어이다. 컴퓨터도 일종의 전기에 의해 움직이는 전자제품이어서 기계적인 상태를 그대로 적용, 그 구성이 1(전기가 들어온 상태)과 0(전기가 끊어진 상태)으로 되어 있다. 따라서 컴퓨터 입장으로 본다면 기계 본질의 스타일로 구성되어 쉽게 이해할 수가 있지만 0과 1로만 프로그램을 작성해야 하는 사용자 입장으로 본다면 보통 일이 아니다. 그러나 FORTRAN(포트란)이 만들어지기까지 10년이 넘게 기계어를 사용한 컴퓨터 대선배들을 생각할 때 존경심이 절로 우러나지만 이들도 결코 좋아서 기계어를 쓰지는 않았을 것이다. 그후 FORTRAN을 시작으로 많은 언어들이 속속 등장하기 시작하였는데, ASSEMBLY(어셈블리), COBOL(코볼), PASCAL(파스칼), C(씨), LOGO(로고), PROLOG(프롤로그), LISP(리시), PL/I(피엘 원), ADA(에이다),RPG(알피지) 등이 그 대표적이다. 이 중에서 ASSEMBLY(어셈블리)는 기계어의 어려움을 조금이라도 벗어나기 위해서 만들어진 기호언어이다. 즉 기계어와 대응되는 기호를 일일이 지정하여 사용자들로 하여금 보다 편리하게 사용하도록 하였다. 그러나 지금은 어떠한가? 아마도 컴퓨터를 자유자재로 다루는 사람이 아니고는 감히 배울 엄두를 내지 못하는 까다로운 언어로 여겨지고 있다. 하지만 어려운 만큼 빠른 속도 등 다른 언어가 가지지 못한 뛰어난 기능들이 많다. 프로그래밍 언어가 몇 가지인지 정확히 아는 사람은 없다. 프로그래밍 언어는 특정한 사람 또는 연구기관에서 맡아 놓고 개발하는 것이 아니고 어느 누구든지 개발하여 세상에 발표, 좋다고 생각하는 사람들이 많아 널리 사용되면 그제서야 언어로 정착되는 것이다. 따라서 우리도 모르게 사라진 언어만 해도 아마 수만 가지에 이를 것이다. 기계어를 사용하기 힘들어 새로운 언어를 만들었다면, 컴퓨터의 종류나 목적에 관계없이 누구나 쉽게 사용할 수 있는 하나의 공통어를 만들 것이지 왜 이렇게 많은 언어들을 만들어서 선택하는 데에도 사용하는 데에도 어렵게 만든 것일까? 그 이유는 간단하다. 우리가 여행할 때도 가는 목적이나 인원에 따라 기차, 버스, 비행기 등 그 수단이 여러가지로 나뉘게 된다. 40여명이 단체로 제주도로 수학여행을 가는데, 자가용이나 자전거를 이용하지는 않을 것이다. 이와 마찬가지로 컴퓨터를 이용하여 프로그램을 개발할 때도 게임용인지 음악용인지, 개발 목적을 보다 손쉽게 달성할 수 있도록 언어를 개발한 것이다. 예를 들어 BASIC은 PC 교육용으로, FORTRAN은 과학기술 계산용으로, COBOL은 사무용으로, C는 시스템 프로그램용으로, PASCAL은 학문연구용으로 각각 특별한 목적에 편리하게 그 언어 나름대로 구성되어 있는 것이다. 물론 FORTRAN으로 사무용 프로그램을 개발하지 못하는 것은 아니다. 그러나 이것은 제주도를 갈 때 비행기로 가면 빠를 것을 기차나 버스를 이용하여 부산까지 갔다가 다시 배를 타고 제주도로 가는 것과 같이 시간이 많이 걸릴 뿐 아니라 비효율적인 프로그램이 될 가능성이 높다.
MUE음악프로그램의 에디터 장면
언어번역 프로그램에 대해
어떤 언어를 선택하기 전에 먼저 언어 처리방법을 아는 것이 보다 자신에게 맞는 언어를 잘 선택하는데 도움이 된다. 우선 컴퓨터를 조금이라도 사용해 본 사람이라면 BASIC 처리 방법에 대해 잘 알고 있겠으나 다른 언어들은 이와 다른 방법으로 처리된다. 컴퓨터는 앞에서도 얘기한 것처럼 0과 1로 구성된 기계어만을 이해할 수 있다. 따라서 사람이 사용하기 편하도록 만들어진 BASIC이나 FORTRAN, COBOL, PASCAL, C 등을 이용하여 프로그램을 작성한다면 컴퓨터는 바로 이해할 수가 없다. 우리나라 사람이 미국, 일본, 프랑스 사람들과 미팅을 할 때 서로 상대방의 언어를 모르면 아무 말도 할 수 없어 ‘통역하는 사람’이 필요하듯 컴퓨터와 사용자 사이에도 통역을 해주는 ‘통역자’가 따로 있어야 한다. 보통 이러한 프로그램을 ‘언어번역 프로그램’이라고 하는데, 사람 위주의 프로그래밍 언어(고급언어라고도 한다.)를 기계어로 번역해 주는 역할을 한다.여기에는 컴파일러Compiler와 인터프리터Interpreter 2종류가 있다. 우리가 잘 알고 있는 BASIC이 바로 인터프리터 방식이며, 그 외의 언어들은 대개 컴파일러 방식으로 처리된다. 그럼 실질적으로 번역을 하는데 있어서 어떤 차이가 있는 지 좀 더 알아보자.
예 1) 10 I = 0
20 S = 0
30 I = I + 1
40 S = S + I
50 IF I < 100 GOTO 30
60 PRINT S
70 END
예 2) mainc )
{
int i,s;
i = 0;
s = 0;
10: i = i + 1;
s = s + i;
if (i < 100) goto 10;
printf (%d\n,s);
}
위의 2가지 예들은 1부터 100까지의 합을 BASIC(예 1)과 C(예 2)로 작성한 프로그램이다. 먼저 인터프리터와 컴파일러의 큰 차이는 인터프리터는 언어를 한 문장씩 번역하고 실행하는데 반해 컴파일러는 프로그램을 한꺼번에 완전히 번역한 후 번역된 기계어를 가지고 실행한다. 즉 예 1)를 실행시키면 10번 문을 번역함과 동시에 실행하여 I에 0을 기억시키고 다시 20번 문을 번역한 후 J에 0을 기억시키는 등 문장 순서대로 수행을 한다. 수행을 하다 50번 문을 만나게 되면 I값이 100보다 작을 경우 30번으로 돌아가게 되는데, 이때 30번은 기계어가 아닌 BASIC언어이기 때문에 다시 번역을 한 후 실행을 시킨다. 결국 30번에서 50번 문까지는 100번이나 반복 번역, 수행하게 되어 많은 수행시간이 걸리게 된다. 그러나 예 2)의 경우 우선 프로그램을 한꺼번에 기계어로 번역시킨 다음 실행을 하므로 IF문에서 100보다 작아 10번으로 돌아가 보면 C언어가 아닌 기계어 상태이기 때문에 곧 바로 실행을 할 수 있다. 따라서 예 1)과 예2)의 실행 속도의 차이는 엄청나다. 한편 인터프리터는 에러 발견, 즉 프로그램 수정을 컴파일러보다 쉽게 할 수 있다. 만약 예 1)를 입력할 때 10번 문을 ‘I – 0’이라고 잘못 입력하고 실행을 시키게 되면 10번 문을 만나자마자 ‘SYNTAX ERROR IN 10’이라는 에러 메시지를 화면에 출력한다. 따라서 사용자는 그 즉시 10번 문을 수정할 수 있다.초보자들에게 BASIC이 편리하다고 하는 이유도 바로 여기에 있다. 컴퓨터와 사용자가 대화를 나누듯 에러메시지를 출력하고 그 자리에서 바로 수정할 수 있기 때문이다. 그러면 예 2)를 잘못 입력하였을 때는 어떠할까? 컴파일러 방식은 일단 프로그램을 한꺼번에 번역하기때문에 에러 메시지도 번역이 끝난 후 한꺼번에 화면에 출력하게 된다. 예 2)처럼 간단한 프로그램일 경우에는 몇 개의 에러 메시지가 한꺼번에 출력해도 쉽게 수정할 수 있겠지만 1000문장 이상으로 구성된 프로그램에서 100개나 에러가 생겼다면 과연 간단히 해결할 수 있을까?
[인터프리터 방식과 컴파일러 방식의 차이점]
이와 같은 차이때문에 컴퓨터를 처음 사용하는 사람들은 대개 BASIC을 배우는데 어느 정도 시간이 흘러 컴퓨터를 알게 되면 느린 처리속도 때문에 BASIC의 사용은 불편하게 된다. 물론 BASIC 중에서도 컴파일러 방식을 채택하는 Quick BASIC이 있으나 블럭기법 및 다양한 기능이 제공되고 처리 속도가 빠른 PASCAL이나 C 등을 찾게 되는 것은 어찌보면 자연스러운 일이다. 실예로 정보처리분야 국가고시 자격증 시험중 학력 제한이 없는 정보처리 기능사 2급에는 시험과목중 BASIC이 있으나 전문대학 출신 이상이 응시할 수 있는 정보처리기사 시험에는 BASIC과목이 없다.
프로그래밍 언어의 특징
8비트 PC를 사용했을 시절에는 BASIC이 아닌 언어를 사용하고 싶어도 기억용량(램)의 부족 등 많은 어려움이 따랐다.그러나 이제 교육용 컴퓨터로 16비트 PC가 결정되면서 이의 보급이 나날이 늘어가고 있으므로 여러가지 언어를 자유자재로 사용할 수 있게 되었다. 프로그래밍언어를 처음 배우고자 하는 사용자들을 위해 또는 이미 하나 이상의 언어를 사용해 보고 또 다른 언어를 선택하려는 사람들을 위해 각 언어의 특징을 설명하고자 한다. 여러 언어의 특징을 비교해 보고 자신의 스타일이나 작성하고자 하는 프로그램에 맞는 언어를 잘 선택하기 바란다.
1. ASSEMBLY
중학교 때부터 대학교까지 약 10년정도 영어를 배우고 나서도 실질적으로 미국인과 자유롭게 대화를 나눌 수 있는 사람은 별로 많지 않다. 그것은 교육상 방법의 문제와 자주 사용하지 않으면 잊어버리는 언어의 속성때문이기도 하지만 가장 근본적인 이유는 한글과 영어의 문법이 다르기 때문이 아닌가 싶다. 예를 들면 한글은 주어 다음에 목적어가 오고 동사가 맨나중에 오는 반면, 영어는 주어 다음에 동사가 온다. 따라서 영어 단어만 알아서는 소용이 없다. 한편 일어는 많은 사람들이 배우기 쉽다고 하는데, 그 이유를 알아보면 한글과 문법이 비슷하여 단어만 알고 있으면 우리 식대로 얘기하면 되기 때문이다. 이렇게 우리가 사용하는 프로그래밍 언어도 거의 사람위주의 언어이기 때문에 컴퓨터 내부구조(램 및 롬의 구조, 연산방법, 레지스터, 운영체제 등)에 대해 자세히 알지 못해도 명령어만 알면 웬만큼 프로그램을 작성할 수 있으나 컴퓨터를 마음대로 조정하려면 사람위주의 언어로는 불가능하다. 그렇다고 0과 1뿐인 기계어를 사용하기란 더욱 끔찍하다. 이래서 만들어진 것이 ASSEMBLY이다. 이것은 기계어의 문법을 충분히 살리면서 조금이나마 사람이 편리하게(?) 프로그램을 작성할 수 있도록 0,1대신 기호를 사용하였다. 16비트 PC에서 주로 사용되는 ASSEMBLY는 MS-DOS로 유명한 마이크로소프트사에서 개발한 것으로 ‘매크로 어셈블러’라고도 하며, 현재 버전5.x까지 선보이고 있다. 또한 ASSEMBLY는 인터프리터나 컴파일러 방식이 아닌 어셈블러ASSEMBLER라는 언어번역 프로그램에 의해 기계어로 번역, 실행되는데 CPU만 같으면 호환이 가능하다. 그러면 까다롭다고 남들이 모두 외면하는 ASSEMBLY를 사용하려는 사람들은 어떤 이유에서일까?
(1) 기계어와 1 대 1로 기호를 대응시킨 언어이므로 하드웨어적인 제어를 마음대로 할 수 있다. 즉 변수를 기억시킬 때 메모리 번지를 사용자가 직접 지정할 수 있는 것이다.
(2) 기계중심 언어라 처리속도가 빠르다.
(3) FORTRAN, PASCAL, BASIC 등에서 없는 기능을 서브루틴으로 작성할수 있다.
ASSEMBLY를 이용하여 프로그램을 작성하려면 기본적으로 어셈블러를 구입해야 한다. 그리고 어셈블러를 A드라이브에 넣은 후 다음과 같은 명령을 주면 어셈블러 모드로 들어가게 된다. 여기서부터는 사용자들이 공부한 명령어를 이용하여 프로그램을 작성하면 된다.
A>MASM 파일명
ASSEMBLY로 작성한 프로그램 예
2. FORTRAN
초기에 컴퓨터는 대학이나 연구소에 있는 과학자들이 주로 사용하였는데, 이들은 연구에 필요한 정밀 연산 및 복잡한 수식을 빠르게 처리할 수 있는 프로그래밍언어가 절실히 필요하였다. 따라서 소숫점 연산, 삼각함수, 지수, 로그 등의 계산적인 기능을 자유롭고 빠르게 처리할 수 있는 언어를 개발하게 되었다. 이런 목적으로 IBM 기술진(팀장 존 W.베커스)과 그때만 해도 불과 몇 명밖에 없었던 IBM사용자들에 의해 FORTRAN이 만들어졌다. 이 언어는 사람이 최초로 개발한 고급언어라고도 할 수 있는데, 그 이름도 과학기술 계산용이라는 것을 알 수 있게끔 FORmula TRANslator에서 따 왔다. FORTRAN은 개발된 이후 40년동안 여러 형태로 발전되어 왔다. 그 중에서 가장 널리 알려진 것으로는 ANSI FORTRAN, FORTRAN4, FORTRAN77 등이 있다. 특히 FORTRAN77은 최근까지 구조적인 문법으로 FORTRAN 사용자들에게 많은 사랑을 받고 있다. FORTRAN의 특징은 다음과 같다.
(1) 수학공식을 그대로 명령문으로 사용할 수 있고 문법이 간단하다.
(2) 사람위주로 만들어진 고급언어라 컴퓨터에 대한 전문적인 지식이 필요없다.
(3) 기종에 상관없이 호환성이 있다.
FORTRAN으로 프로그램을 작성하려면 FORTRAN 컴파일러를 구입하여야 한다. PC에서 많이 사용하는 컴파일러로는 WATFOR-77(디스켓1장)과 MS-FORTRAN(디스켓2장) 컴파일러가 있다. 시작 명령은 컴파일러마다 틀리므로 구입시 알아본다.
3. COBOL
COBOL은 경제와 밀접한 관계를 갖고 있다. 예전에 기업은 집에서 가족끼리 물건을 만들어내는 가내수공업 형태였는데, 종업원 수가 하나 둘 늘어나면서 대기업으로 발전하게 되었다.따라서 매일 매일 발생하는 업무의 신속한 처리는 물론 인사, 급여, 판매, 생산관리 등 일상 업무만 해도 사람의 손으로 감당할 수 없게 되었다. 그러나 그 당시 컴퓨터는 겨우 과학용으로만 사용되었고 FORTRAN 또한 계산용 언어이기 때문에 일반 업무에 사용하기에는 부적합하였다. 아버지가 받는 월급이 550,000.45원이고, 연필 한 자루 값이 13.53원이라고 할때 그 소수점 이하의 의미를 상상할 수 있겠는가. 이에 따라 컴퓨터 메이커와 관계 전문가로 구성된 CODASYL이라는 위원회에서 개발된 COBOL은 국내 기업의 70%이상이 사용하고 있는 만큼 순수 업무용이다. 아마 독자 중에서도 나중에 회사 전산실에 근무할 사람이 있다면 지겨울 정도로 많이 만나게 될 것이다.현재 사용되는 컴파일러로는 ANS-COBOL, MS-COBOL, RM-COBOL 등이 있는데 그 중에서 MS-COBOL과 RM-COBOL이 많이 사용되고 있다.
4. PASCAL
1969년 스위스 공과대학의 니콜라스 워드Niclaus Wirth교수는 한 언어를 개발한 후 17세기의 유명한 철학자이자 수학자인 파스칼을 기념하여 그 이름을 ‘PASCAL’이라 정하고 다음과 같이 설계 이유를 밝혔다. “컴퓨터 프로그램에 대해 체계적으로 인식할 수 있고 구조적인 프로그래밍 개념을 심어주는데 그 목적이 있다. 또 학문을 연구하는데 있어 문제를 명백하고 자연스럽게 표현할 수 있도록 하며, 컴퓨터에 신뢰성과 효율성을 주기 위해서이다.” 따라서 지금도 개발자인 워드교수의 의도대로 PASCAL은 교육용 언어로 프로그래밍언어를 공부하고자 하는 사람들에게 완벽한 교육을 시키고 있다.
BASIC 프로그램과 비교해 보자.
예 3) 10 TOT = 10
~
50 T0T = TOT * 20
60 PRINT TOT
예 4) PROGRAM SAMPLEOUTPUT
VAR
TOT : INTEGER;
BEGIN
TOT := 10;
T0T := TOT * 20;
WRITETOT;
만약 예 3)에서 사용자가 50번 문을 TOT = TOT * 20이라고 할 것을 잘못 입력했다고 해도 이 프로그램은 TOT를 10으로 출력시킬 것이다. 그 이유는 BASIC은 새로운 변수 선언없이 수식만 맞으면 무조건 실행이 되기 때문에 50번 문의 잘못 입력한 T0T에 상관없이 처음 입력 값인 10을 출력시키는 것이다. 한편 예 4)는 선언부분(VAR부분)에서 미리 변수 TOT를 정수형 변수로 선언하여 실행도중 선언되지 않은 T0T를 만나게 되면 에러를 발생시키는 것이다. 그러나 예 3)과 같이 실행은 되면서도 결과가 잘못 나오는 경우는 짧은 프로그램이면 수정하기도 쉬우나 길 때는 전문가도 찾아내기가 힘들다. 이래서 PASCAL을 사용하면 정확한 문법아래 프로그램을 작성하기 때문에 프로그래밍 이론이 탄탄해진다는 것이다. 특히 에디트, 컴파일, 링크 기능을 한자리에 모은(풀/다운 방식) TURBO PASCAL(터보 파스칼)은 사용자로 하여금 PASCAL의 인기를 한층 높여주는 계기가 되었다.
PASCAL의 특징을 모아보면
(1) 언어의 이론을 증명할 목적으로 탄생한 ALGOL을 토대로 만들어졌기 때문에 강력한 자료구조 기능을 갖고 있다.
(2) 교육용 언어로 문법이 간결하다.
(3) 구조적 프로그램 기법인 블럭구조를 사용한다.
(4) 컴파일러 크기가 작아서 대형에서 PC까지 폭넓게 사용할 수 있다.
5. C
도스상태에서 ‘DIR’이라는 명령을 주면 사용하고 있는 디스켓의 파일들이 나타나고 ‘COPY’라는 명령은 파일을 복사한다. 또 키보드에서 ‘A’를 입력하면 화면에 A라는 문자가 출력된다. 이러한 것은 모두 프로그램에 의해 실행되는 것으로 공장에서 컴퓨터가 만들어질 때 롬안에 직접 넣게 되므로 하드웨어 기능이라고 생각하는 사람들도 많다. 그러면 이런 프로그램은 어떤 언어로 만들어졌을까? 예전에는 거의 90% 이상이 ASSEMBLY로 작성되었는데, 이제는 C언어로도 만들어지고 있으며 특히 컴파일러는 C로 많이 개발되고 있는 추세이다. 따라서 C언어를 잘 알게 되면 TYPE, COPY, PRINT 등 기존의 도스명령 이외에도 또 다른 명령어를 사용자가 만들어 사용할 수 있는 것이다. 원래 C는 PDP-8이라는 대형기종의 운영체제(이것이 바로 UNIX)를 만들기 위해 개발되었다. UNIX는 세계 표준 운영체제로 지정될 만큼 그 성능이 뛰어나 현재 미국에서는 대학의 90% 이상이 이를 사용하고 있다. LATTICE-C, MS-C, TURBO-C, RUN-C가 많이 사용되고 있는데 RUN-C(인터프리터 방식)는 BASIC과 그 작동 방법 및 사용법이 같기 때문에 C문법만 조금 알면 불편없이 사용할 수 있다. 또 TURBO-C는 TURBO-PASCAL의 후속타로 볼랜드사에서 선보인 것으로 풀/다운 메뉴방식으로 구성된 사용의 편리함 때문에 좋은 호응을 얻고 있으나 컴파일러가 커서 하드디스크가 없으면 불편하다. MS-C와 LATTICE-C는 대형 컴파일러인 UNIX-C를 PC에 맞게 축소시킨 것으로 기능이 다양하고 UNIX를 공부하고자 하는 사람들에게는 도움이 되나 일반 초보자들이 사용하기에는 어렵다. 초보자 뿐만 아니라 컴퓨터 전문가도 만족시키는 C의 장점은
(1) 하드웨어의 제어가 가능한 고급언어이다.
(2) 기종에 상관없이 호환된다.
(3) 포인터 기능이 있어 번지연산 및 비트연산 등 ASSEMBLY의 장점을 가지고 있다.
C와 PASCAL을 배우려는 사용자를 위해
언어를 공부하겠다는 다짐을 한 후에는 어떤 언어를 선택해야 하는 상황에 놓이게 된다. 그렇다고 컴퓨터에서 사용할 수 있는 언어를 모두 익힌다는 것은 지나친 노력일 뿐 아니라 어느 한가지에도 충실하지 못한 결과를 낳기 쉽다. 따라서 선택의 기로에 서 있는 사용자들에게 과감히(?) C와 PASCAL을 권하고 싶다. 현실적으로도 언어를 공부한다고 하면 대부분 C와 PASCAL, 두가지로 범위가 좁혀지고 있고 다른 컴퓨터 서적에 비할 수 없을 정도로 많은 책들이 소개되고 있다. 또그 인기도는 컴퓨터 서적 ‘Best 10’중 상위권을 모두 휩쓸 정도이다. 그러면 이 두 언어에는 어떠한 장점이 있기에 많은 사람들이 이것을 익히려고 땀을 뻘뻘 흘리는 것일까? 사실 C와 PASCAL은 분명히 매우 우수하고 뛰어난 언어이지만, 가장 강력한 언어라고는 말할 수 없다. 근래에 발표되고 있는 많은 고급 언어 중에서도 이들보다 훨씬 강력한 기능을 가진 것도 많다. 그런데도 C 와 PASCAL이 많이 선택되는 데는 분명한 이유가 있다. 어느 누구나 자신이 타고 다닐 자동차를 고르는데, 값 비싸고 튼튼하고 별나게 보인다는 이유만으로 탱크나 장갑차를 사지는 않을 것이다. 또 고기를 잡으러 나가는데 항공모함까지 동원하지는 않을 것이다. C와 PASCAL은 꽤 오랫동안 많은 사람들의 사랑을 받아왔고, 이들을 지원하는 컴파일러를 만드는 회사들도 사용하기 보다 편리하고 강력한 기능을 갖도록 계속 다듬어 왔다. 따라서 현재로서는 PC에서 프로그래밍을 하는데 있어서 가장 편리한 환경을 얻을 수 있으며, 컴파일러 자체의 가격도 다른 언어에 비해 무척 저렴한 편이다. 아무리 강력한 기능을 가진 언어라도 그 컴파일러를 사는데 수백만원을 투자해야 한다면 개인 사용자는 사용해 볼 엄두도 내지 못할 것이다. 그렇지만 이들 C와 PASCAL은 어디서나 쉽게 접할 수 있고, 아주 편리한 환경에서 프로그래밍할 수 있다. C를 얘기하면 자연히 PASCAL이 나오게 되고 PASCAL을 얘기하다 보면 C가 빠질 수 없다. 이렇듯 이 두 언어는 항상 비교되며, 지금까지도 어느 쪽이 나은 가에 대한 공방전이 두 언어를 사랑하는 사람들 사이에서 공공연히 벌어지곤 한다. 두 언어는 아주 공통적인 특징을 가지고 있으면서도 어떤 면에서는 상당히 상이하다.
구조적이며,체계적인 파스칼
C와 PASCAL의 역사를 비교해 보면 PASCAL이 선배이다. PASCAL은 매우 구조적이고, 체계적이며, 예외상황이 거의 없을 정도로 규칙적인 정말 컴퓨터 프로그래밍 언어다운 언어이다. 이러한 특성 때문에 교육용으로 매우 각광을 받아 왔으며,언어 자체가 구조적(체계적)인 프로그래밍을 하기에 쉽도록 되어 있어서 프로그래밍 습관을 익히는 데도 많은 도움을 준다. 처음부터 PASCAL과 같은 구조적 언어로 프로그래밍 습관을 들인 사람은 설사 BASIC을 사용하더라도 아주 체계적으로 프로그래밍을 하며,다른 언어를 사용하는 데도 많은 도움을 준다. 그런데 PASCAL은 특성상 시스템에 가까운 부분에는 그 기능이 미약하여 가끔은 ASSEMBLY의 도움이 필요하다. 하지만 근래의 TURBO PASCAL과 같은 컴파일러는 PASCAL로도 별 부족함 없이 컴퓨터를 마음껏 조작할 수 있도록 해준다. PASCAL은 상업용으로도 많이 사용되며, 우리가 사용하고 있는 많은 프로그램들이 PASCAL로 만들어져 있다. 또한 엄청나게 많은 PASCAL용 라이브러리를 구할 수 있는 것도 PASCAL만의 장점이다.
조건이 다양하고 표현이 자유로운 C
그렇다면 C는 어떠할까? 어느 언어이든지 구조적인 프로그래밍 방식이 우수하다는 것이 일반적인 견해인 만큼 PASCAL 이후에 나온 C가 구조적이지 못할 리는 없다. C는 매우 구조적인 언어이며 어느 책에선가 C를 ‘최고급 어셈블러’라고 평할 정도로 ASSEMBLY와 아주 흡사하다. 또 구조적인 성격 외에도 수많은 예외 조건과 다양하고 자유로운 표현방식, 그리고 어셈블러에 가까운 특징은 사용자들로 하여금 보다 가까이 시스템에 접근할 수 있게 한다. 따라서 이런 장점 때문에 조금은 난잡해 보이며, 다른 언어보다 익히기가 어려운 것도 사실이다. 특히 C를 공부하면서 겪게 되는 가장 큰 어려움은 포인터이다. 이것은 다른 언어에서 보기 힘든 특성으로 ASSEMBLY를 조금만 아는 사람이라면 C 명령어들 중에는 기계어로 컴파일하기에 아주 적합한 것들이 많음을 알 수 있을 것이다. 이 때문에 C는 무엇보다도 빠른 처리 속도를 자랑한다. 일반적으로, 만들어진 실행 파일의 크기를 보면 PASCAL이 C보다 작지만 처리 속도에서는 C가 앞선다. C가 많이 선택되는 이유에는 또 몇 가지가 있는데, 그 대표적인 것이 바로 유닉스UNIX와의 연관성때문이다. 이미 알고 있는 사실이겠지만 현재의 유닉스라는 아주 강력한 운영체제(오퍼레이팅 시스템)는 바로 C로 만들어졌다. 그리고 C는 일찍부터 표준화 되어 아주 별난 명령들을 사용하지 않는 한, PC에서 만든 프로그램의 소스를 대형기종에서 컴파일하여 실행시켜도 동작이 가능하며, 유닉스나 제닉스XENIX시스템도 기본적으로 C컴파일러를 제공하고 있다. 또한 C는 ASSEMBLY나 BASIC,PASCAL 등의 다른 언어들로 만들어진 서브루틴과도 어렵지 않게 연결할 수 있는 장점이 있다.
언어를 처음 배우려 할 때
‘컴퓨터 잘해요?’
‘네 꽤 합니다.’
‘그럼 언어는 어떤 것을 잘 쓰시나요?’
‘BASIC, FORTRAN, PASCAL, C 정도는 쓸 줄 압니다.’
이러면 질문한 사람은 상대방에 대한 부러움과 존경심으로 입이 쩍 벌어진다.과연 이렇게 자신있게 대답할 수 있는 사람이 몇 명이나 될까? 의외로 많다. 그러나 이들의얘기를 조금 더 들어보면 대개 그 언어의 명령어 몇 개를 알고 있는 정도로 실질적으로 프로그래밍을 작성할 수 있는 사람은 드물다. 프로그래밍 언어를 아는 것 하고, 프로그래밍을 할 수 있는 것은 많은 차이가 있다. 어느 한 언어의 명령어를 익히는데는 열심히만 하면 일주일 정도면 충분하다. 그리고 조금 더 신경을 쓴다면 다른 사람이 짜 놓은 프로그램도 어느 정도는 이해하고 분석할 수 있다. 하지만 막상 자신이 짜려고 하면 도대체 무엇부터 시작해야 할 지 막연한 경우가 많다. 이것 저것 건드려만보고 어느 것 하나 자신있게 다루지 못하는 것 보다는 단 한가지의 언어라도 자신의 몸의 일부처럼 다룰 수 있도록 하는 편이 백번 낫다. 여러 언어를 다루어 본 사람이라면 느끼게 되는 것이지만 저마다 나름대로의 습관이 있다. 어떤 사람은 다른 사람이 어렵다고만 하는 ASSEMBLY가 세상에서 가장 편한 언어라고 하기도 하고, 어떤 사람은 BASIC이, 어떤 사람은 C가 좋다고 말한다. 그러므로 어느 언어가 가장 낫다고 말하기는 어렵다. 하지만 이제부터 언어를 배우려는 사람이라면 보다 구조적인 언어를 배우는 것이 좋을 것이다. 이 언어도 좋을 것 같고, 저것도 좋을 것 같고.. 이럴 때 쉽게 내리는 결론이 ‘에이 그럼 둘다 해보지 뭐…’이다. 하지만 이것은 가장 위험한 일이다. 물론 해박한 지식을 갖기 위해서는 여러 언어를 섭렵하는 것도 좋겠지만 진정으로 프로그래밍을 하고 싶다면 어느 한가지만 선택하여 몰두하는 것이 좋다. 많은 사람들이 언어를 사용하고 있고, 별로 어렵지 않게 사용하는 것처럼 보인다고 해서 그 과정이 쉬운 것은 아니다. 그렇다고 물론 불가능한 것만은 아니지만 마음에 드는 한가지 언어를 선택하여 체계적으로 배운다면 머지않아 그 언어에 있어서 전문가임을 자랑할 수 있을 것이다. 이제 어느 언어를 배울 것인지를 선택했다면, 어떤 식으로 공부를 하는 것이 좋을까 생각해 보자. 물론 자신의 머리를 시험하기 위해 책 한권없이, 암호를 풀어나가듯이 공부를 하려는 무모한 사람도 있을 것이다. 하지만 처음 시작하는 단계에서 가장 중요한 것은 좋은 길잡이가 되어 줄 책을 고르는 일이다. 서점에 가 보면 수 많은 책들이 있다. 그러나 이들의 내용은 거의 비슷해 특히 초보자들이 고르기에는 더욱 어렵다. 그러므로 이미 그 언어를 잘 다루고 있는 사람에게 책을 추천받는 것이 좋다. 책을 선택하였다면 우선 책을 한번 끝까지 가볍에 훑어보기 바란다. 시작하고는 얼마 안가서 포기하는 사람이 많은데 그 이유는 지나친 의욕때문인 경우가 많다. 누구나 언어를 배우려고 책을 사놓고 ‘이제 이 책을 마스터 해야지’ 하는 큰 기대감(?)을 갖고 시작하다 보니까 곧 부담을 느끼게 되는 것이고 책의 분량이 많을 경우에도 더 빨리 싫증이 나게 된다. 그러다 결국은 책을 덮게 되고, 그런 자신에 대한 실망은 다시는 그 책을 쳐다보지 않게 만든다. 언어 공부는 한번의 정독 보다는 여러 번 반복해서 하는 것이 좋다. 우선은 가볍게, 모르는 것은 지나치면서 훔어본다. 그러면 아주 조금이라도 감이 잡힐 것이다. 이렇게 두어번 반복을 하다보면 아무리 머리가 나쁘다 해도 어떤 명령어들이 있는지 알게 될 것이다. 그 다음에는 해당하는 언어로 만들어진 짧막한 예제 프로그램을 이해해 본다. 다른 사람이 짜 놓은 프로그램(책에 실려있는 예제와 같은..)을 이해하려면 물론 어려울 것이다. 그러나 모르는 명령어가 나오면 다시 책을 찾아보고, 또 이해하고 … 이렇게 하다보면 자신도 모르게 그 언어에 익숙해질 것이다. 그 다음은 자신이 프로그램을 직접 작성해 본다. 의외로 초보자들이 어려움을 겪는 것은 프로그래밍시 명령어의 사용이 아니라, ‘틀’이다. 어느 언어이든지 기본적으로 지켜야 하는 프로그램의 구조가 어려움을 많이 준다. 그러므로 처음부터 자신이 프로그램을 짜는 것 보다는 다른 사람이 만들어 놓은 프로그램을 수정해 보는 것이 더 욱 바람직하다. 이것이 익숙해지면 스스로 프로그램을 작성하는데 별 어려움이 없을 것이다. 한편 어느 정도 시간이 흐른 후에는 다시 한번 책을 정독해 보는 것이 좋다. 그러면 그동안 그냥 지나쳤던 부분까지도 쉽게 이해될 것이다. 그 다음 단계는 여러가지 응용서적을 보고, 라이브러리와 기타 유틸리티를 활용하는 것이다. 이 정도 수준이 되면 그 다음에는 누가 길잡이를 해 줄 필요가 없다. 그 수준에서는 자신이 무엇을 더 공부해야 하고, 무엇이 부족한 지를 스스로 알고 있을테니까… 무엇보다 중요한 것은 ‘몇 개의 명령어를 아는가?’가 아니라 ‘얼마나 많이 프로그램을 짜 보았는가?’이다. 전문가라 하여도 자신이 자주 사용하는 언어의 모든 명령어를 알고 있는 것은 아니다. 필요할 때는 책을 찾아 보는 것이 당연하다. 어떤 문제가 주어졌을 때 거기서 빨리 규칙성을 발견하고 그것을 컴퓨터 프로그램으로 옮기는 능력이 중요한 것이다. 이것은 타고난 머리 문제가 아니라 많은 프로그래밍을 통해서 자연스럽게 익혀지게 된다. 컴퓨터 프로그래밍 언어를 익히는 것은 결코 어려운 일은 아니다.자신감을 가지고 도전해 보기 바란다.
사용하기 편리한 프로그램의작성이 언어의 주목적
지금까지 여러 사람들이 주로 사용하던 언어는 계속 바뀌어 왔다. 이러한 양상은 앞으도 예외는 아닐 것이다. 얼마전 까지만 해도 아무리 잘 만들어진 고급언어가 있다고 해도 ASSEMBLY의 필요성은 절대적이었다. 특히 ASSEMBLY로 만들어진 프로그램은 가장 적은 메모리를 차지하며, 그 컴퓨터가 낼 수 있는 최고 속도를 내기 때문에 더욱 그러하였다. 또 컴퓨터의 기본이 되는 운영체제나 그 밖의 시스템 자원들을 ASSEMBLY가 아닌 다른 언어로 만든다는 것은 생각할 수도 없는 일이었다. 하지만 이제 PC도 기존의 미니 컴퓨터에 버금가는 처리 속도를 가지게 되었고, 메모리의 제한도 적어진 만큼 ASSEMBLY의 필요성은 상대적으로 축소되고 있다. 예전의 느림보 기계에서 ASSEMBLY로 만든 프로그램보다, 발전된 기계에서 BASIC으로 만든 프로그램이 더 빠르게 돌아갈 날도 멀지 않았다. 물론 빠른 기계에서 ASSEMBLY를 사용한다면 그야말로 엄청난 속도를 낼 것이고, 어셈블러는 다른 고급언어의 컴파일러를 만들 때나 시스템 프로그래밍용으로 언제까지나 존재할 것이지만, 모든 일반 사용자들이 어셈블러를 꼭 익혀야 할 필요는 없다. 자그마한 테크닉에 재미를 느끼고, 똑같은 기능이지만 자신의 짠 프로그램이 보다 크기가 작고 빠른 것을 자랑하는 것도 좋은 일이다. 하지만 같은 시간동안 수십 배의 효율을 내는 사용하기 편리한 고급언어를 이용하여 보다 빠른 시간동안 더욱 사용하기 편리하고 강력한 기능을 가진 프로그램을 만드는 일이 더 중요하지 않을까. 앞으로도 컴퓨터는 점점 빨라지고, 메모리는 점점 커질 것이다. 따라서 더 이상 컴퓨터를 사용하는데 자신의 능력이 아닌 제약조건 때문에 자유롭게 프로그래밍을 할 수 없는 일은 없을 것이다. 이미 이런 시절은 우리 곁에 와 있다.

“아마 독자 중에서도 나중에 회사 전산실에 근무할 사람이 있다면 지겨울 정도로 많이 만나게 될 것이다.” 라고 본문에 있지만, 그 시절 정보처리기능사 공부할 때 말고는… 은행에서 일하던 친구들 중에는 많이 써본 친구들도 있다고는 한다. 말미에는 “사용하기 편리한 프로그램의작성이 언어의 주목적” 라고 이야기하면서 기계는 어차피 빨라지니 ASSEMBLY 보다는 BASIC 으로 만들더라도 더 효율적으로 프로그래밍하는 것이 낫다는 이야기를 하고 있다. 정말, 오늘날에는! PYTHON 도 많이 쓰고, 그냥 자연어도 많이 쓴다! 와!