유닉스 철학(Unix philosophy)은 각 프로그램이 맡은 일을 잘 수행하고, 그 결과를 다른 프로그램과 연결해 더 큰 일을 처리하도록 설계하는 관점이다. [[KISS]]와 함께 규모를 살피면서도, 도구 사이에서 무엇을 주고받을지에 주목한다. 읽고 가공하기 쉬운 텍스트를 입출력 형식으로 사용하는 전통이 여기에 속한다. ([에릭 S. 레이먼드, 유닉스 철학의 기초](https://catb.org/esr/writings/taoup/html/ch01s06.html)) ## 도구를 이어 쓰기 - [[명령어]] 하나가 모든 기능을 맡도록 만들기 전에 입력, 처리, 출력을 적어보자. [[파이프]]는 앞 프로그램의 출력을 다음 프로그램의 입력으로 넘기는 연결 방법이다. ([더글러스 매킬로이, 연구용 유닉스의 기록](https://www.cs.dartmouth.edu/~doug/reader.pdf)) - 출판 작업에 적용해본다면 원고에서 제목을 뽑기, 가나다순으로 정렬하기, 목록을 HTML로 옮기기를 따로 생각할 수 있다. 각 단계의 결과를 읽을 수 있어야 잘못된 부분도 찾기 쉽다. - [[도구]]를 나누는 만큼 연결 형식을 맞추는 일도 생긴다. 모든 기능을 별도 프로그램으로 쪼개야 한다는 뜻으로 적용하지 말고, 실제 작업에서 교체하거나 재사용할 부분부터 살펴보자. ## 기타 등등 - 매킬로이의 회고에 따르면 초기 파이프 표기법은 설명에 거의 한 쪽이 필요했다. 켄 톰프슨이 `|` 표기를 제안한 뒤에는 네 문장으로 설명할 수 있었다. [출처](https://www.cs.dartmouth.edu/~doug/reader.pdf) - 초기 프로그램들은 오류 진단도 일반 출력에 섞어 보냈다. 파이프를 연결하면 다음 프로그램이 그 문장까지 데이터로 받게 됐고, 이후 표준 오류 출력이 도입됐다. [출처](https://www.cs.dartmouth.edu/~doug/reader.pdf) #원칙 #프로그래밍 #도구