Article Preview
TopIntroduction
Computer science skills, once only required for people who specialize in information and technology fields, are now incorporated in school curricula sometimes even in elementary school (Joint Task Force on Computing Curricula, Association for Computing Machinery (ACM) and IEEE Computer Society, 2013). In programming education, it is important to learn not only language constructs but also algorithms and data structures, because they are basis of modern applications, including those related to artificial intelligence, data analysis, combinatorics, geometrics, and numerical analysis. The classification of teaching materials is highly desirable because it would allow programming learners to determine what they want to learn and what they should avoid. Some e-learning systems allow problems and materials to be tagged to categorize them for a computer science curriculum. There is a large amount of learning materials related to this field, so people should be able to effectively study toward their individual goals. It is also important to consider the learning process to make learning more meaningful for students. However, in the computer science education, few ideas and services focus on teaching algorithms and data structures. Learning order could be critical for self-learners, especially for programming education, because syntax, data structures, and programming techniques, such as recursive algorithms, should be learned in the appropriate order.
Many online judge (OJ) systems, which are online environments that test the validity of computer programs, have been established. They are used by students and engineers to learn programming skills (Wasik, Antczak, Badura, Laskowski, and Sternal, 2016). A key point when studying programming with OJ systems is the selection of suitable problems. By considering the user's past actions, current skills, and objectives in a specific field, awareness computing can help users avoid wasting time on problems that are too difficult and thus frustrating. Users do not need to be experts in all fields of programming. They should study programming according to their software development needs or interests in a specific field. For this task, OJ systems can support learners according to their needs and provide guidelines.
For Aizu Online Judge (AOJ) system1 (Aizu Online Judge, 2004-2018; Watanobe, 2015), which is the main focus of this research, around 2,000 problems have been registered so far, and there is a function to tag problems with a genre. The user can thus find specific problems using tag. In addition, for UVa Online Judge (UVaOJ) system2 (Valladolid, 1995-2018), about 4,300 problems have been registered. They are categorized with specific problem classification into various problem types. For example, AOAPC I: Beginning Algorithm Contests, a course on UVaOJ, contains over 300 problems, each of which is in a specific category. In general, it is difficult to find specific problems on an OJ if there is no index of categories because typical OJ systems have a huge number of problem sets from past programming contests.
This paper proposes a recommendation system that identifies problems based not only on the user's past actions recorded by the OJ system but also on the user's objectives and desired learning path.
Specifically, current abilities and objectives of users in OJ system for each field are considered in the recommendation. By considering the current abilities of both the target user and other users, a more personalized recommendation system can be realized. However, due to the complexity of the relationship between users and problems, the recommendation scenario in an OJ system is different from that for typical e-commerce recommendation (Toledo, Mota, and Martinez, 2018).