2P by GN⁺ 3시간전 | ★ favorite | 댓글과 토론
  • 소프트웨어 개발의 혼돈을 다리 건설 비유로 풀어낸 에세이, 모든 프로그래밍 팀은 미친 사람들로 구성되어 있고 그 결과물 위에서 은행 소프트웨어와 인터넷이 돌아가고 있다는 자조적 고백
  • 완벽한 코드는 혼자서 한 가지만 수행하는 파일 속에만 존재하며, 현실에서는 금요일에 화요일까지 600개를 만들라는 지시 아래 녹아내린 눈송이 더미 위에 피카소를 기대놓는 식으로 운영
  • 웹 개발자는 매주 하나씩 새 기술을 배우면서 수백 개의 기존 도구가 깨지지 않았는지 확인해야 하고, 전문가여도 문제 원인 파악에 6시간이 걸리는 것이 다행인 세계
  • 인터넷은 수조 달러가 비공식 합의와 "TODO: FIX THIS"라고 적힌 10년 된 코드 위에 의존하고 있으며, 시스템 관리자 전원이 동시에 점심을 먹으면 문명이 붕괴
  • 프로그래머는 하루 10~15시간 뇌가 원래 하도록 설계되지 않은 작업을 수행하며 서서히 미쳐가고 있고, 이것이 50파운드를 들어올리는 대신 선택한 직업의 대가

모든 프로그래밍 팀은 미친 사람들로 구성되어 있다

  • 육체 노동을 하는 친구들이 항상 "너는 편하잖아, 나는 모르도르 밑에 드라이버로 터널을 팠다"는 식으로 대화를 시작함
  • 스트레스와 정신적 고통이 나쁜 것이라는 데 동의한다면, 프로그래밍의 세계에 온 것을 환영합니다
  • 다리 건설 비유: 대도시 다리 프로젝트에 합류했더니 다음과 같은 상황임
    • Mary는 프로젝트 리더, Fred는 나무만 다루는데 200피트 높이 급류 위 다리의 보행로를 담당함
    • Dave는 스웨터를 도둑맞은 뒤 15단계 보안 체크를 설치함
    • Phil은 엔지니어가 아닌데 난간 금지 규칙을 시행하며, 아무도 Phil이 뭘 하는지 모르지만 경영진과 관련 있어서 방치
    • Sara는 최첨단("hemorrhaging-edge") 포장 기술 여러 개를 전부 설계에 반영함
    • Tom과 Harry는 미터법 vs 야드파운드법 싸움을 수년째 진행 중이고, 먼저 작업한 사람의 단위가 적용
    • 현수교로 설계했으나 아무도 현수교 건설법을 몰라 중간에 지지 기둥을 추가하고, 현수 케이블은 어딘가를 지탱하고 있을 것 같아 그대로 방치
    • 신입에게 새 아이디어를 내라고 하지만, 정작 추진공학 엔지니어라 다리에 대해 아는 것이 없음
  • 이 다리를 건너겠냐고 물으면 아무도 안 건너지만, 이런 구조가 은행 소프트웨어, 웹사이트, 인터넷 보안 프로그램을 전부 만들었음

모든 코드는 나쁘다

  • 모든 프로그래머에게는 집에 아무도 없을 때 꺼내 읽으며 눈물 흘리는 Good Code 파일이 있음
    • 함수와 변수 이름이 일관적이고, 간결하고, 명백히 멍청한 짓을 하지 않으며, 야생 환경이나 영업팀의 요구에 노출된 적이 없음
    • 단 한 사람이 작성했고 다른 사람이 손댄 적 없으며, 30세 이상이 쓴 시처럼 읽힘
  • 현실: 금요일에 화요일까지 600개의 눈송이를 만들라는 지시를 받으면 여기저기 편법을 쓰고, 동료가 녹여버리고, 전부 뒤섞인 형체 위에 피카소를 기대놓고, 다음 주에는 피카소가 쓰러지지 않게 눈을 더 퍼올림
  • 표준(standards)을 따르면 해결된다는 이론이 있지만, 표준 수가 컴퓨터가 실제로 할 수 있는 일보다 많고, 개인 취향에 의해 변형되므로 동일한 작업을 수십 가지 다른 방식으로 수행하는 코드베이스가 현실
  • 새 직장의 첫 몇 주는 모든 언어·프레임워크·표준을 알아도 프로그램이 어떻게 돌아가는지 파악하는 데 소비, 표준은 유니콘이기 때문

