VieTopik
VisaTrường đại họcViệc làmHọc hiệu quả
  • Góc học tập
Tải app
  • Trang chủ
  • Thư viện
  • Luyện thi
  • Cẩm nang
  • Góc học tập
Cẩm nang · Học hiệu quả

Đọc code trước, viết code sau

Vì sao người mới học lập trình nên đọc, đoán và sửa code có sẵn trước khi tự viết từ đầu, và cách làm theo từng bước với một 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.

Đã làm: 0/5 việc
Nội dung bài · 7 mục
  1. 1.Vì sao trang trắng làm người mới bị kẹt
  2. 2.PRIMM: năm bước từ đọc tới viết
  3. 3.Bài sắp xếp dòng code (Parsons problems)
  4. 4.Tự giải thích từng dòng
  5. 5.Khi nào chuyển sang tự viết
  6. 6.Áp dụng ngay
  7. 7.Trên VieTopik

Nhiều người mới học lập trình mở trình soạn thảo trống, đọc đề bài, rồi ngồi im rất lâu, vì phải lo cùng lúc quá nhiều thứ: cú pháp, biến, vòng lặp, logic của bài. Bài này nói về một cách bắt đầu khác: đọc và hiểu code có sẵn trước, rồi mới tự viết.

Vì sao trang trắng làm người mới bị kẹt

Bộ nhớ làm việc (working memory) của con người chỉ xử lý được vài thông tin cùng một lúc. Người có kinh nghiệm đã có sẵn các "khuôn" trong đầu, ví dụ "vòng lặp cộng dồn", nên nhìn một đoạn code là nhận ra ngay. Người mới chưa có khuôn nào, nên mỗi dòng là một thứ riêng phải nghĩ.

Kirschner, Sweller và Clark (2006) tổng hợp nghiên cứu và lập luận rằng với người mới, cách dạy có hướng dẫn rõ ràng hiệu quả hơn cách để người học tự khám phá. Một hiện tượng họ nhắc tới là hiệu ứng ví dụ mẫu (worked example effect): học từ lời giải mẫu chi tiết thường tốt hơn tự giải bài từ đầu, vì người học không phải mò mẫm thử sai. Bài này là bài lập luận và tổng quan, không phải một thí nghiệm, và đã bị một số nhà nghiên cứu phản biện.

Có một điều kiện quan trọng. Kalyuga và cộng sự (2003) tổng hợp các thí nghiệm cho thấy cách dạy rất có lợi cho người mới có thể mất tác dụng, thậm chí gây hại, với người đã có kinh nghiệm. Họ gọi đây là hiệu ứng đảo ngược theo trình độ (expertise reversal effect). Ví dụ, thợ cơ khí học nghề lúc mới bắt đầu học tốt hơn với ví dụ mẫu. Khi đã có kinh nghiệm, ưu thế đó mất đi, và về sau tự giải bài lại giúp học tốt hơn. Bài tổng quan này cũng dẫn các nghiên cứu cho thấy nên giảm dần phần lời giải mẫu thay vì chuyển đột ngột sang tự làm.

Mức bằng chứng: mạnh — hiệu ứng ví dụ mẫu và hiệu ứng đảo ngược theo trình độ được lặp lại trong nhiều thí nghiệm, phần lớn ở toán, vật lý và kỹ thuật. Áp dụng vào lập trình là suy ra từ nguyên tắc chung.

PRIMM: năm bước từ đọc tới viết

PRIMM là cách tổ chức bài học lập trình gồm năm bước: Predict (đoán), Run (chạy), Investigate (tìm hiểu), Modify (sửa), Make (tự làm). Sentance, Waite và Kallia (2019) thử PRIMM với 13 giáo viên ở các trường trung học tại Anh, gồm 493 học sinh 11–14 tuổi học Python trong 8–12 tuần, so với 180 học sinh lớp đối chứng học theo cách thường ngày của trường.

