프로그래밍 언어의 변천사
1. 디지털 컴퓨터 이전의 알고리즘
1.1 바벨론의 점토판 (기원전 1500-3000년)
- 세계 최초의 알고리즘 기록
- 60진법 사용 (현대 시간 체계의 기원)
- 고정 소수점 개념 도입
- 사칙연산과 대수 방정식 해법 포함
- ‘This Procedure’ 형태의 선언적 표현 사용
- 제한사항:
- 분기문(if) 개념 부재
- 0(영) 개념 미발견
- 음수 개념 부재
1.2 유클리드 알고리즘 (기원전 300년)
- 최대공약수 계산 알고리즘
- 자연어로 표현된 알고리즘
- 특징:
- 반복 개념 존재
- 여전히 0과 1의 나눗셈 개념 부재
- 바벨론 알고리즘 대비 제한적 진보
2. 근대 이전의 발전
2.1 찰스 바베지와 해석기관 (1792-1871)
- 차분기관(Difference Engine)과 해석기관(Analytical Engine) 개발
- 산업혁명 시대의 혁신적 계산 기계
- 현대 컴퓨터의 기본 개념 제시
- 폰 노이만 구조의 선구자적 모델
2.2 에이다 어거스타 (최초의 프로그래머)
- 찰스 바베지의 조수
- 세계 최초의 컴퓨터 프로그래머로 인정
- 주요 공헌:
- 알고리즘 분석에 대한 선구적 견해 제시
- 계산 시간 최소화의 중요성 강조
- ADA 프로그래밍 언어의 이름의 유래
3. 현대 프로그래밍 언어의 태동
3.1 1940년대의 발전
- 튜링 머신 개념
- 처치의 람다 계산법
- 에이컨의 Mark I (전기식 계산기)
- 폰 노이만의 플로우 다이어그램
3.2 최초의 고급 프로그래밍 언어들 (1957-1958)
- FORTRAN I (1957)
- 최초의 고급 프로그래밍 언어
- FORTRAN II, IV, 77, 90으로 발전
- FLOW-MATIC (1957-1958)
- COBOL의 전신
- 비즈니스 응용에 초점
- LISP (1958-1959)
- 함수형 프로그래밍의 시초
- AI 분야에서 널리 사용
4. 주요 프로그래밍 언어의 계보
4.1 ALGOL 계열
- ALGOL 58 → ALGOL 60 → ALGOL 68
- Pascal, Modula-2로 발전
- 현대 프로그래밍 언어에 큰 영향
4.2 C 언어 계열
- CPL → BCPL → B → C (1972)
- C++ (1985)
- Java, C# 등으로 영향
4.3 특수 목적 언어들
- ADA (1983-1995)
- 미 국방성 공식 언어
- 대규모 시스템용
- 완전한 컴파일러는 미 국방성만 보유
- Visual BASIC
- 윈도우 시스템 대응
- GUI 프로그래밍 지원
5. 현대 언어의 특징
5.1 객체 지향 언어의 발전
- Simula 67에서 시작
- Smalltalk으로 발전
- C++, Java로 이어지는 계보
5.2 최근 동향
- 약 250여 개의 프로그래밍 언어 존재
- ADA가 마지막 완전히 새로운 언어로 평가
- 이후 언어들은 기존 언어의 변형이나 개선으로 간주
프로그래밍 언어의 연대별 발전 과정 (1950-1970년대)
1. 1950년대 초반: 초기 단계
- 기계어 사용 시기
- 프로그래밍의 어려움:
- 기계 의존적 특성
- 자연어와의 큰 차이
- 이해와 작성의 복잡성
2. 1950년대 중후반: 최초의 고급 언어들
2.1 FORTRAN (1957)
- Formula Translation의 약자
- 개발자: 존 배커스
- 특징:
- 수학/과학기술 계산용 언어
- 배열, 반복구조, 분기문, 부프로그램 지원
- 발전 과정:
- FORTRAN I, II, IV (Standard FORTRAN)
- FORTRAN 66
- FORTRAN 77
- FORTRAN 90
- 30년 이상의 긴 수명
2.2 COBOL
- 전신: FLOW-MATIC
- Common Business Oriented Language의 약자
- 특징:
- 상업용/업무용 언어
- 문서화 기능 강조
- 간단한 수학 계산 중심
2.3 ALGOL 60
- ALGOrithmic Language의 약자
- 주요 특징:
- 자유 형식(Free Format) 도입
- 자료형 선언
- 재귀(Recursion) 개념
- Call by Value 매개변수 전달
- 스택 기반 실행환경
- BNF(Backus-Naur Form) 도입
2.4 LISP
- List Processor의 약자
- 개발: MIT 존 매카시
- 특징:
- 함수형 언어
- 람다 계산법 기반
- 힙 메모리 할당
- 가비지 컬렉션 도입
2.5 APL
- A Programming Language의 약자
- 개발: 하버드대 아이버슨
- 특징:
- 행렬 연산 특화
- 그리스 문자 사용
- 인터프리터 전용
- 특별한 제어구조 부재
3. 1960년대: 언어의 폭증 시대
3.1 기술적 배경
- 트랜지스터의 도입
- 진공관 대체
- 전력 소모 감소
- 처리 속도 향상 (약 1000배)
3.2 주요 언어들
PL/I
- IBM 개발
- 특징:
- 병행성 도입
- 메모리 할당 개념
- 예외 처리 도입
- 한계:
- 복잡한 문법
- 낮은 실행 효율
- 어려운 학습곡선
ALGOL 68
- 특징:
- 일관된 형 시스템
- 직교성 강조
- 새로운 전문용어 도입
기타 중요 언어들
- SNOBOL
- 최초의 문자열 처리 언어
- 패턴 매칭 특화
- SIMULA 67
- 최초의 객체지향 언어
- 클래스 개념 도입
- 노르웨이에서 개발
- BASIC
- Beginner’s All-purpose Symbolic Instruction Code
- 초보자용 언어
- 단순한 문법 구조
- 마이크로컴퓨터 기본 언어로 채택
4. 1970년대: 정리와 체계화
4.1 기술적 배경
- IC칩의 등장
- LSI, VLSI 발전
4.2 주요 언어들
Pascal
- 개발: 니클라우스 워스
- 특징:
- 단순성과 일관성 강조
- IBM 360 시리즈 지원
C (1972)
- 개발: 데니스 리치(벨 연구소)
- 특징:
- 유닉스 OS 개발용
- 하드웨어 접근성 강화
- 시스템 프로그래밍 지원
- 포인터 개념 도입
4.3 시대적 특징
- 간결성과 일관성 추구
- 추상화와 병행성 개념 도입
- 프로그램 증명 개념 등장
'프로그래밍' 카테고리의 다른 글
프로그래밍 언어론 3장 (4) | 2024.11.11 |
---|---|
프로그래밍 언어론 1장 (4) | 2024.11.08 |