미래파 프로그래밍 노트

Seung-hae KIM·2023년 2월 13일
0

원본: 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)

"내가 방금 구입한 정말 멋진 스포츠 카를 봐!"

  • 우와! 근데 그거 뒤에 트레일러를 달 수 있니?
  • 이야!, 근데 그거 사륜 구동이니?
  • 오오!, 근데 시장에 돼지 열 두 마리를 싣고 가야 할 때 거기 몇 마리 실을 수 있니?
  • 나 방금 바닥 코팅제 하나를 샀는데, 그걸 어마어마한 디저트 토핑으로도 쓸 수 있어!!

미래파 프로그래밍의 최우선 사항들

  • 이전엔 한 번도 해본 적 없었던 것이어야 한다.
  • 사용자는 프로그램을 사용하기 좋아해야 한다.
  • 프로그램은 할 수 있는 한 빨라야 한다.
  • 프로그램은 될 수 있는 한 작아야 한다.
  • 프로그램에 버그는 없어야 한다.
  • 프로그램에 사용자 유지보수는 불필요하다.
  • 프로그램에 사용자 문서는 불필요하다.
  • 프로그램에 시스템 관리자는 불필요하다

우린 거부한다

  • 이전에 해본 것의 복사본.
  • 사용자가 설정할 수 있는 소프트웨어.
  • 종이 문서.
  • 사용자의 귀중한 메모리내다 버리는 프로그램들.
  • 사용자의 귀중한 시간내다 버리는 프로그램들.
  • 시스템 관리와 관리자들.
  • 프로그래머의 편의를 위해 사용자의 비용을 소모하는 모든 것.
  • 확장성, 모듈화, 구조적 프로그래밍, 재사용 가능한 코드, 탑-다운 설계, 모든 표준들, 그리고 객체 지향적 "방법론들".
  • 모든 형태의 쓸모 없고 무책임한 쓰레기들.

0개의 댓글

관련 채용 정보