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 초보를 벗어나는 길일 수 있음.