Part 1부터 3까지의 설계안을 실제로 구현해 시뮬레이션으로 재봤더니, hard 봇이 easy 봇보다 평균 0.6601등 나빴습니다. 무엇을 어떻게 쟀는지, 세 개의 구조 결함이 무엇이었는지, 어떤 고급 기능이 살아남았는지, 그리고 정정 후의 정식 검증 수치를 정리합니다.
8비트의 벽을 넘은 게임들 Part 5: 제약이 사라진 시대에 남은 것
압축·생성·전복이라는 세 가지 돌파구가 40년 뒤에 어떻게 됐는지 정리합니다. 엘리트의 씨앗이 노 맨즈 스카이의 64비트로 이어진 계보, 제약이 사라지자 드러난 역설, 제약을 일부러 되살리는 데모신, 그리고 오늘의 개발에 그대로 쓸 수 있는 여섯 가지 원칙을 다룹니다.
8비트의 벽을 넘은 게임들 Part 4: 메탈기어, 못 그리는 것을 안 그려도 되게 만들다
1987년 MSX2 메탈기어가 하드웨어의 거부를 게임 문법으로 바꾼 과정을 주석 disassembly 로 확인합니다. SCREEN 5 비트맵과 가로 스크롤 부재, 48바이트짜리 방 165개, 스프라이트를 짝지어 색을 늘리고 순서를 섞어 깜빡이는 기법, 원뿔이 아닌 복도형 시야 판정, 그리고 방에 붙어 있는 경보 상태 머신을 다룹니다.
8비트의 벽을 넘은 게임들 Part 3: 엘리트, 우주를 6바이트에 담다
1984년 엘리트가 21,952바이트에 항성계 2,048개를 담은 방법을 주석 disassembly 를 근거로 확인합니다. 트리보나치 씨앗 트위스팅, 두 글자 토큰 이름 생성, 곱셈 명령 없이 도는 3D 회전(민스키 알고리듬), 그리고 타이머 인터럽트로 만든 화면 분할을 Go 재현 코드와 함께 다룹니다.
8비트의 벽을 넘은 게임들 Part 2: 슈퍼 마리오브라더스, 레벨을 그리지 않고 서술하다
슈퍼 마리오브라더스의 disassembly 를 직접 읽고 40KB 안에 32개 스테이지가 들어간 방법을 확인합니다. 레벨 오브젝트 2바이트 인코딩, 월드 1-1 의 실제 바이트 해독, 구름과 수풀이 같은 타일이라는 사실의 바이트 단위 증명, 8프레임 컬럼 파이프라인, 그리고 4.4 및 8.8 고정소수점 물리를 다룹니다.
8비트의 벽을 넘은 게임들 Part 1: 그 기계들은 무엇을 못 했는가
1980년대 8비트 게임기가 실제로 무엇을 못 했는지 데이터시트 수준에서 확인합니다. 곱셈 명령이 없는 CPU, 16x16 픽셀 단위로만 색을 고를 수 있는 화면, 한 프레임의 7.6%뿐인 VRAM 접근 시간을 숫자로 재고, 그래서 개발자에게 남은 선택지가 압축·생성·전복 셋뿐이었음을 보입니다.
렉시오 CPU 플레이어 만들기 Part 4: 수 평가와 정산 기대값
렉시오 hard 봇의 목적 함수를 정산 구조에서 직접 유도합니다. 수 평가 함수의 항을 분해하고, 낼 수 있어도 참아야 하는 여섯 가지 상황을 정리하며, 이길 수 없다고 판단했을 때 봇이 손실 최소화 모드로 전환하는 기준을 다룹니다.
렉시오 CPU 플레이어 만들기 Part 3: 손패 분해 플랜
렉시오 hard 봇이 자기 손패를 몇 번에 털 수 있는지 정확히 계산합니다. 유효 조합으로의 최소 분할을 비트마스크 DP 로 풀고, 탐욕법이 왜 다섯 번에 한 번꼴로 최적을 놓치는지, 그리고 DP 한 번이 왜 모든 후보의 평가까지 공짜로 끝내 주는지 다룹니다.
렉시오 CPU 플레이어 만들기 Part 2: 60비트 카운팅과 확실승수 판정
렉시오 hard 봇이 무엇을 아는지 다룹니다. 미공개 타일을 uint64 하나로 정확히 복원하고, 이 수를 아무도 못 받는다는 판정을 확률이 필요 없는 구조적 영역과 확률이 필요한 영역으로 나누며, 패스 로그를 비트마스크 제약으로 환산합니다.
렉시오 CPU 플레이어 만들기 Part 1: 타일 하나를 정수 하나로
렉시오(Lexio)를 디지털 게임으로 만들 때 CPU 플레이어를 어떻게 설계할지 다룹니다. Part 1 에서는 타일 60장을 정수 하나로 압축하는 표현을 잡고, 공식 룰의 비교 규칙을 정수 키 하나로 환원한 뒤, 결정적 규칙만으로 동작하는 easy 봇을 Go 코드로 구현합니다.
달무티 CPU 플레이어 만들기 Part 3: 수 평가와 전략적 패스
달무티 hard 봇이 실제로 어떤 수를 고르는지 다룹니다. 리드권 확보 확률과 가치를 분리한 수 평가 함수, 낼 수 있어도 참는 전략적 패스, 차단 의무의 정확한 조건, 세금과 혁명의 기대값 계산, 그리고 봇이 정말 세졌는지 재는 검증 방법을 Go 코드로 정리합니다.
달무티 CPU 플레이어 만들기 Part 2: hard 봇의 정보 모델과 확실승수 판정
달무티 hard 봇이 상대 손패를 훔쳐보지 않고 무엇을 알아낼 수 있는지 다룹니다. 오차 0의 카드 카운팅, 패스를 확정 정보가 아닌 확률적 증거로 다루는 법, 광대 2장이 만드는 구조적 확실승수 판정, 그리고 손패의 최소 제출 횟수 플랜을 재현 가능한 몬테카를로 수치와 함께 정리합니다.
달무티 CPU 플레이어 만들기 Part 1: 규칙 기반 easy 봇
달무티(The Great Dalmuti)를 디지털 게임으로 만들 때 CPU 플레이어를 어떻게 설계할지 다룹니다. Part 1 에서는 공정성 경계와 정책 인터페이스를 잡고, 결정적 규칙만으로 동작하는 easy 난이도 봇의 제출·패스·혁명·세금 정책을 Go 코드로 구현합니다.
AI 허니문이 끝난 자리: 테크 인력 6,000명을 반으로 가른 것과, 개인이 바꿀 수 있는 것
테크 업계 종사자 약 6,000명 대상 AI 인식 조사가 보여준 균열을 정리하고, METR 무작위 대조 실험·MIT 인지부채 연구·DORA 2025·HBR workslop 조사로 교차검증한 뒤, 개인이 실제로 바꿀 수 있는 여섯 가지를 정리합니다.
번역글: Big Design Up Front — 여전히 나쁜 생각입니다
Pragmatic Programmers 뉴스레터 “Big Design Up Front: Still a Bad Idea"의 한국어 번역. 1990년대 소프트웨어 위기를 불러왔던 BDUF의 전제가 바이브 코딩과 에이전틱 루프에서 그대로 반복되고 있다는 이야기입니다.
에어컨이 있는 집에 제습기가 꼭 필요할까: 서울 13개월 온습도 데이터로 따져보기
2025년 7월부터 2026년 7월까지 서울의 시간별 온습도 데이터 9,408시간을 분석해, 에어컨만으로 습도가 잡히는지 제습기가 정말 필요한지를 이슬점·절대습도·전력 소비 관점에서 팩트 위주로 따져봤습니다.
대부호부터 렉시오까지: 클라이밍 카드게임의 세계와 전략
손패를 먼저 털어내는 자가 이기는 클라이밍 카드게임의 공통 규칙과 계보, 그리고 대부호·달무티·렉시오를 관통하는 전략과 게임별 심화 전략을 정리합니다.
Marp: Markdown으로 발표 슬라이드를 만들고 Git으로 관리하기
Markdown으로 슬라이드를 만드는 Marp을 소개합니다. 개발자 관점에서의 장단점, Mermaid 다이어그램과의 연계, CI 자동화를 통한 확장/유지보수 이점을 살펴보고, 실제 Markdown 문법 예제로 마무리합니다.
번역글: 인간의 반격 — 신진서, 기신전에서 카타고를 2대 1로 꺾다
세계 랭킹 1위 신진서 9단이 최강 오픈소스 바둑 AI 카타고와 벌인 2점 접바둑 3번기에서 시리즈 2대 1 승리를 거뒀습니다. StoneBase 블로그 원문 번역과 함께, 신진서 기사 소개 및 2016년 이세돌–알파고 대국과의 비교를 덧붙였습니다.
지구 가열, 지금 얼마나 심각한가 Part 4: 폭염·홍수·가뭄·폭설은 왜 이렇게 심해졌나
폭염, 집중호우, 극심한 가뭄, 폭설이 왜 예전보다 훨씬 잦고 강해졌는지 물리 메커니즘과 귀인 연구로 설명하고, 앞으로 5년에서 10년 사이 얼마나 더 나빠질지 학계와 국제기구의 예측을 정리합니다.