Có thể sửa một bug lại sinh ra chục bug mới. Hoặc code bị vỡ theo cách lạ khiến bạn tự hỏi có thực sự hiểu nó không. Bạn nghĩ đã đến lúc deep dive (đào sâu).
Nhưng biết mình cần deep dive chỉ là bước 1. Làm thế nào thực sự học một chủ đề tận răng? Làm sao học đủ để nó trở thành bản năng?
Bắt đầu từ đâu?
Nhiều nơi có thể bắt đầu. Khi cần học sâu một chủ đề nhanh, sách là lựa chọn ưa thích nhất của tôi. Ví dụ: deep dive vào git, cuốn Pro Git chính là thứ bạn cần.
Sách tốt cho deep dive vì toàn diện: hầu hết chủ đề trung bình được cover tốt trong sách 200-400 trang. Kết thúc có thể chưa phải expert, nhưng hiểu khá tốt và có nền tảng vững chắc để đọc source code hoặc spec.
Nếu không muốn mua sách, hoặc không có sách về chủ đề đó, xem đâu khác?
Tài liệu chính thức (official documentation) là lựa chọn thay thế tốt. Nếu deep dive vào một phần của framework như Rails, hoặc web technology như OAuth, official docs đặc biệt phù hợp.
Với project/framework, tài liệu mang tên "The X Guide(s)" là điểm bắt đầu tốt nhất. Ví dụ: tôi thường khuyên Rails Guides cho Rails developer mới, Elixir Guides cho học Elixir.
Nhưng guide không hoàn toàn toàn diện. Dùng guide làm điểm nhảy để đọc reference documentation như RDoc.
Reference doc khó hiểu nếu không có context để đặt các method/class vào chỗ. Chỉ là rườm rà chi tiết không cấu trúc. Vì vậy reference tốt nhất khi đọc kèm guide/sách.
Ví dụ: không gì dạy ActiveModel tốt hơn đọc ActiveModel API docs. Nhưng ActiveModel guide giúp gom lại thành bức tranh toàn cảnh.
Tôi nói "gần như không gì", vì có một thứ toàn diện hơn đọc official docs: Đọc source code. Nhưng đọc source code không như đọc sách: cần kinh nghiệm, thực hành, hướng dẫn. Vì vậy dù chi tiết nhất, không phải nơi bắt đầu.
Sau khi deep dive qua tài liệu viết, bạn sẽ có câu hỏi mở. Hãy hỏi! Tác giả thư viện thường có mental model tốt nhất về nó, và có thể chia sẻ quy trình tư duy giúp bạn. Nhiều tác giả open source/framework có mặt trên Slack/IRC. Thông tin thường ở trang dự án.
Nếu không tiếp cận được người đó? Vẫn có thể hỏi. Hỏi đồng nghiệp, hoặc dev senior hơn. Tôi ngạc nhiên việc hỏi một câu hỏi chưa có đáp án cho bạn bè thường làm mọi thứ "click" vào chỗ.
Khi đã quyết định deep dive, có vài nơi bắt đầu. Thứ tự tôi thường theo đuổi:
- Một cuốn sách, hoặc official guide
- Official reference documentation (như RDoc) hoặc spec/RFC
- Source code
Và lấp đầy khoảng trống bằng cách hỏi hỏi. Không phải quy trình nhanh nhất, nhưng là sự kết hợp tốt nhất giữa breadth (rộng) và depth (sâu) tôi tìm thấy.
Bạn có thường xuyên deep dive không? Nếu có, tôi muốn biết tài nguyên nào bạn thấy hữu ích nhất. Comment cho tôi biết!