항상 어둠이 있다

  • 어린 시절 벽장 비유: 들어가면 벽이 뒤로 물러나 선반이 되고, 다시 올려다보면 빛이 닿지 않는 크롤스페이스의 절대적 허무가 존재하며, 매일 밤 손전등과 인형으로 막아두던 괴물이 거기 살고 있음을 직감
  • 프로그래밍 학습도 동일: 유용한 도구를 배우고, 주변을 둘러보면 새 도구가 있고, 그 도구가 항상 침대 바로 옆에 있던 밑바닥 없는 공포를 보여줌
  • 평균적 웹 개발자의 현실
    • 12개의 프로그래밍 언어, 수많은 라이브러리·표준·프로토콜에 익숙해도 매주 하나씩 새로 배워야 함
    • 수백 개의 기존 도구가 업데이트되거나 깨졌는지 확인하고, 술 취한 주말에 영리하게 활용했던 버그가 수정되지 않았는지 체크 필요
    • 모든 게 최신인 줄 알았는데 갑자기 전부 고장
  • 고장 원인 예시: 누군가 1/0을 Infinity로 쓰기로 하고, 다른 누군가 그걸 컴파일러에서 에러로 만들면서 아무에게도 알리지 않음, 결과적으로 전문가도 원인 파악에 6시간 소요
  • 자기 분야의 전문 지식조차 컴퓨터 과학 전체에서 극히 일부이며, 5년 된 MacBook이 어떻게 작동하는지 아는 사람은 단 한 명도 없음
  • "껐다 켜보세요"라고 말하는 이유: 뭐가 잘못됐는지 전혀 모르기 때문에 컴퓨터를 혼수상태에 빠뜨리고 내장 자동 의사팀에게 맡기는 것

인터넷은 그 자체로 특별한 지옥

  • 동적 페이지 3개짜리 쇼핑카트 수준의 웹사이트도 24시간 팀이 유지보수, 모든 것이 항상 모든 곳에서 모든 사람에게 고장 나고 있기 때문
  • 지금 이 순간 Facebook 직원이 수만 개의 에러 메시지를 처리 중이고, Google 사무실의 한 팀은 3일째 잠을 못 잤으며, 어딘가의 데이터베이스 프로그래머는 빈 Mountain Dew 병에 둘러싸여 남편이 죽은 줄 앎
  • 시스템 관리자 전원이 동시에 점심을 먹으러 가면, 델리에 도착하기도 전에 통조림을 두고 돌연변이 무리와 싸워야 할 것
  • 수조 달러가 비공식 합의와 10년 전에 쓰인 "TODO: FIX THIS IT'S A REALLY DANGEROUS HACK" 코멘트가 달린 코드 위에 의존
  • 첩보·이익·심심풀이로 인터넷 곳곳을 공격하는 집단이 있고, 4chan은 오후 한나절 기분이 나빠서 누군가의 인생과 사업을 파괴할 수 있지만, 핵겨울에 핵 하나 더 떨어지는 것이라 걱정도 안 됨
  • 인터넷에서는 "이거 가끔 되는 것 같아"라고 말하면 그것이 인터넷의 일부가 되고, 몇 백 달러와 컴퓨터만 있으면 누구든 끔찍한 해킹 코드를 올려 전체를 조금씩 나쁘게 만들 수 있음
  • 인터넷의 비밀 규칙: 브라우저를 처음 열고 5분 후 러시아 아이가 주민등록번호를 갖고, 가입하면 NSA가 위치 추적을 시작하고, 이메일을 보내면 나이지리아 빌보드에 주소가 올라감
  • 이것은 무관심 때문이 아니라 모든 것이 고장 나 있고 좋은 코드가 없어서 모두가 그냥 돌아가게 하려고 안간힘을 쓰기 때문

우리가 미친 게 아니라 미쳐가는 것이다

  • ERROR: Attempted to parse HTML with regular expression; system returned Cthulhu — 이게 웃기다면 아직 괜찮지만, "arrayReverse"냐는 질문에 s/camel/_/로 답하는 것이 자연스러우면 이미 코드로 말하는 단계에 진입
  • 인간의 뇌는 기본적 논리에 특별히 뛰어나지 않은데, 하루 종일 극도로 복잡한 논리를 수행하는 직업이 존재
  • 추상적 조건과 요구사항의 거대한 사슬을 뒤져 빠진 쉼표 같은 것을 찾는 작업을 하루 종일 하면, 사람의 얼굴을 보면서도 말이 끝났는지 모름 — 세미콜론이 없기 때문
  • 난해한 프로그래밍 언어(esolang) 예시로 뇌의 파괴적 영향 시연
    • C++의 "Hello World"와 동일한 출력을 하는 프로그램이 Brainfuck, Ook!, 마야 숫자를 90도 회전한 ASCII 아트로 표현하는 Perl 코드 등으로 존재
    • 마야 숫자 프로그램은 대회에서 우승, 이런 세계에서 하루에 담배 한 갑 피우는 것을 아무도 의문시하지 않음
  • 모든 프로그래머는 뇌가 하도록 설계되지 않은 일을 하루 10~15시간, 주 5~7일 강제하고 있으며 모두 서서히 미쳐가는 중
  • 결론: 50파운드 물건을 들어올리는 대신, 사탄의 체모를 다듬으며 열린 두개골 위에서 식사하는 사탄을 모시는 기회를 얻었고, 그 대가로 인터넷의 일부가 며칠 더 돌아감