1980년대 8비트 게임기가 실제로 무엇을 못 했는지 데이터시트 수준에서 확인합니다. 곱셈 명령이 없는 CPU, 16x16 픽셀 단위로만 색을 고를 수 있는 화면, 한 프레임의 7.6%뿐인 VRAM 접근 시간을 숫자로 재고, 그래서 개발자에게 남은 선택지가 압축·생성·전복 셋뿐이었음을 보입니다.
Posts for: #Programming
렉시오 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의 전제가 바이브 코딩과 에이전틱 루프에서 그대로 반복되고 있다는 이야기입니다.
Marp: Markdown으로 발표 슬라이드를 만들고 Git으로 관리하기
Markdown으로 슬라이드를 만드는 Marp을 소개합니다. 개발자 관점에서의 장단점, Mermaid 다이어그램과의 연계, CI 자동화를 통한 확장/유지보수 이점을 살펴보고, 실제 Markdown 문법 예제로 마무리합니다.
번역글: 어느 사랑 이야기
Pragmatic Programmers의 Dave Thomas가 쓴 뉴스레터 ‘A Love Story’의 한국어 번역. Usenet에서 Ruby를 처음 만난 순간부터 25년 후 RubyConf까지, 한 언어를 향한 오랜 사랑에 대한 이야기입니다.
HTTP REST(JSON) vs. gRPC(Protocol Buffers): 언제 무엇을 쓸까
백엔드 서버의 통신 규격으로 JSON 기반 HTTP REST 와 Protocol Buffers 기반 gRPC 의 장단점을 비교하고, 어떤 상황에서 무엇을 선택해야 하는지 실전 예시와 함께 정리합니다.
배우는 부분들로 이루어진 배우는 시스템 — Kent Beck × Jessica Kerr 대담 정리
Kent Beck 의 팟캐스트 Still Burning S1E07에서 Kent Beck 과 Jessica Kerr 가 나눈 대담을 정리했습니다. symmathesy(배우는 부분들로 이루어진 배우는 시스템)라는 렌즈로 AI 에이전트 시대의 소프트웨어 개발이 어떻게 달라지는지 살펴봅니다.
번역글: 아웃소싱, AI, 그리고 작은 희망
Pragmatic Programmers의 Dave Thomas가 쓴 뉴스레터 ‘Outsourcing, AI, and a Little Hope’의 한국어 번역. 아웃소싱 열풍과 25년 후의 AI 공황을 나란히 놓고, 개발자라는 역할이 사라지지 않고 변할 뿐이라는 이야기입니다.
2021년의 Go를 2026년의 Go로 Part 3: 동시성·런타임·운영 레시피
2021~22년 Go 코드의 동시성·런타임·툴체인·운영 관용구를 2026년 Go 1.26 기준으로 다시 쓰는 레시피. context 신규 API, sync.WaitGroup.Go, testing/synctest, 컨테이너 인식 GOMAXPROCS, PGO와 Green Tea GC, go.mod tool 디렉티브, os.Root를 Before/After로 정리합니다.
2021년의 Go를 2026년의 Go로 Part 2: 표준 라이브러리 레시피
2021~22년 Go 코드의 표준 라이브러리 관용구를 2026년 Go 1.26 기준으로 다시 쓰는 레시피. slices/maps/cmp, log/slog 구조적 로깅, errors.Join, math/rand/v2, encoding/json omitzero·v2, net/http 라우팅 강화를 Before/After로 정리합니다.
2021년의 Go를 2026년의 Go로 Part 1: 언어와 문법 레시피
202122년 Go(1.161.18) 관용구에 멈춰 있는 코드를 2026년 Go 1.26의 신규 언어 기능으로 다시 쓰는 레시피. 제네릭, min/max/clear, 루프 변수 시맨틱, range-over-int, 이터레이터, 제네릭 타입 별칭을 Before/After로 정리합니다.
개발자를 위한 Discord 완전정복 Part 2: 공짜로 풀어준 대인배 기능들
Webhook, 봇, 슬래시 커맨드, Gateway, OAuth2까지. Discord가 개발자에게 인증·비용 장벽 없이 풀어준 강력한 무료 기능들을 공식 문서 기반으로 정리합니다. 무엇이 진짜 공짜이고, 어디까지 쓸 수 있는지 실전 관점으로 살펴봅니다.
개발자를 위한 Discord 완전정복 Part 1: 탄생, 성장, 그리고 결정적 순간들
Discord는 어떤 불편함에서 태어나 어떻게 성장했고, 어떤 결정적 의사결정으로 지금의 모습이 되었나. 게이머의 음성 채팅에서 출발해 5백만 동시접속과 조 단위 메시지를 감당하는 인프라까지, 개발자 시선으로 정리한 Discord 입문 시리즈의 1편.