Chương 1: Tổng quan Chương này đưa ra những lý do, nguyên nhân thúc đẩy việc phải xây dựng hệ thống chatbot gợi ý nội dung học phần thực hành theo hướng cá nhân hóa, giúp hỗ trợ người dùng trong quá trình học tập và thực hành, cùng với mục tiêu cần hướng đến khi xây dựng hệ thống và trình bày phạm vi áp dụng của hệ thống trong thực tế. Chương 2: Kiến thức nền tảng Chương này trình bày các đơn vị kiến thức có liên quan và các công trình nghiên cứu, giải pháp công nghệ thông tin hiện có sử dụng trong luận văn. Chương 3: Đề xuất mô hình Chương này trình bày cung cấp cho người đọc một cái nhìn bao quát về hệ thống, các bài toán con đặt ra cho đề tài hệ thống gợi ý nội dung học phần thực hành cho sinh viên và đề xuất mô hình để giải quyết các bài toán. Chương 4: Thực nghiệm và đánh giá Chương này trình bày quá trình thực nghiệm và đánh giá các mô hình, kiểm thử hệ thống và tiến hành đánh giá hiệu năng đối với toàn hệ thống.
Chương 5: Tổng kết Chương cuối cùng sẽ đưa ra những kết quả mà hệ thống đã đạt được sau khi hiện thực. Đồng thời, những tồn đọng cũng được đưa ra để xem xét và định hướng các công việc trong tương lai. Luận văn tốt nghiệp Trang 3/87 Đại học Quốc gia TP.HCM - Trường Đại Học Bách Khoa Khoa Khoa học và Kỹ thuật Máy tính Chương 2 Kiến thức nền tảng 2.1 Kiến thức về học phần thực hành trong lập trình máy tính 2.1 Định nghĩa về học phần thực hành trong lập trình máy tính Trong giảng dạy lập trình máy tính, học phần thực hành ở đây được hiểu là các bài tập thực hành về lập trình nhằm giúp rèn luyện nâng cao năng lực lập trình của sinh viên. Theo Campitelli & Gobet (2011) (4), một định nghĩa nói chung về thực hành có chủ đích là bao gồm các hoạt động được thiết kế nhằm mục đích nâng cao năng lực.2 Phân loại bài tập thực hành trong lập trình máy tính Simões Queir’os (2020) đã liệt kê các loại bài tập trong lập trình máy tính như sau (18): • Viết code từ đầu: Đây là cách tiếp cận phổ biến.
Dễ dàng cho giảng viên chuẩn bị, vì chỉ cần phát biểu bài toán là xong. Chỉ cần một bộ kiểm thử để đánh giá bài làm của sinh viên trong trường hợp sử dụng công cụ đánh giá tự động. Sinh viên phải viết mã từ đầu. Theo quan điểm của sinh viên, đây là tình huống bài tập khó nhất.
Cũng giống như một nhà văn hoặc một họa sĩ, họ có thể mắc hội chứng đầu trống rỗng và không biết bắt đầu từ đâu. Sinh viên có thể bắt đầu tập trung vào thuật toán chính để giải quyết vấn đề, nhưng một số học sinh sẽ bắt đầu với các đoạn mã bổ trợ hoặc không liên quan đến bài toán và cố gắng quay lại về bài toán chính sau và thường có thể là không kịp hoàn thành đúng thời hạn nộp bài. • Code skeleton: Giảng viên sẽ cung cấp khung code mẫu và yêu cầu sinh viên hoàn thành phần code còn lại. Ví dụ, giảng viên có thể đưa ra lệnh gọi hàm và yêu cầu Luận văn tốt nghiệp Trang 4/87 Đại học Quốc gia TP.HCM - Trường Đại Học Bách Khoa Khoa Khoa học và Kỹ thuật Máy tính sinh viên hoàn thành các thân hàm hoặc phương thức.
Tùy theo bài toán được đưa ra, khi được đưa trước khung code mẫu, trong một số trường hợp, mấu chốt vấn đề chính của bài toán có thể bị ẩn đi và sinh viên khó thấy được bức tranh tổng thể của vấn đề. Tuy nhiên, dạng bài này thường mạng lại lợi ích, vì giúp sinh viên nhanh chóng bắt đầu vào code và nắm bắt được vấn đề. • Điền vào chỗ trống: Tương tự như các dạng bài trên, nhưng sinh viên sẽ không cần phải viết đầy đủ các dòng hoặc khối mã, mà chỉ phải điền vào một số phần bị bỏ trống. Những khoảng trống này có thể mở, cho phép học sinh viết bất cứ thứ gì họ muốn hoặc một danh sách các lựa chọn để điền vào chỗ trống.
Dạng bài có thể thú vị nếu sinh viên không có khả năng chạy mã và được trình bày với các tùy chọn rất giống nhau, sẽ buộc phải thực sự hiểu những gì họ đang thực hiện, mà không thể kiểm tra mã. Trên thực tế, việc yêu cầu sinh viên giải quyết các nhiệm vụ lập trình mà không có khả năng biên dịch hoặc chạy mã của họ là có liên quan, vì thời gian biên dịch hiện tại quá nhanh, nên sinh viên có xu hướng thử tất cả các tùy chọn / kết hợp có thể cho một thuật toán cụ thể để tìm đúng câu trả lời (lập trình brute force). • Code baseline: Đối với dạng bài này, sinh viên được cho trước một đoạn mã đã hiện thực giải pháp cho bài toán với một số giá trị cụ thể, hoàn toàn chạy được. Yêu cầu đối với sinh viên là phải hiện thực được một giải pháp tốt hơn.
Sinh viên có thể cảm thấy thoải mái vì không phải hiện thực từ đầu mà thay vào đó lại có một "bài giải mẫu" để tham khảo. Tuy nhiên, để có thể thay đổi đoạn mã để hiện thực được giải pháp tốt hơn, sinh viên cần phải hiểu đoạn mã đã được đưa ra. Nếu đoạn mã không được viết tốt hay có các ghi chú phù hợp, thì sinh viên sẽ khó có thể hiểu được. • Tìm lỗi/gỡ lỗi: Trong loại bài tập này, sinh viên được yêu cầu tìm ra lỗi cho một giải pháp được trình bày và có thể phải sửa mã.
Những bài tập này được sử dụng để giúp sinh viên hiểu được logic thuật toán. Nếu trong điều kiện làm bài mà sinh viên không thể biên dịch và kiểm tra lời giải, đây là một cách tiếp cận rất thú vị. Các loại lỗi thường được đưa ra có thể là lỗi biên dịch như sai tên hàm, casting sai biến vv., hoặc lỗi logic trong chính thuật toán, hay lỗi về một số trường hợp mà thuật toán giải quyết chưa triệt để.3 Dữ liệu về bài tập thực hành trong lập trình máy tính Theo Simões & Queir’os (2020), các bài tập lập trình có thể được lưu dưới nhiều hình thức dữ liệu khác nhau nhưng về mặt ngữ nghĩa, cơ bản nội dung thường bao gồm các dữ liệu dưới đây (18): Luận văn tốt nghiệp Trang 5/87 Đại học Quốc gia TP.HCM - Trường Đại Học Bách Khoa Khoa Khoa học và Kỹ thuật Máy tính • metadata: dữ liệu cung cấp thông tin về bài tập. Thường được sử dụng cho các hoạt động khám phá trong kho dữ liệu (repositories); • chỉ dẫn: dữ liệu văn bản được trình bày cho sinh viên (ví dụ: các khẳng định, các chỉ dẫn, skeleton code).
Dữ liệu này thường được trình bày cho sinh viên trong môi trường lập trình training; • tập kiểm thử: dữ liệu được sử dụng bởi các công cụ đánh giá để đánh giá đoạn mã lập trình của sinh viên. Dữ liệu phổ biến nhất trong danh mục này là một tập hợp các bài kiểm thử thường gồm có cặp dữ liệu đầu vào/đầu ra và đáp án; • công cụ: các công cụ mà giảng viên có thể sử dụng để tạo dữ liệu (ví dụ: trình tạo phản hồi và tập kiểm thử, công cụ kiểm tra đạo văn). Thông thường, các dữ liệu mà sinh viên có thể nhìn thấy được là metadata và chỉ dẫn. Bên cạnh đó, tùy đề bài mà giảng viên có thể đưa hoặc không đưa ra dữ liệu kiểm thử để sinh viên sử dụng.
Còn thông tin về công cụ thì hoàn toàn được ẩn đi khỏi sinh viên. Các dữ liệu được trình bày sẽ có tác động đến quá trình làm bài tập thực hành của sinh viên. Do đó, khi gợi ý nội dung học phần thực hành cho sinh viên, một hệ thống gợi ý sẽ cần cân nhắc xem xét đến dữ liệu về metadata và chỉ dẫn, và/hoặc dữ liệu kiểm thử nếu có. Ngoài ra, còn có một loại dữ liệu nữa về bài tập thực hành, đó là các số liệu thống kê về đánh giá kết quả bài làm của sinh viên cho các bài tập đó.
Simões Queir’os (2020) xác định có một vài chỉ số có thể dùng để đo lường kết quả bài làm của sinh viên từ đó đánh giá năng lực của sinh viên đó và mức độ hiệu quả của bài tập được cho đối với việc nâng cao học tập, bao gồm (18): • Thời gian làm bài trung bình: từng sinh viên mất bao nhiêu thời gian để làm bài, bắt đầu từ thời điểm nhìn thấy mô tả bài toán cho đến khi gửi một lời giải tốt. Thông tin này cho phép giảng viên hiểu khả năng giải quyết vấn đề của sinh viên và so sánh tương quan với tập thể. • Số lần thử sai: số lần thử trung bình mà sinh viên thử nộp bài trước khi nộp được lời giải đúng. Nếu con số này cao, có nghĩa là sinh viên có thể đã không hiểu vấn đề một cách chính xác hoặc đang cố gắng tìm ra giải pháp, thay vì thực sự tư duy theo một cách tiếp cận tốt.
• Bộ nhớ được sử dụng ít nhất: sinh viên nào có giải pháp sử dụng ít bộ nhớ hơn cho mỗi bài toán. • Thời gian chạy chương trình nhanh nhất: sinh viên nào có lời giải chương trình chạy nhanh nhất. Luận văn tốt nghiệp Trang 6/87 Đại học Quốc gia TP.HCM - Trường Đại Học Bách Khoa Khoa Khoa học và Kỹ thuật Máy tính • Thời gian chạy chương trình trung bình: thời gian chạy trung bình của các lời giải chương trình của toàn bộ các sinh viên đối với một bài toán cụ thể là bao nhiêu. So sánh với thời gian của lời giải tiêu chuẩn, giảng viên biết được khả năng nói chung của tập thể sinh viên và đánh giá được mức độ khó dễ của bài toán đó.4 Quy trình cơ bản về bài tập thực hành trong lập trình máy tính Theo nghiên cứu về thực tiễn giảng dạy lập trình theo chuẩn CDIO, thông thường các môn học thuộc bộ môn khoa học máy tính được thiết kế nhằm xây dựng, duy trì và củng cố năng lực về tư duy và lập trình liên tục kéo dài trong suốt thời gian đào tạo được quy định của chương trình học.
Trong một chương trình đào tạo sẽ có các môn học cơ sở, các môn học chuyên ngành và đồ án thực hành thiết kế - kỹ thuật tổng hợp được sắp xếp dần theo các năm theo cấp độ kiến thức/kỹ năng tăng dần (Wang Y. Thật vậy, đối với Khoa Khoa học và Kỹ thuật Máy tính của trường ĐH Bách Khoa Tp.