레전드 프로그래머는 이렇게 만들어졌다 (크리스 소여, 리누스 토발즈 이야기)
출처: www.youtube.com/watch?v=Hjr4ME8FW3w
프로그래밍 레전드들은 각가지 제약과 열악한 환경 속에서 실력을 단련했습니다. 손쉽게 쓸 수 있는 도구나 튜토리얼이 거의 없었기 때문에, 개발자들은 핵심 기능을 처음부터 직접 구현하며 비범한 기지와 창의성을 발휘해야 했습니다. 그 결과, 어셈블리 수준까지 최적화된 걸작 코드들이 탄생했습니다.
80년대와 90년대 초의 개발 환경
80년대와 90년대 초는 이른바 '침실 코더의 시대'로, 기본적인 컴퓨터 한 대와 꿈만 있으면 개발을 시작할 수 있었지만, 기술 자체가 엄청난 허들이었습니다. 램은 K바이트에서 메가바이트 단위로 혹독하게 제한되었고, 나중에 최적화를 할 여유도 없이 즉시 최적화하지 않으면 컴퓨터가 멈추는 상황이었습니다. 메모리와 처리 속도와의 싸움이었으며, 코드 한 줄 한 줄이 모두 결정적이었습니다.
추상화와 지원 도구가 심각하게 부족하여 패키지 관리자, UI 라이브러리, 자동화 기술 등이 전무했습니다. 필요한 라이브러리는 직접 만들어야 했고, 디버깅은 16진수 메모리 덤프를 보며 버티는 고된 과정이었습니다. 특히 튜토리얼이 사실상 없어 도서관에서 책을 찾거나 읽기 어려운 기본 매뉴얼에 의존해야 했으며, 개발자와 대화할 상대는 사실상 컴파일러뿐이었습니다.
이런 자원 부족은 오늘날 상상하기 힘든 수준의 창의성을 강요했습니다. 개발자들은 몇 바이트라도 더 필요하면 비디오 메모리를 데이터 저장소처럼 쓰는 등 믿기 어려울 만큼 기상천외한 방법을 동원했고, CPU 사이클을 하나하나 아꼈습니다. 이러한 제약은 개발자들을 날카롭게 만들었고, 오늘날 우리가 당연하게 쓰는 많은 근본적 추상화가 그들 손에서 만들어졌습니다.
게임 개발의 특별한 어려움: 어셈블리
게임 분야는 요구 수준이 더욱 높았습니다. 원시적인 기계에서 빠른 아케이드 경험을 구현하려면 베이직 같은 고수준 인터프리터 언어로는 역부족이었고, 프로그래머들은 결국 기계어 혹은 어셈블리로 내려가야 했습니다. 어셈블리는 인간 친화적이라고 보기 어려운 저수준 언어로, 메모리 주소를 지정하고 CPU와 레지스터 등 하드웨어를 정교하게 수동 제어해야 했습니다.
C 한 줄이 어셈블리로 옮겨지면 네다섯 줄로 불어날 정도로 수작업이 많아 대부분의 프로그래머에게는 어려운 문제 풀이처럼 느껴졌지만, 어셈블리는 정밀성과 성능이라는 압도적인 강점을 가지고 있었습니다. 데이터를 수동으로 옮기고 제어하여 당시 다른 언어로는 도달하기 어려운 수준의 성능을 끌어낼 수 있었습니다.
크리스 소여: 어셈블리의 대가
전설적인 프로그래머 크리스 소여는 15세에 8비트 컴퓨터로 개발을 시작했습니다. 메모텍 MTX의 Z80 어셈블러를 통해 기계어 작성이 수월했고, Z80 CPU를 직접 다루며 프로그램 실행 속도를 크게 향상시켰습니다. 그는 아타리 같은 플랫폼에서 PC로 게임을 포팅하는 작업을 어셈블리로 수행하며 방대한 실전 경험을 쌓았습니다.
리누스 토발즈: 리눅스의 탄생
리누스 토발즈 또한 유사한 배경을 가지고 있습니다. 어린 시절 값비싼 유닉스 워크스테이션이 아닌, 대학 시절 직접 마련한 386 컴퓨터와 미닉스 교재 몇 권에 의지해 시스템 프로그래밍을 파고들었습니다. 유튜브 강의나 GitHub 예제가 없던 시절, 그는 제한된 정보 속에서 교육용 운영 체제인 미닉스를 실습용으로 활용했습니다.
미닉스의 라이선스와 기능 제약에 답답함을 느낀 리누스는 “그럼 내가 직접 만들어 보자”는 마음으로 취미 프로젝트로 리눅스 커널을 만들기 시작했습니다. 자동 완성이나 디버거 같은 친절한 도구가 없던 시절, 시스템 콜과 스케줄러를 직접 짜고 깨지면서 배웠으며, 버그가 나면 커널 패닉 화면과 씨름하며 원인을 추적했습니다. 전 세계 개발자들과의 협업 또한 메일링 리스트와 패치 파일 같은 원시적인 수단으로 익혀 나갔습니다.
열악한 도구와 제한된 하드웨어, 불편한 협업 환경 속에서도 꾸준히 실력을 갈고닦은 결과, 그는 '리눅스의 아버지'라 불리며 오늘날 수많은 개발자에게 살아있는 전설이자 롤 모델이 되었습니다.
롤러코스터 타이쿤의 경이로운 성공
수년간의 절박함과 혹독한 연습으로 다져진 크리스 소여의 X86 아키텍처에 대한 깊은 저수준 이해는 초기 IBM 호환 PC에서 가능한 모든 성능을 쥐어짜야 하는 작업과 완벽하게 맞아떨어졌습니다. 이러한 전문성은 트랜스포트 타이쿤에 이어 마침내 롤러코스터 타이쿤에서 절정에 달했습니다.
90년대 후반 프로그래밍 세계가 C++로 옮겨간 상태였음에도 불구하고, 롤러코스터 타이쿤은 거의 전부가 어셈블리로 만들어지는 대담한 선택을 했습니다. 소여는 게임의 전체 구조, 시스템, 물리 연산, 수백 명의 이용객 렌더링까지 모든 것을 머릿속에 그려가며 개발해야 했습니다. 이 엄청난 노고는 거대한 성과로 돌아왔습니다.
롤러코스터 타이쿤은 복잡한 시스템과 자체 물리 엔진을 갖추고서도 당시 빈약한 컴퓨터에서 지연이나 슬로다운 없이 매끈하게 동작했습니다. 그래픽 디자이너와 음악가 각 한 명의 도움을 받았을 뿐 사실상 한 사람이 만든 게임으로서 이 정도 복잡성과 성능을 달성한 사례는 전례가 거의 없었습니다. 이 게임은 거의 '제로 버그' 상태로 출시되어 인터넷 패치에 의존하는 현대 게임과 극명하게 대비되었습니다.
경쟁작인 심시티 3000이 대규모 팀으로 제작되는 동안, 사실상 한 사람이 만든 롤러코스터 타이쿤은 1999년 PC 게임 판매 1위를 차지했습니다. 이미 구식으로 여겨지던 어셈블리를 고수한 덕분에 소여는 한정된 하드웨어에서 놀라울 정도로 복잡한 게임을 효율적으로 구현해 냈으며, 저수준 코드에 대한 숙련도가 커져가는 산업 규모를 뛰어넘을 수 있음을 몸소 보여주었습니다. 롤러코스터 타이쿤은 거의 전부를 어셈블리로 작성한 마지막 대형 상업 게임으로 평가받습니다.
전설들의 공통점: 제약 속 창의성
크리스 소여와 리누스 토발즈 같은 전설적인 프로그래머들은 온갖 제약과 열악한 환경의 생존자였습니다. 단순히 타고난 재능만으로 빛난 것이 아니라, 도구 부족과 CPU 사이클 하나하나를 아껴야 하는 요구가 오늘날 보기 드문 창의성과 최적화를 끌어냈습니다. 그들의 천재성은 마주한 가혹한 환경을 아키텍처 승리로 바꾸어 놓았습니다.
