Back to writing
미분류 4 min read HYEONG HWAN, MUN

좋은 프로그래밍 언어는 무엇인가? (프로그래밍 언어의 역사)

Programming Languages 라는 (컴퓨터공학 전공)과목을 들으면서 느낀점을 토대로 글을 작성해본다.

비록 쉽게 풀어서 쓰겠지만 (최대한 이해하기 쉽게 순화해서 작성) 약간의 전공용어(예시:유닉스, 객체지향, 스크립트, 인터프리트)를 사용하기 때문에

비전공자는 글 이해에 어려움이 있을 수도 있다.

 

먼저 글을 쓰기 앞서 구글에서 프로그래밍 언어에 대해서 검색해 보았다.

몇가지 흥미로운 그림을 나열한다.
qq22

<그림 : Stackoverflow 커뮤니티의 언어별 검색횟수>

출처 : http://smthngsmwhr.wordpress.com/2012/11/19/measuring-popularity-of-programming-languages/

 

물론 검색횟수가 인기도를 뜻하는 것은 아니다.

위의 통계를 인용한 작성자가 (조심스럽게 말하길) 현재의 인기있는 12개의 언어는 C#, Java, PHP, JavaScript, C++, Python, Objective-C, C, Ruby, Perl, Shell, Visual Basic 라고 하였다.

 


qq23

<그림 : 어떤 프로그래밍 언어를 배우는 것이 좋을까?>

출처 : http://www.zappable.com/2012/11/picking-a-programming-language-chart/

 

위의 그림과 글을 작성한 분은 나름대로 철학이 있으시던데 어떤 프로그래밍 언어를 배워야하는지(그림에 대한 해석)에 대해서 적은 http://www.zappable.com/2012/10/learning-how-to-program-picking-a-langauge/ 글을 참고해주세요.

 


 

지금부터 좋은 프로그래밍 언어에 대해서 알아 보도록 하자.

 

좋은 프로그래밍 언어란 무엇인가?

먼저 저보다 훨씬 유명하시고 먼저 생각하신 Allen Perlis 님의 자료를 찾아보았습니다.

이분은 "A good programming language is a conceptual universe for thinking about programming."이라고 말했습니다.

한글로 풀이하자면 "좋은 프로그래밍 언어는 프로그래밍에 대해 생각(사색)하게 만드는 개념적인 세계이다."라는 뜻입니다.

 

프로그래밍 언어에 대해서 배우면서 프로그래밍이란 무엇인가? 를 계속 생각해야 할 것입니다.

 

프로그래밍 언어의 구성요소

프로그래밍 언어는 다음의 4가지 속성을 가지고 있습니다.

- Syntax(구문구조) : 문법적으로 올바른 프로그램에 대해 정확하게 설명.

- Names(이름) : 프로그램에서의 다양한 개체에 대해 이름을 명명함. (변수명, 타입명, 함수명, 클래스명 등등)

- Types(타입) : 타입이란 값의 그룹과 값이 할 수 있는 연산에 대해서 정의합니다. 이로인해서 올바른 연산을 파악하고 타입에러를 검출할 수 있습니다.

- Semantics(의미) : 프로그램의 의미를 나타냅니다. 각 줄의 의미를 알 수 있으며 프로그램이 실행되면 변수의 변화등을 정의합니다.

 

언어 디자이너(Language designer)는 이 속성을 반드시 정의하여야 하며 프로그래머(Programmer)는 반드시 정해진 규칙을 따라야 합니다.

 

프로그래밍 패러다임

프로그래밍 패러다임 : 프로그래밍 패러다임이란 특정한 분야의 문제에 대해 해결 규칙의 기초가 되는 것입니다.

다음의 4가지 주요한 패러다임을 나타냅니다. 특정한 것이 좋다/나쁘다 라는 생각을 하지말고 문제 해결에 대해 적합한 패러다임 및 프로그래밍 언어를 고르는 안목을 길러야 할 것입니다.

 

- Imperative(명령형 패러다임) : 프로그램을 순차명령의 실행으로 보는 패러다임. 프로그램과 데이터는 메모리안에서 구분되지 않는다. 이 패러다임에서 상태라는 뜻은 특정 순간의 모든 변수의 값을 뜻한다.

Imperative Language : Cobol, Fortran, C, Ada, Perl

 

- Object-Oriented(객체지향 패러다임) : 객체지향 패러다임은 모든항목을 객체로 놓고 객체간의 메세지 전달(message passing)으로 상태가 바뀌는 것을 뜻한다.

Object-oriented Language : Smalltalk, Java, C++, C#, Python

 

- Functional(함수형 패러다임) : 함수형 패러다임은 수학적 함수의 모임으로 표시되는 것이다. 함수와 재귀실행으로만 답을 구한다. 인공지능 분야에서 많이 쓰인다.

