1) 역사
계산기가 만들어지다
계산을 하는 도구로서 가장 간단한 것은 역시 주판입니다.
주판을 제외하면 17세기에 이르도록 계산을 위한 특별한 장치나 도구가 없었다고 할 수 있습니다.
그러다 1642년 프랑스의 수학자 겸 철학자인 파스칼이 톱니바퀴를 이용한 수동계산기를 고안하였습니다.
연결된 바퀴판들로 덧셈과 뺄셈을 하는 장치였는데 1671년 무렵 독일의 라이프니츠가 이를 개량하여 곱셈과 나눗셈도 가능한 계산기를 만들어냅니다.
라이프니츠의 놀라운 점은 십진법보다는 기계장치에 더 적합한 진법을 연구하여 17세기 후반에 이진법을 창안했다는 점입니다.
차분기관이 만들어지다
수학자 찰스 배비지는 처음으로 미사일 발사에 필요한 계산에 계산기를 만들어 사용했습니다.
이 기계를 차분기관(difference engine)이라고 하는데 삼각함수를 유효숫자 1875자리까지 계산하여 종이에 표로 인쇄하는 것과 같은 작업을 할 수 있었습니다.
그 원리는 뉴턴의 미적분법을 이용하는데 예를 들어 이차식 p(x)에서 p(0), p(0.1), p(0.2) 등
x가 0.1 단위로 변할 때의 p(x)의 값을 알고 싶다고 가정해봅시다.
이때 첫번째 줄에는 p(0), p(0.1), p(0.2)와 같은 함숫값을 저장하고, 두번째 줄에는 첫번째 줄의 차를, 세번째 줄에는 두번째 줄의 차를, ... 이런식으로 적어나가다 보면 두번째 줄의 수가 항상 일정하다는 것을 알 수 있습니다.
생각해보면 x의 차가 0.1이 아니라 0에 가깝다면 이는 미분이 되고 p(x)는 이차함수이므로 p''(x)가 항상 일정하다는 것을 이용한 것입니다.
n차식을 계산하라면 n개의 자리만 있으면 되고 곱셈을 하지 않고 덧셈과 뺄셈만으로 다항식의 값을 계산하기 때문에 매우 유용한 기계였습니다.
로그함수나 삼각함수등도 테일러급수를 이용하면 다항함수로 근사가 가능하므로 이 기계는 복잡한 계산에 많이 사용되었습니다.
전자컴퓨터가 만들어지다
우리가 일반적으로 말하는 의미의 컴퓨터는 제 2차 세계대전 즈음에 급격히 발전하였습니다.
전자회로가 기계식 연산장치를 대체하면서 점차 발전해왔기 때문에 정확히 무엇이 최초인지 정하는 데에는 무리가 있습니다.
주로 암호화와 복호화에 대한 연구가 많이 이루어지면서 컴퓨터는 급속도로 개량되기 시작하였고 지금까지 이어져오고 있습니다.
컴퓨터의 발전 과정을 부분 부분 묶어 세대로 구분하는데 1세대는 진공관, 2세대는 트랜지스터, 3세대는 IC, 4세대는 초LSI를 사용하는 것을 기준으로 구분하며 현대에 와서는 슈퍼 컴퓨터까지 등장하였습니다.
프로그래밍은 언제하나?
이처럼 컴퓨터가 발전해오면서 한 가지 문제점이 발견되었습니다.
하나의 기계가 하나의 동작만을 한다는 점이었습니다.
A라는 기계는 A라는 계산만을 하고 B라는 기계는 B라는 계산만을 하는데 이는 회로가 정해져 있기 때문이었습니다.
개발자들은 기계의 회로를 케이블로 구성하여 케이블을 바꾸어 끼는 것으로 이러한 문제를 해결하였으나, 케이블을 바꾸는 과정이 오래걸릴뿐 아니라 복잡해서 잘못 끼우기라도 하면 수백개 혹은 그 이상에 달하는 케이블을 다시 점검해야 했습니다.
그러다가 컴퓨터의 발전과 함께 "컴퓨터는 프로그래밍이 가능해야 한다."라는 주장이 힘을 얻으면서 프로그래밍이 시작되었습니다.
C언어는 어디에?
컴퓨터는 0과 1로 구성된 코드로 작동합니다.
예를 들어 000000은 A라는 동작을, 000001은 B라는 동작을, ... 이런 식입니다.
이러한 동작들을 사람이 알아보기 쉬운 영어 단어로 치환한 것을 어셈블리어라고 하며 JMP, ADD, SUB등의 명령어를 사용합니다.
그러나 이는 여전히 매우 기본적인 연산들로 구성되며 기능이 적었기 때문에 이를 응용하여 다양한 프로그래밍 언어들이 등장하였습니다.
이때 0과1을 기계어, 어셈블리어를 저급언어, C언어를 고급언어라고 하여 사람이 사용하기 용이할수록 고급언어로 분류합니다.
이러던 와중 BCPL이라는 언어가 개발되었고 이에서 기본만 남긴 버전인 B언어가 등장합니다.
이를 개량해서 만든 것이 C언어이며 한 번에 완성된 것이 아니라 계속해서 개정되어 왔기 때문에 출시된 연도를 표기하여 C99(1999년), C11(2011년)과 같이 부릅니다.
2) 현재
프로그래밍 언어로서
TIOBE(www.tiobe.com)에서 발표하는 프로그래밍 언어 순위에서 항상 1위는 C언어가 차지하는 것을 보면 C언어가 많이 사용되고 있구나를 느낄 수 있습니다.
고급언어이지만 메모리에 직접 접근하는 포인터 개념을 사용하고 다양한 저수준 기능들을 탑재하고 있기에 최적화를 하거나 속도가 중요한 알고리즘 작성에 사용되는 경우도 많습니다.
밀리기 시작하는가?
C언어는 절차지향 언어입니다.
절차지향이란 프로그램이 맨 위의 명령부터 맨 아래 명령까지 순차적으로 시행된다는 것을 의미하며 대부분의 코드를 함수를 작성하는데 사용합니다.
그러나 객체지향 언어들이 등장하면서 판세에 변화가 생겼습니다.
객체지향에서는 클래스(class)라는 개념을 사용하는데, 클래스는 일종의 집합과 같은 개념으로 볼 수 있습니다.
클래스는 상수, 변수, 함수, 클래스 등을 담을 수 있는데 집합또한 숫자, 변수, 함수, 집합을 담을 수 있으니까요.
물론 자기자신을 포함하지 않는 집합같은 수학적인 이야기는 잠시 접어둡시다.
이러한 객체지향의 대표로는 JAVA가 있으며 현재 C언어와 1,2위 자리를 다투는 정도까지 왔고 C언어에 객체지향 개념을 추가한 C++이라는 언어또한 널리 사용되고 있습니다.
C언어는 더 나아가 C#이라는 언어를 개발하여 C++과 JAVA의 장점을 합친 언어를 내놓았고 C#은 문법이 쉽고 기능이 다양하며 Unity엔진 등에서 사용하면서 새롭게 각광받기 시작했습니다.
C언어를 배울 필요가 있을까?
처음부터 C#을 배우면 되는 것 아니냐고 생각할 수도 있지만, C언어는 컴퓨터가 작동하는 알고리즘을 잘 보여주고 있으며 프로그램을 작성하는 기본적인 절차와 문법을 익히기에 적합하기 때문에 프로그래밍에 입문하는 초보자들이 처음 배우는 경우가 많습니다.
수학으로 치자면 중/고등 수학을 배우지 않고는 대학교 수학을 배우기 힘든것과 마찬가지입니다.
또한 저수준적인 접근이 가능하기 때문에 아직도 많이 사용되고 있으며 C++에서 C의 모든 기능을 포함하고 있기 때문에 C를 배운 뒤 약간의 개념을 더 배우면 C++을 사용하는데 무리가 없습니다.
이정도 되면 대부분의 프로그래밍 언어의 구조가 비슷하므로 다른 언어 또한 금방 배울 수 있게 됩니다.
따라서 처음 입문하는 사람에게 C언어를 권하게 되는 것입니다.
댓글 없음:
댓글 쓰기