소프트웨어 개발의 혼돈을 다리 건설 비유로 풀어낸 에세이, 모든 프로그래밍 팀은 미친 사람들로 구성되어 있고 그 결과물 위에서 은행 소프트웨어와 인터넷이 돌아가고 있다는 자조적 고백
완벽한 코드는 혼자서 한 가지만 수행하는 파일 속에만 존재하며, 현실에서는 금요일에 화요일까지 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파운드 물건을 들어올리는 대신, 사탄의 체모를 다듬으며 열린 두개골 위에서 식사하는 사탄을 모시는 기회를 얻었고, 그 대가로 인터넷의 일부가 며칠 더 돌아감