Due to increasing demands of programmers and advances in internet technologies, many learning-by-doing web sites that provide programming exercises for learners to practice have been established. The exercises in these web sites are designed for novice learners and are sequenced linearly regardless of learners’ performance. As a result, an experienced learner who needs to learn another programming language may waste valuable learning time on exercises that are already familiar. To address this problem, this paper presents the design and development of a programming learning system that offers learners different practice paths depending on learners’ performance. Empirical study reveals that adaptive programming exercises can improve the learning efficiency for learners in the upper level of a programming class.