TL;DR
- Rust 초보를 벗어나려면 고급 문법 연습보다 Rust가 문제의 중심이 아닌 관심 분야의 과제를 맡아 설계 경험을 쌓아야 함.
- The Book, Rustlings, Advent of Code, Exercism.org는 문법과 개념, 숙련도를 높이지만 여러 하위 시스템에 걸친 소유권 모델링이나 장기적인 코드베이스 관리를 충분히 다루지 못함.
Rust for Rustaceans는 패턴과 용어를 알려주지만, 패턴을 이해하는 것과 문제 해결에 자연스럽게 적용하는 감각인 Fingerspitzengefühl을 기르는 것은 다름.- 이후의 난제는 컴파일러 오류보다 소켓 배치, 스레드 간 종료 신호 전달,
Arc<AtomicBool>사용 여부 같은 설계 선택에 집중됨. - AI는 구현을 대신하게 하기보다 먼저 직접 접근법을 정하고 구현한 뒤, 설계의 약점과 대안을 점검하는 멘토로 활용하는 편이 학습에 유용함.
연습 문제와 책만으로는 부족한 이유
- The Book을 읽고 구조체, 트레이트, 제네릭, 반복자, 라이프타임을 작성할 수 있으며, Rustlings로 문법과 개념을 익히고 Advent of Code와 Exercism.org로 숙련도를 높일 수 있음.
- 하지만 연습 문제는 대체로 범위가 제한적이며, 이러한 자료만으로 여러 하위 시스템에 걸친 소유권을 모델링하거나 장기간 변화하는 코드베이스를 관리해야 하는 경우는 드묾.
- 다음 단계로 책을 읽는 것은 자연스럽고,
Rust for Rustaceans는 초급 자료에서 다루지 않는 용어와 패턴을 제공함. - 다만 패턴을 알아보는 것과 문제를 해결할 때 자연스럽게 그 패턴을 선택하는 것은 별개의 일이며, 무엇을 언제 어떻게 해야 할지 감을 잡는 Fingerspitzengefühl을 길러야 함.
학습 초점을 도메인 문제로 옮기기
- 직장에서는 주로 C# 백엔드 코드를 작성하며, 업무 외 시간에는 지난 3년 동안 비교적 꾸준히 Rust를 사용함. 학교 과제는 대부분 C와 C++로 진행함.
- 아직 프로덕션 환경 경험은 없지만, 점점 더 어려운 Rust 연습 문제를 찾는 것이 올바른 방향은 아닐 수 있다고 판단함.
- Rust를 더 잘하고 싶다면 Rust 자체가 문제의 중심이 아닌 과제를 찾아야 하므로, 관심 있거나 일하고 싶은 분야의 도전에 참여하기 시작함.
- 그 과정에서 사이버 물리 시스템과 하드웨어에 가까운 분야에 점점 더 관심을 두게 됨.
문법 문제에서 설계 문제로
- 초보 단계의 Rust 문제는 주로 컴파일러 문제지만, 이후에 마주치는 문제는 설계 문제임.
- 컴파일러는 잘못된 빌림을 알려주지만, 소켓을
main에 둘지,Producer안에 둘지, 다른 추상화 뒤에 둘지는 결정해 주지 않음. - 스레드 간 종료를 조정할 때
Arc<AtomicBool>이 적절한지도 알려주지 않으며, 작성한 코드가 유효한 Rust인지 판단할 뿐임. - 이러한 관점의 전환 이후 문법보다 소켓, 스코프드 스레드, 원자성, 동기화, 설계 패턴을 더 많이 학습하게 됨.
설계 결정을 배우는 AI 활용법
- AI는 코드를 완성하는 데 유용하지만, Fingerspitzengefühl을 기르는 것이 목표라면 활용 방식을 의식적으로 정해야 함.
- 학습 중에는 설계 결정을 AI에 맡기지 않는 편이 좋음. 소켓을 호출자가 만들지
Producer가 만들지, 스레드가 공유 상태나 채널 중 무엇으로 통신할지, 타입을Arc로 감쌀 필요가 있는지 직접 판단해야 하기 때문임. - AI가 구현을 생성하면 이런 질문을 충분히 고민하기 전에 사라지게 만들 수 있음.
- 먼저 직접 접근법을 고안하고 구현한 뒤 AI에게 검토를 요청하는 방식이 더 유용함.
- 무엇이 잘못될 수 있는지 질문함.
- 소유권 모델이 타당한지 점검함.
- 경험 많은 Rust 개발자가 무엇을 다르게 할지 알아봄.
- AI를 학습 속도와 효율을 높이는 데 활용하되, 배우려는 결정을 직접 내리는 주체는 유지함.
관심 분야에서 Rust로 만들기
- 네트워킹, 임베디드 시스템, 동시성을 배우거나 부트로더를 만들다가 자신에게 맞지 않는다는 사실을 깨닫는 등, 관심 있는 분야를 선택해 Rust로 탐색함.
- 관심 분야의 과제를 수행하다 보면 소유권 문제, API 설계 선택, 동기화 문제, 추상화에 맞닥뜨리게 됨.
- 이러한 문제는 연습 문제만으로는 같은 효과로 만들어내기 어려우며, 이를 경험하는 과정이 Rust 초보를 벗어나는 길일 수 있음.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요