# 존재하지 않지만 있어야 할 컴퓨터 과학 강의들 (2015)

> Clean Markdown view of GeekNews topic #23904. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=23904](https://news.hada.io/topic?id=23904)
- GeekNews Markdown: [https://news.hada.io/topic/23904.md](https://news.hada.io/topic/23904.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-10-25T09:56:31+09:00
- Updated: 2025-10-25T09:56:31+09:00
- Original source: [prog21.dadgum.com](https://prog21.dadgum.com/210.html)
- Points: 4
- Comments: 1

## Topic Body

- 이 글은 실제로 존재하지 않지만, **소프트웨어 개발자들이 배워야 할 현실적이고 풍자적인 컴퓨터 과학 강의들**을 제안  
- 각 강의는 **현대 개발 문화의 문제점이나 편향된 사고방식**을 비판적으로 드러냄  
- 예를 들어, 객체지향 패러다임에 대한 맹신, 명령줄 도구의 UX 무시, 느린 언어의 성능 오해 등을 다룸  
- 또한 개발자들의 **심리적 집착과 비생산적 습관**을 다루는 과목도 포함  
- 전체적으로 **컴퓨터 과학 교육의 한계와 개발 문화의 자기반성 필요성**을 유머러스하게 제시  

---

### CSCI 2100: 객체지향 프로그래밍을 잊기
- 이 과목은 **객체 계층 구조에 속하지 않은 변수와 함수의 개념**을 배우는 과정  
  - 객체지향 중심 사고에서 벗어나, **함수형 프로그래밍**의 유연성과 단순함을 탐구  
  - “함수(function)”를 “메서드(method)”보다 **더 일반적이고 재사용 가능한 개념**으로 소개  
- 선수 과목은 “추상 기본 클래스(abstract base class)”라는 용어를 사용한 어떤 수업이든 해당  
- **객체지향 패러다임의 과도한 의존을 해체**하고, 프로그래밍의 본질적 사고를 재정립하는 목적  

### CSCI 3300: 고전 소프트웨어 연구
- 역사적으로 중요한 소프트웨어 제품을 **분석하고 토론하는 수업**  
  - 다루는 예시로 **VisiCalc, AppleWorks, Robot Odyssey, Zork, MacPaint** 등이 포함  
- 초점은 **사용자 인터페이스(UI)** 와 **하드웨어 제약이 창의성에 미친 영향**에 맞춰짐  
- 과거의 제약 속에서 탄생한 혁신을 통해, **현대 소프트웨어 디자인의 근본 원리**를 재조명  

### CSCI 4020: 느린 언어로 빠른 코드 작성하기
- **인터프리터 언어(Python 등)** 로도 고성능 코드를 작성하는 방법을 다룸  
  - 고수준에서 **성능 분석(performance analysis)** 을 수행하고, **C++ 수준의 효율성**을 달성하는 전략을 탐구  
- 코드의 **취약성 감소와 개발의 즐거움 유지**를 동시에 추구  
- “느린 언어는 느리다”는 통념을 깨고, **언어 설계와 실행 환경의 최적화 가능성**을 보여주는 강의  

### CSCI 2170: 명령줄 도구의 사용자 경험(UX)
- 명령줄 기반 프로그램의 **사용자 경험 설계 원칙**을 다루는 입문 과목  
  - 출력의 **관련성, 가독성, 최소화**를 핵심 주제로 함  
- UNIX의 **‘ls’ 명령어**를 사례로, **과도한 옵션과 복잡한 인터페이스 문제**를 분석  
- 명령줄 도구도 그래픽 UI처럼 **사용자 중심 설계가 필요함**을 강조  

### PSYC 4410: 프로그래머의 집착 심리
- 소프트웨어 개발자가 흔히 빠지는 **비생산적 집착과 강박적 사고 패턴**을 탐구  
  - 예: 코드 포매팅, 분류 체계(taxonomy), 타입 시스템, 과도한 파일 분할 등  
- 낯선 시스템을 접했을 때 나타나는 **즉각적 비판 반응(knee-jerk criticism)** 을 심리학적으로 분석  
- 개발자의 **인지적 편향과 완벽주의 성향**을 이해하고, 협업과 창의성의 균형을 모색하는 수업  

### 전체 맥락
- 이 목록은 실제 강의 계획이 아니라, **컴퓨터 과학 교육과 개발 문화의 풍자적 비판**으로 구성  
- 각 과목은 **기술 중심 사고의 맹점**을 드러내며, 개발자에게 **사고의 유연성과 자기 성찰**을 촉구  
- 2015년 게시물이지만, **오늘날에도 여전히 유효한 문제의식**을 담고 있음

## Comments



### Comment 45440

- Author: neo
- Created: 2025-10-25T09:56:31+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=45690045) 
- **CSCI 3300: Classical Software Studies**  
  Alan Kay가 수십 년간 강조해온 것은 우리가 이미 70년대 후반에 정립된 개념들을 계속 **재발명**하고 있다는 점임  
  예술가가 예술사를 배우듯, 프로그래머도 컴퓨터 과학의 역사를 배워야 한다는 그의 실망감에 공감함
  - 내가 RIT에 다닐 때 ‘History of Computing’이라는 선택 과목이 있었음. 주판에서 시작해 메인프레임과 네트워킹까지 다뤘고, 지금도 [강의 노트](https://www.cs.rit.edu/~swm/history/index.html)가 남아 있음
  - 예술이나 철학의 역사는 수천 년에 걸쳐 있지만, 컴퓨팅의 역사는 **한 세대** 혹은 두세 세대 정도에 불과함  
    물리적 하드웨어 성능에 의존하는 컴퓨팅을 예술과 비교하는 건 무리라는 생각임  
    1970년의 문제 해결 방식이 2025년에 그대로 적용된다고 보는 건 현실을 놓치는 것임
  - GitHub에서 “이건 Ansible이랑 뭐가 달라요?”라는 질문에 “Ansible이 뭔지 처음 들어요”라는 답변을 본 적 있음  
    세대마다 자신이 처음 발견했다고 착각하는 **재발견의 반복**이 흥미로움
  - 창업자들과 일하다 보면 이미 존재하는 개념을 새로 만든 것처럼 포장하는 경우가 많음  
    과거의 문제와 해법을 배우는 건 결코 시간 낭비가 아님
  - 대학 시절 ‘운영체제 역사 에세이’ 과제가 있었는데, 나는 OS X(Snow Leopard)를 선택했음  
    그 과정을 통해 **Unix와 상용 소프트웨어의 진화**를 깊이 이해하게 되었고 Alan Kay의 말에 완전히 공감함

- **CSCI 3240: Ignoring Hype**  
  최신 플랫폼이나 라이브러리의 유행을 무시하는 법을 배우는 과목임  
  이어서 **CSCI 3120: Novelty Driven Development**에서는 반대로 유행을 따라잡으며 흥미를 유지하는 법을 다룸  
  두 과목은 동시에 수강할 수 없음  
  또 다른 과목으로는 회의 기술(PSYC 4870), 조직 마찰 수용(PSYC 5630) 등이 있으며,  
  현실적인 직장 내 **커뮤니케이션과 동기부여**를 다룸
- **CSCI 4810: The Refusal Lab**  
  비윤리적인 제품 요청과 마감 압박을 시뮬레이션하고, 이를 **전문적 기준**으로 거절해야 통과할 수 있는 실험실 과목임
  - **CSCI 4812: The Career Lab**에서는 동료들이 비윤리적 요구를 수락하고 떠난 뒤 남은 일을 처리하는 현실을 다룸
  - 실제로 많은 학위 과정에 윤리 관련 수업이 포함되어 있음
  - 하지만 대학은 결국 졸업생의 **취업 가능성**을 우선시함

- **디버깅 과목 제안**  
  버그의 근본 원인을 찾고 다양한 도구를 활용하는 법을 배우는 과목이 있었으면 좋겠음  
  - 화학 실험처럼, 학생에게 버그투성이의 **레거시 코드베이스**를 주고 모든 테스트를 통과시키면 수업이 끝나는 형태면 좋겠음
  - 다른 사람의 코드를 읽고, 기존 구조(Chesterton’s fence)를 함부로 허물지 않는 법도 함께 배워야 함
  - 많은 시니어 엔지니어조차 여전히 `print`로 디버깅함  
    **인터랙티브 디버깅**의 구세주에 대해 이야기할 시간이 필요함

- **CSCI 0001: Functional programming and type theory**  
  학계의 **난해한 용어와 수식**이 함수형 프로그래밍의 대중화를 막아왔음  
  이제 모나드가 왜 endofunctor의 카테고리에서 모노이드인지 직접 배워볼 차례임  
  - 순수 함수는 **context window** 안에서도 매우 자연스럽게 작동함

- **CSCI 4020: Writing Fast Code in Slow Languages**  
  느린 언어(VB, Ruby 등)로 알고리즘 복잡도를 가르치며, Ruby의 O(N)이 C++의 O(N²)을 이길 수 있음을 보여주는 과목임  
  - 어릴 적 읽은 책에서 FORTRAN의 bubble sort와 BASIC의 quicksort를 비교했는데,  
    BASIC이 의외로 빠른 결과를 보여 놀랐던 기억이 있음
  - Python 루프를 numpy 벡터 연산, tensorflow 연산으로 변환하며 속도 차이를 측정하는 실습을 했었음  
    Python이 AI에서 유용한 이유를 체감할 수 있었음
  - 매일 Python을 쓰는 엔지니어들이 **왜 코드가 느린지** 이해하게 된다면 정말 좋을 것 같음
  - 알고리즘 복잡도보다 **하드웨어 활용**이 더 큰 차이를 만드는 경우가 많음  
    선형 메모리에서 벡터화된 코드가 힙에 흩어진 데이터보다 훨씬 빠름
  - 참고 도서: [Visual Basic Algorithms Ready-to-Run](https://www.amazon.ca/Visual-Basic-Algorithms-Ready-Run/dp/047113418X)

- **이전 시리즈 모음**  
  “Computer science courses that don't exist, but should” 시리즈는  
  [2015년판 (247 comments)](https://news.ycombinator.com/item?id=10201611),  
  [2017년판](https://news.ycombinator.com/item?id=13424320),  
  [2018년판](https://news.ycombinator.com/item?id=16127508) 등으로 이어져 있음

- 대학 시절 들었던 **Software Archaeology** 과목이 떠오름  
  1970년대의 컴파일러 연습문제를 다시 구현하는 수업이었는데,  
  당시엔 쓸모없다고 느꼈지만 나중에 시스템 설계 이해에 큰 도움이 되었음
  - 실제로 **디지털 탐정 작업**은 대규모 코드베이스에서 매우 중요함  
    오래된 버그, 위키, 버전 기록, 팀 이력 등을 추적하는 능력이 필수임

- 오늘날 많은 컴퓨터 과학 프로그램이 사실상 **코딩 직업학교**처럼 변했음  
  학생들은 프레임워크는 쓸 줄 알지만 언어 설계 철학이나 시스템 진화를 이해하지 못함  
  컴퓨팅은 구현뿐 아니라 **사상과 아이디어의 학문**임을 잊지 말아야 함
  - 하지만 일부 대형 주립대는 여전히 25년 전과 같은 핵심 과목 구성을 유지하고 있음  
    인증 기준 때문에 커리큘럼이 크게 벗어나긴 어려움

- **CSCI 3210: Modern text encoding and processing**  
  Unicode와 UTF-8을 배우고, ‘1문자 = 1바이트’라는 개념을 버리는 수업임  
  인코딩뿐 아니라 **검색, 정렬, 폰트 렌더링, 이모지 처리**까지 다룸  
  기본적이지만 제대로 이해하는 사람이 드묾
