크리스토퍼 알렉산더가 소프트웨어 분야에 미친 영향
크리스토퍼 알렉산더가 소프트웨어 분야에 미친 영향.
맥락
형태의 합성에 대한 기록 (1964), 도시는 나무가 아니다 (1965)
이 두 글이 쓰일 당시에는 소프트웨어 분야에 별 영향을 주지 못했으나 이후 C.A.의 작업이 재조명되면서 이 책을 필독서로 꼽는 이들이 늘었다.
요약:
- 형태의 합성에 대한 기록: 디자인 문제는 매우 복잡하고 다면적이므로 체계적 접근이 필요하다고 주장. 하나의 거대한 문제를 작은 문제로 재귀적으로 분해하여 풀어내는 방법을 강조
- 도시는 나무가 아니다: 도시의 추상적 구조는 트리 구조가 아니라 반격자여야 한다고 주장. 인공도시를 tree 구조로 설계하는 바람에 도시에 삶이 깃들지 못한다고 비판.
당시 컴퓨터 분야에서 있었던 일:
- COBOL 60. 그레이스 호퍼가 만든 FLOW-MATIC에 영향을 받은 언어. 이식성이 낮은 수많은 언어가 개발되고 프로그램 개발 및 포팅 비용이 점점 비싸짐에 따른 결과
- PDP-I. 730kg, 현재 가치로 약 $1.2M (약 15억원). 모니터랑 키보드 있음, 메모리 10KB
- Quick sort: C.A.R. Hoare가 고안한 average case n log (n) 정렬 알고리즘
- APL: Kenneth Iverson의 프로그래밍 언어. 현대의 J 언어로 이어짐
- PDP-8: 110kg, 현재 가치로 약 $0.2M (약 2억5천)
- BASIC: By Thomas Kurtz and John Kemeny
- ELIZA: Joseph Weizenbaum이 개발한 AI 대화 프로그램
- Go to statement considered harmful: Edger Dijkstra의 에세이
- The mother of all demos: Douglas Engelbart. 화상회의, 문서 편집, 마우스, 하이퍼링크
- UNIX: Kenneth Thompson and Dennis Ritchie
한국에서는?
- 1967년, 국내 최초로 컴퓨터가 보급됨 (IBM1401)
A pattern language (1977), The timeless way of building (1979)
요약:
- A pattern language와 The timeless way of building
- QWAN(Quality without a name)이 있는 건축을 하기 위한 방법으로 살아있는 “패턴 언어”를 만들고 공유할 것을 제안
당시 컴퓨터 분야에서 있었던 일
- Pascal: Niklaus Wirth가 개발. 이후 Anders Hejlsberg가 Turbo Pascal, Delphi 등을 개발(그는 이후 .NET, C#, TypeScript 등을 개발)
- C: Dennis Ritchie 팀이 UNIX를 C로 고쳐쓰고 C 언어를 공개
- 인터네트워킹: 프랑스와 영국 사이 네트워크 간 네트워크(internetworking) 연결, Xerox PARC에서 여러 이더넷 망을 연결. (이후 ARPA의 TCP/IP 개발에 영향을 줌)
- Apple I: Steve Wozniak이 Apple I을 만들고 Steve Jobs가 마케팅.
- Apple II: 케이스, 전원, 키보드를 갖춘 개인용 컴퓨터 Apple II
- Visicalc: 최초의 스프레드시트 Visicalc
한국에서는?
- 정부, 공공기관, 기업 등에서 점차 컴퓨터를 도입하기 시작.
- 대학에 관련 학과가 개설되기 시작.
영향
영향
”Using Pattern Languages for Object-Oriented Programs” by Kent Beck and Ward Cunningham (1987)
- 당시 Kent Beck(이후 TDD를 고안)은 애플 컴퓨터, Ward Cunningham(이후 위키를 개발)은 텍트로닉스에서 근무.
- C.A.가 주장한 바와 같이, 소프트웨어는 소프트웨어 사용자에 의해 만들어져야 한다고 주장. 이를 가능하게 하기 위해 소프트웨어 패턴 언어를 제안.
- 마침 이들이 사용하던 Smalltalk은 매우 동적인 언어이자 프로그래밍 환경이자 사용자 환경.
- UI Patterns: Window Per Task, Few Panes Per Window, Standard Panes, Short Menus, Nouns and Verbs.
- “Our initial success using a pattern language for user interface design has left us quite enthusiastic about the possibilities for computer users designing and programming their own applications.”
SimCity (1989)
- Will Wright가 개발한 도시 설계 시뮬레이션 게임
- C.A.의 건축 사상에 영향을 받았다고 밝힘
Portland Pattern Repository Wiki (1994)
- Ward Cunningham이 만든 세계 최초의 위키
- 개발자들이 모여서 함께 패턴 언어를 만들어가는 장소 (Portland Pattern Repository)
- 위키의 동작 자체가 C.A.의 사상을 닮음
- Top-down 방식의 설계가 아니라, 점진적으로 자라나며 창발적 구조가 만들어지는 방식
- 트리 구조의 정보 분류보다는 그래프 형태의 정보 분류 (The city is not a tree)
- 웹 사이트에 방문한 사용자들이 누구나 어디나 편집할 수 있음
- 이름에 의한 링크 (마침 패턴 언어를 만들기에도 적합한 방식)
- 리팩토링을 통한 점진적 개선을 장려
Design Patterns (1994)
- K.B., W.C. 1987의 패턴 언어 제안은 그 뒤로 소프트웨어 개발 커뮤니티에서 크게 유행
- Erich Gamma(이후 Eclipse, VS Code 등을 리딩) 등 소위 사인방(Gang of Four)에 의해 OOP 언어에서의 디자인 패턴 언어를 담은 책 Design patterns: Elements of reusable object-oriented software가 출판됨.
- C.A.의 패턴 언어로부터 형식을 차용했으나 원래의 취지를 잘 담아내지는 못함. 이 책이 크게 흥행하면서 소프트웨어 분야에서 패턴의 의미가 협소하게 알려진 것으로 보임. 이 책이 크게 유행한 이후로 비슷한 구성으로 언어별, 분야별(아키텍처 패턴 등) 패턴 책이 무수히 출판됨.
Extreme Programming (1996)
- Kent Beck이 1996년 크라이슬러의 급여 관리 프로그램 개발 프로젝트 리더를 맡으며 개발하기 시작한 대안적 소프트웨어 방법론.
- 전통적으로 “좋은 실천법best practices”으로 간주되던 것들을 유기적으로 엮어서 극단까지 끌어올림. 예를 들어 NASA에서 1960년대에 사용하던 “각 작은 단계마다 미리 테스트를 작성한다”는 실천법을 극단으로 끌어올리면 TDD.
- PPR 위키에서 많은 논의가 이루어지며, Ward Cunningham, Ron Jeffries와 함께 정립.
- 각 실천법들의 “유기적 연결”이 중요. 예를 들어 짝 프로그래밍을 하기 때문에 코드 공동 소유가 더 잘 실천되고, 그렇기 때문에 리팩토링을 더 과감하게 할 수 있음. TDD 덕분에 테스트 커버리지가 높으니 리팩토링을 더 잘 할 수 있고, 리팩토링을 잘 했기 때문에 테스트가 수월해짐. 커버리지가 높고 현재의 요구사항을 잘 반영하는 최소한의 설계를 지향하므로 변화에 대응하기가 수월함.
- 프로젝트에 사용자를 참여시키기, 진화적 디자인, 출시 전 단계와 출시 후 단계를 구분하지 않기 등 다양한 측면에서 C.A.의 사상을 닮음
- 1999년에 Extreme programming explained 출판.
Lean Software Development(2003), Lean Startup(2011)
- XP에서 시작된 애자일 방법론은 Mary Poppendieck and Tom Poppendieck의 Lean Software Development (2003), Eric Ries의 The Lean Startup (2011) 등으로 이어지며 비즈니스 프로세스로 확장됨.
기타
OOP:
- 객체라는 개념은 1950년대부터 있었으나 OOP가 주류 패러다임으로 자리잡은 시기는 1990년대 초반 이후. 즉, OOP에 대한 주요 논의들은 대체로 C.A.의 영향을 직간접적으로 받았다고 보는 게 타당.
- 기존 OOP 언어들에 FP 요소들이 가미되면서 점차 GoF 스타일의 패턴에 대해 “이 당연한 걸 왜 패턴이라고 부르나”라는 이야기가 들리기 시작함(대충 2000년대 후반부터?). 초기 디자인 패턴은 대체로 OOP를 위한 디자인 패턴이었기 때문.
- OOP와 분리된 패턴에 대해 생각해보면 좋겠음. 예를 들면 Refactoring 1판과 2판의 차이?
정보분류:
- Controlled vocabulary vs. Uncontrolled vocabulary
- Folder vs. Tag
- Classical SoC vs. MDSoC (OOP vs. AOP). 파편화되는 정보 == 분절되는 삶? “What I discovered in American libraries and archives was that - much like women’s history - the history of feminisms has never been accorded a place in existing taxonomies of knowledge.” —European feminisms
- Faceted classification