Hướng dẫn tự học Rust
1. Cơ bản về Rust
1.1. Tài liệu lý thuyết
- The Rust Programming Language Book: Cuốn sách chính thức về Rust, lý tưởng cho người mới bắt đầu. Đọc kỹ trong tuần đầu tiên, chú ý các khái niệm về ownership, borrowing, và lifetimes. Quay lại các chương chưa rõ khi cần.
- Rust by Example: Bộ sưu tập các ví dụ thực tế về cú pháp và cách sử dụng Rust. Học song song với Rust Book để củng cố kiến thức.
- Rust Cheat Sheet: Tài liệu tham khảo nhanh về cú pháp và các mẫu code phổ biến. Sử dụng khi cần tra cứu nhanh trong quá trình học hoặc lập trình.
1.2. Bài tập thực hành
- Rustlings: Bộ bài tập tương tác giúp làm quen với cú pháp và các khái niệm cơ bản của Rust. Hoàn thành toàn bộ (hoặc ít nhất cố gắng làm hết, kể cả các bài khó).
- Rust by Practice: Các bài tập thực hành có giải thích chi tiết, phù hợp để củng cố kiến thức cơ bản.
Lộ trình đề xuất: Bắt đầu với Rust Book và Rust by Example để nắm lý thuyết, sau đó làm bài tập trong Rustlings và Rust by Practice để áp dụng kiến thức.
2. Các dự án thực hành cơ bản
Thực hiện các dự án sau để áp dụng kiến thức cơ bản và hiểu cách tổ chức code trong Rust.
- PNGme: Dự án trung cấp xây dựng trình mã hóa/giải mã file PNG. Giúp bạn làm quen với xử lý file, cấu trúc dữ liệu, và quản lý lỗi.
- Triangle From Scratch: Dự án vẽ hình tam giác sử dụng Win32 API mà không cần thư viện bên ngoài. Tốt để hiểu về lập trình hệ thống cấp thấp với Rust.
- Build Your Own JIRA with Rust: Xây dựng một phiên bản đơn giản của JIRA, tập trung vào phát triển theo hướng kiểm thử (TDD) và kiến trúc phần mềm.
Lộ trình đề xuất: Hoàn thành ít nhất một dự án sau khi nắm vững cơ bản. PNGme phù hợp cho người muốn học về xử lý file, trong khi Triangle From Scratch dành cho những ai quan tâm đến lập trình hệ thống.
3. Các chủ đề trung cấp
3.1. Ownership và Lifetimes
- Common Rust Lifetime Misconceptions: Bài viết giải thích chi tiết các hiểu lầm phổ biến về lifetimes trong Rust. Đọc sau khi đã quen với ownership.
- Rustonomicon: Ownership: Tài liệu nâng cao về ownership và borrowing, phù hợp để hiểu sâu hơn về cách Rust quản lý bộ nhớ.
- Rustowl: Công cụ trực quan hóa ownership và lifetimes, giúp hình dung các khái niệm trừu tượng.
Lộ trình đề xuất: Đọc các tài liệu trên sau khi hoàn thành Rust Book. Sử dụng Rustowl để kiểm tra hiểu biết của bạn về lifetimes.
3.2. Xử lý lỗi
- Parse, Don’t Validate: Bài viết về cách thiết kế mã Rust để giảm thiểu kiểm tra thủ công và tận dụng hệ thống kiểu.
- Modular Errors: Hướng dẫn xây dựng hệ thống lỗi có tổ chức, dễ bảo trì trong Rust.
- Railway Oriented Programming: Giới thiệu cách xử lý lỗi theo phong cách lập trình hướng đường ray, có thể áp dụng trong Rust.
Lộ trình đề xuất: Đọc các bài viết trên và thử áp dụng trong các dự án nhỏ để hiểu cách quản lý lỗi hiệu quả.
3.3. Design Patterns
- Rust Design Patterns: Danh mục các mẫu thiết kế phổ biến trong Rust, giúp viết code dễ bảo trì và tái sử dụng.
- Effective Rust: Hướng dẫn viết code Rust theo cách tối ưu, tập trung vào tính hiệu quả và idiomatic.
Lộ trình đề xuất: Đọc các tài liệu này sau khi hoàn thành ít nhất một dự án cơ bản. Áp dụng các mẫu thiết kế vào dự án tiếp theo để cải thiện chất lượng code.
4. Các chủ đề nâng cao
4.1. Lập trình bất đồng bộ (Async)
- Rust Async Book: Tài liệu chính thức về lập trình bất đồng bộ trong Rust. Đọc để hiểu cơ chế async/await.
- Tokio Tutorial: Hướng dẫn sử dụng Tokio, một runtime phổ biến cho lập trình async trong Rust. Học sau khi nắm vững Async Book.
Lộ trình đề xuất: Chỉ bắt đầu học async sau khi đã thành thạo các khái niệm cơ bản và lifetimes. Thử viết một ứng dụng mạng đơn giản với Tokio.
4.2. Lập trình hệ thống
- Writing a File System from Scratch in Rust: Hướng dẫn xây dựng hệ thống file đơn giản, tập trung vào lập trình cấp thấp.
- Writing an OS in Rust: Hướng dẫn chi tiết xây dựng một hệ điều hành bằng Rust. Phù hợp cho người muốn học sâu về hệ thống.
- The Theseus OS Book: Tài liệu về Theseus, một hệ điều hành thử nghiệm viết bằng Rust.
- intermezzOS: Dự án xây dựng hệ điều hành đơn giản, tập trung vào giáo dục.
Lộ trình đề xuất: Chọn một trong các dự án trên để thực hành sau khi đã quen với lập trình hệ thống cơ bản (như Triangle From Scratch).
4.3. Cơ sở dữ liệu và hệ thống phân tán
- Async Raft: Tài liệu về giao thức Raft trong Rust, tập trung vào hệ thống phân tán bất đồng bộ.
- TiKV Training Program: Khóa học về xây dựng hệ thống phân tán, bao gồm Raft và giao thức giao dịch Percolator.
- CS186: Introduction to Database Systems: Khóa học về cơ sở dữ liệu, cần thiết để hiểu cách tích hợp Rust với cơ sở dữ liệu.
Lộ trình đề xuất: Học sau khi đã nắm vững async và lập trình hệ thống. Thử áp dụng kiến thức vào một dự án như TiKV.
4.4. Biên dịch và trình thông dịch
- Crafting Interpreters: Sách hướng dẫn xây dựng trình thông dịch. Kết hợp với Rust Ports of Crafting Interpreters để học cách triển khai bằng Rust.
- Writing Interpreters in Rust: A Guide: Hướng dẫn chi tiết về xây dựng trình thông dịch trong Rust.
- Make a Lisp: Dự án xây dựng trình thông dịch Lisp bằng Rust.
- Brainfuck Interpreter in Rust: Dự án đơn giản để làm quen với xây dựng trình thông dịch.
Lộ trình đề xuất: Bắt đầu với Crafting Interpreters và thử triển khai một trình thông dịch nhỏ như Brainfuck hoặc Lisp.
5. Kiến thức nền tảng về Khoa học Máy tính
Để sử dụng Rust hiệu quả trong các dự án phức tạp, bạn cần nắm vững các khái niệm về khoa học máy tính.
Toán rời rạc
- Discrete Mathematics: An Open Introduction: Sách giáo khoa miễn phí về toán rời rạc.
- Trefor Bazett’s Discrete Math Playlist: Video bài giảng dễ hiểu về toán rời rạc.
- Discrete Math Study Guide: Tài liệu tóm tắt ngắn gọn các khái niệm quan trọng.
Lộ trình đề xuất: Học song song với các dự án Rust để hiểu các khái niệm như cấu trúc dữ liệu và thuật toán.
Thuật toán
- Algorithm Cookbook in Rust: Bộ sưu tập các thuật toán được triển khai bằng Rust.
- Too Many Linked Lists: Hướng dẫn xây dựng danh sách liên kết trong Rust, giúp hiểu sâu về quản lý bộ nhớ.
- Rust Gym: Kho lưu trữ code giải các bài tập thuật toán từ LeetCode, Advent of Code, v.v.
- Project Euler Rust: Các bài toán từ Project Euler được giải bằng Rust.
Lộ trình đề xuất: Học lý thuyết thuật toán trước, sau đó giải bài tập trên Rust Gym hoặc Project Euler.
Mạng máy tính
- Computer Networking: A Top-Down Approach: Sách giáo khoa về mạng máy tính.
- Beej’s Guide to Network Programming: Hướng dẫn thực hành về lập trình mạng.
- Building a DNS Server in Rust: Dự án xây dựng máy chủ DNS bằng Rust.
Lộ trình đề xuất: Đọc sách và làm dự án DNS để áp dụng kiến thức mạng.
6. Tài nguyên tham khảo
6.1. Tài liệu chính thức
- Rust Official Learn Page: Tổng hợp tài liệu chính thức, bao gồm Rust Book, Cargo Book, và Rustdoc.
- Rust Standard Library: Tài liệu tham khảo về thư viện chuẩn của Rust.
- Rust API Guidelines: Hướng dẫn viết API idiomatic trong Rust.
6.2. Công cụ và tài nguyên bổ trợ
- Awesome Rust: Danh sách các crate và công cụ hữu ích cho lập trình Rust.
- The Little Book of Rust Macros: Hướng dẫn chi tiết về macro trong Rust.
- Rust FFI Omnibus: Hướng dẫn tích hợp Rust với các ngôn ngữ khác.
- Rust Quiz: Các câu hỏi kiểm tra kiến thức Rust, từ cơ bản đến nâng cao.
6.3. Blog và cộng đồng
- Read Rust: Bộ sưu tập bài viết và tài nguyên về Rust.
- This Week in Rust: Bản tin hàng tuần về cập nhật Rust.
- Possible Rust: Blog dành cho lập trình viên Rust trung cấp, tập trung vào các mẫu thiết kế thực tế.
7. Quản lý dự án và phát triển mã nguồn mở
- Guide on Writing Documentation for a Rust Crate: Hướng dẫn viết tài liệu cho crate Rust.
- TP 101: Introduction to Open Source Software: Giới thiệu về phát triển mã nguồn mở.
- TP 102: How to Use Git and GitHub: Hướng dẫn sử dụng Git và GitHub cho dự án Rust.
- Keeping README Code Examples Up-to-Date: Mẹo giữ tài liệu dự án luôn cập nhật.
Lộ trình đề xuất: Học các kỹ năng này khi bắt đầu đóng góp vào các dự án mã nguồn mở hoặc phát triển crate của riêng bạn.