[BOOK] 유닉스의 탄생 – 브라이언 커니핸 지음 / 하성창 옮김
![[BOOK] UNIX: A History and a Memoir](https://yujaewook.files.wordpress.com/2020/08/2020-08-22-22.34.41.jpg?w=300&h=300)
부제: “세상을 바꾼 운영체제를 만든 천재들의 숨은 이야기”
글쓰기를 가르치는 것처럼 프로그래밍도 가르쳐야 한다고 생각했다.
나쁜 코드와 좋은 코드를 구분하는 스타일에 대한 개념이 필요하며, 어떻게 하면 코드를 잘 작성하고 좋은 스타일을 이해하여 적용할 수 있는지 프로그래머에게 가르쳐야 한다고 믿었다. (p. 49)
내가 태어나기 전에 이미 OS를 만든 개발자들의 이야기. 진정한 개발자 1세대, 열악한 컴퓨팅 환경에서 지금도 사용되는 많은 프로그램들을 만든 개발자들의 이야기.
위대한 프로젝트의 경험은 개발자를 그루로 만든다.
/* You are not expected to understand this */
유닉스 제6판 소스 코드에 있는 주석 한 줄이 유명하다고 한다. 책을 읽어보면 저렇게 주석을 써놓은 이유가 나온다.
이밖에도 책을 읽다보면 유명 프로그래밍 언어를 만든 사람들이 등장하고, IT업계의 유명인이 의외의 곳에서 등장한다. 그리고 지금도 사용중인 많은 프로그램들이 소개된다. 이들을 찾아보는 재미도 있다.
데니스는 대단히 훌륭한 테크니컬 라이터였다.
간결하고 우아한 문체, 능숙한 표현 방식, 그의 성격을 정확히 반영한 번뜩이는 재치까지 두루 갖췄다.
그와 나는 “C 언어 프로그래밍”을 공동으로 집필했다. 1978년에 첫 출간했고, 1988년에 2판을 냈다. (p. 117)
저도 처음 C언어 배울때 읽은 책이네요. 현재 2판을 가지고 있군요.
![[BOOK] C Programming Language, 2nd](https://yujaewook.files.wordpress.com/2020/08/2020-08-25-13.34.47.jpg?w=300&h=300)
위대한 프로젝트가 만들어진 비결을 정리한 한 줄로 책 소개를 마친다.
좋은 연구를 하는 큰 비결은 훌륭한 사람들을 채용하고, 그들이 연구할 흥미로운 주제가 있는지 확인한 다음, 장기적인 안목을 취하고, 방해가 되지 않게 비켜주는 것이다. (p. 314)
- 세상을 바꾼 여러 발명의 근원지인 벨 연구소가 일하는 방식에는 분명 배울 점이 있다.
- 걸출한 두 인물, 뛰어난 조연, 유능하고 현명한 관리자와 경영진들에 매우 장기적 안목을 취한 회사의 안정적 재정 지원, 아무리 색다른 연구를 하더라도 간섭하지 않는 자유로운 환경까지 더해졌다.
- 당시 작성한 코드는 어떤 조건에서 어떤 작업이 일어나야 하는지를 알아내면 그 일을 하도록 분기 처리한 끝없는 IF 문의 연속이었다.
- 컴퓨터 과학을 위한 정식 과정은 없었지만 당시에 인기 있는 주제였던 인공지능에 대해 졸업 논문을 쓰기도 했다.
- 때로는 자리가 운명을 결정한다.
- 코드를 명확하게 작성하고, 지나친 재주를 부리지 말라.
- 컴퓨팅의 목적은 수가 아닌 통찰력이다.
- 프로젝트는 관리자가 할당해주는 방식이 아니라, 주제에 관심 있는 사람들이 모여서 그룹을 이루는 상향식으로 만들어졌다.
- 사람들이 대부분 관리직에 마지못해 올라갔는데, 관리직이 된다는 것은 개인 연구가 끝나지는 않더라도 확실히 둔화됨을 의미했다.
- MTS(기술직멤버)들은 일 년에 한 번씩 자신이 한 일을 요약해 종이 한 장에 썼다. – 나는 훌륭하다 보고서(I am great report)
- 평가와 의견을 작성하는 것은 힘든 일이었다.
- 시스템 간의 공통성이 부족하고 서로 호환되지 않는 저수준 언어를 사용한 점은 기술 진보를 크게 저해했다.
- 유닉스 방, 유닉스 개발팀은 항상 그곳에서 시간을 보내거나 작업 현황을 파악하고, 아이디어를 나누고, 그냥 서로 어울려 지냈다.
- 유닉스 방은 그냥 재미있는 곳이었고, 항상 무슨 일이 벌어졌다.
- 유닉스의 장점 중 하나는 유닉스가 실행되는 컴퓨터의 제한된 메모리를 효율적으로 사용하는 것이었다.
- C가 프로그래밍 언어 설계에 독창적으로 기여한 점 중 하나는 타입이 지정된 포인터에 산술연산을 지원하는 방식이다.
- 레퍼런스 메뉴얼은 ‘등골이 오싹할 정도로 정확하게’ C 언어에 관해 설명한다.
- 레퍼런스 메뉴얼은 C 언어 자체와 흡사하다. 즉 명료하고, 우아하며, 간결하다.
- C 언어는 그 자체도 중요하지만, 표준 라이브러리를 사용한다는 점에서도 중요하다.
- 그의 이름을 따라 본 셸이라고 불렀다.
- ‘Bourne Again Shell’을 뜻하는 Bash에는 다양한 기능이 추가됐다.
- 우리는 의사소통하기 위해 언어를 사용한다. 그리고 더 나은 언어는 더 효과적으로 의사소통하게 해준다.
- 컴퓨터 언어는 구문 규칙(syntax)과 의미 체계(semantics)라는 두 가지 주요한 측면에서 특징지어진다.
- PCC(Portable C compiler)에서 나온 뜻밖의 부산물은 린트(Lint)라는 프로그램이었습니다.
- 프로그램을 생성하는 프로그램을 작성하는 시도는 항상 가치가 있다.
- 무엇이든 반복적으로 해야만 하는 일이 생겼다면, 자동화하기 적합한 때가 된 것이다.
- 벨 연구소 연구자들은 글쓰기를 진지하게 대했고, 스스로 글을 공들여 썼으며, 다른 사람들이 쓴 글을 읽고 훌륭한 비평을 제시했다.
- 모두 서로의 글을 읽는 데 시간을 할애했고, 동료가 쓴 글에 대해 상세한 의견을 제공하는 것은 문화의 일부였다.
- Sed, Awk, Make, Yacc, Lex 모두 패턴-동작 패러다임을 일정한 방식으로 구현한다는 것이다.
- 1980년대와 1990년대에는 CPU 설계가 유닉스와 C를 중심으로 이루어질 수밖에 없을 정도로 유닉스와 C의 영향력은 대단했다.
- 연구소 밖에서는 주로 대학교를 통해 확산됐는데, 대학교에서는 영업 비밀 보호 협약을 맺으면 명목상의 매체 수수료만 내고 전체 시스템의 소스 코드를 받을 수 있었다.
- 라이선스를 취득한 단체 중 가장 적극적으로 활동한 곳은 캘리포니아 대학교 버클리였다. 결국 버클리 소프트웨어 배포판(BSD)이 만들어졌다.
- 켄과 데니스가 유닉스의 성공을 예측하지 못한 것처럼, 토르발스는 그가 취미로 만든 시스템의 놀라운 미래를 예측하지 못했다.
- 남은 사람들이 가장 많이 옮겨간 곳은 구글이다.
- 유닉스는 어떻게 성공할 수 있었을까? 우선은 기술적인 면이 있고, 조직적인 면에서도 배울 점이 있다.
- 켄과 데니스의 특별한 재능 중에는 기존의 훌륭한 아이디어를 선별하는 안목과 더불어 소프트웨어 시스템을 단순화하는 보편적 개념이나 통합적 테마를 보는 능력이 있었다.
- 프로그래밍 스타일이자 컴퓨팅 과제에 접근하는 방법에 대한 스타일인 ‘유닉스 철학’은 프로그래밍할 때 마음에 새겨야 할 좌우명으로, 항상 지켜지지는 않는다.
- 외부에 벨 연구소를 드러내는 것은 채용뿐만 아니라 전반적인 연구 분야의 흐름을 따라가는 데 중요했다.
- 연구소의 문화는 매우 협조적이고 서로 돕는 분위기였다.
- 일을 즐기고 동료와 즐거움을 나누는 것은 중요하다.
- 좋은 조직은 함께 일하고, 때때로 함께 놀고, 다른 사람이 잘 하는 일을 인정하기를 즐기다 보면 유기적으로 자라난다.
- 뛰어난 지적 능력과 비할 데 없는 기술적 판단력, 동료가 개발한 것이라면 뭐든지 처음으로 사용해보는 관리 스타일을 지닌 리더였다.