The Zig Journey
Zig를 배우는 여정
Zig 개발자 Andrew Kelley가 Zigtoberfest에서 제안한 학습 경로를 소개합니다. 시스템과 의존성을 깊이 이해하고, 빌드와 실행 동작을 직접 설계하며, 프로젝트를 완성하는 과정이 Zig뿐 아니라 소프트웨어 엔지니어로 성장하는 데 도움이 된다고 설명합니다.
- 주제
AI 요약
Zig Software Foundation의 Andrew Kelley는 뮌헨에서 열린 하루 일정의 Zigtoberfest에서 신규 사용자, 중급 사용자, 숙련 사용자를 위한 조언을 나눴습니다. 이 글은 그 발표에서 강조한 ‘Zig를 배우는 여정’을 세 단계로 정리합니다. Go, Rust, Modula-2, Mojo, LLM 등이 있는 상황에서 Zig가 어떤 의미를 갖는지도 함께 다룹니다.
프레임워크보다 대상 시스템을 이해하기
신규 사용자에게는 문제를 추상화된 라이브러리의 조합으로만 보지 말고, 대상 시스템이 제공하는 연산의 순서로 바라보라고 조언합니다. 높은 수준의 API는 편리하지만 기능이 제한되거나 불필요한 비용을 더할 수 있습니다. 시스템 프로그래밍은 특정 종류의 소프트웨어를 만드는 일이 아니라, 소프트웨어 개발 문제를 모델링하는 방식입니다. 시스템 프로그래머라면 자신이 다루는 시스템을 깊이 이해해야 합니다.
의존성이나 프레임워크를 쓰지 말라는 뜻은 아닙니다. 다만 그것들을 연결하는 방법만 알면, 핵심 기능을 직접 설계해야 하는 프로젝트에서 한계에 부딪힙니다. 간단한 애플리케이션은 기존 의존성을 엮는 방식으로 충분하지만, 새로운 사용자 경험을 만들려면 프로그램의 핵심 기능을 직접 통제해야 합니다.
프로그램 동작을 세밀하게 설계하기
중급 사용자에게는 기능 요구사항을 넘어 빌드와 실행 과정까지 설계하라고 제안합니다. 애플리케이션이 C/C++ 의존성을 쓴다면 사용자가 별도로 설치하게 할 수도 있고, Zig 빌드 스크립트가 의존성을 직접 처리하게 할 수도 있습니다. 별도 설치를 요구하면 apt, brew, winget 같은 패키지 관리자에 사실상 의존하게 됩니다. 패키지 관리자가 버전이나 기능 옵션을 바꾸면 애플리케이션이 깨질 위험도 생깁니다.
Zig를 사용하면 어느 시스템에서든 모든 시스템용 애플리케이션을 빌드하는 것을 목표로 삼을 수 있습니다. 저자는 zig build만 실행해 빌드하는 방식을 그 기준으로 설명합니다. 이를 돕기 위해 C/C++ 프로젝트의 빌드 스크립트를 모으고 공동 관리하는 조직 All Your Codebase도 만들었습니다. 효율성을 높이고, 불필요한 힙 할당을 없애며, 퍼징을 제대로 적용하는 일도 프로그램 동작을 세밀하게 설계하는 사례로 듭니다.
프로젝트를 끝까지 완성하기
숙련 사용자에게는 자신이 열정을 가진 프로젝트를 찾아 완성하라고 권합니다. 여기서 완성이란 정한 범위를 충분히 탐구하고, 사용자에게 제공하는 핵심 기능을 직접 책임지며, 유의미한 비기능 개선이 더 남지 않은 상태를 뜻합니다. 프로젝트 규모에 따라 수년이 걸릴 수 있지만, 저자는 이런 완성이 학습과 개발에 들인 노력에 의미를 부여한다고 설명합니다.
Zig가 제안하는 성장 경로
이 여정은 Zig에만 해당하지 않으며 다른 생태계에서도 따를 수 있습니다. 다만 Zig는 도구 체계와 커뮤니티 모두가 이런 성장을 돕는 방향을 지향한다고 저자는 말합니다. 아직 도구와 생태계가 충분히 성숙하지 않았지만, 초기 사용자가 되는 데 거부감이 없다면 소프트웨어 엔지니어로 성장하는 데 적합한 선택일 수 있다고 덧붙입니다.
저자는 Python으로 기능을 갖춘 정적 사이트 생성기를 만드는 일이 Zig 같은 저수준 언어보다 더 어려울 수 있다고 설명합니다. Markdown을 HTML로 바꾸는 표면적인 기능을 넘어 동시성 등을 세밀하게 조정하려면, Python의 추상화가 제약이 된다는 주장입니다. 고급 언어가 언제나 소프트웨어를 가장 쉽게 만드는 길이라고 믿으면 의존성에 지나치게 기대고, 기계가 실제로 할 수 있는 일과 멀어질 수 있다고 말합니다. 시스템을 깊이 이해하면 의존성을 더 잘 활용할 뿐 아니라 LLM이 내놓은 결과도 평가하기 쉬워집니다. 무엇이 가능한지 모르면 의존성이나 에이전트의 결과가 좋은지 판단하기 어렵기 때문입니다.
Zigtoberfest 발표에서 약 100명의 참석자에게 Zig 학습이 잘 진행된다고 느끼는지 물었을 때, 거의 모두가 자신 있게 손을 들었습니다. 저자는 이를 Zig Software Foundation과 핵심 팀, 행사 주최자 등이 함께한 노력의 결과로 봅니다. 글은 가까운 Zig 행사에 참여하고, 재단을 후원해 Zig를 서두르거나 타협하지 않고 완성하며 전 세계 커뮤니티를 키우는 데 힘을 보태 달라는 제안으로 끝납니다.
Lobsters 반응
- @rtfeldman — “Go, Rust, Modula-2, Mojo, LLM이 있는 상황에서 Zig가 무슨 의미냐”는 문장에서 Modula-2를 보고 웃음이 터졌습니다. 좋은 글이고 즐겁게 읽었습니다.
원문: Kristoff / 번역·요약: Trawling