Kết quả: nhóm PRIMM làm bài kiểm tra cuối tốt hơn nhóm đối chứng, có ý nghĩa thống kê, nhưng mức chênh nhỏ (hệ số r = 0,13). Học sinh không được chia nhóm ngẫu nhiên (các tác giả nêu rõ điều này), và giáo viên tham gia theo lời mời tự nguyện. Sáu giáo viên kể rằng một số học sinh dừng ở bước Modify, chưa tới được bước Make.

Mức bằng chứng: vừa — một nghiên cứu bán thực nghiệm, học sinh phổ thông ở Anh, hiệu quả nhỏ. Chưa có bằng chứng riêng cho người lớn tự học.

Dưới đây là cách tự làm PRIMM với một đoạn Java.

public class Main {
    public static void main(String[] args) {
        int[] data = { -3, 8, -4, 7, 10 };
        System.out.println(sumEven(data));
    }

    static int sumEven(int[] numbers) {
        int sum = 0;
        for (int i = 0; i < numbers.length; i++) {
            if (numbers[i] % 2 == 0) {
                sum += numbers[i];
            }
        }
        return sum;
    }
}

1. Predict (đoán). Chưa chạy vội. Viết ra giấy: chương trình in ra số mấy? Ghi cả lý do, ví dụ "cộng các số chẵn: 8, -4, 10".

2. Run (chạy). Chạy thử. Kết quả là 14. Nếu đoán sai, đừng bỏ qua. Tìm xem mình hiểu sai ở dòng nào.

3. Investigate (tìm hiểu). Tự đặt câu hỏi cho từng phần:

  • -4 % 2 bằng bao nhiêu? (Bằng 0, nên -4 được cộng.)
  • -3 % 2 bằng bao nhiêu? Trong Java, dấu của phép chia lấy dư theo số bị chia, nên kết quả là -1, không phải 1.
  • Nếu đổi i < numbers.length thành i <= numbers.length thì sao? (Chương trình báo lỗi ArrayIndexOutOfBoundsException, vì chỉ số cuối là length - 1.)
  • Biến sum có giá trị bao nhiêu sau mỗi vòng lặp? Lập bảng: ban đầu là 0, sau từng vòng là 0, 8, 4, 4, 14.

4. Modify (sửa). Sửa hàm để cộng các số lẻ. Nhiều người viết numbers[i] % 2 == 1 và nhận được 7, thiếu số -3. Câu hỏi ở bước Investigate đã gợi ý vì sao. Điều kiện đúng là numbers[i] % 2 != 0, cho kết quả 4.

5. Make (tự làm). Đóng ví dụ lại. Tự viết một hàm mới cùng cấu trúc nhưng làm việc khác, ví dụ đếm có bao nhiêu số lớn hơn 5 trong mảng.

Bài sắp xếp dòng code (Parsons problems)

Bài Parsons cho sẵn đủ các dòng code của lời giải nhưng bị xáo trộn. Người học chỉ cần sắp xếp lại đúng thứ tự và thụt lề. Một số bài có thêm dòng "gây nhiễu" chứa lỗi thường gặp, phải chọn giữa dòng đúng và dòng sai.

Ericson, Margulieux và Rick (2017) cho 135 sinh viên học môn lập trình nhập môn đầu tiên của ngành máy tính ở một đại học Mỹ, học Python, luyện bằng một trong ba cách: sắp xếp dòng code, sửa code có lỗi, hoặc tự viết code. Nhóm sắp xếp dòng code làm xong bài luyện nhanh hơn rõ rệt (tổng khoảng 473 giây, so với khoảng 680 và 714 giây). Điểm kiểm tra ngay sau đó và sau một tuần không khác nhau có ý nghĩa giữa ba nhóm. Các tác giả cũng lưu ý thiếu nhóm đối chứng không luyện tập, nên chưa chắc tiến bộ đến từ chính bài luyện.

Mức bằng chứng: vừa — một thí nghiệm chia nhóm ngẫu nhiên, sinh viên đại học Mỹ, chỉ bốn bài luyện ngắn.

