Ten Lines Of Code That Changed My World
내 세상을 바꾼 열 줄의 코드
개발자가 직접 쓰거나 자주 복사하고, 웃거나 놀랐던 열 가지 코드와 짧은 스크립트를 돌아봅니다. Hello World를 처음 입력한 순간부터 6502 자기 수정 코드, CSS만으로 만든 시까지, 코드가 컴퓨터의 가능성을 보여준 경험을 엮습니다.
- 주제
AI 요약
개발자에게 오래 남는 코드는 반드시 크거나 복잡하지 않습니다. 처음 컴퓨터와 대화한 문장일 수도 있고, 반복해서 복사해 쓴 작은 도구일 수도 있습니다. 이 글은 작성자가 직접 만들었거나 자주 사용했거나 웃음과 놀라움을 준 열 가지 코드 조각을 개인적인 기억과 함께 소개합니다.
처음 마주한 코드와 작은 도구
‘Hello World’는 컴퓨터에 처음 명령을 내린 순간을 떠올리게 합니다. 컴퓨터는 입력한 대로 반응했고, 작성자는 그 경험에서 컴퓨터가 시키는 일을 해낸다는 사실을 실감했습니다. 브라우저 콘솔에서 실행하는 JavaScript 한 줄은 오래된 대중문화와 개발자 농담을 섞은 코드입니다. 작성자는 처음 실행했을 때 크게 웃었던 고전으로 기억합니다.
Windows에서 쓴 touch.bat은 빈 파일을 빠르게 만들기 위한 작은 배치 스크립트였습니다. Windows NT부터 Windows 7까지 Total Commander의 미니 셸에서 touch filename.txt를 입력해 새 파일을 만들었습니다. CSS 디버거는 스타일을 확인할 때 쓰는 도구로, 콘솔 출력이나 덤프 함수에 빗대면서 핫핑크 색을 특징으로 꼽습니다.
메모리와 기계 가까이에서
6502 어셈블리 예제는 프로그램이 실행되는 동안 자기 코드의 바이트를 덮어써 주소를 바꾸는 자기 수정 코드입니다. $2000에서 $20FF까지 반복하는 분기 뒤에 INC가 주소를 $2000에서 $2100으로 바꿉니다. 6502가 리틀엔디안 방식이라 주소의 높은 바이트를 갱신할 때 오프셋으로 +2와 +5를 사용합니다. 경고나 로그, 안전장치 없이 기계에 가까운 코드를 다루면 무엇이든 가능하다는 점을 보여준 경험입니다.
게임의 메모리에 특정 바이트를 기록하면 목숨이나 에너지, 돈을 무한대로 만드는 치트도 소개합니다. 메모리 위치를 알아내 PEEK와 POKE를 사용하면 게임 안의 값을 바꿀 수 있다는 사실이 작성자에게 강한 인상을 남겼습니다. 이 글은 이를 게임을 조작한 경험으로 회고합니다.
농담과 오래된 해킹 기억
‘속도 향상 루프’는 지루하고 목적 없는 프로젝트를 견뎌야 했던 사람에게 웃음을 주는 일화로 등장하지만, 본문에는 구체적인 코드나 동작 설명이 없습니다. ‘RTFM 또는 rm -rf /’는 2000년대 Linux IRC에서 문제 해결법이라며 퍼지던 위험한 농담입니다. 작성자는 이 명령이 모든 Linux 문제를 ‘해결’한다는 식으로 회상합니다.
1990년대 초 학교에 LAN이 생기자 작성자와 친구들은 세 글자 사용자 이름을 대상으로 Borland Pascal 계정 스캐너 SKAN2.PAS를 만들었습니다. 사용하지 않는 계정이 기본 비밀번호를 유지한다는 점을 이용했고, 버그가 많았지만 일부 계정에 접근하는 데 성공한 뒤 다른 일로 넘어갔다고 적습니다.
마지막으로 소개하는 CSS280은 CSS 280자만으로 만든 애니메이션 시입니다. JavaScript나 HTML 없이 빈 문서의 <style> 블록에서 실행하며, 앞선 140자 제한보다 길어진 분량으로 짧은 코드 작품을 만들었습니다. 작성자는 지속 시간을 1e+9로 설정한 점을 특히 마음에 들어 합니다. 무한보다 짧으면서 글자 수도 적다는 설명입니다.
Lobsters 반응
- @tombh — 제 것도 보태겠습니다:
OPEN "filename.txt" FOR BINARY AS #1 PRINT INT(LOF(1) / 5.1) CLOSE #1. 저는 80년대 초에 태어났습니다. 당시 프로그래머였던 아버지는 Computer Weekly 잡지를 읽으셨습니다. 잡지에서는 간단한 프로그램을 만드는 대회를 정기적으로 열었고, 속도와 복잡도, 정확도 같은 기준으로 평가했습니다. 아버지는 단어 세기 문제가 나왔던 때를 들려주셨습니다. 문자를 훑고 공백을 세는 기본 아이디어를 설명해 주셨지만, 문단 사이의 여러 공백이나 하이픈으로 이어진 단어는 어떻게 처리할까요? 생각보다 간단하지 않았습니다. 아버지는 우승작을 이해하도록 이끌고 계셨습니다. 반복문도 예외 처리도 없이 파일 크기를 영어 단어의 평균 길이인 5.1로 나누는 방법이었습니다. 파일이 너무 작지만 않으면 이런 간단한 요령이 더 ‘올바른’ 해법만큼 정확할 수도 있다는 점이 흥미로웠습니다. 그 이야기는 프로그래밍이 기계적인 작업만이 아니라 창의성과 재치, 놀라움의 영역이라는 생각을 제 안에 심었습니다. - @susam — 제 것은
FD 100이었습니다.- @gavinmorrow — 저도요! 만화책 시리즈 《Secret Coders》로 시작했습니다. 줄거리와 함께 Logo를 가르쳐 줬습니다. 정말 재미있었습니다.
- @tomsmeding — 저도요! 조금 늦은 2008년쯤 MSWLogo에서 시작했습니다. 중등학교에 다니는 동안 몇 년간 Logo를 만지다가 C와 JS로 천천히 넘어갔습니다.
- @isagalaev — CSS 디버깅에는
border보다outline을 늘 선호했습니다. 박스 크기를 바꾸지 않으니까요. - @donio — 기존 파일 내용을 조용히 지워 버리는 명령에
touch라는 이름을 붙이는 건 아주 나쁜 생각처럼 들립니다. 실제touch명령은 당연히 그렇게 하지 않습니다. - @tonyarkles —
POKE 36879, __ - @cole-k — APL 코드가 나올 줄 알았습니다...
- @vlnn —
LOAD ""
원문: Pixel Ambacht / 번역·요약: Trawling