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

HYEONG HWAN, MUN/ 10월 18, 2014/ 미분류/ 0 comments

https://blog.lael.be/post/95

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

 

Leave a Comment

작성하신 댓글은 관리자의 수동 승인 후 게시됩니다.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*