니힐로그 로고

개발을 위한 프로그래밍 지식 3편 - 프로그래밍 언어의 역사

분류포스트

작성일2021-05-03 12:30

수정일2021-10-30 14:28

카테고리

태그

개발을 위한 프로그래밍 지식 3편 - 프로그래밍 언어의 역사

개발을 위한 프로그래밍 지식시리즈는 프로그래밍 공부를 하기에 앞서 알아서 나쁠 것 없는 정보들을 먼저 접하는 것으로부터 구상했습니다. 컴퓨터와 프로그래밍의 역사를 들여다보고 인터넷과 웹의 역사를 들여다보는 것이 목적입니다. 시리즈의 포스트를 모아둔 글은 이 링크로 넘어가시면 됩니다.

이번 글은 개발을 위한 프로그래밍 지식 3편입니다. 프로그래밍 언어 자체에 대해서는 저번 글에서 이미 이야기를 했으니까 이번 글에서는 프로그래밍 언어의 역사에 대해 알아봅시다. 저번 글은 프로그램과 프로그래밍 언어 이 링크를 참고하시면 됩니다.

그럼 바로 본론으로 들어갑시다!

프로그래밍 언어가 등장하기 이전

20세기 중반에 컴퓨터가 등장함에 따라 프로그래밍도 같이 시작되었다고 할 수 있습니다. 초창기 컴퓨터라고 할 수 있는 에니악과 그 비슷한 시기의 컴퓨터들은 오로지 계산을 위해서 존재했고 원하는 결과를 얻기 위해서는 긴 작업을 필요로 했습니다.

에니악의 경우에는 프로그래밍 언어가 아닌 천공 카드와 배선판을 이용해 프로그램을 실행했습니다. 이는 매우 불편한 작업이었고 심지어는 프로그램을 바꾸려면 배선판을 전부 손봐야했습니다. 이러한 문제점을 개선한 것이 바로 에드박과 에드삭 같은 컴퓨터들이었고, 실질적인 프로그래밍의 영역은 이 때부터 시작됩니다.

전쟁과 프로그래밍

사실 제가 혼자 공부해본 바에 따르면 이 이전에도 프로그래밍 언어는 존재했고 컴퓨터가 개발되기 이전에도 프로그램은 존재했으나 그건 중요하지 않습니다. 중요한건 프로그래밍 언어들이 등장하기 시작했을 무렵부터 세계에 변화가 시작되었다는 것이죠.

처음 프로그래밍 언어가 등장했을 시기는 전쟁이 활발하거나 군사력 관련해서 나라들이 서로 경쟁을 하던 때였습니다. 그렇기에 컴퓨터는 군사용, 군사와 관련된 과학 연구에 쓰였습니다. 에니악만 해도 군사용으로 쓰였기 때문에 전쟁이 끝난 얼마 뒤의 시대도 이는 별반 다르지 않았습니다.

지금 생각해보면 인류의 발전은 전쟁으로 인해 촉진되었습니다. 일상에서도 사용되는 기술들은 대부분 전쟁을 할 때에 전쟁을 목적으로 만들어졌던 것을 생각해보면 이는 상당히 흥미로운 측면입니다. 프로그래밍 언어도 그러했습니다.

기계어(Machine Code)

기계어의 예
기계어의 예
크게 보기 (새 창)

컴퓨터를 사용하기 위해서는 컴퓨터가 알아먹을 수 있는 체계를 필요로 했고 이 때 처음으로 기계어(Machine Code)라는 프로그래밍 언어가 나타나게 됩니다. 기계어는 0과 1이라는 비트 단위의 두 숫자(엄밀히는 숫자는 아닙니다.)를 이용한 언어였습니다.

어셈블리어(Assembly language)

우측이 어셈블리어다. 정말 괴랄한 모양을 갖고 있다.
우측이 어셈블리어다. 정말 괴랄한 모양을 갖고 있다.
크게 보기 (새 창)

이 기계어는 0과 1만으로 모든 내용을 채우니까 그 가독성이 참 개떡같았을 겁니다. 그 당시의 사람들도 이 이진수 모스부호를 사용하는 게 불편하다는 것을 알고 있었고 이를 개선한 것이 바로 **어셈블리어(Assembly language)**였습니다.

