Skip to content

프로그래밍 언어 지도

서론

왜 이렇게 많은 프로그래밍 언어가 있을까요? 어떤 것을 배워야 할까요? 이 장에서는 "언어의 진화"부터 "프로그래밍 패러다임"까지, 그리고 "선택 방법"까지, 프로그래밍 언어에 대한 전체적인 이해를 구축합니다. 결론부터 말하면: 최고의 언어는 없고, 상황에 가장 적합한 언어만 있습니다.

이 글에서 무엇을 배우게 되나요?

이 장을 마치면 다음을 얻게 됩니다:

  • 합리적 선택 능력: "어떤 언어를 배울까"에 직면했을 때, 프로젝트 요구에 따라 판단할 수 있고 맹목적으로 유행을 따르지 않습니다
  • 패러다임 이해도: "객체지향", "함수형 프로그래밍"이 단순한 문법 차이가 아니라 다른 사고방식임을 이해합니다
  • 역사적 진화 관점: 70년 이상의 언어 진화 — 0과 1을 직접 작성하던 것부터 자연어로 코드를 생성하는 것까지
  • 후속 학습 기초: 새로운 언어 설계 철학과 기술 선택 의사결정의 기반
내용핵심 개념
제1장언어의 진화기계어부터 고급 언어까지
제2장프로그래밍 패러다임명령형, 객체지향, 함수형
제3장언어 선택상황 기반 선택 방법

0. 인간은 컴퓨터와 어떻게 "대화"할까?

이진수만 이해하는 로봇과 소통해야 한다고 상상해 보세요:

  • 직접 0과 1 입력 — 가장 원시적이고 효율이 극도로 낮음. 0 하나를 1로 잘 쓰면 전부 틀려짐(기계어)
  • 니모닉 사용MOV AX, 110110000 00000001보다 훨씬 알아보기 쉬움(어셈블리어)
  • 자연어에 가까운 표현int sum = 1 + 2; 인간이 바로 이해 가능(고급 언어)

프로그래밍 언어는 인간과 컴퓨터 간의 소통의 다리이며, 70년 이상 "인간의 사고에 더 가까워지는" 방향으로 진화해 왔습니다.


1. 프로그래밍 언어의 진화

👇 직접 확인해 보기: 1940년대부터 오늘날까지의 프로그래밍 언어 진화 역사 탐색

Programming Language MapEvolution · paradigms · type systems · language comparison
1940s
Machine language
Binary
1950s
Assembly and early high-level languages
AssemblyFortranLispCOBOL
1970s
Systems programming era
CPascalSmalltalk
1980s-90s
OOP and the Internet
C++JavaPythonJavaScript
2000s
Modern languages
C#GoScalaRuby
2010s+
Next-generation languages
RustSwiftKotlinTypeScript
2000sModern languages
Language design focused more on developer productivity and safety. Go was created for cloud-native infrastructure.
GoConcurrency-friendly and used to build Docker and Kubernetes
RubyRails brought a major productivity boost to Web development
Core idea:Programming languages have evolved from machine code to modern high-level languages, steadily moving closer to human thinking.

💡 한 줄 요약

프로그래밍 언어의 진화 추세: 점점 더 인간의 사고에 가까워지고, 점점 더 안전해지며, 점점 더 효율적입니다. 0/1 직접 작성에서, 어셈블리 니모닉, C의 구조적 프로그래밍, Java의 객체지향, 그리고 Rust의 메모리 안전까지 — 세대마다 이전 세대의 문제점을 해결해 왔습니다.


2. 프로그래밍 패러다임: 문제를 생각하는 방식

프로그래밍 패러다임은 언어 기능이 아니라 사고방식입니다 — 글쓰기에 시, 소설, 논문 등 다른 문체가 있듯이.

2.1 명령형 — "컴퓨터에게 어떻게 할지 단계별로 알려주기"

c
int sum = 0;
for (int i = 0; i < n; i++) {
    sum += arr[i];
}

2.2 객체지향 — "데이터와 행동을 객체로 캡슐화"

python
class Dog:
    def __init__(self, name):
        self.name = name
    def bark(self):
        print(f"{self.name} says woof!")

2.3 함수형 — "순수 함수의 조합, 상태 변경 없이"

haskell
sum = foldl (+) 0
-- 같은 입력은 항상 같은 출력 생성

2.4 선언형 — "무엇을 할지만 말하고, 어떻게 할지는 신경 쓰지 않기"

sql
SELECT name FROM users WHERE active = true
-- 데이터베이스가 가장 빠르게 조회하는 방법을 스스로 결정

💡 실제 개발에서

현대 언어 대부분은 멀티 패러다임입니다. Python은 객체지향도, 함수형도 지원하고, JavaScript도 마찬가지입니다. "어떤 패러다임이 최고인가"를 고민하기보다, 문제에 가장 적합한 방식을 선택하세요.


3. 타입 시스템: 데이터의 교통 규칙

강타입약타입
정적Java, Rust, TypeScript — 가장 안전C, C++ — 효율적이지만 주의 필요
동적Python, Ruby — 유연하고 안전JavaScript, PHP — 유연하지만 오류 발생 쉬움

핵심 질문: "1" + 1의 결과는?

  • JavaScript(약타입): "11" — 조용히 변환해 줌
  • Python(강타입): TypeError — 직접 생각해서 처리해야 함

타입 시스템에 대해 더 깊이 알고 싶다면 → 타입 시스템 입문 | 컴파일러 원리 입문


4. 컴파일형 vs 인터프리터형

컴파일형인터프리터형JIT
과정먼저 전부 번역 후 실행읽으면서 실행먼저 해석 후 핫스팿은 컴파일
속도가장 빠름비교적 느림중간
디버깅컴파일 대기 필요즉시 피드백즉시 + 최적화
대표C, Rust, GoPython, RubyJava, JavaScript

5. 프로그래밍 언어를 어떻게 선택할까?

상황별 선택

상황추천 언어이유
웹 프론트엔드JavaScript, TypeScript브라우저는 JS만 인식
웹 백엔드Go, Java, Python, Node.js생태계가 성숙함
모바일 개발Swift (iOS), Kotlin (Android)공식 추천
AI / 데이터PythonPyTorch, Pandas가 모두 Python에 있음
시스템 프로그래밍C, Rust하드웨어를 직접 제어
클라우드 네이티브Go, RustDocker/K8s가 모두 Go로 작성됨

학습 로드맵 추천

  1. Python — 문법이 가장 간단하고, AI 시대의 진입 언어
  2. JavaScript — 웹 개발 필수, 프론트/백엔드 모두 가능
  3. TypeScript — JS에 타입 시스템을 추가하여 정적 타입 체험
  4. Go 또는 Rust — 컴파일형 언어와 저수준 개념 이해

6. 요약

📚 핵심 요점

  1. 언어의 진화: 기계어부터 고급 언어까지, 점점 더 인간의 사고에 가까워짐
  2. 프로그래밍 패러다임: 명령형, 객체지향, 함수형, 선언형 — 각각 적용 시나리오가 다름
  3. 타입 시스템: 정적/동적, 강/약 — 안전성과 유연성에 영향
  4. 실행 방식: 컴파일형은 빠르고, 인터프리터형은 유연하며, JIT은 둘의 장점을 겸비
  5. 은총알은 없다: "최고의 언어"가 아니라 상황에 맞는 언어를 선택

다음 학습: