Ví dụ mẫu và bài xếp mã Parsons: cách giúp người mới bắt đầu
Yêu cầu một học sinh mới học "hãy viết chương trình" trên màn hình trống thường là bước nhảy quá lớn. Hai công cụ được nghiên cứu khá nhiều để làm cầu nối là ví dụ mẫu (worked example), tức lời giải đầy đủ của một bài toán để người học nghiên cứu, và bài xếp mã Parsons (Parsons problem), tức các dòng mã bị xáo trộn mà người học phải sắp lại đúng thứ tự. Bài viết này tóm lược những gì các nghiên cứu cho thấy, đề xuất cách dùng trong lớp và nêu các giới hạn của bằng chứng hiện có.
Nghiên cứu cho thấy điều gì
Ví dụ mẫu: học từ lời giải của người khác
Nghiên cứu kinh điển của Sweller và Cooper (1985) về đại số gồm năm thí nghiệm. Các tác giả giả thuyết rằng kỹ năng giải toán cần rất nhiều lược đồ (schema) và việc tìm kiếm lời giải theo cách thông thường làm chậm quá trình hình thành lược đồ. Kết quả cho thấy ví dụ mẫu đòi hỏi ít thời gian xử lý hơn đáng kể so với bài tập thông thường; các bài tương tự xuất hiện sau đó cũng được giải nhanh hơn, kèm theo ít lỗi toán học hơn. Tuy nhiên các tác giả nhấn mạnh những kết quả này chỉ đúng với bài có cấu trúc giống hệt bài ban đầu, và kết luận rằng với người mới, quy tắc đại số tổng quát chỉ được phản ánh trong một số ít lược đồ; việc trừu tượng hóa quy tắc chung có thể cần nhiều luyện tập và tiếp xúc với nhiều dạng bài hơn. Đây là bằng chứng trong đại số, không phải lập trình.
Atkinson, Derry, Renkl và Wortham (2000) tổng hợp các nghiên cứu về ví dụ mẫu thành những nguyên tắc thiết kế. Theo họ, ví dụ hiệu quả có các thành phần tích hợp chặt chẽ, dùng nhiều phương thức trình bày, và làm nổi bật cấu trúc khái niệm bằng cách gắn nhãn hoặc phân đoạn. Ở cấp độ bài học, họ nêu việc dùng nhiều ví dụ cho mỗi dạng bài, thay đổi định dạng ví dụ trong cùng dạng, dùng đặc điểm bề mặt để báo hiệu cấu trúc sâu, và đặt ví dụ gần các bài luyện tập tương ứng. Họ cũng cho rằng có thể khuyến khích người học tự giải thích (self-explain) ví dụ, và nhận xét rằng ví dụ mẫu gắn với giai đoạn đầu của việc phát triển kỹ năng.
Trong dạy lập trình, Margulieux, Catrambone và Guzdial (2016) thử ví dụ mẫu có gắn nhãn mục tiêu con (subgoal labeled worked examples). Hai thí nghiệm trong phòng thí nghiệm với sinh viên đại học cho thấy can thiệp này cải thiện kết quả giải quyết vấn đề và ảnh hưởng đến cách người học tiếp cận bài toán; thí nghiệm thứ ba, trực tuyến với giáo viên phổ thông đang học để dạy tin học, cho thấy tác dụng tương tự và có thể mạnh hơn. Ngược lại, Morrison, Margulieux và Guzdial (2015) báo cáo kết quả lẫn lộn khi so sánh việc đưa sẵn nhãn mục tiêu con với việc để người học tự đặt nhãn trong một nhiệm vụ lập trình nhập môn: mức cải thiện thấy ở các lĩnh vực khác không lặp lại như kỳ vọng, và kết quả phụ thuộc vào đặc điểm khác của học liệu.
Bài xếp mã Parsons
Theo tổng quan của Ericson và cộng sự (2022), bài xếp mã bắt nguồn từ bài báo năm 2006 của Dale Parsons và Patricia Haden (người biên tập chỉ đọc được mô tả trong tổng quan, chưa đọc bài gốc). Ericson và cộng sự mô tả thiết kế ban đầu theo năm nguyên tắc: tăng tính hấp dẫn, giới hạn phần logic, cho phép các lỗi thường gặp, làm mẫu mã tốt và phản hồi ngay. So với việc viết mã vào trình soạn thảo trống, bài xếp mã thu hẹp đáng kể không gian giải quyết vấn đề nhưng vẫn cho người học tiếp xúc với cú pháp và cấu trúc mã. Các biến thể phổ biến gồm bài có thêm dòng gây nhiễu (distractor, tức dòng mã thừa hoặc sai), bài "mờ dần" (faded) trong đó có chỗ để trống cần điền, và bài thích ứng (adaptive).
Về hiệu quả học tập, Ericson, Margulieux và Rick (2017) so sánh ba cách: giải bài xếp mã hai chiều (có thụt lề) kèm dòng gây nhiễu, sửa mã có cùng lỗi, và tự viết mã tương đương. Nhóm giải bài xếp mã mất ít thời gian hơn đáng kể so với hai nhóm còn lại, trong khi kết quả học và khả năng nhớ sau một tuần không khác biệt có ý nghĩa thống kê. Weinman, Fox và Hearst (2021) nghiên cứu bài xếp mã "mờ dần" trong một lớp gồm 237 sinh viên nhập môn tin học: theo các tác giả, dạng bài này hiệu quả hơn đáng kể so với viết mã hoặc dò mã (code tracing) khi dạy các mẫu lập trình (programming patterns), cải thiện khả năng viết mã ở mức tương đương bài viết mã, và được sinh viên ưa thích hơn. Denny, Luxton-Reilly và Simon (2008) thì xem xét bài xếp mã như câu hỏi kiểm tra: điểm bài xếp mã tương quan đáng kể với điểm viết mã, và theo họ điểm này cho thấy rõ hơn học sinh chưa biết gì (cú pháp hay logic) so với điểm bài viết mã.
Ứng dụng trong lớp học
Các gợi ý sau do người biên tập rút ra từ những nghiên cứu trên, chưa được kiểm chứng riêng cho lớp học phổ thông Việt Nam.
Đi theo chuỗi giảm dần hỗ trợ. Một trình tự có thể thử: ví dụ mẫu đầy đủ, rồi bài điền chỗ trống (faded), rồi bài xếp mã, rồi bài tự viết. Tinh thần này phù hợp nhận xét của Atkinson và cộng sự (2000) rằng ví dụ mẫu gắn với giai đoạn đầu của học kỹ năng.
Đặt ví dụ ngay cạnh bài luyện tập tương ứng (Atkinson và cộng sự, 2000).
Chia lời giải mẫu thành bước có tên. Ví dụ (minh họa) các nhãn "chuẩn bị dữ liệu", "lặp qua danh sách", "in kết quả" (Margulieux và cộng sự, 2016). Vì Morrison và cộng sự (2015) ghi nhận kết quả không đồng nhất, hãy quan sát xem cách này có giúp học sinh của mình.
Yêu cầu học sinh tự giải thích. Sau khi xem ví dụ, hỏi "vì sao dòng này nằm trước dòng kia?" để khuyến khích tự giải thích (Atkinson và cộng sự, 2000).
Dùng bài xếp mã khi muốn tập trung vào thứ tự và cấu trúc. Bắt đầu không có dòng gây nhiễu; sau đó thêm vài dòng gây nhiễu đi cặp với dòng đúng. Ericson và cộng sự (2022) ghi nhận việc ghép cặp trực quan thường được khuyến nghị vì quá nhiều dòng gây nhiễu trộn lẫn có thể làm người học choáng ngợp.
Dùng bài xếp mã để chẩn đoán, với kỳ vọng thận trọng. Chọn dòng gây nhiễu mô phỏng lỗi thường gặp và xem học sinh chọn sai ở đâu. Ericson và cộng sự (2022) ghi nhận việc nhận diện khó khăn của học sinh là một lợi ích được đề xuất, nhưng các nghiên cứu về việc này còn ít người tham gia.
Cân nhắc dùng bài xếp mã trong kiểm tra ngắn, nhưng không thay hoàn toàn bài viết mã: Denny và cộng sự (2008) chỉ thấy tương quan, chứ không cho thấy hai dạng bài tương đương.
Ví dụ minh họa (giả định) với Scratch: Giáo viên in hoặc dựng sẵn các khối lệnh của chương trình "mèo đi đến cuối màn hình rồi nói Xin chào" ở thứ tự lộn xộn, kèm một khối thừa như "quay 90 độ" làm dòng gây nhiễu. Học sinh sắp lại và chạy thử, rồi giải thích vì sao khối thừa không cần.
Ví dụ minh họa (giả định) với Python: Các dòng mã của một vòng for in dãy số từ 1 đến 5 được xáo trộn, kèm một dòng sai thụt lề làm dòng gây nhiễu.
Giới hạn và lưu ý
Bối cảnh nghiên cứu chủ yếu là đại học. Tổng quan của Ericson và cộng sự (2022) ghi nhận phần lớn nghiên cứu về bài xếp mã thực hiện ở các môn nhập môn bậc đại học; nghiên cứu ở cấp tiểu học và trung học chiếm tỉ lệ nhỏ hơn nhiều. Các nghiên cứu về ví dụ mẫu và nhãn mục tiêu con nêu trên cũng dùng sinh viên đại học hoặc giáo viên đang học. Kết quả chưa chắc áp dụng nguyên xi cho học sinh nhỏ tuổi.
Cần thêm nghiên cứu lặp lại. Cũng theo tổng quan này, phần lớn nghiên cứu diễn ra tại một cơ sở với dưới 500 người tham gia và cần thêm nghiên cứu lặp lại, đa cơ sở. Ngoài ra chỉ có một nghiên cứu so sánh có và không có dòng gây nhiễu, và nghiên cứu đó cho rằng dòng gây nhiễu làm giảm hiệu suất học tập, nên chưa thể nói rõ nên dùng chúng ở mức nào.
Ví dụ mẫu không phải lúc nào cũng tốt hơn. Sweller và Cooper (1985) chỉ ghi nhận lợi ích cụ thể với bài cùng cấu trúc, còn Morrison và cộng sự (2015) ghi nhận kết quả không đồng nhất khi thay đổi cách dùng nhãn mục tiêu con.
Cách bài viết đọc nguồn. Với phần lớn tài liệu, người biên tập chỉ đọc được phần tóm tắt; riêng tổng quan của Ericson và cộng sự (2022) được đọc toàn văn. Chi tiết như cỡ mẫu và kích thước hiệu ứng của từng nghiên cứu chưa được xác minh nên không nêu.
Kết luận
Ví dụ mẫu và bài xếp mã đều nhằm giảm gánh nặng cho người mới bằng cách cho họ xem hoặc sắp xếp mã đúng trước khi tự viết. Bằng chứng cho thấy các cách này có thể rút ngắn thời gian học và hỗ trợ người học, nhưng kết quả về mức độ học được không phải lúc nào cũng khác biệt rõ so với viết mã, và phần lớn nghiên cứu thuộc bậc đại học. Giáo viên có thể dùng chúng như các nấc thang trong chuỗi giảm dần hỗ trợ, đồng thời quan sát xem học sinh của mình có thực sự tiến bộ hay không.
Tài liệu tham khảo
Atkinson, R. K., Derry, S. J., Renkl, A., & Wortham, D. (2000). Learning from examples: Instructional principles from the worked examples research. Review of Educational Research, 70 (2), 181–214. https://doi.org/10.3102/00346543070002181
Denny, P., Luxton-Reilly, A., & Simon, B. (2008). Evaluating a new exam question: Parsons problems. In Proceedings of the Fourth International Workshop on Computing Education Research (pp. 113–124). ACM. https://doi.org/10.1145/1404520.1404532
Ericson, B. J., Denny, P., Prather, J., Duran, R., Hellas, A., Leinonen, J., Miller, C. S., Morrison, B. B., Pearce, J. L., & Rodger, S. H. (2022). Parsons problems and beyond: Systematic literature review and empirical study designs. In Proceedings of the 2022 Working Group Reports on Innovation and Technology in Computer Science Education (pp. 191–234). ACM. https://doi.org/10.1145/3571785.3574127
Ericson, B. J., Margulieux, L. E., & Rick, J. (2017). Solving Parsons problems versus fixing and writing code. In Proceedings of the 17th Koli Calling International Conference on Computing Education Research (pp. 20–29). ACM. https://doi.org/10.1145/3141880.3141895
Margulieux, L. E., Catrambone, R., & Guzdial, M. (2016). Employing subgoals in computer programming education. Computer Science Education, 26 (1), 44–67. https://doi.org/10.1080/08993408.2016.1144429
Morrison, B. B., Margulieux, L. E., & Guzdial, M. (2015). Subgoals, context, and worked examples in learning computing problem solving. In Proceedings of the Eleventh Annual International Conference on International Computing Education Research (pp. 21–29). ACM. https://doi.org/10.1145/2787622.2787733
Sweller, J., & Cooper, G. A. (1985). The use of worked examples as a substitute for problem solving in learning algebra. Cognition and Instruction, 2 (1), 59–89. https://doi.org/10.1207/s1532690xci0201_3
Weinman, N., Fox, A., & Hearst, M. A. (2021). Improving instruction of programming patterns with faded Parsons problems. In Proceedings of the 2021 CHI Conference on Human Factors in Computing Systems (pp. 1–4). ACM. https://doi.org/10.1145/3411764.3445228