원본: http://www.graficaobscura.com/future/futnotes.html
원본은 Paul Haeberli and Bruce Karsh에 의해 작성되었습니다.
얼추 번역해봤습니다. 번역에 문제가 있다면 댓글을 달아주시거나 알아서 수정해서 게시하는 건 어떨까요.
참조
미래파 프로그래밍 노트
폴 히벌리와 브루스 카쉬(Paul Haeberli and Bruce Karsh)
미래파 프로그래밍 관련 읽을거리
여기 당신에게 도움이 될만한 몇 가지 참조 서적들을 나열한다.
- 능률적인 프로그램 작성하기, 존 벤틀리(Jon Bentley, Writing Efficient Programs, Prentice-Hall, 1982.)
- 움베르토 보치오니, 에스터 코언(Ester Coen, Umberto Boccioni, Abrams, 1988.)
- 시는 유효한가?, 다나 지올라(Dana Giola, Can Poetry Matter?, The Atlantic Monthly, May 1991.)
- 유닉스 반대파를 위한 지침서, 심슨 가핑클(Simson Garfinkel, Daniel Weise, and Steven Strassmann, The UNIX HATERS Handbook, IDG books, 1994)
- Paul Haeberli, http://www.sgi.com/grafica/future/, WWW, 1994.
- 미래파와 미래주의, 폰투스 헐튼(Pontus Hulten, Futurism and Futurisms, Abbeville Press, 1986.)
- 컴퓨터 시스템 설계를 위한 단서들, 버틀러 램슨(Butler Lampson, Hints for Computer System Design, Proceedings of ACM SIGOPS, Operating Systems Review, Volume 17, Number 5, Oct, 1983.)
- 초최적화: 최소 프로그램 살펴보기, 핸리 마살린(Henry Massalin, The Superoptimizer: A Look at the Smallest Program, Proceedings of ACM SIGOPS, Operating Systems Review, Volume 21, Number 4, Oct, 1987.)
- 신세시스 운영 체계, 핸리 마살린과 칼튼 푸(Henry Massalin and Calton Pu, The Synthesis Operating System, Proceedings of the Fourth Workshop on Real-Time Operating Systems, Cambridge, MA, July 1987.)
- 미래주의, 캐롤라인 티스달과 안젤로 보촐라(Caroline Tisdall and Angelo Bozzolla, Futurism, Oxford University Press, 1978.)
컴퓨터 "과학" 용어들이 드러내는 것들(Computer "Science" terms exposed)
- 구조적 프로그래밍 = 느림.
- 모듈러(Modular) = 비대함.
- 확장성 = 늦음.
- 재사용성 = 버그 투성이.
- 객체지향 = 느리고, 비대하고, 늦고, 버그 투성이.
- Top-Down 설계 = 사용하기 어려움.
- 표준 준수(Standard Compliant) = 느리고 늦고 사용하기 어려움 = 한물감.
- 자동(Automatic) = 수동(Manual).
- 설정 가능한(Configurable) = 끝나지 않는(Unfinished).
- 완전히 설정 가능한(Fully Configurable) = 절대 안끝남(Completely Unfinished).
- 타입 안전성(Type Safe) = 불가해함(Imponderable).
- Hack = 유용함.
- 약간의 Hack = 아주 유용함.
현대 소프트웨어는 엄청나게 소모적이다
사용자의 시간은 귀중하다. 몇 가지 초기화 시간을 살펴보자:
- 텔레비전 - 3 초
- 자동차 - 2 초
- 전자레인지 - 1초 미만
- 비디오 게임 - 1초 미만
- 유닉스 워크스테이션 - 120 초 이상
비싼 기계일 수록 사용자의 시간을 더 많이 소모한다는 것이 놀랍지 않은가? UNIX 워크스테이션은 사용자를 위해 단 하나의 명령어를 실행하기 전에 10억 개 이상의 명령어를 실행해야만 한다.
소프트웨어 개발에 어떤 진전이라도 있긴 합니까?
지난 20년 동안 기계의 성능은 200 배 이상 향상되었다. 왜 소프트웨어의 성능은 2 배 이상 향상되지 않았나?
슬로건들
- 물론 오늘날의 소프트웨어는 좀 느리긴 하다. 하지만 무엇보다 당신이 기억해야 할 건 그것이 사용하기 어렵고, 완전히 버그 투성이라는 것이다.
- 일단 쓸모있어야 한다(Usefulness Is Primary).
- 구조화된(Structured) 소프트웨어 대신 액체적(Liquid) 소프트웨어가 안될 건 뭔가?
컴퓨터 과학에 관한 노트들
- 과학적이지 않음 - 아이디어를 수락하는 일은 기술적 이점에 대한 평가보다 사적 특성에 더 의존한다.
- 반주지적임(Anti-Intellectual) - 대안적인 아이디어들은 단념되었다.
- 갑갑함 - 기초적 개념이 20년 째 변하지 않고 있다.
- 독단적임 - 사람들의 작업을 평가하기 위해 전혀 무관한 척도들을 사용한다.
- 오만함 - 거의 모든 새로운 아이디어들은 공포의 대상이 되었고 거부당했다.
- 편협함 - 다른 분야로부터 고립되었다.
미래파 프로그래밍 실천
- 지난 6개월간 접근한 적 없는 모든 시스템 파일들을 삭제하라. 어쨌든 우리 것들은 잘 돌아갈 것이다!
- 동적으로 코드를 생성하는 프로그램을 작성하라.
- 오른쪽에서 왼쪽으로 들여쓰기를 해보라.
- 당신의 과업을 완수할 가장 짧은 프로그램은 무엇인가?
- 가장 글자 수가 적은 소스코드.
- 가장 작은 실행 파일.
- 가장 적은 수의 명령어를 실행하기.
- 어샘블리어로 프로그램을 작성해보라. 이를 C++ 구현과 비교해보라.
짐덩이
- 거의 모든 운영체제는 지나치게 많은 짐덩이를 이고 있다. 이는 마치 당신이 6000 파운드의 짐을 이고 세계를 여행하는 것과 다름 없다.
- 미래파는 짐덩이 같은 건 확인하지 않는다. 그들은 한 조각이면 된다.
기술적 지위 추구하기(Technological status seeking)
- 당신의 라디오에 포함된 트랜지스터는 몇 개인가? 9개 정도인가?
- 당신의 손목시계에 포함된 보석은 몇 개인가? 17개 정도인가?
- 당신의 프로그램은 객체-지향적 프로그래밍 기술로 개발되었는가? 그것은 확장 가능한가?
- 아래 사항이 충족되는 한, 뭐가 되든 상관 없다:
- 당신이 라디오 채널을 잘 수신할 수 있는 한.
- 당신의 시계가 시간을 잘 지키는 한.
- 당신의 프로그램이 빠르고, 그것이 사용자가 원하는 것이라면.
당신은 창문을 어떻게 청소할 것인가?
우리가 창문을 청소할 것을 요청받았고, 소프트웨어가 개발되는 것과 같은 방식을 택할 수 있다고 생각해보자. 우리는 다음과 같은 짓을 하게 될 것이다:
- 정말 멋진 주문형 양동이와 창문닦이를 만드는 법.
- 창문의 모양, 재질을 분류하는 체계. 물론 아직 만들어지지 않은, 미래에 만들어질 창문 재질과 모양도 포함해야 할 것이다.
- 꿀벌의 날개만한 크기부터 가장 큰 대성당의 스테인글라스 창문 크기까지 아우르는 창문 닦이 기술 분석.
- 구현 시작도 하기 전에 전체 설계에 대한 검토 및 약정.
- 사용자 매뉴얼 작성을 위한 컨설턴트.
- MIT의 새로운 창문 닦기 표준(Window Washing Standard)에 대한 호환성 약속.
- 사용자에게 현대적인 방식으로 창문을 청소하는 기술에 대한 교육 일정을 위한 일련의 회의 계획.
당신이라면 누가 이 문제를 "해결"하길 원할 것인가, 컴퓨터 "과학자", 혹은 전문가?
미래파 프로그래머들
- 핸리 마살린(Henry Massalin) - 초최적화 전문가, 신세시스 커널
- 빌 앳킨슨(Bill Atkinson) - Quick Draw
- 존 벤틀리(Jon Bentley) - Programming Pearls
- 버틀러 램슨(Butler Lampson) - Hints Paper
기이한 우아함의 폭정(The tyranny of creeping elegance)
"내가 방금 구입한 정말 멋진 스포츠 카를 봐!"
- 우와! 근데 그거 뒤에 트레일러를 달 수 있니?
- 이야!, 근데 그거 사륜 구동이니?
- 오오!, 근데 시장에 돼지 열 두 마리를 싣고 가야 할 때 거기 몇 마리 실을 수 있니?
- 나 방금 바닥 코팅제 하나를 샀는데, 그걸 어마어마한 디저트 토핑으로도 쓸 수 있어!!
미래파 프로그래밍의 최우선 사항들
- 이전엔 한 번도 해본 적 없었던 것이어야 한다.
- 사용자는 프로그램을 사용하기 좋아해야 한다.
- 프로그램은 할 수 있는 한 빨라야 한다.
- 프로그램은 될 수 있는 한 작아야 한다.
- 프로그램에 버그는 없어야 한다.
- 프로그램에 사용자 유지보수는 불필요하다.
- 프로그램에 사용자 문서는 불필요하다.
- 프로그램에 시스템 관리자는 불필요하다
우린 거부한다
- 이전에 해본 것의 복사본.
- 사용자가 설정할 수 있는 소프트웨어.
- 종이 문서.
- 사용자의 귀중한 메모리를 내다 버리는 프로그램들.
- 사용자의 귀중한 시간을 내다 버리는 프로그램들.
- 시스템 관리와 관리자들.
- 프로그래머의 편의를 위해 사용자의 비용을 소모하는 모든 것.
- 확장성, 모듈화, 구조적 프로그래밍, 재사용 가능한 코드, 탑-다운 설계, 모든 표준들, 그리고 객체 지향적 "방법론들".
- 모든 형태의 쓸모 없고 무책임한 쓰레기들.