# Christopher Alexander's influences on software > 크리스토퍼 알렉산더가 소프트웨어 분야에 미친 영향. <크리스토퍼 알렉산더>가 [소프트웨어](https://wiki.g15e.com/pages/Software.txt) 분야에 미친 영향. ## 맥락 ### 형태의 합성에 대한 기록 (<1964>), 도시는 나무가 아니다 (<1965>) 이 두 글이 쓰일 당시에는 소프트웨어 분야에 별 영향을 주지 못했으나 이후 C.A.의 작업이 재조명되면서 이 책을 필독서로 꼽는 이들이 늘었다. 요약: - <형태의 합성에 대한 기록>: 디자인 문제는 매우 복잡하고 다면적이므로 체계적 접근이 필요하다고 주장. 하나의 거대한 문제를 작은 문제로 재귀적으로 분해하여 풀어내는 방법을 강조 - [도시는 나무가 아니다](https://wiki.g15e.com/pages/The%20city%20is%20not%20a%20tree.txt): 도시의 추상적 구조는 <트리 구조>가 아니라 <반격자>여야 한다고 주장. 인공도시를 tree 구조로 설계하는 바람에 도시에 삶이 깃들지 못한다고 비판. 당시 컴퓨터 분야에서 있었던 일: - **COBOL 60**. <그레이스 호퍼>가 만든 FLOW-MATIC에 영향을 받은 언어. 이식성이 낮은 수많은 언어가 개발되고 프로그램 개발 및 포팅 비용이 점점 비싸짐에 따른 결과 - **PDP-I**. 730kg, 현재 가치로 약 \$1.2M (약 15억원). 모니터랑 키보드 있음, 메모리 10KB - **Quick sort**: 가 고안한 average case n log (n) 정렬 알고리즘 - **APL**: 의 프로그래밍 언어. 현대의 로 이어짐 - **PDP-8**: 110kg, 현재 가치로 약 \$0.2M (약 2억5천) - **BASIC**: By and - **ELIZA**: 이 개발한 [AI](https://wiki.g15e.com/pages/Artificial%20intelligence.txt) 대화 프로그램 - [Go to statement considered harmful](https://wiki.g15e.com/pages/Go%20to%20statement%20considered%20harmful.txt): 의 에세이 - **The mother of all demos**: . 화상회의, 문서 편집, 마우스, 하이퍼링크 - **UNIX**: and 한국에서는? - <1967년>, 국내 최초로 컴퓨터가 보급됨 (IBM1401) ### A pattern language (1977), The timeless way of building (1979) 요약: - 와 [The timeless way of building](https://wiki.g15e.com/pages/The%20timeless%20way%20of%20building.txt) - QWAN([Quality without a name](https://wiki.g15e.com/pages/Quality%20without%20a%20name.txt))이 있는 건축을 하기 위한 방법으로 살아있는 "[패턴 언어](https://wiki.g15e.com/pages/Pattern%20language.txt)"를 만들고 공유할 것을 제안 당시 컴퓨터 분야에서 있었던 일 - **Pascal**: [Niklaus Wirth](https://wiki.g15e.com/pages/Niklaus%20Wirth.txt)가 개발. 이후 , 등을 개발(그는 이후 <.NET>, , [TypeScript](https://wiki.g15e.com/pages/TypeScript.txt) 등을 개발) - **C**: 팀이 를 C로 고쳐쓰고 C 언어를 공개 - **인터네트워킹**: 프랑스와 영국 사이 네트워크 간 네트워크(internetworking) 연결, 에서 여러 이더넷 망을 연결. (이후 ARPA의 TCP/IP 개발에 영향을 줌) - **Apple I**: 을 만들고 가 마케팅. - **Apple II**: 케이스, 전원, 키보드를 갖춘 개인용 컴퓨터 - **Visicalc**: 최초의 스프레드시트 한국에서는? - 정부, 공공기관, 기업 등에서 점차 컴퓨터를 도입하기 시작. - 대학에 관련 학과가 개설되기 시작. 영향 - 당시에는 별 영향을 주지 못함 - [1990년대](https://wiki.g15e.com/pages/1990s.txt)에 [위키](https://wiki.g15e.com/pages/WikiWikiWeb.txt), [애자일 방법론](https://wiki.g15e.com/pages/Agile%20methodology.txt), [디자인 패턴](https://wiki.g15e.com/pages/Design%20pattern.txt)에 영향을 줌 ## 영향 ### "Using Pattern Languages for Object-Oriented Programs" by Kent Beck and Ward Cunningham (1987) - 당시 [Kent Beck](https://wiki.g15e.com/pages/Kent%20Beck.txt)(이후 TDD를 고안)은 애플 컴퓨터, [Ward Cunningham](https://wiki.g15e.com/pages/Ward%20Cunningham.txt)(이후 위키를 개발)은 텍트로닉스에서 근무. - C.A.가 주장한 바와 같이, 소프트웨어는 소프트웨어 사용자에 의해 만들어져야 한다고 주장. 이를 가능하게 하기 위해 소프트웨어 패턴 언어를 제안. - 마침 이들이 사용하던 [Smalltalk](https://wiki.g15e.com/pages/Smalltalk.txt)은 매우 동적인 언어이자 프로그래밍 환경이자 사용자 환경. - 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) - 가 개발한 도시 설계 시뮬레이션 게임 - C.A.의 건축 사상에 영향을 받았다고 밝힘 ### Portland Pattern Repository Wiki (<1994>) - [Ward Cunningham](https://wiki.g15e.com/pages/Ward%20Cunningham.txt)이 만든 세계 최초의 위키 - 개발자들이 모여서 함께 패턴 언어를 만들어가는 장소 () - 위키의 동작 자체가 C.A.의 사상을 닮음 - Top-down 방식의 설계가 아니라, 점진적으로 자라나며 창발적 구조가 만들어지는 방식 - 트리 구조의 정보 분류보다는 그래프 형태의 정보 분류 ([The city is not a tree](https://wiki.g15e.com/pages/The%20city%20is%20not%20a%20tree.txt)) - 웹 사이트에 방문한 사용자들이 누구나 어디나 편집할 수 있음 - 이름에 의한 링크 (마침 [패턴 언어](https://wiki.g15e.com/pages/Pattern%20language.txt)를 만들기에도 적합한 방식) - [리팩토링](https://wiki.g15e.com/pages/Refactoring.txt)을 통한 점진적 개선을 장려 ### Design Patterns (<1994>) - K.B., W.C. 1987의 패턴 언어 제안은 그 뒤로 소프트웨어 개발 커뮤니티에서 크게 유행 - (이후 Eclipse, VS Code 등을 리딩) 등 소위 사인방(Gang of Four)에 의해 OOP 언어에서의 디자인 패턴 언어를 담은 책 [Design patterns: Elements of reusable object-oriented software](https://wiki.g15e.com/pages/Design%20patterns%20-%20Elements%20of%20reusable%20object-oriented%20software.txt)가 출판됨. - C.A.의 패턴 언어로부터 형식을 차용했으나 원래의 취지를 잘 담아내지는 못함. 이 책이 크게 흥행하면서 소프트웨어 분야에서 패턴의 의미가 협소하게 알려진 것으로 보임. 이 책이 크게 유행한 이후로 비슷한 구성으로 언어별, 분야별(아키텍처 패턴 등) 패턴 책이 무수히 출판됨. ### Extreme Programming (1996) - [Kent Beck](https://wiki.g15e.com/pages/Kent%20Beck.txt)이 <1996년> 크라이슬러의 급여 관리 프로그램 개발 프로젝트 리더를 맡으며 개발하기 시작한 대안적 소프트웨어 방법론. - 전통적으로 "좋은 실천법best practices"으로 간주되던 것들을 유기적으로 엮어서 극단까지 끌어올림. 예를 들어 NASA에서 [1960년대](https://wiki.g15e.com/pages/1960s.txt)에 사용하던 "각 작은 단계마다 미리 테스트를 작성한다"는 실천법을 극단으로 끌어올리면 [TDD](https://wiki.g15e.com/pages/Test-driven%20development.txt). - PPR 위키에서 많은 논의가 이루어지며, [Ward Cunningham](https://wiki.g15e.com/pages/Ward%20Cunningham.txt), 와 함께 정립. - 각 실천법들의 "유기적 연결"이 중요. 예를 들어 [짝 프로그래밍](https://wiki.g15e.com/pages/Pair%20programming.txt)을 하기 때문에 <코드 공동 소유>가 더 잘 실천되고, 그렇기 때문에 [리팩토링](https://wiki.g15e.com/pages/Refactoring.txt)을 더 과감하게 할 수 있음. [TDD](https://wiki.g15e.com/pages/Test-driven%20development.txt) 덕분에 테스트 커버리지가 높으니 리팩토링을 더 잘 할 수 있고, 리팩토링을 잘 했기 때문에 테스트가 수월해짐. 커버리지가 높고 현재의 요구사항을 잘 반영하는 최소한의 설계를 지향하므로 변화에 대응하기가 수월함. - 프로젝트에 사용자를 참여시키기, 진화적 디자인, 출시 전 단계와 출시 후 단계를 구분하지 않기 등 다양한 측면에서 C.A.의 사상을 닮음 - <1999년>에 출판. ### Lean Software Development(2003), Lean Startup(2011) - XP에서 시작된 애자일 방법론은 and 의 [Lean Software Development](https://wiki.g15e.com/pages/Lean%20software%20development%20(book.txt)) (<2003>), (2011) 등으로 이어지며 비즈니스 프로세스로 확장됨. ### 기타 **OOP**: - 객체라는 개념은 [1950년대](https://wiki.g15e.com/pages/1950s.txt)부터 있었으나 OOP가 주류 패러다임으로 자리잡은 시기는 [1990년대](https://wiki.g15e.com/pages/1990s.txt) 초반 이후. 즉, OOP에 대한 주요 논의들은 대체로 C.A.의 영향을 직간접적으로 받았다고 보는 게 타당. - 기존 OOP 언어들에 FP 요소들이 가미되면서 점차 GoF 스타일의 패턴에 대해 "이 당연한 걸 왜 패턴이라고 부르나"라는 이야기가 들리기 시작함(대충 [2000년대](https://wiki.g15e.com/pages/2000s.txt) 후반부터?). 초기 디자인 패턴은 대체로 OOP를 위한 디자인 패턴이었기 때문. - OOP와 분리된 패턴에 대해 생각해보면 좋겠음. 예를 들면 Refactoring 1판과 2판의 차이? **정보분류**: - vs. - Folder vs. Tag - Classical vs. [MDSoC](https://wiki.g15e.com/pages/Multidimensional%20separation%20of%20concerns.txt) ([OOP](https://wiki.g15e.com/pages/Object-oriented%20programming.txt) vs. [AOP](https://wiki.g15e.com/pages/Aspect-oriented%20programming.txt)). 파편화되는 정보 == 분절되는 삶? "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." -- - [Faceted classification](https://wiki.g15e.com/pages/Faceted%20classification.txt)