전쟁이 끝난 뒤에는 어셈블리어로 프로그래밍을 했는데 이 어셈블리어는 복잡한 기계어를 조금 더 사람이 알아볼 수 있게 만든 프로그래밍 언어였습니다. 컴퓨터는 여전히 숫자만을 알아먹었습니다. 그렇기 때문에 어셈블리어로 프로그래밍을 해도, 이를 기계어로 바꿔주는 과정이 필요했습니다.

어셈블리어를 기계어로 바꾸는 과정을 컴파일1이라고 합니다. 어셈블리어는 프로그래밍을 조금 더 편하게 만들어주는 요소였던 것이지 기계어를 대체하는 것은 아니었던 것이죠. 어셈블리어는 기계어에 1:1로 대응이 가능하게끔 만들어져 있습니다. 또한 기계어와 어셈블리어는 모두 저급 언어2라고 불립니다.

이 이후의 모든 프로그래밍 언어들은 어떤 과정을 거치든 기계어로 컴파일하는 것이 최종 목적입니다. 즉, 기계어는 컴퓨터가 알아먹을 수 있는 유일한 수단이라는 것입니다. 지금도 기계어는 여러 프로그램의 내부적인 순환에 쓰인다는 겁니다. 프로그래밍 언어는 결국 어떤 언어가 보기 좋은가? 어떻게 효율적으로 프로그래밍이 가능한가? 를 기준으로 발전합니다.

포트란(FORTRAN)

포트란의 대략적인 모습
포트란의 대략적인 모습
크게 보기 (새 창)

어셈블리어는 기계어를 보기 좋게 만든 것이지만 그래도 어려웠던 것은 달라지지 않기 때문에 여전히 불편했습니다. 1954년 정도에 **포트란(FORTRAN)**이라는 프로그래밍 언어가 등장합니다. 이는 최초로 만들어진 고급 언어였습니다. 고급 언어는 저급 언어와는 반대로 컴퓨터보다는 인간의 언어와 좀 더 비슷하다는 의미로 사용됩니다. 고급 언어들은 컴파일이라는 작업을 필요로 합니다.

포트란은 FORmula TRANslator의 약자였는데, 철저하게 과학 기술 계산을 위한 용도로 개발된 언어였습니다. 그렇기 때문에 수식에 특화되어있었고 수식에 한해서는 상당한 기능을 자랑합니다. 컴퓨터가 등장한 초창기 시대까지만 해도 컴퓨터의 용도는 군사 기술과 연관이 깊었습니다. 포트란도 그런 부분을 위해 개발이 되었다고 이해하면 됩니다.

이때 만들어진 포트란은 지금도 쓰입니다. 과학이나 수학과 관련된 수식에 대해서는 어마어마한 기능을 자랑하기 때문이죠. 물론 저는 문외한이라 어디서 쓰는지는 잘 모르겠습니다만은 확실한건 포트란은 계속해서 버전을 올려왔고 지금도 쓰고 있다는 겁니다.

많은 양의 계산을 할 때에 특화되어있는 언어이기 때문에 지금도 현역으로 쓰이지만, 포트란의 문법은 계속 발전하고 있어서 위 이미지와 다를 수 있습니다.

민간으로 뻗어나가는 프로그래밍 언어

이때부터는 단순히 전쟁이나 군사와 관련된 용도뿐만 아니라 여러 기업에서도 사용될 수 있는 프로그래밍 언어가 등장하기 시작합니다. 이제 민간으로 뻗어나가기 시작한 것이죠. 단순 수학, 과학적인 계산을 넘어서 여러 비즈니스에 쓰일 수 있는 프로그래밍 언어들이 나타나기 시작하죠.

코볼(COBOL)

코볼의 모습
코볼의 모습
크게 보기 (새 창)

1959년 정도에 코볼이라는 언어가 그 시작이었습니다. **코볼(COBOL)**은 COmmon Business-Oriented Language의 약자로 코볼의 등장은 이제는 프로그래밍이 복잡한 군사용이나 과학계산 같은 게 아니라 기업들의 입장에서 회계를 위해 사용을 하면 편해지지 않을까라는 발상으로 이루어집니다. 사실상 보다 포괄적인 데이터 처리를 위해서 개발된 게 코볼입니다.

