내 인생을 바꾼 열 줄의 코드

Ten Lines of Code That Changed My World

Pixelambacht의 Roel N.이 자신의 인생에서 특별한 의미를 지닌 열 줄의 코드를 소개한다. 첫 컴퓨터와의 대화를 가능케 한 BASIC의 Hello World부터 자아를 수정하는 6502 어셈블리, JavaScript의 악명 높은 'wat' 유머, CSS만으로 구현한 애니메이션 시, 그리고 게임의 무한 목숨을 가능하게 한 POKE 명령까지. 각 코드는 단순한 기술을 넘어 저자의 성장과 유머, 그리고 코딩의 본질에 대한 깨달음을 담고 있다.

컴퓨터는 시키는 대로 뭐든 한다는 점을 두 번째 줄이 확실히 각인시켜 주었다. Hello world여 영원하라!
  1. dahart

    BASIC의 print+goto 루프가 아마 내 생애 첫 프로그램이었을 거예요 (80년대에요). 그런데 한 가지 확실한 건, 그건 분명히 "Hello, World"가 아니었다는 거예요. 나와 다른 사람들은 온갖 바보 같은 것들, 랜덤 단어, 농담, 유치한 문구들로 화면을 채웠죠. 아무튼, 왠지 "Hello, World!"는 C의 것이었고, 고등학교 C 수업에서 처음 봤던 기억이 나요. 그리고 대학에서 훨씬 더 자주 봤고요.

    'poke'에 대한 기억도 있어요. Atari 800에서는 메모리를 poke해서 키 반복 속도와 반복 시작 전 지연 시간을 바꿀 수 있었어요. 그래서 당연히 우리는 지연을 0으로 낮추고 반복 속도를 최대로 올렸죠 (아마 초당 60자였을 거예요). 그러면 누군가 타이핑을 하려 해도 키를 충분히 빨리 누를 수 없어서 반복을 피할 수 없었어요. 고치려면 컴퓨터 전원을 껐다 켜야 했죠. 11살의 나에게는 정말 웃겼어요.

    그의 'poke' 설명과 비슷하지만 다른 메커니즘이에요. IBM PC jr에서 debug.com을 사용해 Ultimate III 세이브 파일을 편집하고, 나 자신에게 최대한의 돈과 목숨을 주는 거죠.

    좋은 시절이었어요!

  2. andsoitis

    Lisp에 대한 심오한 무언가를 담은 3줄이 여기 있어요: 코드가 코드를 만드는 코드를 만들 수 있다는 것:

    ———————

    (defmacro twice (form)

    `(progn ,form ,form))

    (twice (print "Reality"))

    ———————

    twice는 인자를 두 번 실행하지 않아요. 실행 전에 프로그램 자체를 다음과 같이 다시 씁니다:

    (progn

    (print "Reality")

    (print "Reality"))

  3. probably_wrong

    나는 문신으로 하면 좋을 만한 작은 코드 조각들을 모아오고 있는데, 여기 있는 것들 중 몇 개는 컬렉션에 좋은 추가가 될 것 같아요.

    나는 CSS에서 "hotpink" 대신 "red"를 쓰는 쪽을 좀 더 지지하는데, 그건 그냥 내 생각이에요.

  4. bigbezet

    CSS 디버거 "꼼수"는 정말 나쁜 조언이에요. CSS border는 레이아웃에 영향을 주고 문제를 일으킬 수 있어요. 대신 outline을 사용하세요.

  5. tptacek

    흠. 정말 좋은 질문이네요.

    while(1) { fork(); }

    내 Usenet 시그니처에 있었으니 분명 나에게 뭔가 의미가 있었겠죠. 그리고:

    exit(main(kfp->kargc, argv, environ));

    FreeBSD crt0에서 나온 건데, main() 아래에 C 코드가 더 있다는 걸 깨달은 게 나에게는 꽤 큰 순간이었어요.

    그다음:

    statements: /*E*/ | statement statements

    Yacc가 나에게 와닿은 순간이었죠. 그 줄 자체도 심오했지만, 그 순간을 더 정확히 묘사하자면 파서 생성기로 하는 일이 결국 트리를 만드는 것뿐이고, 각 프로덕션의 부작용은 트리 노드를 반환하고 끼워 넣기 위한 것이라는 걸 깨달은 거예요.

    "해시 테이블이 가득 차면 크기를 두 배로 늘려라"를 표현할 수 있는 한 줄이 있다면, 여기에 한 자리를 차지할 만하겠죠.

    그리고 물론 (어셈블리라서 반칙이 가능하죠):

    jmp .call

    .pop: pop esi

    ...

    .call: call .pop

    "델타 오프셋" 트릭인데, x86 바이러스 문화에서 나온 걸로 알고 있지만 90년대 오버플로 익스플로잇에서 문자열과 기타 메모리 것들에 위치 독립적인 참조를 얻는 방법으로 보편적이었어요.

    확실히:

    void walk(node *n) { if(!n) return; walk(n->left); visit(n); walk(n->right); }

    write-select(2)를 한 줄에 넣을 방법을 찾아야겠어요. 그것도 나에게 또 다른 "오 shit" 순간이었거든요.

    비슷하게: Vern Paxson이 TCP 재조립을 그냥 파일을 열고 "seek"을 사용해 들어오는 세그먼트를 올바른 위치에 배치하는 방식으로 구현했다고 나에게 설명했을 때요. 아마 그걸 한 줄로 줄일 수 있을 것 같아요! 하지만 그러면 [...]

이 날의 다른 글

2026-09-27