Traditional knowledge learning and skill training programs rely on instructions and practice problems to help a user (e.g., a learner or a trainee) to improve his/her understanding of new concepts and skills in solving problems. Typically, a number of problems are provided to the user. The user finishes some or all the problems in a certain time period and submits the answers. The learning/training programs provide feedbacks to the user indicating how many problems are correctly answered and how many are not. The user may correct the problems which are answered incorrectly and/or practice more. In this traditional process, the user's learning/training progress is often linked to the percentage of problems that are correctly answered in a set of practice problems. This measure of learning/training progress, however, is difficult to provide an accurate assessment of the user on the proficiency levels of the skills to be learned, and is difficult to forecast the performance of the user in a comprehensive exam. In addition, traditional learning/training programs do not have the intelligence or ability to make dynamic adjustment of focusing areas to optimize the efficiency of the learning/training. The present disclosure is directed to overcoming or mitigating one or more of these problems as set forth above.