포트란은 고차원적인 과학 계산을 위한 것이기 때문에 단순히 숫자를 더하고 빼고 곱하고 나누는 등의 간단한 계산에는 적합하지가 않았습니다. 그래서 그것을 기업에서 쓰기엔 문제가 좀 있었기 때문에 데이터를 실제로 처리하기도 하는 코볼이 개발되었습니다.

당시 많은 데이터를 처리하거나 회계 등의 계산을 필요로 했을 때 기업들이 사용한 컴퓨터는 메인프레임이라고 부르는 대형 컴퓨터였는데, 이 컴퓨터에 코볼이 쓰였습니다. 유지보수가 상당해서 21세기 초반까지 사용되기도 했습니다. 업계 1위의 언어였습니다.

그런데 문제는 코볼의 내부적인 요인으로 인해서 큰 버그가 발생하게 됩니다. 그게 바로 Y2K 문제입니다. 20세기 후반의 기업들은 연도를 표기할 때에 앞의 두자리는 제외하고 뒤의 두 자리만 사용하는 게 관행이었습니다. 그러니까 1974라면 74만 사용하고, 저장을 했죠. 그럼 어떤 문제가 생길까요? 1999년에서 2000으로 넘어갈 때에 문제가 발생하게 됩니다. 99가 00이 되니까요.

아니나 다를까 어마어마한 문제들이 발생하게 됩니다. 그리고 이런 대란으로 인해서 기업들은 표기 방식을 바꿔야했고, 그동안 회의적이었던 언어의 교체에 대한 이야기들이 다시금 나오기 시작합니다. 여러 이야기의 끝에 선택된 것은 바로 **자바(JAVA)**였습니다. 빠르면 2000년, 적어도 늦게는 2010년 이후에는 자바가 업계의 1위를 차지하게 됩니다.

자바는 1995년에 처음 개발되었습니다. 즉 이 이야기는 좀 나중의 일이라는 것이죠.

C 언어

C
#include <stdio.h>

int main(int argc, char** argv) {
  printf("Hello world\n");
}

1972년에 벨 연구소에서 데니스 리치라는 사람이 개발한 언어가 바로 C 언어였습니다. 지금도 상당히 많이 쓰이고 있는 언어의 이름이죠. 이 C언어에 대한 이야기를 하기 위해서는 그 전에 다른 이야기들을 먼저 해야합니다.

유닉스의 등장

1960년대 말에 멀틱스라는 운영체제 개발에 참여하고 있던 켄 톰슨은 멀틱스를 이용해서 어떤 게임을 즐기고 있었습니다. 그런데 멀틱스를 더 이상 쓰지 않는 상황에 도달했고 이 사람은 자신이 만든 이 게임을 하기 위해서 작은 컴퓨터를 하나 구비했고 게임을 돌리기 위한 운영체제를 만들어야 했습니다.

그렇게 만들어진 운영체제의 이름은 바로 유닉스입니다. 멀틱스는 메인프레임용으로 개발이 되었고 유닉스는 개인 컴퓨터의 시작점이나 마찬가지인 의미를 갖습니다. 처음의 유닉스는 어셈블리어로 만들어졌습니다. 고급 언어로 만들어서 컴파일을 하는 건 효율이 없었기 때문이라고 합니다.

훗날 코볼이 자바에게 자리를 빼앗길 때, 유닉스는 메인 프레임의 자리를 빼앗는 경지에 이르게 됩니다. 아무튼, 어셈블리어로 만들어진 유닉스는 나중에 C 언어로 다시 프로그래밍되어 탄생합니다. 이렇게 만들어진 유닉스는 최종적으로 벨 연구소의 산물이 되었습니다. C 언어는 유닉스를 위한 프로그래밍 언어였습니다. 지금이야 널리 쓰이지만 말이죠.

유닉스와 C 언어는 무료로 공개되었고 대학 등에서 널리 사용이 되었습니다. 사실상 유닉스와 C 언어로 인해서 일반인들도 컴퓨터를 더 많이 접하게 되었습니다. 또한 이후의 운영체제들은 C 언어로 개발되는 상황에 놓이게 됩니다. 이 C 언어가 상당히 효과적이라는 것을 알 수 있는 부분입니다. 지금도 많이들 사용하고 있으니까요.

