Thoát vòng xem hướng dẫn
Vì sao xem và làm theo video hướng dẫn mãi vẫn chưa tự viết được chương trình, và một lộ trình năm bậc để giảm dần sự dẫn dắt, có ví dụ Java.
Cập nhật 01/10/2026. Tổng hợp từ nghiên cứu về học tập. Mức bằng chứng ghi kèm từng lời khuyên — thử và chỉnh theo nhịp của bạn.
Nội dung bài · 8 mục
Nhiều người học lập trình đã xem hết một khoá video, gõ theo được mọi dòng, nhưng mở một dự án trống thì không biết bắt đầu từ đâu. Cách xử lý quen thuộc là tìm thêm một khoá khác, và vòng lặp cứ thế tiếp diễn. Người học gọi đây là "tutorial hell". Bài Đọc code trước, viết code sau đã nói về ví dụ mẫu, PRIMM và tự giải thích; bài này nói về bước tiếp theo: làm sao bỏ dần hướng dẫn.
Vì sao làm theo hướng dẫn cho cảm giác đã học
Khi xem một người giải thích trôi chảy rồi gõ lại từng dòng họ viết, mọi thứ đều hợp lý và không có chỗ nào bị kẹt. Cảm giác "dễ hiểu" này dễ bị nhầm thành "mình làm được".
Bjork, Dunlosky và Kornell (2013) tổng quan nghiên cứu về việc người học tự quản lý việc học. Họ kết luận rằng con người thường hình dung sai về cách mình học và nhớ, nên dễ đánh giá sai và sắp xếp sai việc học. Một lý do họ phân tích: người học đánh giá mức đã học dựa vào kết quả thấy ngay lúc học và vào cảm giác trôi chảy (fluency) khi xử lý thông tin. Khi gõ theo video, kết quả lúc đó luôn tốt vì đáp án nằm sẵn trên màn hình. Cảm giác trôi chảy đó không cho biết bạn có tự làm lại được khi tắt video hay không.
Mức bằng chứng: mạnh — bài tổng quan dựa trên nhiều thí nghiệm về trí nhớ và tự đánh giá của người học. Không có thí nghiệm riêng về video lập trình; áp dụng vào lập trình là suy ra từ nguyên tắc chung.
Cách kiểm tra: tắt video, đóng code mẫu, thử viết lại. Chỗ bị kẹt là chỗ chưa thật sự học.
Rút dần sự dẫn dắt, không bỏ đột ngột
Lỗi thường gặp là nhảy thẳng từ "gõ theo video" sang "tự làm cả ứng dụng". Khoảng cách quá lớn, người học bị kẹt rồi quay lại xem video.
Renkl và Atkinson (2003) lập luận rằng lúc mới học, học từ lời giải mẫu hiệu quả hơn tự giải bài, nhưng về sau thì ngược lại. Họ đề xuất cách giảm dần (fading): ví dụ ban đầu có đủ các bước, rồi bỏ trống dần từng bước để người học tự điền, cho tới khi tự giải toàn bộ. Đây là bài lý thuyết kèm tổng hợp bằng chứng.
Atkinson, Renkl và Merrill (2003) ghi nhận rằng giảm dần các bước giải giúp làm tốt hơn bài tương tự (near transfer) so với học theo cặp "một ví dụ, một bài tập", nhưng không ổn định với bài khác dạng (far transfer). Khi thêm câu hỏi yêu cầu chỉ ra nguyên lý sau mỗi bước, hai thí nghiệm cho hiệu quả từ vừa tới lớn trên cả hai loại bài, không tốn thêm thời gian học.
Mức bằng chứng: vừa — vài thí nghiệm có đối chứng về học qua lời giải mẫu, không phải lập trình.
Thử tự giải trước khi xem lời giải
Một hướng nghiên cứu khác đi ngược thói quen "xem trước, làm sau". Kapur (2008) cho học sinh lớp 11 học động học Newton: một nhóm giải bài phức tạp, không có cấu trúc rõ trước, nhóm kia chỉ giải bài có cấu trúc rõ. Nhóm đầu ban đầu thất bại, nhưng sau đó làm bài kiểm tra cá nhân tốt hơn ở cả bài tương tự lẫn bài khác dạng. Kapur gọi đây là thất bại có ích (productive failure).
Sinha và Kapur (2021) phân tích gộp 53 nghiên cứu với 166 phép so sánh giữa "giải bài trước rồi mới học" và "học trước rồi mới giải bài". Kết quả nghiêng về cách giải bài trước, mức vừa (Hedges' g = 0,36). Nhưng với học sinh nhỏ tuổi (lớp 2 đến lớp 5) và với các kỹ năng chung không gắn với môn học cụ thể, xu hướng lại nghiêng về cách học trước.
Trong phân tích gộp của Sinha và Kapur, phần tự thử luôn được nối tiếp bằng phần giảng giải. Với người chưa biết cú pháp Java, ngồi mò quá lâu dễ thành mất thời gian.
Mức bằng chứng: còn tranh luận — phân tích gộp cho kết quả tích cực, nhưng phần lớn nghiên cứu ở toán và khoa học tự nhiên trong trường phổ thông, hiệu quả đổi theo lứa tuổi và loại kiến thức, và tranh luận giữa dạy có hướng dẫn và học qua khám phá vẫn chưa ngã ngũ.
Cách áp dụng: trước phần lời giải của một bài hướng dẫn, dừng video và tự thử 10–15 phút. Sai cũng được. Khi xem lời giải, bạn sẽ chú ý đúng chỗ mình bị kẹt.
Lộ trình năm bậc
Đây là cách sắp xếp các ý trên thành từng bậc, chưa có nghiên cứu nào thử nghiệm đúng lộ trình này.
Bậc 1: Tự gõ code, không dán. Mỗi lỗi gõ là một lần đọc lại code kỹ hơn.
Bậc 2: Đổi yêu cầu một chút. Khi code chạy được, tự đặt một yêu cầu gần giống rồi sửa code cho đúng.
Bậc 3: Viết lại từ trí nhớ. Một hai ngày sau, mở file trống và viết lại. Bị kẹt thì chỉ xem đúng chỗ đó, rồi đóng lại và viết tiếp.
Bậc 4: Dự án nhỏ có bản mô tả viết trước. Viết 5–10 dòng: chương trình nhận gì, in ra gì, có chức năng nào. Bản mô tả cho biết khi nào xong.
Bậc 5: Đọc tài liệu thay vì tìm video. Cần một hàm mới thì tra Javadoc trước. Tài liệu không dắt tay từng bước, nên buộc bạn tự ghép các phần lại.
Mức bằng chứng: vừa — từng bậc dựa trên các nguyên tắc ở trên (giảm dần dẫn dắt, tự nhớ lại, thử trước khi xem lời giải), nhưng cả lộ trình chưa được kiểm chứng.
Ví dụ: đổi yêu cầu của một bài hướng dẫn
Bài hướng dẫn dạy hàm filterByLength, giữ lại các từ dài hơn một số ký tự. Yêu cầu mới tự đặt: lọc các từ bắt đầu bằng một tiền tố, không phân biệt chữ hoa chữ thường.
import java.util.List;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
List<String> words = List.of("Spring", "java", "Stream", "list", "SQL", "string");
// Hàm gốc trong hướng dẫn
System.out.println(filterByLength(words, 5));
// Phiên bản tự sửa
System.out.println(filterByPrefix(words, "s"));
System.out.println(filterByPrefix(words, "ST"));
}
// Hàm gốc: giữ lại các từ dài hơn minLength ký tự
static List<String> filterByLength(List<String> words, int minLength) {
return words.stream()
.filter(w -> w.length() > minLength)
.toList();
}
// Yêu cầu mới: lọc theo tiền tố, không phân biệt hoa thường
static List<String> filterByPrefix(List<String> words, String prefix) {
String p = prefix.toLowerCase(Locale.ROOT);
return words.stream()
.filter(w -> w.toLowerCase(Locale.ROOT).startsWith(p))
.toList();
}
}
Chạy bằng java Main.java (cần JDK 16 trở lên vì Stream.toList() có từ Java 16; nên dùng bản LTS như 17, 21 hoặc 25), kết quả là:
[Spring, Stream, string]
[Spring, Stream, SQL, string]
[Stream, string]
Những điểm phải tự nghĩ ra, không có trong bài gốc:
- Phải đổi cả hai phía về chữ thường. Nếu chỉ đổi
prefixthì"Spring","Stream"và"SQL"đều bị bỏ sót, kết quả chỉ còn[string]. prefixđược đổi một lần bên ngoàifilter, không đổi lại cho mỗi từ.Locale.ROOTgiữ kết quả không đổi theo cài đặt ngôn ngữ của máy.
Ba ý tưởng dự án nhỏ
Cả ba chạy trên console và chỉ cần kiến thức Java Core.
- Quản lý chi tiêu. Nhập khoản chi (ngày, loại như tiền nhà, ăn uống, số tiền theo won), in tổng theo loại và theo tháng. Mở rộng: lưu ra file CSV.
- Sổ từ vựng tiếng Hàn. Lưu cặp từ và nghĩa, ví dụ 출입국 (xuất nhập cảnh), 계약서 (hợp đồng). Có chức năng thêm từ, tìm từ, tự kiểm tra ngẫu nhiên. Mở rộng: hỏi lại nhiều hơn những từ hay sai.
- Đếm giờ làm thêm theo tuần. Nhập giờ bắt đầu và kết thúc mỗi ca, tính tổng giờ mỗi tuần và tiền theo mức lương giờ tự nhập. Mở rộng: dùng
LocalTimevàDuration, xử lý ca qua nửa đêm.
Làm phiên bản nhỏ nhất chạy được trước, rồi mới thêm tính năng.
Áp dụng ngay
Trên VieTopik
- Khoá Java: Java Core, OOP và thiết kế, cấu trúc dữ liệu và giải thuật, SQL với Oracle, kiến trúc và chất lượng code, Spring Boot Web API. Mỗi bài có giải thích và ví dụ code, dùng cho bậc 2 và 3: đổi yêu cầu của ví dụ, rồi viết lại từ trí nhớ.
- Java Core: nền cho cả ba dự án ở trên. Nhiều bài có câu hỏi cuối bài, giúp phân biệt hiểu thật với chỉ thấy quen.
- Khoá C# .NET: áp dụng cùng lộ trình nếu bạn học C#.
Nguồn
- Bjork, Dunlosky & Kornell (2013). Self-regulated learning: Beliefs, techniques, and illusions. Annual Review of Psychology doi.org
- Renkl & Atkinson (2003). Structuring the transition from example study to problem solving in cognitive skill acquisition: A cognitive load perspective. Educational Psychologist doi.org
- Atkinson, Renkl & Merrill (2003). Transitioning from studying examples to solving problems: Effects of self-explanation prompts and fading worked-out steps. Journal of Educational Psychology doi.org
- Kapur (2008). Productive failure. Cognition and Instruction doi.org
- Sinha & Kapur (2021). When problem solving followed by instruction works: Evidence for productive failure. Review of Educational Research doi.org