크리스토퍼 알렉산더가 소프트웨어 분야에 미친 영향

크리스토퍼 알렉산더가 소프트웨어 분야에 미친 영향.

맥락

형태의 합성에 대한 기록 (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)

요약:

당시 컴퓨터 분야에서 있었던 일

  • 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

2024 © ak