여러 대학에서는 유닉스와 C 언어를 가르쳐서 많은 기술자들을 만들어냅니다.

C++

C++의 로고
C++의 로고
크게 보기 (새 창)

1985년에는 C 언어에 객체지향을 첨가한 **C++**가 등장합니다. C 언어에 이어서 익숙한 이름이 등장을 하죠. **비아르네 스트로우스트루프(Bjarne Stroustrup)**라는 사람이 개발했고 C 언어를 발전시켰기 때문에 더 강력했습니다. 하지만 처음 나왔을 때엔 인기가 별로 없었습니다.

객체지향이라는 개념 자체는 과거에도 있었지만 인기가 없어서 잘 쓰이지 않았습니다. 그래서 C++도 그닥 큰 인상을 주지 못했던 것이 있는 듯합니다. 시대가 흐르면서 프로그래밍의 세계는 점점 복잡해져갔습니다. 기술이 발전해가니까 발상이 새롭게 생겨나는 건 당연하기 때문입니다. 유지보수에 대한 문제들이 점점 나타나기 시작했고 1990년대에 들어서 C++은 빛을 보기 시작합니다.

프로그래밍의 세계에서 유지보수가 편한 프로그래밍 언어가 선택되는 것은 자연스러운 현상입니다. 그렇기 때문에 객체지향 프로그래밍이 빛을 보게 된 것입니다. 왜 그런 것인가에 대해서는 앞으로 여러분이 프로그래밍을 더 공부하다보면 알게 될 겁니다. 뭐 아무튼 C++는 컴퓨터의 주류 운영체제가 윈도우가 되기 시작했을 무렵부터 더욱 더 빛을 발하기 시작했습니다.

90년대 당시에 윈도우가 개발되면서 GUI가 더욱 활발하게 개발이 시작되었고 이 개발에 어려움이 있었지만 윈도우를 만든 언어가 C 언어였기 때문에 C 언어와 호환이 되는 C++은 좋은 대안이 될 수 있었습니다.

지금도 소프트웨어의 개발에 있어서는 C와 C++이 압도적입니다. 최근 2021년 6월에 공개되었던 윈도우 11도 여전히 C와 C++로 개발이 되었으니까요.

자바(JAVA)

자바의 로고
자바의 로고
크게 보기 (새 창)

1995년에 개발된 자바는 C++가 복잡하다는 이유로 개발이 되었습니다. 자바를 만든 사람은 **썬 마이크로시스템즈(이하 썬)**의 제임스 고슬링이라는 사람입니다. 자바는 프로그래밍 언어였지만 PC에서 쓸 목적으로 개발된 것은 아니었습니다. 가전제품에 들어갈 프로그램에 쓸 언어였는데, 원래는 C++을 넣으려고 했습니다. 하지만 복잡하다는 이유로 자바가 탄생하게 되었습니다.

그런데 어쩌다보니 코볼을 대체하는 프로그래밍 언어의 위치에 올랐고 정보를 처리하는 언어 중에서 1순위는 단연 자바가 되었습니다. 자바는 지금도 다양하게 사용되고 있습니다. 본래 웹에 쓰일 용도는 아니었지만 웹 프레임워크도 존재하고 윈도우에서 돌아가는 여러가지 소프트웨어도 만들 수 있습니다. 심지어는 게임도 만들 수 있죠. 물론 게임 개발은 위의 두 언어도 가능합니다.

자바는 상당히 인기가 있었는데 그 인기 때문이었는지 오라클이 2010년에 썬을 인수하게 됩니다. 그래서 자바도 자연스럽게 오라클의 손으로 넘어가죠. 그 이전에는 윈도우를 만든 마이크로소프트에서도 자바에 관심을 보였습니다. 썬에서 개발한 JVM에 자신들의 독자적인 기능을 넣다가 소송을 당하기까지 하죠. 그러다가 마이크로소프트에서 탄생한 게 **C#**입니다. 자바와 C++에 큰 영향을 받았죠.

자바스크립트

자바스크립트의 로고 (가운데)
자바스크립트의 로고 (가운데)
크게 보기 (새 창)

