0. 개요
이렇게 프로그래밍 언어의 발전 과정을 살펴보면서 의문이 들게 된다.
"왜 이렇게 많은 프로그래밍 언어가 탄생했을까?"
이에 대한 대답은 아주 명확하다.
"진화(Evolution)"
시간이 흐름에 따라 우리는 더 나은 방법으로 일을 수행하는 방법을 배워왔다.
프로그래밍 언어 또한 진화하였고, 다양성은 계속해서 발전하면서 새로운 아이디어와 개념을 통해 나타났다.
1. 제어 흐름(Control Flow)의 변화
초기 프로그래밍에서는 goto와 같은 제어 흐름이 주를 이루었으나,
(Fortran, Cobol, Basic)
이후 구조화된 프로그래밍(Structured Programming)이 등장했다.
goto의 남용을 방지하며, 대신 while 루프나 case (또는 switch) 문을 기반으로 한 제어 흐름을 사용했다.
(Algol, Pascal, C, Ada)
2. 객체 지향 프로그래밍(Object-Oriented Programming):
객체 지향 프로그래밍은 프로그램을 객체 단위로 구성하고 상호 작용하는 방식으로 설계하는 패러다임이다.
(Smalltalk, C++, Eiffel, Java, C#)
3. 스크립팅 언어(Scripting Languages)
스크립팅 언어는 빠른 개발과 실행을 위해 만들어진 언어로, 전통적인 컴파일된 언어 대신에 사용된다.
중요한 개념은 시간 단축과 효율성이다.
(Python, Ruby)
4. 특화된 목적을 가진 언어들
Lisp dialects : 기호 데이터 및 복잡한 데이터 구조
Icon과 Awk : 문자 문자열을 조작
C : low-level 시스템 프로그래밍
Prolog : 데이터 간의 논리적 관계에 대한 이해
각 목적에 맞게 언어를 선택하는 것이 중요하다.
(🚨 그렇다고 이러한 목적 외에 못 쓰인다는 것은 아니다!)
5. 개인 취향
혹은 개인 취향에 따라 편하고 불편한 언어가 달라질 수 있다.
선호도의 차이 :
재귀(recursion) vs 반복(iteration)
포인터(pointer) vs 묵시적 회의(implicit dereferencing)
#. 그렇다면 무엇이 성공적인 언어를 만들까?
"진화"에 의해 언어들이 발전했다면,
어떤 언어는 살아남았고 어떤 언어는 도태되었을 것이다.
그 차이는 무엇이 만들어 냈을까?
1. 표현력 (Expressive Power)
: 얼마나 poweful 한 언어인가?
2. 초보자 사용의 용이성 (Ease of Use for Novice)
ex) Basic, Pascal과 같이 초보자가 배우기 쉬운 언어.
3. 구현 편의성(Ease of Implementation) // 개발 편의성
ex) Basic, Forth, Squeak
ex) Pascal
4. 표준화 (Standardization)
: 대부분의 널리 사용되는 언어들은 공식 국제 기준이나 표준화된 언어를 사용해 구현된 단일 표준 실행
5. 오픈소스(Open Source)
: 오늘날의 대부분 프로그래밍 언어는 적어도 한 개의 오픈소스 컴파일러나 인터프린터가 있다
ex) C, UNIX
6. 우수한 컴파일러 (Excellent Compilers)
ex) Fortran, Common Lisp
7. 경제, 후원 및 관성 (Economics, Patronage, and Inertia)
: 기술적 요소가 아닌 요인들
ex) Ada의 경우 미국 국방부에서 채택하여 사용했다.