Cách tự làm: xáo thứ tự các dòng của một hàm vừa học, để vài ngày rồi sắp xếp lại.

Tự giải thích từng dòng

Chi và cộng sự (1989) ghi âm 8 sinh viên vừa nghĩ vừa nói khi đọc lời giải mẫu bài tập cơ học. Sinh viên giải bài giỏi thường tự giải thích từng bước và nối nó với nguyên lý trong sách. Sinh viên giải kém ít tự giải thích. Đây chỉ là quan sát, chưa chứng minh tự giải thích là nguyên nhân.

Chi và cộng sự (1994) thử trực tiếp hơn: 14 học sinh lớp 8 được yêu cầu tự giải thích sau mỗi câu khi đọc bài về hệ tuần hoàn, 10 học sinh khác đọc bài hai lần. Nhóm được yêu cầu tự giải thích tiến bộ nhiều hơn từ bài kiểm tra đầu đến bài kiểm tra cuối.

Mức bằng chứng: vừa — hai nghiên cứu nhỏ, ở vật lý và sinh học, không phải lập trình.

Cách làm với code: viết một dòng chú thích tiếng Việt bằng lời của mình cạnh mỗi dòng. Không viết lại cú pháp ("cộng sum với numbers[i]") mà viết mục đích ("thêm số chẵn này vào tổng"). Dòng nào không viết được thì đó là chỗ chưa hiểu.

Khi nào chuyển sang tự viết

Theo hiệu ứng đảo ngược theo trình độ, đọc ví dụ mẫu mãi cũng không tốt. Một cách chuyển dần:

  1. Làm đủ năm bước PRIMM với một đoạn code.
  2. Khi Modify trơn tru, làm Make với một biến thể nhỏ, không nhìn ví dụ.
  3. Khi đã tự viết được vài biến thể, chuyển sang dự án nhỏ ghép nhiều phần lại, ví dụ chương trình quản lý danh sách chi tiêu.
  4. Gặp khái niệm mới (lớp, interface, Stream API) thì quay lại đọc ví dụ trước.

Công cụ AI có thể sinh code mẫu để đọc, nhưng bước đoán và tự giải thích vẫn phải do bạn làm.

Áp dụng ngay

Trên VieTopik

  • Khoá Java và Java Core: mỗi bài có giải thích và ví dụ code để đọc, đoán kết quả; nhiều bài có câu hỏi kiểm tra cuối bài.
  • Khoá C# .NET và C# Core: cùng cấu trúc, dùng được PRIMM nếu bạn học C#.

Nguồn

  • Kirschner, Sweller & Clark (2006). Why minimal guidance during instruction does not work: An analysis of the failure of constructivist, discovery, problem-based, experiential, and inquiry-based teaching. Educational Psychologist doi.org
  • Kalyuga, Ayres, Chandler & Sweller (2003). The expertise reversal effect. Educational Psychologist doi.org
  • Sentance, Waite & Kallia (2019). Teaching computer programming with PRIMM: a sociocultural perspective. Computer Science Education doi.org
  • Ericson, Margulieux & Rick (2017). Solving Parsons problems versus fixing and writing code. Koli Calling 2017 doi.org
  • Chi, Bassok, Lewis, Reimann & Glaser (1989). Self-explanations: How students study and use examples in learning to solve problems. Cognitive Science doi.org
  • Chi, de Leeuw, Chiu & LaVancher (1994). Eliciting self-explanations improves understanding. Cognitive Science doi.org

Nội dung bài

  1. 1.Vì sao trang trắng làm người mới bị kẹt
  2. 2.PRIMM: năm bước từ đọc tới viết
  3. 3.Bài sắp xếp dòng code (Parsons problems)
  4. 4.Tự giải thích từng dòng
  5. 5.Khi nào chuyển sang tự viết
  6. 6.Áp dụng ngay
  7. 7.Trên VieTopik