자바와 마찬가지로 1995년에 최초로 개발된 자바스크립트는 원래 라이브스크립트라는 이름으로 개발이 되었습니다. 그런데 자바가 잘 나가니까 그 인기에 숟가락을 좀 얹으려고 자바스크립트라는 이름으로 바꾸게 됩니다.

자바스크립트는 본래 웹 서버에서 사용될 언어였습니다. 웹서버를 처음으로 만든 기업은 넷스케이프라는 곳입니다. 그 곳에서 자바스크립트를 사용하려고 했는데.. 그닥 효율은 좋지 않았는지 사용되지 않았고 웹 브라우저에 내장되는 신세로 전락하고 맙니다. 그런데 이것이 신의 한수였죠.

당시 플래시라는 기술이 있었습니다. 애니메이션을 통해서 웹을 구성할 수 있었죠. 플래시는 웹에서 동적인 제어를 하는 유일한 시스템이었습니다. 하지만 보안상의 문제로 플래시는 몇년 전에 나가리되었습니다. 그 자리를 자바스크립트가 차지하게 되었죠. 자바스크립트는 현재 상당히 거대해졌습니다. 웹을 이루는 세가지의 요소인 HTML, CSS, JS로 불림과 동시에 자바스크립트는 단순히 웹에서 돌아가기만 하는 언어는 아니게 되었으니 말입니다.

지금은 자바스크립트로 PC 프로그램을 프로그래밍할 수도 있게 되었습니다. 사실상 자바스크립트의 기술이 강력해짐에 따라 웹의 환경이 점점 발전하고 있죠. 웹에서 노래를 듣고 이미지를 편집하거나 영상을 제작하기도 합니다. 웹 프로그래밍에서 가장 중요한 기술이기도 합니다. 인기가 없었지만 이제는 인기가 아주 많은 언어가 되었고 웹 프로그래밍의 세계가 급변하기 때문에 정말 다양한 오픈소스들이 나타나고 있습니다.

자바스크립트의 장점은 오픈소스라는 점이고 관련 기술이 빠르게 등장한다는 것입니다. 하지만 단점은 마찬가지로 기술이 빠르게 등장하기 때문에 트렌드가 급변한다는 것이죠. 뭐 그럼에도 자바스크립트는 아직 잘 살아있습니다. 웹 프로그래밍을 할 때에 백엔드를 자바로 할지언정 프론트는 자바스크립트를 택하는 경우가 많습니다.


여기까지가 대략적인 프로그래밍 언어의 역사의 흐름입니다. 이외에도 다른 자잘한 언어들은 많습니다. 당장에 파이썬 같은 것들이 있죠. 하지만 프로그래밍 언어 세계에서의 큼지막한 맥들은 바로 위의 저것들입니다. 기계어부터 시작된 프로그래밍 언어들이 지금까지 다양한 언어를 만들어온 셈이죠. 앞으로도 프로그래밍 언어는 발전할 것이고 다양한 언어들이 생겨날 겁니다.

자바스크립트는 사실 그다지 큰 맥을 차지하지는 않았는데 저기에 들어가 있는 이유는 요즘은 컴퓨터와 웹은 떼려야 뗄 수 없는 관계에 있고 웹이 발달함에 따라 자바스크립트가 큰 위상을 얻었기 때문입니다. 현대에 이르러서는 웹 프로그래밍도 어마어마한 위치를 갖기 때문이죠. 아무튼, 이번 글은 여기까지 입니다. 다음 글은 드디어 웹에 대한 이야기입니다.


1보통은 컴파일이라고 부르지만 어셈블리어를 기계어로 바꾸는 과정은 너무나도 단순해서 이것을 담당하는 소프트웨어를 어셈블러라고 부른다.

2형편이 없다거나 수준이 낮다는 의미가 아니라 Low Level 언어라는 의미로 기계어에 가까운 언어들을 말한다. 반대어는 고급 언어로 인간들이 이해할 수 있는 좀 더 간편한 언어들을 의미한다.


글을 읽고 혹은 읽으면서 하고 싶은 말이 있다면 아래의 덧글창에 적어주시면 됩니다. 최대한 빠르게 확인하고 답변을 드리겠습니다. 이 글을 보신 모든 분들의 하루가 좋은 하루이길 바랍니다.