Để khắc phục phần nào những khó khăn mà học sinh gặp phải trong việc học Lập trình Pascal và nâng cao khả năng tương tác của học sinh với môn học, hướng tới thu hút những học sinh có năn
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
TRẦN MINH HIỀN
XÂY DỰNG PHẦN MỀM HỖ TRỢ DẠY
VÀ HỌC NGÔN NGỮ LẬP TRÌNH PASCAL CHO HỌC SINH TRUNG HỌC PHỔ THÔNG
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
HÀ NỘI - 2015
Trang 2TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
TRẦN MINH HIỀN
XÂY DỰNG PHẦN MỀM HỖ TRỢ DẠY
VÀ HỌC NGÔN NGỮ LẬP TRÌNH PASCAL CHO HỌC SINH TRUNG HỌC PHỔ THÔNG
Chuyên ngành : Kỹ thuật phần mềm
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
Cán bộ hướng dẫn khoa học: PGS.TS Trương Anh Hoàng
HÀ NỘI – 2015
Trang 3Trước tiên, em xin gửi lời cảm ơn chân thành và lòng biết ơn sâu sắc đến thầy giáo hướng dẫn - PGS.TS Trương Anh Hoàng đã tận tình hướng dẫn em trong suốt quá trình thực hiện khóa luận tốt nghiệp
Em cũng xin bày tỏ lời cảm ơn sâu sắc tới các thầy giáo, cô giáo trường Đại học Công nghệ, những người thầy, người cô đã tận tình giảng dạy và truyền đạt cho em những kiến thức, những kinh nghiệm quý báu trong suốt quá trình học tập ở trường Tiếp đến, em xin chân thành cảm ơn các anh chị, thầy cô đồng nghiệp trường THPT Cầu Giấy – Hà Nội đã luôn động viên, giúp đỡ, tạo điều kiện cho em hoàn thành khóa luận tốt nghiệp
Sau cùng, con xin bày tỏ lòng biết ơn tới cha mẹ, anh chị, những người thân trong gia đình và bạn bè đã luôn ở bên cạnh con, giúp con vượt qua khó khăn trong học tập cũng như trong cuộc sống để đi đến cái đích ngày hôm nay
Về luận văn, do thời gian và điều kiện có hạn nên luận văn không tránh khỏi những thiếu sót Tôi rất mong nhận được sự góp ý của bạn bè, thầy cô và những người quan tâm đến đề tài này
Hà nội, ngày 20 tháng 11 năm 2015
Học viên
Trần Minh Hiền
Trang 4Tôi xin cam đoan luận văn tốt nghiệp “Xây dựng phần mềm hỗ trợ dạy và học ngôn ngữ lập trình Pascal cho học sinh Trung học phổ thông” là công trình nghiên cứu của tôi dưới sự hướng dẫn và định hướng của PGS.TS Trương Anh Hoàng Các số liệu, nội dung tham khảo được trích dẫn có nguồn gốc rõ ràng, tuân thủ tôn trọng quyền tác giả, không vi phạm luật sở hữu trí tuệ và pháp luật Việt Nam Nếu sai, tôi xin chịu hoàn toàn trách nhiệm trước pháp luật
TÁC GIẢ LUẬN VĂN
Trần Minh Hiền
Trang 5LỜI CAM ĐOAN4
MỤC LỤC5
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT7
DANH MỤC HÌNH ẢNH, ĐỒ THỊ8
DANH MỤC BẢNG BIỂU9
PHẦN MỞ ĐẦU 1
Chương 1 TỔNG QUAN VỀ VẤN ĐỀ NGHIÊN CỨU 3
1.1 Vấn đề dạy và học ngôn ngữ lập trình Pascal trong trường THPT 3
1.2 Phát biểu bài toán 5
1.2.1 Quy trình xử lý 5
1.2.2 Những khó khăn thách thức 5
1.3 Hướng tiếp cận 6
1.4 Kết luận chương 6
Chương 2 TỔNG QUAN VỀ CODE HUNT VÀ ỨNG DỤNG TRONG DẠY HỌC PASCAL 7
2.1 Tổng quan về Code Hunt 7
2.1.1 Giới thiệu về Code Hunt 7
2.1.2 Chức năng của Code Hunt 7
2.1.3 Kiến trúc của Code Hunt 9
2.2 Ứng dụng mô hình Code Hunt trong dạy học Pascal 10
2.2.1 Chiến thuật trò chơi hóa (Gamification) 10
2.2.2 Thiết kế động viên người học 12
2.2.3 Thiết kế học tập trải nghiệm 15
2.2.4 Đánh giá người học theo thang phân loại Bloom và Drefus 18
2.3 Kết luận chương 2 22
Chương 3 XÂY DỰNG HỆ THỐNG GIẢI QUYẾT BÀI TOÁN 23
3.1 Mô tả và xây dựng bài toán 23
3.1.1 Mô tả bài toán 23
3.1.2 Sơ đồ chức năng của hệ thống 23
3.1.3 Thiết kế Cơ sở dữ liệu 25
Trang 63.2 Xây dựng phần mềm 30
3.2.1 Xây dựng chức năng trình soạn thảo mã Pascal 31
3.2.2 Xây dựng chức năng lưu và đọc mã Pascal 31
3.2.3 Xây dựng chức năng biên dịch mã Pascal 32
3.2.4 Xây dựng chức năng xem kết quả chạy chương trình 32
3.2.5 Xây dựng chức năng tính điểm và mức kỹ năng 32
3.3 Một số chức năng chính của phần mềm 41
3.3.1 Chức năng trang chủ 41
3.3.2 Chức năng quản lý học liệu 41
3.3.3 Chức năng bảng xếp hạng 43
3.3.4 Chức năng đăng ký 43
3.3.5 Chức năng đăng nhập 43
3.3.6 Chức năng thực hành 44
3.4 Kết luận chương 3 45
Chương 4 CÀI ĐẶT THỬ NGHIỆM VÀ KẾT QUẢ ĐẠT ĐƯỢC 46
4.1 Hướng dẫn cài đặt phần mềm 46
4.1.1 Yêu cầu hạ tầng 46
4.1.2 Cài đặt trình biên dịch trực tuyến 46
4.2 Kết quả thực nghiệm 48
4.2.1 Cơ sở dữ liệu của phần mềm 48
4.2.2 Quản lý học liệu 48
4.2.3 Bài tập thực nghiệm 49
4.3 Thực nghiệm sư phạm và đánh giá kết quả 55
4.3.1 Thực nghiệm sư phạm 55
4.3.2 Đánh giá kết quả thực nghiệm sư phạm 56
4.4 Kết luận chương 4 58
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 59
PHỤ LỤC 63
Trang 76 OER Open educational resources Kho tài nguyên giáo dục mở
7 OECD Organization for Economic
Cooperation and Development
Tổ chức Hợp tác và Phát triển Kinh tế
8 WEF The World Economic Forum Diễn đàn kinh tế thế giới
9 SGK Sách giáo khoa
Trang 8Hình 1.1 Biểu đồ xếp hạng độ phổ biến các ngôn ngữ lập trình tháng 11/2015 4
Hình 2.1 Màn hình chính của Code Hunt 8
Hình 2.2 Các lĩnh vực của Code Hunt 8
Hình 2.3 Kiến trúc của Code Hunt 9
Hình 2.4 Yếu tố tác động đến động lực học tập 13
Hình 2.5 Hệ thống giảng dạy vòng tròn khép kín 15
Hình 2.6 Ứng dụng hệ thống giảng dạy khép kín vào nội dung dạy và học Pascal 16
Hình 2.7 Nội dung học tập được theo từng giai đoạn 17
Hình 2.8 Nội dung bài tâp thực nghiệm theo từng giai đoạn 18
Hình 2.9 Thang phân loại các mức trí năng của Bloom 18
Hình 2.10 Thang phân loại tri thức của Bloom và phong cách học tập 21
Hình 2.11 Thang phân loại năng lực của Dreyfus 21
Hình 3.1 Sơ đồ chức năng của hệ thống 23
Hình 3.2 CSDL lưu thông tin người học 25
Hình 3.3 Cơ sở dữ liệu lưu bài tập của phần mềm 25
Hình 3.4 Cơ sở dữ liệu lưu cấp độ kỹ năng của người học 25
Hình 3.5 Cơ sở dữ liệu lưu tài liệu học Pascal 26
Hình 3.6 Cơ sở dữ liệu lưu bài giảng về Pascal 26
Hình 3.7 Một hộp đen kỹ thuật 27
Hình 3.8 Mã nguồn của người học 28
Hình 3.9 So sánh đầu ra mã pascal người học viết với kỳ vọng của chương trình 28
Hình 3.11 Hệ thống đánh giá chương trình của người học 33
Hình 3.12 Thư mục lưu bài tập của học viên 37
Hình 3.13 Chức năng Trang chủ của phần mềm 41
Hình 3.14 Chức năng quản lý tài liệu 42
Hình 3.15 Chức năng quản lý bài giảng dạng phim 42
Hình 3.16 Chức năng bảng xếp hạng 43
Hình 3.17 Chức năng đăng ký tài khoản mới 43
Hình 3.18 Chức năng đăng nhập 44
Trang 9Hình 3.20 Chức năng soạn thảo mã Pascal 44
Hình 3.21 Kết quả biên dịch 45
Hình 3.22 Kiểm thử so khớp đầu ra thực tế và kỳ vọng 45
Hình 4.1 Một trình biên dịch 46
Hình 4.2 Công việc của một trình biên dịch 46
Hình 4.3 Cơ sở dữ liệu bài tập 48
Hình 4.4 Chức năng thêm tài liệu 48
Hình 4 5 Thực hành chương trình tự do 49
Hình 4.6 Người học hoàn thành đúng yêu cầu bài tập thử nghiệm số 1 49
Hình 4.7 Bài thử nghiệm số 2 đúng cú pháp nhưng sai với kỳ vọng 50
Hình 4.8 Người học hoàn thành đúng yêu cầu bài tập thử nghiệm số 2 51
Hình 4.9 Gợi ý của bài tập thử nghiệm 3 52
Hình 4.10 Bài thử nghiệm toán tử số học có đầu ra đúng với kỳ vọng 52
Hình 4.11 Người học hoàn thành bài thử nghiệm số 4 53
Hình 4.12 Bài thử nghiệm số 5 đầu ra thực tế chưa khớp với kỳ vọng 53
Hình 4.13 Bài thử nghiệm cầu điều kiện có đầu ra thực tế khớp với kỳ vọng 54
Hình 4.14 Bài thử nghiệm về vòng lặp có đầu ra chưa khớp với kỳ vọng 54
Hình 4.15 Bài thử nghiệm về vòng lặp có đầu ra khớp với kỳ vọng 55
Hình 4.16 Kết quả khảo sát về mức độ hài lòng của học sinh 57
Hình 4.17 Kết quả khảo sát về nội dung kiến thức phần mềm cung cấp 57
Hình 4.18 Khảo sát về khả năng tư duy lập trình 57
Hình 4.19 Kết quả khảo sát kỹ năng phần mềm cung cấp 58
Hình 4.20 Kết quả khảo sát về dự định học lập trình của học sinh 58
DANH MỤC BẢNG BIỂU Bảng 2.1 Chuyển đổi từ phương pháp học truyền thống sang Gamification 16
Trang 10PHẦN MỞ ĐẦU
Bối cảnh của vấn đề nghiên cứu:
Ngày nay, những thành tựu của Công nghệ thông tin đang được áp dụng trong hầu hết lĩnh vực hoạt động của con người mang lại nhiều hiệu quả to lớn Các kiến thức về lập trình, về cách thức tạo ra các chương trình kỹ thuật số đang dần trở thành một kỹ năng cơ bản cần được trang bị đối với tất cả mọi người Nhiều quốc gia trên thế giới đã đưa lập trình vào chương trình giảng dạy cấp tiểu học và trung học
Trên thế giới, Anh quốc là quốc gia đầu tiên đã đưa việc học lập trình thành môn học bắt buộc trong các trường tiểu học và trung học Bắt đầu từ năm 2014 trẻ em sẽ học lập trình ở độ tuổi 5 đến 16 Ở giai đoạn 1, học sinh học viết chương trình nhỏ, các khía cạnh đơn giản của thuật toán, cài đặt và thực thi trên thiết bị điện tử Trong giai đoạn 2, học sinh được học cách thiết kế và viết các chương trình phức tạp hơn, tương tác với môi trường xung quanh Ở giai đoạn 3 (cấp trung học phổ thông), học sinh học
về đại số Boolean, tư duy thuật toán Giai đoạn 4 tập trung vào sáng tạo và định hướng nghề nghiệp
Việc dạy tin học và lập trình sớm như vậy không chỉ có ích cho toàn bộ học sinh,
mà còn trợ giúp rất lớn cho ngành CNTT và quá trình hiện đại hóa đất nước Hiểu được vai trò của việc dạy tin học và nắm bắt được xu hướng này trên thế giới, Bộ GD&ĐT Việt Nam đã đưa việc học lập trình Pascal vào chương trình và coi đó là khởi đầu cho việc tiếp cận ngôn ngữ lập trình bậc cao Ở cấp THPT, đây cũng là môn học bắt buộc đối với học sinh khối 11
Nói một cách khái quát, Pascal là một trong những ngôn ngữ lập trình có cú pháp khoa học và gần gũi với ngôn ngữ của con người Pascal có ưu điểm trong việc ứng dụng để giải quyết các bài toán trên máy tính, qua đó giúp các em hình dung được sự
ra đời, cấu tạo, hoạt động cũng như ích lợi của các chương trình hoạt động trong máy tính, các máy tự động…
Tính cấp thiết của đề tài
Ngôn ngữ lập trình Pascal có vai trò quan trọng như vậy, nhưng thực tế việc học Pascal ở trường THPT đang diễn ra theo hình thức thầy giảng giải thật kĩ, học trò cố nhớ thật nhiều hay thầy trình chiếu - trò xem Về cơ bản, đây là một phương pháp dạy học lạc hậu, ngay cả khi nó được hỗ trợ bởi các thiết bị công nghệ của thế kỉ 21 Bên cạnh đó, do nhiều yếu tố như năng lực, trình độ của học sinh, quan niệm của người dạy
mà nội dung bài học chỉ dừng lại ở mức độ giới thiệu câu lệnh và những thuật toán lâu đời Các tiết học về lập trình Pascal chưa đi vào ứng dụng thực tiễn khiến học sinh
Trang 11chưa hiểu được tầm quan trọng của môn học Bên cạnh đó, việc diễn giải lý thuyết dài dòng và viết mã lệnh tách rời với thực hành cũng là lý do khiến học sinh mất kiên nhẫn với môn học
Để khắc phục phần nào những khó khăn mà học sinh gặp phải trong việc học Lập trình Pascal và nâng cao khả năng tương tác của học sinh với môn học, hướng tới thu hút những học sinh có năng lực học tập bộ môn Tin học cũng như đa số học sinh trong các tiết học về lập trình, tôi đã chọn đề tài: “Xây dựng phần mềm hỗ trợ dạy và học ngôn ngữ lập trình Pascal cho học sinh Trung học phổ thông” phục vụ cho việc hoàn thiện luận văn của mình
Cấu trúc luận văn của tôi bao gồm “Phần mở đầu”, “Phần kết luận” và bốn chương nội dung cụ thể là:
Chương 1: Tổng quan về vấn đề nghiên cứu
Chương này trình bày tổng quan về những vấn đề cơ bản trong dạy và học Pascal
ở trường THPT, giới thiệu phương pháp và một số hướng tiếp cận xây dựng phần mềm
hỗ trợ dạy và học ngôn ngữ lập trình Pascal cho học sinh THPT
Chương 2: Hướng tiếp cận và ứng dụng trong dạy và học Pascal
Chương này tôi tập trung nghiên cứu một số hướng tiếp cận và mô hình học tập
đã và đang được triển khai thành công trong giáo dục như: mô hình Code Hunt với chiến thuật trò chơi hóa, hệ thống dạy học khép kín, mô hình phân loại trí năng của Bloom, và mô hình đánh giá năng lực của Dreyfus Từ những nghiên cứu đó tôi đưa ra những đề xuất về thiết kế nội dung học tập Pascal đồng thời đưa ra phương pháp đánh giá, đo lường kết quả của người học
Chương 3: Xây dựng hệ thống giải quyết bài toán
Trong chương này tôi đưa ra hai nhiệm vụ của bài toán là thiết kế giảng dạy và đánh giá chương trình của người học Từ đó tôi đưa ra bài toán và xây dựng chức năng của phần mềm hỗ trợ dạy và học ngôn ngữ lập trình Pascal
Chương 4: Cài đặt thử nghiệm và kết quả đạt được
Chương này hướng dẫn việc cài đặt và triển khai phần mềm, đồng thời đánh giá việc thực hiện đề tài trong lý thuyết cũng như trong thực tiễn
Trang 12Chương 1 TỔNG QUAN VỀ VẤN ĐỀ NGHIÊN CỨU
1.1 Vấn đề dạy và học ngôn ngữ lập trình Pascal trong trường THPT
Đầu những năm 1970, giáo sư Niclaus Wirth đã công bố sự ra đời của Ngôn ngữ lập trình Pacsal Trong quá trình hình thành và phát triển, Pascal đã phát huy được nhiều ưu điểm của mình và tỏ ra hơn hẳn nhiều ngôn ngữ cấp cao khác [1] Pascal đã trở thành một ngôn ngữ mạnh được ứng dụng rộng rãi trong những năm 80 cả trong lĩnh vực giảng dạy và lập trình chuyên nghiệp
Pascal là ngôn ngữ lập trình bậc cao có các đặc điểm [1]:
Là một ngôn ngữ có định kiểu mạnh mẽ: Mọi biến và hằng của kiểu dữ liệu nào
chỉ được gán các giá trị của đúng kiểu dữ liệu đó, không được tự do đem gán cho các giá trị của kiểu dữ liệu khác Việc định kiểu một cách chặt chẽ như vậy khiến cho người lập trình luôn luôn phải có các biểu thức tương thích với nhau
về kiểu dữ liệu, vì thế rèn luyện cho người học tư duy logic chặt chẽ
Là một ngôn ngữ thể hiện tư duy lập trình có cấu trúc được thể hiện trên 3 mặt:
Cấu trúc về mặt dữ liệu: từ dữ liệu đơn giản hoặc có cấu trúc đơn giản người lập trình có thể xây dựng các dữ liệu có cấu trúc phức tạp hơn
Cấu trúc về mặt lệnh: từ các lệnh chuẩn đã có, người lập trình có thể nhóm chúng lại với nhau và đặt giữa hai từ khóa Begin và End khiến chúng trở thành một ngôn ngữ phức tạp hơn gọi là lệnh hợp thành hay lệnh ghép
Cấu trúc về mặt chương trình: một chương trình có thể chia thành các chương trình con tổ chức theo hình cây phân cấp Mỗi chương trình con nhằm giải quyết một nhiệm vụ xác định cụ thể Điều này giúp cho người lập trình có thể giải quyết từng phần một, từng khối một và có thể cho nhiều người tham gia lập trình, mỗi người phụ trách một vài khối
Là ngôn ngữ lập trình rất gần với ngôn ngữ tự nhiên (tiếng Anh) nên mã Pascal trở nên rất sáng sủa, dễ hiểu và dễ sửa chữa
Ngày nay, Pascal ít được sử dụng trong lập trình chuyên nghiệp nhưng là ngôn ngữ sử dụng nhiều trong giảng dạy đặc biệt dành cho những người lần đầu tiên tiếp xúc với lập trình và đây cũng là ngôn ngữ chính thức của kỳ thi Olympic Tin học quốc
tế [2]
Hiểu được những lợi ích ngôn ngữ lập trình Pascal mang lại, Bộ Giáo dục và Đào tạo đã quyết định đưa Pascal vào học phần Tin học Đại cương thuộc các khối ngành Khoa học Tự nhiên, đặc biệt là ngành Công nghệ Thông tin, đồng thời là một môn học trong khối 11 ở các trường THPT trên toàn quốc Môn học này đã phát huy được
Trang 13những ưu điểm vốn có của nó Tuy nhiên qua quá trình triển khai, nó cũng nhận được nhiều phản hồi của người học như:
Phần lớn nội dung bài tập trong chương trình Tin học lớp 11 liên quan đến tính toán hoặc thuần về toán học, không gắn liền với thực tiễn, học sinh thường không hiểu lập trình để làm gì ngoài việc tính toán với các con số
Học sinh sẽ rất khó hình dung được các ứng dụng mà lập trình có thể làm được trong thực tế nếu chỉ căn cứ vào lý thuyết thuần túy từ sách giáo khoa Học sinh luôn đặt ra câu hỏi lập trình Pascal có ứng dụng như thế nào trong thực tế
Học sinh khó kiểm tra bài làm của mình sau khi lập trình là đúng hay là sai Có thể trên lý thuyết là đúng nhưng thực tế sẽ có những trường hợp thiếu chính xác trong từng ngữ cảnh cụ thể
Học sinh thường tìm hiểu những ngôn ngữ lập trình đang được quan tâm hiện nay như Java, C++, Python, Theo TIOBE Index, trang chuyên thống kê nhu cầu tuyển dụng lập trình viên dựa trên kết quả tìm kiếm của 25 công cụ tìm kiểm nổi tiếng thế giới như Google, Bing, Yahoo, Wikipedia, Amazon, YouTube và Baidu để thống kê, so sánh và đưa ra xu hướng phát triển thì kết quả công bố tính đến tháng 11 năm 2015 ( hình 1.1), Pascal được xếp thứ 17 về
độ phổ biến Nếu tính theo kết quả đó thì việc lựa chọn Pascal đưa vào giảng dạy sẽ khó thuyết phục học sinh học tập, nghiên cứu và đam mê lâu dài
Hình 1.1 Biểu đồ xếp hạng độ phổ biến các ngôn ngữ lập trình tháng 11/2015
Để giải quyết phần nào những vướng mắc mà học sinh gặp phải, tôi tập trung nghiên cứu vào việc: “Xây dựng phần mềm hỗ trợ dạy và học ngôn ngữ lập trình Pascal cho học sinh Trung học phổ thông” nhằm tạo sự tương tác giữa người học với môn học, và phát huy tính tích cực, chủ động trong học tập của người học với môn học ngôn ngữ lập trình pascal
Trang 141.2 Phát biểu bài toán
Phần mềm được nghiên cứu là một trang web thay cho trình soạn thảo của Pascal như Turbo Pascal, Free Pascal Trang web hỗ trợ người học về cách sử dụng ngôn ngữ lập trình Pascal và thực hành các dạng bài tập, đồng thời cho phép người học biên dịch và kiểm thử các dạng bài tập Pascal ngay trên giao diện của trang web, nếu chương trình của người học đạt yêu cầu hệ thống đưa ra, người học sẽ nhận được lời chúc mừng khích lệ, được cộng điểm và được tiếp tục làm bài có cấp độ thách đố cao hơn Mỗi dạng bài tập người học có thể xem lại, chỉnh sửa lại nhiều lần nhưng hệ thống chỉ tính điểm cho lần đầu tiên mà người học làm đạt yêu cầu
Trang web nhận đầu vào là mã Pascal qua quá trình phân tích mã Pascal, sinh các ca kiểm thử, chương trình sẽ trả về kết quả đúng hoặc sai Nếu kết quả là đúng, hệ thống sẽ mở khóa cho phép người học làm bài tập kế tiếp Nếu kết quả là sai, người học cần chỉnh sửa lại mã Pascal, việc này được lặp đi lặp lại cho đến khi ra kết quả đúng
1.2.1 Quy trình xử lý
Xây dựng Hệ thống gồm những bước cơ bản sau:
Xây dựng trình soạn thảo pascal trên trang web
Thiết kế kiểm thử mã pascal của người dùng đã nhập để đưa ra những phản hồi thích hợp
Xây dựng tài liệu hỗ trợ học tập ngôn ngữ lập trình Pascal từ nguồn tài nguyên
mở
1.2.2 Những khó khăn thách thức
Pascal là ngôn ngữ lập trình có cấu trúc thuộc dạng mệnh lệnh hiện nay chỉ được sử dụng chủ yếu trong giảng dạy Bắt đầu từ năm 2000, Pascal đã không còn được hỗ trợ phát triển, chính vì thế Pascal gần như không còn được ứng dụng trong ngành công nghiệp phần mềm
Pascal gặp hạn chế về thư viện hỗ trợ kiểm thử chương trình (so với C/C++ ) Những nghiên cứu và giải pháp kiểm thử cho Pascal hầu như không tiếp cận được, vì thế việc nghiên cứu giải pháp kiểm thử chương trình Pascal của người học được tôi tiến hành theo hướng thủ công với mỗi dạng bài toán sẽ có những hình thức kiểm thử khác nhau
Trang 151.3 Hướng tiếp cận
Thực tế cho thấy bối cảnh giáo dục hiện nay đã thay đổi Việc dạy và học không chỉ dừng lại ở việc phát triển tư duy, nhận thức mà còn bao gồm cả phát triển cảm xúc, thái độ và kỹ năng Vì vậy, để xây dựng phần mềm, tôi đã nghiên cứu những
mô hình giáo dục trực tuyến1 có khả năng cung cấp các chương trình và nội dung học tập thích ứng cá nhân hóa, tiếp đến tôi nghiên cứu những nguồn học liệu mở 2 cho các hoạt động sư phạm và những dạng game tương tác, giả lập chất lượng cao3 trợ giúp việc thực hành của học sinh Từ những nghiên cứu này, tôi đã tiếp cận mô hình học tập của codehunt
Code Hunt là một trò chơi trực tuyến giúp người chơi học cách viết mã lệnh Java và C# Chiến thuật trò chơi hóa của Code Hunt đã rất thành công trong việc thu hút sự chú tâm của người học Cách tiếp cận này giúp những người học lần đầu tiếp xúc với lập trình có thể thoải mái vui đùa với những khối lệnh lập trình đơn giản, còn những người thành thạo hơn có thể đưa ra các chiến lược giải quyết vấn đề Toàn bộ công cụ học tập tương tác hiện diện trên trang web dưới dạng các bài tập, cùng với các trợ giúp bằng văn bản hoặc video ngắn giúp cho học sinh bị cuốn hút vào các hoạt động học tập chủ động một cách tự nhiên từ đó dẫn dắt người học đến với các khái niệm và kĩ năng cơ bản của lập trình và thuật toán
1 https://www.codehunt.com/, https://code.org/ , https://www.codecademy.com/,
http://www.dreambox.com/, https://www.knewton.com/, https://www.khanacademy.org/
2 http://www.curriki.org/, https://learnzillion.com/, http://betterlesson.com/, https://www.gooru.org
3
https://www.explorelearning.com/, http://www.simcity.com/en_US/simcityedu,
http://mw.concord.org/
Trang 16Chương 2 TỔNG QUAN VỀ CODE HUNT VÀ ỨNG DỤNG TRONG
DẠY HỌC PASCAL
2.1 Tổng quan về Code Hunt
2.1.1 Giới thiệu về Code Hunt
Năm 2014, Microsoft công bố một trò chơi trực tuyến mới là Code Hunt Khác với những trò chơi giải trí khác, Code Hunt giúp người chơi học cách viết mã lệnh ngôn ngữ Java hoặc C# Chiến thuật trò chơi hóa của Code Hunt đã rất thành công khi thu hút hơn 150 000 người chơi từ khắp nơi trên thế giới và đạt được kết quả đáng ngạc nhiên khi có đến 99% người chơi quay trở lại trong một tuần sau đó
Điểm thú vị ở Code Hunt là nó được thiết kế giống như một trò chơi viết mã lệnh, nó thách thức người chơi phải suy luận về một vấn đề bí ẩn của bài toán, dựa vào những manh mối là các trường hợp thử nghiệm (Unit test) với một bộ đầu vào và đầu
ra kỳ vọng, người chơi sẽ phải đưa ra giải pháp để chương trình đúng hết với các trường hợp thử nghiệm (test cases)
2.1.2 Chức năng của Code Hunt
Code Hunt cũng giống với những trò chơi khác là nó cung cấp nhiều lĩnh vực
và cấp độ (level) khác nhau Người chơi sẽ viết mã lệnh Java hoặc C# trong một cửa
sổ giống như trình soạn thảo (IDE), để thực thi một công thức hoặc một thuật toán từ chức năng câu đố (Puzzle) của chương trình
Chức năng câu đố cung cấp cho người chơi những tham số đầu vào và kết quả tương ứng, Người chơi sẽ phải kiểm tra xem giải pháp của họ đưa ra có phù hợp hay không bằng cách nhấn vào nút “CAPTURE CODE”, khi nút này được nhấn hệ thống
sẽ thực thi những sự kiện sau [12]:
1 Mã lệnh của người chơi sẽ được gửi đến máy chủ trên nền điện toán đám mây
2 Máy chủ sẽ biên dịch mã lệnh (cung cấp tùy chọn chuyển đổi mã Java sang C#
và ngược lại)
3 Máy chủ sẽ phân tích mã lệnh và so sánh với thuật toán đặt ra
4 Kết quả được trả về và hiện thị cho người chơi
Trang 17Hình 2.1 Màn hình chính của Code Hunt
Chức năng phân tích mã sẽ hiển thị kết quả là những thông báo lỗi và gợi ý về thuật toán, được đưa ra dưới hình thức là một bộ đầu vào (input), kết quả thực tế (result actual), kết quả kỳ vọng của chương trình (output expected) Nhiệm vụ của người chơi là phải tìm ra được thuật toán hoặc viết những đoạn mã tương đương, sao cho với mỗi bộ đầu vào sẽ có kết quả phù hợp với kỳ vọng của chương trình, lúc đó người chơi sẽ chiến thắng cấp độ này
Hình 2.2 Các lĩnh vực của Code Hunt
Code Hunt sắp xếp các lĩnh vực theo các chủ đề mà người chơi phải tìm hiểu như toán tử số học, vòng lặp, câu điều kiện, các thuật toán, và nhiều chủ đề khác mà người chơi thường gặp trong lĩnh vực lập trình Trong mỗi lĩnh vực là những câu đố được sắp xếp theo cấp độ khó dần Ngay sau khi vượt qua một cấp độ người chơi sẽ chuyển sang cấp độ khó hơn Code Hunt chỉ mở khóa cho lĩnh vực đầu tiên, người
Trang 18chơi phải vượt qua tất cả các cấp độ trong lĩnh vực này mới được hệ thống mở khóa chuyển sang lĩnh vực tiếp theo
Khi người chơi hoàn thành một cấp độ, Code Hunt sẽ đánh giá kỹ năng của người chơi bằng cách gán số điểm 1, 2, hoặc 3 và phân tích mã lệnh có tinh gọn hay không? Mức 1 - giải pháp còn dài dòng, mức 2- giải pháp mức ở độ trung bình, mức 3 – giải pháp ngắn gọn Mục đích của việc đánh giá kỹ năng là để người chơi phải có ý thức trong việc cải thiện mã lệnh của họ, đánh giá này sẽ được nhân với một giá trị cụ thể ở mỗi cấp độ khác nhau, kết quả của phép tính sẽ là điểm số mà người chơi đạt được ở cấp độ này Người chơi có thể theo dõi sự tiến bộ của họ thông qua tổng số điểm tích lũy và bảng xếp hạng 15 người có tổng số điểm tích lũy cao nhất
2.1.3 Kiến trúc của Code Hunt
Code Hunt là một hệ thống điện toán đám mây được lưu trữ trong Windows Azure Khi người chơi có yêu cầu đến trang www.codehunt.com, hệ thống sẽ được phục vụ từ một ứng dụng điện toán đám mây tương tác với người chơi (front-end) Nếu người chơi đăng nhập vào hệ thống thì chức năng Windows Azure Active Directory Access Control sẽ ủy quyền cho một trong số nhà cung cấp định danh (Microsoft, Facebook, Google, Yahoo) Khi người chơi tham gia vào một cấp độ nào
đó, một ứng dụng điện toán đám mây thực hiện chức năng xử lý hệ thống (back-end) được thực thi ở api.codehunt.com Chức năng xử lý hệ thống sử dụng giao tiếp lập trình ứng dụng (API) phổ biến là REST, nơi thực hiện nhiệm vụ phân tích chương trình thực tế và lưu trữ dữ liệu người dùng trong Windows Azure Store Dữ liệu người dùng được xác thực bởi chuẩn OAuth (Open Authorization)
Hình 2.3 Kiến trúc của Code Hunt
Chức năng front-end và back-end được thiết kế có khả năng mở rộng tối đa, tăng số lượng nhân có sẵn để phục vụ không giới hạn số lượng người đăng nhập
Trang 192.2 Ứng dụng mô hình Code Hunt trong dạy học Pascal
2.2.1 Chiến thuật trò chơi hóa (Gamification)
Theo nghiên cứu của Lee và Hammer [13] chiến thuật trò chơi hóa khi được ứng dụng vào dạy học sẽ có tác động đến ba yếu tố tâm lý của người học đó là: Nhận thức, Cảm xúc, vị trí xã hội
Nhận thức: Trò chơi thường được tổ chức thành một hệ thống phức tạp và các
quy tắc cho người chơi khám phá thông qua những hoạt động thử nghiệm lặp đi lặp lại, người chơi sẽ phải quan sát các kết quả, kế hoạch di chuyển tiếp theo của họ, và thực hiện những kế hoạch Trong một thời gian ngắn, mong muốn của người chơi là phải đánh bại mỗi mức độ mà họ đã thử nghiệm
Trò chơi sẽ hướng dẫn người chơi thông qua quá trình chủ động và giữ họ tham gia vào những nhiệm vụ khó hơn Một kỹ thuật thiết kế trò chơi quan trọng là phải cung cấp những thách thức cụ thể nhưng hoàn toàn phù hợp với mức độ kỹ năng của người chơi, và tăng dần sự khó khăn cũng như kỹ năng của người chơi Sự thách đố khó khăn và mục tiêu trước mắt chính là động cơ thúc đẩy người học vượt qua, và đây chính là mục đích mà Chiến thuật trò chơi hóa cung cấp, trò chơi cũng cung cấp nhiều cách thức đạt đến thành công, cho phép học sinh lựa chọn các mục tiêu phụ của chính
họ trong các nhiệm vụ lớn hơn Điều này cũng hỗ trợ động lực và sự tham gia
Chiến thuật trò chơi hóa trong giáo dục có thể thay đổi các quan điểm của học sinh về học tập Học sinh thường được yêu cầu phải học và làm những việc mà đôi khi không hiểu được lợi ích lâu dài của môn học Chiến thuật trò chơi hóa có thể giúp sinh viên đặt câu hỏi, "Nếu tôi muốn vượt qua cấp độ này, tôi phải làm gì?" Chiến thuật trò chơi hóa mang lại cho người học sự rõ ràng, nhiệm vụ hành động và hứa hẹn với họ phần thưởng ngay lập tức thay vì lợi ích lâu dài mơ hồ Trong các trò chơi thiết kế tốt nhất, phần thưởng cho việc giải quyết một vấn đề là một vấn đề khó khăn hơn
Cảm xúc: Trò chơi mang đến một loạt những cảm xúc mạnh mẽ, từ sự tò mò
đến thất vọng với niềm vui, cung cấp nhiều kinh nghiệm cảm xúc tích cực, chẳng hạn như sự lạc quan và niềm tự hào Điều quan trọng, trò chơi cũng giúp người chơi kiên trì thông qua những trải nghiệm cảm xúc tiêu cực và thậm chí biến chúng thành tích cực Bởi vì trò chơi liên quan đến việc thử nghiệm lặp đi lặp lại, người học cũng phải chấp nhận đến sự thất bại lặp đi lặp lại, cách duy nhất để tìm hiểu làm thế nào để chơi các trò chơi là sau mỗi một lần thất bại người chơi cần phải rút ra một kinh nghiệm cho mình Trò chơi duy trì mối quan hệ tích cực với sự thất bại này bằng cách làm cho chu kỳ thông tin phản hồi nhanh chóng với một mức điểm thưởng thấp Ở trường học, thường các mức phần thưởng là cao, khó để đạt được, chu kỳ phản hồi thường kéo dài tính theo tuần, theo tháng, học kỳ hay năm học vì vậy học sinh có ít cơ hội để kiểm tra thử, thi thử mà học sinh sẽ phải học thật, thi thật để đạt được kết quả như mong đợi, và
Trang 20ngay cả những học sinh giỏi nhất cũng không tránh được sự lo âu, khi phải chờ đợi những cơ hội thi cử khi mà kết quả đạt được không như mong muốn là rất cao
Chiến thuật trò chơi hóa mang đến khả năng phục hồi khi đối mặt với thất bại, bởi thất bại được thiết kế như là một phần cần thiết của học tập Chiến thuật trò chơi hóa có thể rút ngắn chu kỳ phản hồi, cung cấp cho người chơi những phần thưởng nhỏ
để đánh giá những khả năng riêng của họ, và tạo ra một môi trường có nỗ lực, làm chủ, được khen thưởng Ở đó người chơi có thể học để thấy sự thất bại là một cơ hội, thay
vì trở nên bất lực, sợ hãi và cảm giác bị lấn át
Vị trí xã hội: Tham gia vào trò chơi giúp con người được thử nghiệm trong
nhiều dạng nhân vật khác nhau, với nhiều vai trò và khả năng mới, Chiến thuật trò chơi hóa cung cấp uy tín xã hội và công nhận thành tích đạt được của người chơi một cách công khai, thông qua một dạng nhân vật mới với nhiều thành tích sẽ giúp người chơi có những suy nghĩ khác về những khả năng mà họ có thể làm được
Việc kết hợp yếu tố trò chơi và giáo dục sẽ khuyến khích học sinh tham gia vào các hoạt động trong lớp học, giáo viên sẽ được cung cấp những phương tiện giáo dục
và đánh giá học sinh, nhằm tạo ra môi trường học tập vui vẻ, truyển cảm hứng tích cực tới học sinh
Ban đầu Chiến thuật trò chơi hóa được đưa vào để việc củng cố, ghi nhớ kiến thức tô điểm cho bài học, dần dần nó được nghiên cứu để có thể thay thế toàn bộ nội dung học tập nhằm nâng cao sự nhận biết, tác động đến hành vi, nâng cao động lực và thúc đẩy sự tham gia của mọi người
Việc đưa game vào dạy lập trình Pascal có thể giúp học sinh nhận được những kiến thức thiết thực ngay lập tức bởi trong các trò chơi thường bao gồm những sự trải nghiệm được lặp đi lặp lại và vì thế đôi khi người học thường phải đối mặt với những
sự thất bại được lặp lại, với mỗi một lần thất bại người học sẽ phân tích cũng như khắc phục từng lỗi một Và như vậy người học sẽ cố gắng tiếp tục cho tới khi nào mà
họ thành công Từ hành động, nỗ lực lặp đi lặp lại của người học mà vô tình hay chủ động ghi nhớ bài học được lồng ghép trong các trò chơi Việc áp dụng Game giáo dục còn giúp người học được tiếp thêm động lực thông qua việc lĩnh hội cảm xúc, sự chờ đợi, và sự cố gắng
Việc triển khai trò chơi hóa trong giáo dục có tiểm năng rất lớn như: giúp giảm chi phí và cải tiến chất lượng theo các cách thức khác nhau; Tìm kiếm các giải pháp cho các vấn đề cơ bản ở rất nhiều quốc gia như phát triển đội ngũ nhà giáo, mở rộng
cơ hội tiếp cận hạ tầng công nghệ; Cung cấp dịch vụ giáo dục cho số đông dân chúng với chi phí thấp hơn nhiều hoặc cung cấp chất lượng cao hơn với cùng chi phí; Dễ dàng nhân rộng những mô hình tốt ở quy mô lớn; Khai thác dữ liệu để hiểu rõ hơn việc
Trang 21học của con người; Gia tăng năng suất của giáo viên, giải phóng giáo viên khỏi những công việc tay chân vốn tốn thì giờ như thi cử, chấm bài
Bên cạnh những lợi ích mang lại, việc ứng dụng Chiến thuật trò chơi hóa vào giáo dục có những mặt hạn chế như:
Việc triển khai phụ thuộc hoàn toàn vào thiết bị công nghệ, nếu không có nền tảng công nghệ thì phương pháp này khó có thể triển khai
Không phải nội dung nào của bài học cũng phù hợp để có thể đưa vào game
Đôi khi trò chơi tạo cảm giác khuyến khích người chơi tham gia học tập vì mục đích điểm thưởng và thể hiện bản thân chứ không phải vì thu nhận kiến thức
Người chơi Game thường muốn được giải trí, tự do chọn lựa trò chơi, được có những khám phá, trải nghiệm riêng của họ Việc áp đặt người học tham gia Game giáo dục trong quá trình học tập sẽ khiến người học cảm giác phải tuân thủ theo một nguyên tắc gò bó không khác kỷ luật trong lớp học là mấy
Khó để có thể xây dựng một Game giáo dục hấp dẫn như Game giải trí, nếu quá lạm dụng đôi khi có thể xảy ra hiệu ứng ngược, thay vì thu nhận kiến thức người học lại quá đam mê vào yếu tố giải trí của trò chơi, hoặc sự thách đố quá khó cũng dễ người chơi nản chí, bỏ cuộc
Với những mặt tích cực, Chiến thuật trò chơi hóa vẫn đang không ngừng phát triển
và có mặt trong các lĩnh vực của thế giới thực, Chiến thuật trò chơi hóa được dự đoán
sẽ là một phần trong cuộc sống của học sinh trong nhiều năm tới, nó là chìa khóa để khai thác năng lượng, động lực và tiềm năng của học sinh, Chiến thuật trò chơi hóa được ứng dụng để chỉ đạo học tập thông qua trò chơi, chúng cung cấp cho học sinh những phương tiện để trở thành người chơi có thành tích cao và mang đến niềm tin trở thành người chiến thắng trong cuộc sống thực
2.2.2 Thiết kế động viên người học
Theo nghiên cứu của Jensen [14] động lực được xem như là “kích thích (arousal)” và “xung năng (drive)” Sự kích thích phù hợp giúp con người định hướng đến mục tiêu, xung năng là duy trì sự quan tâm để làm một việc đạt được mục tiêu Động lực có tác động lớn đến ý chí và hành vi của con người khi tham gia một vấn đề đặc biệt là học tập, vì vậy trong giáo dục cần thiết phải nghiên cứu về vấn đề làm thế nào để tạo ra, duy trì và gia tăng động lực ở người học
Động lực học tập của học sinh phụ thuộc vào những yếu tố sau [15]:
Môi trường học tập
Công nghệ đưa vào giảng dạy
Trang 22 Phương pháp sư phạm truyền đạt
Động cơ học tập
Khả năng tự học hỏi của mỗi học sinh
Sự thú vị mà môn học mang lại
Người học sẽ cống hiến được gì nếu theo học lập trình
Phần thưởng mà người học đạt được
Thực hiện thành công những yếu tố trên có thể mang lại kết quả cho người học như:
Tăng sự tham gia của người học với môn học
Thúc đây khả năng tìm tòi và sáng tạo trong môn học
Có khả năng phát triển sự nghiệp trong lĩnh vực lập trình
Nắm bắt được hướng đi trong lĩnh vực lập trình
Hình 2.4 Yếu tố tác động đến động lực học tập
Có rất nhiều nguyên nhân gây ra giảm động lực học tập của học sinh, trong đó
có nguyên nhân khá phổ biến đó là: Học sinh nhận thức được bài tập trên lớp hoặc
các nhiệm vụ không có ý nghĩa Học sinh sẽ đặt câu hỏi rằng: Tại sao phải học tập
chăm chỉ khi cảm thấy học tập vấn đề này không để làm gì? Đây là một câu hỏi mang tính cảm quan cá nhân, thay vì cố gắng đưa ra rất nhiều lý lẽ để thuyết phục học sinh
sự tuyệt vời của môn học, chúng ta có thể sử dụng cách thức dễ dàng tác động nhất tới động lực của học sinh thường là thông qua hoạt động học hiệu quả, đồng thời cung cấp các lựa chọn có ý nghĩa vào chương trình học và có một cách đơn giản hơn rất nhiều
đó là sử dụng phần thưởng trong học tập
Trang 23Theo Jensen [14], bộ não con người được thiết kế để dự đoán, xử lý, thưởng thức và ghi nhớ các phần thưởng Khi con người nghĩ về phần thưởng, họ thường nghĩ theo chiều hướng tích cực
Ví dụ như phần thưởng có thể mang lại niềm vui, tăng tần số hoạt động tìm kiếm có mục đích, duy trì hoạt động học, tăng hoạt động xã hội, tăng cường việc học, tăng khả năng thành công trong học tập kiến thức mới
Não bộ có thể tự tạo ra phần thưởng cho chính nó, những phần thưởng này có khả năng tạo ra chất gây nghiện mạnh tương tự như morphine, alcohol, nicotine, heroin, và cocaine kích thích não bộ không ngừng tìm kiếm cảm giác chiếm lĩnh phần thưởng Bên cạnh đó Não bộ có một xu hướng gắn liền sự trải nghiệm với các nguyên nhân và kết quả hải lòng Nhưng hệ thống tín hiệu khen thưởng ở não bộ là rất khác nhau Một trong những hệ thống đó bao gồm các hành vi dự đoán phần thưởng và một
hệ thống cho sửa chữa lỗi sai Hệ thống thứ nhất tạo ra sự chú tâm tăng dần tỉ lệ với những lời tán dương ngẫu nhiên và hệ thống thứ hai tạo ra kinh nghiệm học tập tốt hơn
Một vấn đề khác về mặt sinh học, bộ não làm quen với phần thưởng rất nhanh chóng Não bộ của con người thích ứng và năng động thay đổi tương ứng với môi trường, điều này có nghĩa là cái được làm tại một thời điểm có thể không cần kéo dài Chúng ta có thể nhanh chóng chuyển từ việc hài lòng với mức thưởng thấp sang mức thưởng cao hơn trong cùng một nhiệm vụ Mỗi phần thưởng có thể phù hợp với học sinh này nhưng lại không phù hợp với học sinh khác vì vậy tất cả các phần thưởng nên được cá nhân hóa
Phần thưởng thường là điều mà ai cũng mong muốn được nhận, có thể sử dụng phần thưởng để tạo động lực trong lớp học, dựa trên những gợi ý sau:
Sử dụng phần thưởng một cách sáng suốt: Nên sử dụng phần thưởng cho
những trường hợp có khả năng đặc biệt, trong thời gian ngắn và có lý do cụ thể,
vì phần thưởng có thể trở nên nhàm chán và thành tích của người học sẽ giảm theo thời gian, khi sử dụng lặp đi lặp lại các phần thưởng
Sử dụng phần thưởng ít giá trị và cụ thể: Sử dụng các sản phẩm ít giá trị kinh tế
là cách thức trao thưởng dễ và lên kế hoạch ngừng trao thưởng sau vài tuần Nếu không, học sinh sẽ quen với việc được trao thưởng và sẽ mất tác dụng
Sử dụng phần thưởng trừu tượng: Các hình thức thừa nhận phần thưởng (giấy
chứng nhận, thư cảm ơn, lời khen) hoặc lễ tôn vinh không liên quan đến tiền bạc (các trò chơi, hoạt động vui chơi, các đặc quyền) là một cách thức thay thế hiệu quả, đặc biệt khi thực hiện những nhiệm vụ khó Các phần thưởng có thể
Trang 24được trao trong thời gian ngắn, nếu phần thưởng được trao liên tục trong một thời gian dài, chúng có thể gây mất động lực
2.2.3 Thiết kế học tập trải nghiệm
Trong báo cáo “Tầm nhìn mới cho giáo dục: Giải phóng tiềm năng của công nghệ” của Diễn đàn kinh tế thế giới (WEF) [16] để thu hẹp khoảng cách giữa nhóm quốc gia có thu nhập cao trong khối OECD với nhóm các quốc gia có thu nhập thấp nghiên cứu chỉ ra rằng cần phải áp dụng những tiến bộ KH&CN trong giáo dục, nhóm tác giả đề xuất một sáng kiến về một hệ thống giảng dạy khép kín (Close-loop Instructional System) có tích hợp những công nghệ giáo dục tiên tiến vào từng khâu trong chu trình giáo dục từ tạo lập mục tiêu học tập, phát triển chương trình, nội dung học tập và chiến lược giảng dạy, đánh giá quá trình, can thiệp, theo dõi và đo lường kết quả học tập tất cả được kết nối với nhau thành một chu trình:
Hình 2.5 Hệ thống giảng dạy vòng tròn khép kín
Giải pháp công nghệ này vừa tích hợp những công nghệ tiên tiến vào chu trình giáo dục, vừa mở cửa cho những hình thức giảng dạy mới, có đổi mới thực chất trong nội dung và cách thức để gia tăng thời gian học tập, nâng cao chất lượng tương tác và cải thiện hiệu quả giáo dục
Áp dụng hệ thống giảng dạy vòng tròn khép kín vào việc hỗ trợ dạy và học ngôn ngữ lập trình Pascal trong bối cảnh hiện nay, chương trình cung cấp cho người học và giáo viên một kho lưu trữ các nguồn bài giảng và học liệu mở, học sinh có thể bắt đầu phần thực hành bằng cách tiếp cận tập hợp các câu hỏi thách đố từ chương trình, học sinh được khuyến khích sử dụng kiến thức sẵn có của mình để trả lời cho những câu hỏi, qua mỗi bài tập học sinh sẽ được trang bị thêm những kiến thức mới thông qua những câu hỏi thách đố mà mà học sinh phải giải quyết, trong từng giai đoạn giáo viên
có thể xem xét dữ liệu đánh giá về tiến độ của người học, để có thể đưa ra những phương pháp giảng dạy thích hợp bất cứ lúc nào
Trang 25Trong đó, hệ thống giảng dạy khép kín như là một gợi ý tổng thể về chương trình học tập Pascal, và là mô hình tham khảo về nền tảng công nghệ được tích hợp như thế nào trong các bài học, hoặc cả chương trình để đạt được hiệu quả tốt Mô hình dạy và học Pascal được tôi triển khai bắt đầu chu trình là tạo lập mục tiêu học tập, phát triển chương trình, nội dung học tập và chiến lược giảng dạy, đánh giá quá trình, can thiệp, theo dõi và đo lường kết quả học tập tất cả được kết nối với nhau thành một chu trình như sau:
Hình 2.6 Ứng dụng hệ thống giảng dạy khép kín vào nội dung dạy và học Pascal
Chuyển đổi phương pháp học truyền thống sang Gamification trong môn lập trình Pascal
Bảng 2.1 Chuyển đổi từ phương pháp học truyền thống sang Gamification Phương pháp tiếp cận truyền thống Phương pháp tiếp cận Game giáo dục Khóa học: Lập trình Pascal
Điểm: Đánh giá người học
Sách giáo khoa
Các chương
Chủ đề
Khóa học: Lập trình Pascal Điểm: Thưởng cho người học Thư viện (bộ công cụ học liệu) Các giai đoạn
Các cấp độ
Trang 26Người học có thể chọn lựa các giai đoạn phù hợp với cá nhân, Nội dung học tập được tiến hành theo từng giai đoạn (thử nghiệm) như sau:
Hình 2.7 Nội dung học tập được theo từng giai đoạn
Hiện tại hệ thống đã hoàn thiện được nội dung bài tập thử nghiệm ở mức độ cơ bản như sau:
Hình 2.8 Nội dung bài tâp thực nghiệm theo từng giai đoạn
Trang 272.2.4 Đánh giá người học theo thang phân loại Bloom và Drefus
Trong lĩnh vực giáo dục, thang phân loại các mức trí năng của Bloom được dùng phổ biến khắp thế giới và được xem là một công cụ quan trong xây dựng mục tiêu giáo dục, đo lường giáo dục, đặt câu hỏi trong giảng dạy và nghiên cứu, xây dựng
và thiết kế bài giảng cũng như hướng dẫn giảng dạy để đạt mục tiêu đã đề ra
Nhà tâm lý giáo dục Benjamin Bloom cùng nhóm nghiên cứu của mình đã phân
loại mục tiêu giáo dục theo hai lĩnh vực tri thức và cảm xúc [17] trong đó lĩnh vực tri
thức được chia thành sáu phạm trù chủ yếu, sắp xếp theo mức độ tăng dần gồm Biết (Knowledge), Hiểu (Comprehension), Ứng dụng (Application), Phân tích (Analysis), Tổng hợp (Synthesis) và Đánh giá (Evaluation)
Nhận thấy cách phân loại của Bloom chưa thật sự hoàn chỉnh, năm 1990 Lorin Anderson, một học trò của Benjamin Bloom, đã cùng một số cộng sự đề xuất điều chỉnh về cấp độ tư duy Trong đó, Có ba sự thay đổi đáng chú ý là cấp độ tư duy thấp nhất là Nhớ thay vì Biết, cấp độ ở mức cao nhất là Tổng hợp được thay thế bằng cấp
độ Sáng tạo, các danh động từ chỉ sáu cấp độ tư duy được thay cho các cấp độ danh từ
Sự điều chỉnh này nhận được sự ủng hộ và công nhận bởi đa số các cơ sở giáo dục, nhất là các trường đại học – nơi đề cao các hoạt động giúp phát triển năng lực sáng tạo của người học
Hình 2.9 Thang phân loại các mức trí năng của Bloom
Trong đó:
Mức độ Nhớ: Kiến thức ở mức độ này bao gồm những thông tin có tính chất
chuyên biệt, mà một người học có thể nhớ hay nhận ra sau khi tiếp nhận Việc học thường bắt đầu từ nhu cầu “muốn biết” và để “biết được cái gì đó”, người học chỉ cần vận dụng trí nhớ, nên thành quả đạt được ở mức ghi nhớ Thường mục tiêu giáo dục không dừng ở việc dạy các tri thức thuộc mức “ghi nhớ” này Trong đo lường giáo dục, thường sử dụng những câu hỏi có dạng Nhắc lại, mô tả, liệt kê, trình bày, chọn lựa, gọi tên, nhận diện một vấn đề
1956 2002
Trang 28Một ví dụ về việc dạy kiến thức lập trình ở mức “ghi nhớ” là chỉ cho học sinh cách thức khai báo và sử dụng biến trong lập trình, học sinh cần phải nhớ quy tắc này
Mức độ Hiểu có nghĩa là người học cần nắm được ý nghĩa của thông tin, thể
hiện qua khả năng diễn giải, suy diễn, liên hệ Ở mức này, người học có khả năng chỉ
ra ý nghĩa và mối liên hệ giữa các thông tin (hay khái niệm) mà họ đã biết Khi phát biểu một định nghĩa nào đó, tức là người học đã biết đến khái niệm, nhưng để chứng tỏ hiểu, họ phải có khả năng giải thích được các khái niệm trong đó, minh họa bằng các
ví dụ hay hình ảnh, phát biểu lại (rephrase) định nghĩa đó trình bày dưới dạng khác mà không mất đi đặc trưng của khái niệm Những yêu cầu về mức hộ hiểu thường là Giải thích, tóm tắt, phân biệt, mở rộng, khái quát hóa, cho ví dụ, nhận định, so sánh, sắp xếp
Ví dụ về mức này là giải thích cho học sinh biết được vai trò quan trọng của biến trong lập trình là “bộ nhớ” trong chương trình, qua đó học sinh hiểu được biến là một “không gian lưu trữ” tạm thời các dữ liệu
Mức độ Vận dụng: Người học có khả năng áp dụng thông tin đã biết vào một
tình huống, một điều kiện mới, biết sử dụng phương pháp, nguyên lý hay ý tưởng để giải quyết một vấn đề nào đó Vấn đề được giải quyết ở đây phải khác vấn đề đã được thảo luận trên lớp hay trong giáo trình, các kiến thức có thể được đem ra áp dụng vào các vấn đề thực tiễn của người học Để đo lường khả năng ứng dụng, ta có thể sử dụng các bài thực hành hoặc kiểm tra các kĩ năng trong các bài trắc nghiệm (liệt kê các thủ tục, xem xét lỗi có thể phát sinh, lựa chọn giải pháp từ dữ kiện sẵn có)
Ví dụ: sau khi học sinh hiểu được đặc tính “lưu trữ tạm thời” của biến, trong quá trình lập trình, khi chương trình cần lưu trữ dữ liệu nào để tính toán, học sinh sẽ nhớ ra rằng cần phải lưu vào trong biến
Mức độ Phân tích: Người học có khả năng chia các nội dung, các thông tin
thành những phần nhỏ để có thể chỉ ra các yếu tố, các mối liên hệ, các nguyên tắc cấu trúc của chúng Phân tích là khả năng xé nhỏ vấn đề thành các khái niệm thành phần
có quan hệ với nhau để tìm hiểu bản chất của vấn đề Với khả năng phân tích, người học đi đến bản chất của sự vật hay khái niệm, là tiền đề quan trọng để lấy chất liệu tổng hợp hoặc phê phán, từ đó đi tới sáng tạo cái mới Ở mức độ này, thường yêu cầu người học có các kỹ năng như tận dụng, áp dụng, tính toán, chứng minh, giải thích, xây dựng, lập kế hoạch
Ví dụ: trong quá trình viết và chạy chương trình, học sinh có thể thấy chương trình chạy khá chậm so với những chương trình đã viết trước đó Với hiểu biết về
“không gian lưu trữ” với “dung lượng giới hạn”, và toàn bộ quá trình xử lí của máy tính, học sinh có thể hiểu được máy chậm có thể do bộ nhớ bị chiếm dụng nhiều Từ
Trang 29đó đi đến các xử lí cần thiết để giảm số lượng biến và giới hạn kiểu dữ liệu một cách tối ưu
Mức độ Đánh giá: Người học có khả đưa ra nhận định, phán quyết của bản
thân đối với một vấn đề dựa trên các các tiêu chí đã có Ví dụ: Phản biện một nghiên cứu, một bài báo; đánh giá khả năng thành công của một giải pháp; chỉ ra các điểm yếu của một lập luận Những câu hỏi liên quan đến mức độ Đánh giá là Cho ý kiến, Bình luận, Tổng hợp về các vật liệu, kĩ thuật, khái niệm hay phương pháp Để có được sự đánh giá, thông thường người học phải có khả năng phân tích vấn đề rõ ràng, tổng hợp
và so sánh từ nhiều nguồn, từ đó đưa ra các nhận định cuối cùng Kết quả của đánh giá thường làm xuất hiện các tri thức mới, phủ định các tri thức đã biết, hoặc khẳng định với các căn cứ xác đáng phương pháp hay vật liệu được nghiên cứu
Ví dụ: Lập trình viên có thể đưa ra các đánh giá các phương án lưu trữ dữ liệu trên RAM trên một máy tính như hiện tại, hay lưu trữ dữ liệu trên nhiều máy tính, hoặc kết hợp với việc lưu trữ dữ liệu xử lí trên đĩa cứng để so sánh xem các phương pháp nào hiệu quả hơn về mặt xử lí, và đề xuất các giải pháp hoàn toàn mới tốt hơn
Mức độ Sáng tạo: Người học có khả năng tạo ra cái mới, xác lập thông tin, sự
vật mới trên cơ sở những thông tin, sự vật đã có Ví dụ: Thiết kế một thuật toán mới, xây dựng một giải pháp mới; xây dựng hệ thống các tiêu chí để đánh giá một hoạt động; đề xuất hệ thống các giải pháp nhằm khắc phục những hạn chế; xây dựng cơ sở
lý luận cho một quan điểm; lập kế hoạch tổ chức một sự kiện mới, những yêu cầu về mức độ Sáng tạo thường là Thiết lập, Tổng hợp, Xây dựng, Thiết kế, Đề xuất…
Đối chiếu 6 cấp độ nhận thức đã phân tích với các mục tiêu về Kiến thức, Kỹ năng và Thái độ của người học, chúng ta có thể thấy các mục tiêu giáo dục ở bậc học phổ thông thường dừng ở hai mức Biết-Hiểu; ở bậc học thiên về thực hành (trung cấp, cao đẳng nghề) thì mục tiêu chủ yếu là Biết-Hiểu-Dùng, bậc học đại học thường có thêm các mục tiêu ở mức Phân tích và có thể có Tổng hợp và Đánh giá ở một số môn học Các khóa học sau đại học chủ yếu đặt mục tiêu thuộc hai mức cuối cùng trong thang phân loại Bloom Một trong những mục tiêu phổ quát của giáo dục là khả năng giải quyết vấn đề (problem-solving), vấn đề càng phức tạp thì tri thức và kĩ năng yêu cầu để giải quyết càng cao cấp hơn Khi đó, người học cần có khả năng phân tích sắc bén, tổng hợp tri thức một cách hệ thống, cũng như có khả năng phản biện và đánh giá
để có thể đưa ra giải pháp tốt nhất
Đối với người học, việc tiếp cận các mức trí năng sẽ ảnh hưởng trực tiếp tới phong cách học tập Do vậy giáo viên cần định hướng phong cách học tập tập cho người học để họ đạt được thành quả cao hơn trong học tập
Hình dưới đây mô tả hai phong cách học tập khác nhau khi người học tiếp nhận các loại tri thức khác nhau theo phân loại của Bloom Theo đó, nếu chỉ quan tâm tới
Trang 30các tri thức thuộc loại Biết và Hiểu, người học đang tiếp cận hời hợt (surface learning), khó thành công trong phát triển năng lực bản thân; để thành công trong học tập, người học cần tiếp cận các mức độ tri thức cao hơn (phong cách deep-learning)
Hình 2.10 Thang phân loại tri thức của Bloom và phong cách học tập
Dreyfus cho rằng, kĩ năng (ví dụ như kĩ năng lập trình) sẽ trải qua năm mức độ trưởng thành: Nhập môn (Novice), Kiến thức căn bản (Advanced Beginner), Có năng lực (Competent), Thành thạo (Proficient), Chuyên gia (Expert) Theo đó, mức thấp nhất thường thấy ở người bắt đầu từ con số không, trước khi học; mức cuối cùng có thể thấy ở những chuyên gia – những người đạt đến trình độ thuần thục về kĩ năng tới mức trực giác Mô hình này chỉ ra rằng, để đạt được mức độ “Chuyên gia”, chúng ta cần phải tích cực luyện tập, tích lũy kinh nghiệm và không ngừng tiếp nhận và cải biến các tri thức mới [18]
Hình 2.11 Thang phân loại năng lực của Dreyfus
Phong cách học hời hợt
Phong cách học sâu
Trang 31Trong đó:
• Nhập môn (Novice):Khi mới bắt đầu học lập trình người học chưa hề biết gì về
máy tính, người học đang ở “đẳng cấp” “Làm quen” Ở mức này, thầy giáo thường phải chỉ cho người học biết thủ tục chi tiết của tất cả mọi việc từ bật máy tính lên như thế nào, tắt đi làm sao, những thứ đơn giản nhất cũng phải quy trình hóa Đặc trưng cơ bản của mức độ này là việc người học có nhu cầu tuân thủ 100% quy tắc và kế hoạch, không có bài tập yêu cầu “động não”
• Kiến thức căn bản (Advanced Beginner): Người học đã có thể ghi nhớ kiến
thức và sử dụng tương đối linh hoạt Người học được tiếp cận một số tình huống yêu cầu phải tư duy nhưng thông thường các yếu khái niệm chưa được liên kết lại, nên vẫn chưa có khả năng làm việc độc lập mà cần có sự kèm cặp của người có kinh nghiệm hơn, thường xuyên có yêu cầu trợ giúp
• Có năng lực (Competent): Người học đã có thể thích ứng và giải quyết các vấn
đề phức tạp dựa trên những kinh nghiệm sẵn có Tuy nhiên, người học chưa có khả năng tự sửa lỗi cho mình, và chưa có khả năng tự đánh giá mình Với lập trình viên có năng lực đó là đội ngũ có thể tham gia vào quy trình sản xuất, tự mình hoàn tất công việc được giao, là người giải quyết vấn đề, ít khi là người phát hiện vấn đề Ở mức độ này, kĩ năng bắt đầu trở nên thực sự hữu dụng
• Thành thạo (Proficient): Có khả năng liên kết các vấn đề riêng lẻ, học hỏi kinh
nghiệm từ chính mình và từ người khác, người học ở mức độ thành thạo có thể tự sửa sai, nâng cao chất lượng các hoạt động của mình
• Tinh thông (Expert): Đây là mức độ cao nhất của thang năng lực, người học đã
có sẵn trong người các kinh nghiệm, các kĩ xảo, nên có khả năng phản ứng rất nhanh trước các vấn đề gặp phải Sự tinh thông giống như trực giác là kết quả của quá trình tích lũy các mô hình, lý thuyết và các kinh nghiệm lâu dài
Khác với “Phân loại Bloom” là một phương pháp khoa học, mô hình Dreyfus không quan tâm tới yếu tố “khoa học” mà tập trung vào “thực nghiệm” – tức là những quan sát thực tiễn để rút ra các điều bổ ích Có thể Mô hình Dreyfus không mang lại nhiều giá trị học thuật, nhưng lại mang nhiều ý nghĩa thực tiễn và dễ áp dụng
2.3 Kết luận chương 2
Trong chương này, tôi tập trung nghiên cứu và phân tích mô hình Code Hunt một trò chơi trực tuyến giúp người chơi học lập trình Java và C#, đồng thời tôi nghiên cứu những mô hình giáo dục đang được sử dụng trong thiết kế giảng dạy, đánh giá và
-đo lường kết quả học tập trên thế giới, từ đó đưa ra những đề xuất về thiết kế nội dung học tập Pascal Nội dung tiếp theo tôi đi vào phân tích, thiết kế và xây dựng phần mềm
hỗ trợ dạy và học Pascal
Trang 32Chương 3 XÂY DỰNG HỆ THỐNG GIẢI QUYẾT BÀI TOÁN
3.1 Mô tả và xây dựng bài toán
3.1.1 Mô tả bài toán
Phần mềm hỗ trợ dạy và học ngôn ngữ lập trình Pascal cho học sinh THPT là một trang web thay cho trình soạn thảo của Pascal như Turbo Pascal, Free Pascal, có hai nhiệm vụ chính là thiết kế giảng dạy và đánh giá người học:
Thiết kế giảng dạy: Bao gồm những chỉ dẫn và hệ thống bài tập được thiết kế giống như sự thách đố người học và cơ chế trao phần thưởng khi vượt qua sự thách đố đó là những thách đố ở mức cao hơn, điểm số, huân chương, sự công nhận
Thiết kế kiểm thử và Đánh giá người học: Công việc đánh giá được thực hiện theo mỗi bài hoặc mỗi cấp độ (từ đơn giản đến phức tạp) Việc kiểm tra và phát hiện lỗi mã Pascal của người học tiến hành bằng hai phương pháp kiểm thử:
Kiểm thử hàm/chức năng (Kiểm thử hộp đen)
Phân tích cấu trúc (Khảo sát thiết kế và mã nguồn hay là kiểm thử hộp trắng tĩnh)
3.1.2 Sơ đồ chức năng của phần mềm
Chức năng của phần mềm gồm 6 chức năng chính như hình:
Hình 3.1 Sơ đồ chức năng của hệ thống
Trang 33Phần mềm hỗ trợ dạy và học Pascal là một trang web bao gồm sáu chức năng
cơ bản như sau:
Quản lý học liệu: Phần mềm có khả năng thêm mới, cập nhật, xóa những tài liệu, video, chỉ dẫn về Pascal
Quản lý bài tập:
Thêm yêu cầu: Thêm những yêu cầu về bài tập hoặc những chỉ dẫn mới
Thêm mã biên dịch: Người quản trị/người dạy học có thể thêm mã Pascal vào trình biên dịch tích hợp trực tuyến trên trang web giúp định hướng cách viết chương trình cho học sinh
Tạo mức điểm thưởng: Với mỗi bài tập có thể tạo mức điểm thưởng khác nhau
Quản lý tiến trình học:
Quản lý mã Pascal: Quản lý mã Pascal người học nhập
Biên dịch: Mã Pascal người học viết sẽ được hệ thống biên dịch, nếu thành công hệ thống sẽ đưa output ra giao diện trang web, nếu chương trình còn lỗi hệ thống sẽ thông báo người học cần phải sửa lại chương trình
Kiểm thử mã: Mã Pascal được phân tích để xác định có đúng với yêu cầu của hệ thống hay không?
Đánh giá: Dựa vào kết quả phân tích mã Pascal hệ thống sẽ đánh giá kỹ năng của người học
Quản lý cấp độ kỹ năng:
Thêm mới: Thêm mới các cấp độ đánh giá từ ngây thơ đến chuyên gia và cao hơn nữa
Sửa: Sửa tên các cấp độ cho phù hợp
xóa: Xóa các cấp độ không phù hợp
Bảng xếp hạng người học:
Xem xếp hạng về điểm: người học đạt mức điểm và kỹ năng cao nhất
Xem xếp hạng về kỹ năng
Trang 343.1.3 Thiết kế Cơ sở dữ liệu
Cơ sở dữ liệu của bài toán sử dụng 5 bảng để lưu trữ thông tin của người học, bài tập Pascal, Cấp độ kỹ năng của người học, tài liệu bài giảng về Pascal
Thông tin của người học gồm trường Tên tài khoản, mật khẩu, tên đầy đủ,
điểm, trạng thái kích hoạt
Hình 3.2 CSDL lưu thông tin người học
Bài tập Pascal: gồm mã bài tập, tên bài tập, câu hỏi, câu trả lời, mã nguồn gợi
ý, cấp độ bài tập, với nhiều dạng bài thử nghiệm, người quản trị có thể dễ dàng thay đổi hoặc thêm bớt bài tập phù hợp với tiến trình của người học
Hình 3.3 Cơ sở dữ liệu lưu bài tập của phần mềm
Cấp độ kỹ năng: gồm các trường mã kỹ năng, tên kỹ năng, mức điểm xác định
kỹ năng, mô tả thông tin
Hình 3.4 Cơ sở dữ liệu lưu cấp độ kỹ năng của người học
Tài liệu Pascal: gồm trường mã tài liệu, tên tài liệu, mã nhúng tài liệu
Trang 35Hình 3.5 Cơ sở dữ liệu lưu tài liệu học Pascal
Bài giảng Pascal: Gồm trường mã bài giảng, tên bài giảng, mã nhúng của bài giảng
Hình 3.6 Cơ sở dữ liệu lưu bài giảng về Pascal
3.1.4 Thiết kế Kiểm thử mã Pascal
Việc kiểm tra và phát hiện lỗi mã Pascal của người học được tôi tiến hành bằng hai phương pháp kiểm thử:
Kiểm thử hàm/chức năng (Kiểm thử hộp đen)
Phân tích cấu trúc (Khảo sát thiết kế và mã nguồn hay là kiểm thử hộp trắng tĩnh)
a, Kiểm thử hàm chức năng
Kiểm thử hàm dựa trên quan niệm rằng bất kỳ chương trình nào cũng được coi là một hàm ánh xạ các giá trị từ miền dữ liệu đầu vào vào miền dữ liệu đầu ra của nó Khái niệm này được dùng chung trong kỹ thuật khi các hệ thống đều được coi là các hộp đen Chính điều này dẫn đến thuật ngữ kiểm thử hộp đen, trong đó nội dung của hộp đen (việc cài đặt) không được biết/không cần quan tâm, và chức năng của hộp đen được hiểu theo các dữ liệu đầu vào và dữ liệu đầu ra của nó như hình 2.1 Trong thực
tế, chúng ta thường thao tác hiệu quả với những kiến thức về hộp đen Chính điều này
là trung tâm của khái niệm định hướng đối tượng nơi mà các đối tượng được xem xét như là các hộp đen và chúng chỉ tương tác với nhau bằng các lời gọi thông qua các phương thức có thể quan sát được từ bên ngoài[3, tr.10]
Trang 36Hình 3.7 Một hộp đen kỹ thuật
Kiểm thử hàm (functional testing) là các hoạt động kiểm tra chương trình dựa trên tài liệu mô tả chức năng, yêu cầu phần mềm, hay còn gọi là đặc tả chức năng (functional specification) Đặc tả chức năng là tài liệu mô tả yêu cầu, hành vi của chương trình mong muốn Tài liệu này là cơ sở để chúng ta tiến hành xây dựng các ca kiểm thử, thuật ngữ chuyên môn gọi là thiết kế kiểm thử (test design) và người thực hiện việc này là người thiết kế kiểm thử Thiết kế kiểm thử là hoạt động chính trong kiểm thử hàm Cần nhấn mạnh rằng kiểm thử hàm là việc thiết kế các ca kiểm thử hàm của chương trình chỉ dựa trên đặc tả của chương trình mà không dựa trên việc phân tích mã nguồn của chương trình Kiểm thử hàm còn được gọi với tên khác chính xác hơn là kiểm thử dựa trên đặc tả, hay kiểm thử hộp đen, hay kiểm thử chức năng [1, tr.97]
Phương pháp kiểm thử hộp đen được tôi áp dụng trong việc kiểm tra mã pascal của học sinh ở dạng bài tập thử nghiệm 1, 3, 4, 5
Dạng bài tập thử nghiệm 1: Đưa ra màn hình dòng thông báo bất kỳ
Tôi cần chắc chắn người học biết cách đưa một chuỗi ra màn hình bằng câu lệnh write/writeln, vì thế thay vì thanh tra mã nguồn người học viết tôi chỉ cần tiến hành lấy dữ liệu output đầu ra của chương trình và so sánh với chuỗi đáp án của bài toán lưu trong cơ sở dữ liệu tôi tạo ra, người học có thể viết mã pascal tùy ý miễn sao đảm bảo được việc đưa ra output đúng với chuỗi mà bài tập thử nghiệm yêu cầu
Với dạng bài tập thử nghiệm số 3, 4, 5: Hoàn thiện câu lệnh để nhận được đầu ra như kỳ vọng
Tôi sẽ thực hiện một loạt các quy trình như sau
Bước 1: Ngay khi chương trình của người học được hệ thống biên dịch trả về kết
quả là đúng, tôi tiến hành lấy mã chương trình của người học lưu thành tập tin có tên [username]_exer_[chỉ số bài tập].Pas