TECH 으로 돌아가기
TECH HACKER NEWS 7분 읽기 34 READS

14년 된 넷북으로 어셈블리를 배우는 밤: 느린 학습이 주는 것

14년 된 넷북으로 어셈블리를 배우는 밤: 느린 학습이 주는 것
SOURCE IMAGE · HACKER NEWS

개발자 데이브 가우어(ratfactor.com 운영자)는 최근 석 달간 독특한 저녁 습관을 공개했다. 아이들에게 동화책을 읽어준 뒤 침대에 누워, 소설책 대신 2007년에 나온 32비트 셀러론 넷북 '아수스 eeePC 701'을 켜고 x86 어셈블리어를 작성한다는 것이다. 14년이나 된 이 작은 리눅스(현재 알파인 리눅스) 머신은 그에게 '시간을 아주 잘 쓰는 방법'이 되었다. 거창한 성과담이 아니라, 환경을 바꾸고 작업을 의도적으로 느리게 만드는 학습 방식에 관한 기록이라는 점에서 실무자에게도 시사점이 있다.

그의 출발점은 Zig 언어에 대한 관심이었다. 시스템 레벨 프로그래밍에 깊이 들어가다 보니 자연스럽게 컴퓨터 아키텍처, 명령어 집합, 어셈블리어로 이어졌다는 것이다. 이 경로는 많은 고급 언어 사용자가 공감할 법한 흐름이다. 추상화 계층을 걷어내고 push, pop, call, ret 같은 기본 명령을 직접 반복해 써보는 경험이, 그의 표현으로는 '고급 언어로 보낸 수년간의 이론'보다 개념을 더 확실하게 체득하게 해주었다고 한다.

산만함을 제거한 전용 환경

흥미로운 대목은 도구 선택이다. 이 넷북은 현대적인 웹 서핑에는 적합하지 않고(텍스트 브라우저 Lynx만 설치돼 있다) 오직 어셈블리 작업 전용으로 쓰인다. 그는 로그인하면 .bash_profile이 곧바로 프로젝트 디렉터리로 cd 하도록 설정했고, Vim으로 소스와 문서를 열거나 GDB 디버거를 마지막 작업 지점의 브레이크포인트와 함께 실행하는 한두 글자짜리 별칭(alias) 스크립트를 여럿 만들어 두었다. 피곤하고 의욕이 없는 밤에도 '양치질처럼' 자동으로 작업에 진입하도록 마찰을 최소화한 것이다. 전용 장비, 느린 하드웨어, 방해 요소 제거라는 조합이 오히려 수용적인 학습 상태를 만들었다는 관찰은 집중 환경 설계라는 측면에서 곱씹을 만하다.

그는 무료 튜토리얼 asmtutor.com(대니얼 기브니 제작)으로 NASM의 깔끔한 인텔 스타일 문법부터 익혔다. Hello World에서 멀티스레드 웹 서버까지 작은 단원으로 쪼개 진행하면서, 예제를 그대로 따라 하기보다 매번 수정하고 변형해 자신만의 유틸리티 함수 라이브러리를 쌓았다고 한다. 실습 기반 학습이 어떻게 '사용을 통한 이해'로 이어지는지 보여주는 전형적인 사례다.

JonesForth 포팅과 '속도'라는 함정

본 프로젝트는 리처드 WM 존스가 작성한 JonesForth를 읽고 이해하는 것, 나아가 이를 NASM으로 포팅하는 것이다. 원본은 GNU 어셈블러(GAS)로 작성돼 있어 문법은 물론 명령어 니모닉까지 다르다. GAS는 조작하는 데이터 크기를 니모닉에 포함하기 때문이다. 핵심 매크로들을 GAS에서 NASM으로 옮기는 작업은 하나당 몇 주가 걸렸고, 그는 수없이 포기하고 싶었지만 계속 붙들고 있으면 장벽이 서서히 무너진다고 적었다.

그런데 '올해 작은 프로젝트들을 마무리하자'는 마감을 스스로 정한 순간, 그는 어셈블리 블록을 서둘러 변환하기 시작했다. 조급함은 쉽게 생기지만 쉽게 사라지지 않는다는 것이 그의 반성이다. 샤워 중 떠올린 해법은 번역을 멈추고, 문법 오류만 고쳐 일단 어셈블되게 만든 뒤, 지금까지 작성한 모든 명령어를 하나하나 짚으며 의도대로 동작하는지 검증하는 것이었다. 그리고 그 과정을 기록으로 남기기로 했다. X 윈도가 없는 머신이라 터미널 멀티플렉서인 GNU Screen을 쓰기로 했는데, 처음엔 '또 새 도구에 발목 잡히겠다'고 여겼다가 곧 널리 쓰이는 GNU 도구를 제대로 익힐 기회로 받아들였다. 실제로 그는 GNU Screen 매뉴얼 전체를 읽으며 Vim과 GDB 세션을 한 번에 열고 전환하는 자동화를 시도하고 있다.

여기서 그가 끌어낸 결론이 이 글의 중심이다. 완성된 Forth 포트가 목적이 아니라, 배우는 과정과 습득하는 기술이 목적이라는 것이다. 그는 자신의 많은 프로젝트가 '밝게 타올랐다 꺼진다'고 인정하면서도, 꾸준히 작업하는 것만으로 성공이 보장되는 종류의 프로젝트가 있다고 말한다. 방향이 분명해 매일 손대기만 하면 전진하는, htmx 예제 페이지 같은 작업이 그 예다. 실패하는 유일한 방법은 그만두는 것뿐인 프로젝트다.

실무자에게 남는 것과 한계

이 글의 가치는 어셈블리 자체보다 학습 설계에 있다. 전용 장비로 컨텍스트를 분리하고, 진입 마찰을 스크립트로 없애고, 과정을 로그로 남기며, 마감이 유발하는 조급함을 의식적으로 되돌리는 방식은 어떤 분야의 자기주도 학습에도 적용된다. 그가 추천하는 경로—NASM의 인텔 스타일로 기초를 익힌 뒤 GAS 기반 자료(바틀렛의 '밑바닥부터 시작하는 프로그래밍')로 넘어가는 순서, 그리고 '게임 매뉴얼의 현상'이라 부르는 그의 지론, 즉 먼저 어렵게 경험하고 나면 교재가 훨씬 잘 흡수된다는 생각도 눈여겨볼 만하다. 다만 이는 어디까지나 한 개발자의 취미 기록이다. 벤치마크나 성능 수치, 팀 단위 방법론이 아니라 개인의 밤 시간 루틴이라는 점은 분명하다. 그럼에도 '천천히, 그러나 멈추지 않는' 학습이 어떻게 지속 가능한 성취로 바뀌는지에 대한 구체적 사례로서, 바쁜 실무자에게 작은 영감을 준다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://ratfactor.com/assembly-nights
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...