This STTR Phase I project represents a revolutionary advance in adaptive educational systems for computer programming by using big data collected from previous coding exercises to automatically generate hints and feedback for students coding in an integrated development environment (IDE). This work addresses NSF's Educational Applications subtopic "Tools for Learning and Assessment" by making adaptive learning widely available in a complex open-ended domain such as computer programming, and providing tools to assess student performance in order to make interventions as early as possible and help students succeed not only in developing solid computer programming skills, but also gaining a better understanding of best practices within an IDE when coding. The core customers for this technology will be providers of training systems for computer programming. This includes publishing organizations, developers of software tools, and institutions that teach computer science and programming. Institutions that are struggling to educate STEM (Science, Technology, Engineering, and Mathematics)-capable students can add this technology into their existing teaching systems to help retain more students in these high-demand STEM fields, and thus address the fact that introductory computer programming is often the course that leads many students to dropout of a potentially high-paying computer science career. While most programming IDEs provide syntactical assistance, there are no products that have an integrated solution for assistance on higher-level development strategies, which represents a clear drawback of current technology. To address this need, this work introduces the idea of linkage objects, which are objects that allow ion of different code segments of complex computer programs into comparable objects. These objects can then be linked into a large graph of known possible paths. Applying Markov models to this path allows the technology to present the learner with context-specific hints and feedback, and thus the system will adapt to different types of learners. A complicating factor is that, typically, programming homework problems will have many solutions that are only superficially correct, that is, some solutions give the correct answer while still exhibiting poor coding techniques. This technology will avoid reinforcing such poor choices by using large data sets that allow for detecting various solutions and identifying the most common approaches used to solve the problem. Additionally, automatically generated hints will suggest more optimal solution paths, allowing students to consider changing course to an alternative, more standard-approach solution.