Hệ thống hỗ trợ học lập trình
Bạn đang xem tài liệu "Hệ thống hỗ trợ học lập trình", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- he_thong_ho_tro_hoc_lap_trinh.pdf
Nội dung text: Hệ thống hỗ trợ học lập trình
- HỆ THỐNG HỖ TRỢ HỌC LẬP TRÌNH Lê Hải Đăng, Trần Mai Trường Phúc, Nguyễn Thịnh Tiến, Phạm Minh Tuấn Khoa Công nghệ Thông tin, Trường Đại học Công nghệ TP. Hồ Chí Minh GVHD: ThS. Bùi Mạnh Toàn TÓM TẮT Bài báo giới thiệu về website hỗ trợ học lập trình với giao diện thân thiện, dễ tương tác, khả năng compile, kiểm tra online dựa trên test case, đồng thời hỗ trợ nhiều ngôn ngữ lập trình thông dụng hiện nay. Bên cạnh đó, website còn hỗ trợ một số chức năng cần thiết như làm bài tập theo môn học, tham gia các cuộc thi, tải tài liệu giúp cho việc học lập trình của học viên trực quan, hiệu quả hơn. Từ khoá: Docker, ExpressJS, Judge0, Học lập trình online, MongoDB, NodeJS. 1 GIỚI THIỆU 1.1 Mô tả tổng thể 1.1.1 Tổng quan tình hình Hiện nay với sự bùng nổ của khoa học công nghệ và sự phát triển mạnh mẽ của công nghệ thông tin – đặc biệt là internet, các website học tập ngày càng nhiều, càng đa dạng đã đóng góp rất nhiều trong công tác rèn luyện khả năng tự học cho sinh viên. Trên các diễn đàn học tập, các website phục vụ cho việc học lập trình, sinh viên không chỉ củng cố được kiến thức nền tảng mà còn mở rộng được tầm hiểu biết, có cái nhìn bao quát và sâu sắc về các vấn đề trong bài học cũng như trong thực tế. Sinh viên có thể chia sẻ kiến thức cho nhau và thông qua đó học hỏi được nhiều kiến thức mới nhanh hơn, giải đáp được những thắc mắc và mở rộng tầm nhìn hơn. Không những thế, đây còn là nơi để giảng viên cập nhật kiến thức, và là công cụ hỗ trợ hoàn thiện về phương pháp giảng dạy. Ngoài ra, các website có nội dung học tập ngày càng được sinh viên và giảng viên truy cập nhiều hơn đó là do tính tiện dụng từ các nguồn tài liệu, các bài tập tham khảo, các đề ôn thi được đưa lên mạng ngày càng phong phú và đa dạng, sinh viên và giảng viên có thể tham khảo và nghiên cứ mọi lúc mọi nơi. Các website học lập trình trở thành một công cụ hỗ trợ đắt lực, nơi học lập trình rất tốt cho nhiều học viên đang học ngành Công nghệ Thông tin nói riêng và mọi người thuộc lĩnh vực Công nghệ Thông tin nói chung. Ở đây, người học có thể tìm thấy rất nhiều thứ hay về kiến thức và kỹ năng lập trình. Hơn thế nữa, tất cả các kiến thức đều được chia sẻ một cách miễn phí và luôn được cập nhật thường xuyên. Mặc dù hiện nay đã có nhiều website hỗ trợ học lập trình như: Code Academy, W3school, Codewars, FreeCodeCamp, Codefun từ cơ bản đến nâng cao, từ miễn phí đến có phí. Tuy nhiên, tất cả các website đó chưa thật sự phù hợp với sinh viên. Bên cạnh đó, việc cập nhật kiến thức mới còn phụ thuộc vào người quản trị của website dẫn đến một số nội dung, bài toán mới chưa được cập nhật kịp thời. Vì vậy, website hỗ trợ học lập trình được tạo ra với giao diện thân thiện, dễ tương tác, đồng thời hỗ trợ nhiều ngôn ngữ lập trình thông dụng 91
- hiện nay. Bên cạnh đó, website còn hỗ trợ một số chức năng cần thiết giúp cho việc học lập trình của học viên trực quan, hiệu quả hơn. 1.1.2 Lý do chọn đề tài Xây dựng website hỗ trợ học lập trình cho sinh viên Khoa CNTT nói riêng và cho tất cả sinh viên có học kiến thức liên quan về lập trình nói chung là rất cần thiết, vì các lý do sau đây: Cung cấp môi trường hỗ trợ học tập cho sinh viên. Mặc dù đã được giảng dạy và hướng dẫn rất tận tình, tuy nhiên vẫn còn một bộ phận sinh viên chưa tập trung dẫn đến khả năng tiếp thu bị giới hạn. Website sẽ là nơi giảng viên theo dõi, đánh giá và hỗ trợ kịp thời cho sinh viên. Cung cấp một môi trường tự học, một sân chơi bổ ích, giúp sinh viên có thể tự học, tự làm bài và thi đua với nhau, qua đó sẽ rèn luyện và củng cố thêm kiến thức. Vì vậy, website sẽ có chức năng phân chia bài tập phù hợp cho sinh viên đó tùy theo mức độ khó của mỗi bài tập thông qua bài kiểm tra năng lực đầu vào khi đăng ký. Sẽ có nhiều dạng bài tập khác nhau với độ khó khác nhau được liệt kê trong bài kiểm tra đánh giá năng lực. Từ đó sinh viên sẽ biết được điểm mạnh của bản thân và sẽ làm những dạng bài tập phù hợp với mình, rèn luyện kỹ năng bản thân ngày càng hoàn thiện hơn. 1.2 Giới thiệu về Judge0 - API (Compile source code) Judge0 là một hệ thống thực thi mã nguồn mở trực tuyến mạnh mẽ và có thể mở rộng. Do nhóm của Herman Zvonimir Dosilovic phát triển. Nó có thể sử dụng để xây dựng một loạt các ứng dụng khác nhau, từ ứng dụng lập trình để thi đấu với nhau cho đến các ứng dụng để giáo dục, tuyển dụng và cả đến trình chỉnh sửa code trực tuyến và còn hơn thế nữa. Judge0 IDE - một trình chỉnh sửa mã trực tuyến mã nguồn mở và miễn phí sử dụng Judge0 để thực thi mã nguồn của người dùng. Đây cũng có thể thử sử dụng một ứng dụng khách giả có thể giúp bạn khám phá và kiểm tra hầu hết các tính năng của Judge0. Judge0 được viết bằng ngôn ngữ: HTML, Ruby, Shell, Dockerfile. 1.2.1 Các tính năng của Judge0 Cài đặt dễ dàng và nhanh chóng, hỗ trợ hơn 60 ngôn ngữ, gọi lại HTTP là 1 dạng API, có thể đặt giới hạn thời gian và bộ nhớ, có thể biên dịch các phần mềm nhiều tệp, chạy chương trình trong sandbox an toàn và tin cậy. 2 KIẾN TRÚC HỆ THỐNG WEBSITE Hình 1. Kiến trúc của hệ thống 92
- 2.1 Front End - View Engine EJS: tác giả là Chris Sev. Chính là công cụ giúp viết code HTML một cách ngắn gọn và đơn giản hơn cách thông thường. Ngoài ra nó có thể đưa dữ liệu vào từ phía server và render ra đoạn HTML cuối c ng. JS là một package view engine thường gặp trong project Node.js/Express.js. 2.2 Backend - NodeJS: do Ryan Dahl phát triển. Là một hệ thống phần mềm được thiết kế để viết các ứng dụng internet có khả năng mở rộng, đặc biệt là máy chủ web. Chương trình được viết bằng JavaScript, sử dụng kỹ thuật điều khiển theo sự kiện, nhập/ uất không đồng bộ để tối thiểu tổng chi phí và tối đại khả năng mở rộng. Node. s bao gồm có V JavaScript engine của Google, lib V,và vài thư viện khác. - ExpressJS: là một framework dành cho Node.js, cung cấp nhiều tính năng mạnh mẽ trên nền tảng web cũng như trên các ứng dụng di động. Express hỗ trợ các phương thức HTTP và middleware tạo ra một API vô cùng mạnh mẽ và dễ sử dụng. Tổng hợp một số chức năng chính của Express.js: Thiết lập các lớp trung gian để trả về các HTTP request. De ine router cho phép sử dụng với các hành động khác nhau dựa trên phương thức HTTP, URL. Cho phép trả về các trang HTML dựa vào các tham số. - Docker: do Solomon Hykestạo ra. Là một nền tảng để develop, deploy và run application với container. Nó cho phép tạo các môi trường độc lập và tách biệt để khởi chạy và phát triển ứng dụng, môi trường này được gọi là container. Khi cần deploy lên bất kỳ server nào chỉ cần run container của Docker thì application của bạn sẽ được khởi chạy ngay lập tức. 2.3 Database: - MongoDB: do công ty phần mềm 10gen phát triển. Là một trong những cơ sở dữ liệu mã nguồn mở NoSQL phổ biến nhất được viết bằng C . MongoDB là cơ sở dữ liệu hướng tài liệu, nó lưu trữ dữ liệu trong các document dạng JSON với schema động rất linh hoạt. Nghĩa là có thể lưu các bản ghi mà không cần lo lắng về cấu trúc dữ liệu như là số trường, kiểu của trường lưu trữ. Tài liệu MongoDB tương tự các đối tượng JSON. 3 ƯU ĐIỂM, NHƯỢC ĐIỂM CỦA DỰ ÁN ƯU ĐIỂM NHƯỢC ĐIỂM - Giao diện thân thiện dễ làm quen. - Thời gian tải trang chậm. - Hỗ trợ nhiều ngôn ngữ lập trình. - Chưa tốt ưu hóa phần chọn bài tập trong - Compile code nhanh chóng với judge0 . cuộc thi. - Phân bài tập theo từng chương dễ dàng - Chưa đề xuất bài tập phù hợp với năng học tập. lực sinh viên. - Tổng hợp tài liệu để dễ dàng tìm kiếm. 93
- 4 THỬ NGHIỆM 4.1 Môi trường thử nghiệm - Máy tính cá nhân, quá trình cài đặt và chạy thử website . - Ngôn ngữ thực hiện: HTML, CSS, Javascript. 4.2 Kết quả đạt được 4.2.1 Quản trị viên (Admin) Chức năng cơ bản: đăng nhập, đăng xuất, làm bài tập theo danh sách và theo môn, tham gia cuộc thi, xem bảng xếp hạng, xem và tải tài liệu, xem lịch sử làm bài, xem và thay đổi thông tin cá nhân. Chức năng chính: quản lý môn học (thêm môn học, thêm chương cho từng môn, thêm bài tập cho từng chương), quản lý chủ đề (thêm chủ đề phù hợp cho từng bài tập), quản lý tài liệu (upload tài liệu lên), quản lý phân quyền (thêm và xóa quyền Quản trị viên, quyền Giảng viên cho tài khoản). 4.2.2 Giảng viên (Teacher) Chức năng cơ bản: đăng nhập, đăng xuất, làm bài tập theo danh sách và theo môn, tham gia cuộc thi, xem bảng xếp hạng, xem và tải tài liệu, xem lịch sử làm bài, xem và thay đổi thông tin cá nhân. Chức năng chính: quản lý bài tập (thêm bài tập trực tiếp hoặc bằng file excel), quản lý cuộc thi (tạo cuộc thi, quản lý chủ đề (thêm chủ đề phù hợp cho từng bài tập), quản lý tài liệu (upload tài liệu lên). 4.2.3 Người dùng (User) Chức năng: đăng nhập, đăng xuất, làm bài tập theo danh sách và theo môn, tham gia cuộc thi, xem bảng xếp hạng, xem và tải tài liệu, xem lịch sử làm bài, xem và thay đổi thông tin cá nhân. 4.2.4 Giao diện sản phẩm Hình 2. Giao diện làm bài thi 94
- 5 KẾT LUẬN Sản phẩm hoàn thành các chức năng đề ra cho các phân quyền: Quản trị viên, Giảng viên, Sinh viên. Sản phẩm dễ tương tác, hỗ trợ sinh viên làm bài tập, tham gia các cuộc thi lập trình do khoa, giảng viên khoa tổ chức, hỗ trợ giảng viên kiểm tra kiến thức, mức độ hiểu bài của sinh viên qua việc tổ chức các cuộc thi lập trình trực tuyến. Chức năng xếp hạng sau mỗi cuộc thi giúp giảng viên xem đánh giá, xếp hạng, xác định được mức độ hiểu bài của sinh viên. Giao diện website trực quan, hỗ trợ nhiều công cụ cho việc học, làm bài tập lập trình, tham gia cuộc thi, xem thành tích. Hỗ trợ biên dịch các Ngôn ngữ lập trình C, C++, C#, Python, Java, JavaScript . Test case không giới hạn nhưng đặt là 5. Thời gian time out của từng bài tập do người ra đề quy định. Bộ nhớ lên tới 128000(kb) và ngăn xếp có bộ xử lý 64000(kb). Hỗ trợ đến 60 luồng. Hướng phát triển trong tương lai: Gợi ý bài tập nâng cao năng lực cho người dùng, tối ưu hóa giao diện. TÀI LIỆU THAM KHẢO [1] Tham khảo về NodeJs & Mongodb. (truy cập lần cuối: 5/4/2021) [2] Tham khảo về sử dụng EJS template trong ứng dụng Node. node-application (truy cập lần cuối: 20/3/2021). [3] Tham khảo về Judge0 API (truy cập lần cuối: 20/4/2021). 95