Functional Language : Lisp, Scheme, ML, Haskell

 

- Logic(논리적 패러다임) : 논리적 패러다임은 입력과 출력의 정의만으로 이루어진 것이다. 프로그램은 모든 논리 정의를 탐색하여 답을 구한다.

Logic Language : Prolog

 


qq24

<그림 : Programming language 의 역사 >

 

우리가 현재 쓰는 프로그래밍 언어에 영향을 끼친 언어들을 살펴보자.

*Fortran : 포트란은 IBM에서 최초로 만든 고급언어(High-level language;사람이 이해할 수 있는)이다. 세계 최초의 프로그래밍 언어는 아니고 IBM이라는 회사가 만든 언어중 첫번째 인 것이다.

이것은 초기 컴퓨터의 수요가 있었던 우주항공 분야를 위해 만들어진 언어이며 일반인들이 이해하기 어렵다는 단점도 있었다.

현재 기상관측, 탐사, 우주항공, 양자, 천문학, 동역학등의 분야에서 쓰이는 언어이다. 현재 최신버전은 Fortran 2008이다.

*Cobol : 코볼은 미국 국방부로 납품되는 프로그램들의 언어가 제각각이어서 이에 대한 문제를 해결하고자 만든 언어이다.

Cobol 이 개발되고 미국 행정부에 납품되는 언어는 모두 Cobol로 통일되었다. 사무 행정처리용 언어이다. 현재 최신버전은 Cobol 2002이다.

*Algol 60 : 미국 Fortran에 대항하기위해 유럽에서 만든 언어이다. Precise syntax(올바른 문법이란 무엇인가에 대해 정확하게 정의)를 구현한 최초언어. Algol계열 언어는 현재는 사용되지 않는다.

*PL/I : 프로그래밍 랭귀지 1 이라고 읽는다. Fortran과 Cobol과 Algol을 통합해서 만든 언어이다. 모든 분야에서 어우러져 사용할 수 있는 범용언어를 만든것이다.

하지만 금방 망해버렸다. 아무래도 특정 분야에서 그 분야에 적합한 언어를 사용하는 것이 좋았고 사람들은 이미 각자의 고급화된 언어에 익숙해져 있었다.

 

*Simula : 객체지향 개념을 최초로 적용한 언어이다.

*Smalltalk : 객체지향 개념을 최초로 완벽구현한 언어이다.

 

*HCPL : 유닉스 시스템을 관리할 용도로 개발된 언어이다. 이후 C 언어 디자인에 영향을 끼쳤다.

*C++ : C 언어에 객체지향 개념을 더한 언어이다.

*awk : C 언어를 스크립트 방식으로 변경한 언어이다. 스크립트 방식으로 개발하면 유닉스를 더 간편하게 관리할 수 있을 것 같아서 개발된 언어이다.

Perl, PHP, Python 언어 디자인에 영향을 끼쳤다.

 

*Lisp : 인공지능 분야에서 사용하기 위해 개발된 함수형 언어이다. 최초로 이 언어를 사용해서 만들고자한 것은 자동번역기였다.

 

*SEQUEL : Structured English QUEry Language 라는 뜻의 약어이며 구조화된 영어 쿼리 언어라고 해석할 수 있다. IBM에서 자신들이 운영하는 관계형 데이터베이스를 다루기위해서 만든 언어이다. Sequel이라는 단어가 영국 항공사와 이름이 겹쳐서 나중에 SQL로 명칭이 변경되었다.

요즘 흔히 쓰이는 MYSQL을 라엘이는 "마이 에스 큐 엘" 이라고 부르지만 일부사람들은 이 SEQUEL의 단어를 사용해서 "마이 시퀄"이라고 읽기도 하더라.

 


위의 도표 그림에서 오른쪽에 나타난 언어들이 요즘 쓰이는 언어이다.

좋은 프로그래밍 언어는 간결하고 가독성이 높으며 안정적이고.. 등등의 조건들이 있지만 당신이 현재 접할 수 있는 언어는 이 조건들을 모두 만족하며 충분히 검증된 것들이다.

따라서 좋은 프로그래밍 언어란!!

당신이 만들고자 하는 것을 먼저 이해한 후에, 그것의 개발 패러다임을 설정하며, 그 패러다임과 어울리는 프로그래밍 언어가 좋은 언어이다.
(일반적으로 그 분야에서 많이 쓰이는 언어가 좋은 언어이다.)

특정하게 한 언어를 신봉하며 집착하지 말고 유연한 개발자가 되도록 하자.

 

다음의 링크도 읽어 보아라.

http://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4%EC%9D%98_%EB%B9%84%EA%B5%90

 

Filed under