코딩 학습은 문법을 외우는 데서 끝나지 않는다. 작은 결과물을 만들고, 그 결과물이 어떻게 동작하는지 더 깊이 파고들 때 비로소 다음 질문이 생긴다. 문제는 그 출발점을 찾는 일이다.
practical-tutorials/project-based-learning은 처음부터 애플리케이션을 만들어가는 프로젝트형 튜토리얼을 프로그래밍 언어별로 모아둔 GitHub 저장소다. C#, C/C++, Go, JavaScript, Python, Rust 등을 비롯해 여러 언어의 목차가 있고, 하나의 기술만 설명하기보다 여러 기술과 언어를 함께 쓰는 튜토리얼도 포함한다.
C/C++ 항목만 펼쳐도 학습 선택지가 구체적이다. 인터프리터, 메모리 할당자, 셸, FUSE 파일시스템, 텍스트 에디터, Lisp, CHIP-8 에뮬레이터, 키-값 저장소, 데이터베이스, 가상 머신을 직접 만드는 자료가 이어진다. 운영체제와 커널, 부트로더, 컴파일러처럼 추상적으로 느껴지는 주제도 프로젝트 이름으로 바뀌어 있다.
구성 방식도 눈여겨볼 만하다. TCP/IP 스택 튜토리얼은 Ethernet과 ARP, IPv4와 ICMP, TCP 핸드셰이크, 데이터 흐름과 소켓 API, 재전송으로 나뉜다. C 컴파일러 튜토리얼은 정수와 렉싱, 단항·이항 연산, 지역 변수, 조건문, 루프, 함수 순서로 단계를 쌓는다. 한 번에 전체 시스템을 이해하려 하기보다, 실행되는 작은 부품을 만들면서 범위를 넓히는 흐름이다.
다만 이 저장소를 완성된 강의처럼 받아들이면 곤란하다. 큐레이션 목록이므로 링크마다 난이도와 최신성이 다를 수 있고, 일부 자료는 여러 기술을 요구한다. 저장소에는 link-rot 점검 GitHub Actions 워크플로가 보이지만, 그것이 모든 튜토리얼의 품질이나 유지 상태를 보증하는 것은 아니다.
그래도 출발점으로서는 실용적이다. 'Python을 더 공부해야지'라는 막연한 계획을 '작은 애플리케이션 하나를 처음부터 만들어보자'로 바꾸고, 시스템에 관심이 생기면 셸이나 데이터베이스, 네트워크 스택으로 내려갈 수 있다. 저장소를 포크한 뒤 목차에서 프로젝트 하나를 고르고, CONTRIBUTING.md의 기준을 확인해 직접 구현을 시작하면 된다. 배움의 다음 단계를 설명으로 찾기보다, 작동하는 코드로 만들어보게 하는 목록이다.