Introductory programming courses tend to have lower pass rates than other STEM subjects, with a global average of 75% from 2014 to 2018 in 17 universities across eight countries. While students often understand basic programming concepts, they struggle to apply them effectively. Practice is deemed by students as the most helpful method to overcome this challenge. However, current learning management systems used for self-paced practice in university, including the one implemented in Telkom University, lack adaptive features that personalize questions based on individual student ability. Prior studies have yet to build an adaptive practice system integrated with the Moodle learning management system that considers prior knowledge, progressively adjust question difficulty, and utilize students’ feedback. This research presents the development of such a system. We describe the domain and student model, recommender system, and the integration of our proposed system with Moodle. A preliminary study was conducted to compare the proposed system with a system similar to the one currently used for self-paced practice in Telkom University, which delivers questions randomly. Preliminary findings show that our adaptive system effectively utilizes students’ prior and current knowledge as well as their feedback to provide more appropriate questions. Survey results support the preliminary findings, with most students agreeing that the adaptive practice system is a better practice system compared to the random one, especially in terms of increasing their motivation. In addition, students’ positive feedback on the timeliness of the recommendations indicates that the system integration with Moodle was technically successful.