## 1 Introduction  
Learning to write programs using languages such as C, C++, Java, Python, and C# has become increasingly important for students at various levels and for developers in information technology. The importance of learning programming in the U.S. and other advanced countries has risen notably over the years, influenced by educational changes and societal shifts that acknowledge the significance and versatility of coding abilities. For example, the Ministry of Education in South Korea announced the Digital Talent Cultivation Plan in August 2022, which mandates coding education in elementary schools [1]. eLearning refers to the use of digital resources to facilitate teaching and learning, often delivered or facilitated via the Internet. It offers a self-paced, customizable approach to learning, often accessible anytime, anywhere. It has been a common teaching approach in higher education, and the recent pandemic notably accelerated the adoption of eLearning. While eLearning for programming languages offers the benefits of accessibility, time flexibility, and content reusability, the effort involved in creating and maintaining the content is significant. This includes preparing the fundamentals of language constructs, providing examples of using the constructs, designing coding exercise problems, and assessing coding exercises submitted by students. Building an eLearning system to teach various programming languages poses significant challenges due to the following facts:* There are numerous programming languages that need to be taught. * Each language has more than 10 distinct units, as appeared as chapters in books, to teach elements such as variables, data types, operators, functions, control structures, looping, class, and inheritance. * Each unit of a language has about three to five topics to teach, such as for loop, while loop, and repeat-until loop for the topic of 'looping'. * Each topic of a unit has four types of learning activities: teaching the foundations of the topic, illustrative examples, exercise problems, and grading the exercise problems by instructors. The foundational material includes coding constructs, their usage, syntax, semantics, and guidelines. The task of generating coding exercise problems can be daunting and the process of evaluating students' exercise submissions demands considerable effort. Given these challenges, creating an eLearning system for programming languages necessitates a substantial investment in both time and resources, underlining its technical intricacy. On the other hand, a potent strategy for enhancing learning is to personalize the learning contents to each student's individual needs and characteristics. Personalized learning offers numerous benefits compared to a one-size-fits-all conventional approach. These benefits are especially pronounced when learning programming languages. Unlike merely memorizing language constructs, programming requires creativity in the exercise of coding. Personalized coding exercises for each student provide high effectiveness in learning language constructs and promote applying creativity in coding. Therefore, personalizing learning materials, including examples and exercise problems, surely optimizes the learning efficiency of each individual student. The research questions we formulated include the following:  
* How to construct an eLearning system that can cover all the major programming languages, not just a specific one? * How to deliver learning content that is effectively personalized to each student? * How to automate the generation of personalized foundational content on the fly? * How to automate the generation of coding exercise problems on the fly? * How to automate both quantitative and qualitative assessments of student submissions in coding exercises? * How to automate the management of learning progress for students? * How to achieve complete automation in the creation of eLearning content and classroom management, thereby significantly eliminating the need for instructor involvement?