Chương 1: Tổng quan Trang 2 do an Báo cáo đồ án tốt nghiệp o Tuyển tập những thách thức được người dùng yêu thích, những thách thức từ các công ty nổi tiếng như Google, Facebook, Amazon. o Thách thức có hiển thị tình trạng giúp người dùng biết được thách thức chưa làm, đang làm và đã hoàn thành. o Hệ thống có biểu đồ thống kê tình trạng luyện tập của người dùng. Làm bài: o Hỗ trợ làm bài với nhiều ngôn ngữ.
o Hệ thống lưu trữ lịch sử nộp bài của người dùng với nhiều thông tin như tình trạng, thời gian, bộ nhớ, ngày nộp bài. o Một số câu hỏi có hỗ trợ gợi ý và đáp án. o Mô tả thách thức rõ ràng, dễ hiểu. o Hỗ trợ debug, phím tắt, retrieve code, reset code.
o Code editor có hỗ trợ thay đổi theme, font. o Có khu vực cho phép người chơi trao đổi về thách thức. o Số lượng test case cực nhiều. Học tập: o Các khóa học liên quan đến nhiều chủ đề khác nhau.
o Khóa học được chia ra nhiều phần rõ ràng, chi tiết. o Chia sẻ kinh nghiệm cho xử lý thách thức cho người dùng. Thi đấu: o Số lượng cuộc thi phong phú. o Có bảng xếp hạng.
o Bảng xếp hạng thể hiện thông tin rõ ràng thời gian, tình trạng làm bài của từng thách thức. Phỏng vấn: o Các bộ thách thức phong phú của nhiều công ty lớn trên thế giới. Kết luận LeetCode được sử dụng phổ biến bởi nhiều công ty lớn trong thế giới. Hệ thống đem lại một trải nghiệm thú vị cho người dùng.
Tuy nhiên, vẫn còn vài điểm mà nhóm cảm thấy chưa tốt khi trải nghiệm. Ưu điểm: Chương 1: Tổng quan Trang 3 do an Báo cáo đồ án tốt nghiệp o Kho thách thức đa dạng phong phú. o Các khóa học trình bày rõ ràng, dễ hiểu, các câu hỏi có tính thực hành cao. o Chức năng làm bài hỗ trợ người dùng nhiều tính năng.
o Số lượng cuộc thi phong phú. o Các bộ câu hỏi phỏng vấn có tính thực tiễn cao sát với nhu cầu của các công ty lớn. o Số lượng test case cực lớn. o Biểu đồ thống kê lịch sử luyện lập, hiển thị tình trạng làm bài với từng thách thức.
o Code Editor cho phép thay đổi theme, font. Hỗ trợ chức năng Autocomplete. Nhược điểm: o Chưa kiểm soát được tình trạng chia sẽ mã nguồn giữa các người dùng. o Một số mà hình có giao diện khá đơn điệu.
Giới thiệu CodeLearn là hệ thống, nền tảng tương tác trực tuyến giúp lập trình viên có thể học tập, rèn luyện kỹ năng lập trình. Hệ thống được phát triển bở FPT vì vậy các thách thức khá, quen thuộc, gần gũi với lập trình viên Việt Nam.2: CodeLearn Chương 1: Tổng quan Trang 4 do an Báo cáo đồ án tốt nghiệp 1. Tính năng CodeLearn hỗ trợ người dùng một số tính năng chính sau: Luyện tập: o Thách thức được phân loại theo nhiều chủ đề như: mảng, chuỗi, truy cấn cơ sở dữ liệu. o Hỗ trợ công cụ tìm kiếm và lọc thách thức theo tên, độ khó, tình trạng giúp cho người dùng có thể tìm kiếm thách thức phù hợp với vùng kiến thức mong muốn.
o Có bảng xếp hạng cho từng thách thức. o Thách thức có hiển thị tình trạng giúp người dùng biết được thách thức chưa làm, đang làm và đã hoàn thành. Làm bài: o Hỗ trợ làm bài với nhiều ngôn ngữ. o Hệ thống lưu trữ lịch sử nộp bài của người dùng với nhiều thông tin như tình trạng, thời gian, ngày nộp bài.
o Mô tả thách thức rõ ràng, dễ hiểu. o Có khu vực cho phép người chơi trao đổi về thách thức. Học tập: o Các khóa học liên quan đến nhiều chủ đề khác nhau. o Khóa học được chia ra nhiều phần rõ ràng, chi tiết.
o Chia sẻ kinh nghiệm cho xử lý thách thức cho người dùng. o Các bộ câu hỏi trắc nghiệm đa dạng. Thi đấu: o Bảng xếp hạng real-time. o Bảng xếp hạng thể hiện thông tin rõ ràng thời gian, tình trạng làm bài, số lần nộp bài của từng thách thức.
Kết luận CodeLearn là một trong số ít các hệ thống hỗ trợ các lập trình viên luyện tập và nâng cao khả năng lập trình được phát triển bởi công ty từ Việt Nam mà vẫn không thua kém gì các hệ thống đã có chỗ đứng trong thị trường. Chương 1: Tổng quan Trang 5 do an Báo cáo đồ án tốt nghiệp Ưu điểm: o Kho thách thức đa dạng phong phú. o Các khóa học trình bày rõ ràng, dễ hiểu, các câu hỏi có tính thực hành cao. o Chức năng làm bài hỗ trợ người dùng nhiều tính năng.
o Biểu đồ thống kê lịch sử luyện lập, hiển thị tình trạng làm bài với từng thách thức. Nhược điểm: o Chưa kiểm soát được tình trạng chia sẽ mã nguồn giữa các người dùng. o Code Editor chưa hỗ trợ nhiều tính năng. Tính cấp thiết của đề tài Hiện nay, trong bối cảnh cả thế giới bị ảnh hưởng nặng nề bởi đại dịch COVID-19, nước ta nói chung và ngành giáo dục nói riêng cũng bị ảnh hưởng không kém.
Các trường đại học buộc phải tạm hoãn thời gian học tập trung ở trường một thời gian dài. Điều đó có thể làm cho sinh viên lười biếng, không chịu học tập và rèn luyện code. Vì thế cần phải xây dựng một hệ thống luyện tập trực tuyến, nơi mà sinh viên và giáo viên có thể tương tác với nhau trên đó để có thể học tập, kiểm tra thông qua các bài tập trên hệ thống mà không cần phải kiểm tra trên lớp như mọi khi. Thứ hai, ngày nay hầu hết các sinh viên chỉ ưu tiên học tập và chạy theo các công nghệ mới, không ưu tiên đến việc rèn luyện tính tư duy thông qua giải các bài tập giải thuật.
Điều này có thể ảnh hưởng đến sự thăng tiến của sinh viên sau khi ra trường và làm việc. Vì thế, nhóm đã quyết định làm một ứng dụng đề giải quyết các vấn đề trên. Hệ thống sẽ được vận hành thông qua ba đồi tượng chính: sinh viên, giáo viên và người quản trị. Ba đối tượng này có những quyền hạn ràng buộc nhau để giúp cho ứng dụng có chất lượng cao nhất giúp chất lượng sinh viên học công nghệ thông tin ngày càng được hoàn thiện thêm nữa, cung cấp một nguồn nhân lực có trình độ cao cho xã hội.
Chương 1: Tổng quan Trang 6 do an Báo cáo đồ án tốt nghiệp 1. Mục tiêu và nhiệm vụ đề tài 1. Mục tiêu Thông qua việc phát triển ứng dụng, nhóm có cơ hội tìm hiểu về ReactJs, Golang và Docker Chỉnh sửa và hoàn thiện giao diện trang web cho phù hợp, đẹp mắt Hoàn thiện các chức năng quản lí khóa học, bài tập, trang thông tin cá nhân Xây dựng thêm các tính năng mới: Trang thi đấu, trang luyện tập, ứng dụng có tính liên kết với mạng xã hội, bảng xếp hạng điểm của người dùng trong từng khóa học 1. Nhiệm vụ Tìm hiểu, tham khảo các chức năng và giao diện của các hệ thống tương tự Tìm hiểu về Docker trên server thực thi code Tìm hiểu ReactJs và Golang để chỉnh sửa và xây dựng các tính năng mới Xây dựng trang web thân thiện, có liên kết với các mạng xã hội (đăng nhập bằng FB, chia sẻ trên FB, …) Bổ sung các tính năng còn thiếu trong quản lí khóa học, bài tập Tạo leaderboard chung và riêng trên mỗi khóa học Xây dựng thêm các tính năng thi đấu giữa người dùng và các qui định thời gian và số lượt làm bài tập để tăng tính cạnh tranh trong việc học code Nghiên cứu và deloy ứng dụng lên nền tảng Google cloud 1.
Công nghệ lập trình Sử dụng Golang và Nodejs để viết server backend và ReactJS phía Frontend Sử dụng Docker để đóng gói các ứng dụng trong image và deloy chúng thông qua Docker container Chương 1: Tổng quan Trang 7 do an Báo cáo đồ án tốt nghiệp Để triển khai hệ thống thông qua mạng Internet, nhóm sử dụng các dịch vụ cảu Google Cloud 1. Phạm vi nghiên cứu Tìm hiểu và áp dụng các cộng nghệ sử dụng trong đề tài ReactJS: xây dựng Single Page Application áp dụng reactJs và các thư viện liên quan Golang: Tìm hiểu về ngôn ngữ Golang, áp dụng server Rest API cho đề tài Google Cloud: Tìm hiểu các dịch vụ của Google Cloud để triển khai hệ thống lên mạng Docker: Tìm hiểu các hoạt động của Docker và viết Docker file cho máy ảo biên dịch code java Runner: Tìm hiểu cách thức hoạt động của một hệ thống code online và áp dụng vào đề tài Chương 1: Tổng quan Trang 8 do an Báo cáo đồ án tốt nghiệp CHƯƠNG 2. Định nghĩa Docker là dự án mã nguồn mở cung cấp công cụ giúp lập trình viên triển khai và chạy các ứng dụng nhanh và dễ dàng thông qua các container. Mỗi container sẽ chứa các dependency cần thiết để chạy một ứng dụng.
Cấu trúc Docker sử dụng công nghệ máy ảo tuy nhiên khác với máy ảo thường khi mỗi máy ảo sẽ chiếm rất nhiều tài nguyên của host thì Docker sử dụng công nghệ container để tạo môi trường tách biệt với host nhưng vẫn chia sẻ những tài nguyên chung chứ không chiếm hoàn toàn như máy ảo.1: Cấu trúc Docker Docker có thể chạy hàng chục container cùng một lúc mà vẫn đảm bảo được hiệu năng cao cho ứng dụng. Ngoài ra Docker còn giúp lập trình viên triển khai ứng dụng Chương 2: Cơ sở lý thuyết Trang 9 do an Báo cáo đồ án tốt nghiệp nhanh chóng và ít rủi ro hơn khi dễ dàng thiết lập môi trường làm việc qua một lần cài đặt. Chức năng Runner là chức năng được nhóm phát triển dựa trên thư viện Codewars-runner-cli giúp biên dịch code JAVA và kiểm tra code đúng bao nhiêu case trong bài kiểm thử. Codewars-runner-cli là một dự án mã nguồn mở trước đây được Codewars và Qualified.io sử dụng để thực thi mã cho nhiều ngôn ngữ và thư viện kiểm thử khác nhau.
Dự án là ứng dụng Node CLI app. Codewars-runner-cli có các chức năng sau: Có thể chạy được đa ngôn ngữ. Kết quả trả về kèm thời gian thực thi. Runner còn mở rộng các chức năng sau sau: Viết API service để gọi Node CLI từ web client.
Format lại đầu ra thân thiện với người dùng. Có hiệu năng ổn định khi chạy nhiều lệnh cùng lúc. Chương 2: Cơ sở lý thuyết Trang 10 do an Báo cáo đồ án tốt nghiệp Hình 2.2: Luồng thực thi code online 2. Vấn đề Có 2 vấn đề sau: Vấn đề 1: Thư viện Codewars-runner-cli không hỗ trợ cấu hình trên hệ điều hành Window.