Description |
Beginning Computer Science students often have a difficult time establishing good programming habits. There are a few simple steps that they can follow that can make things fall into place better. Unfortunately, these steps can involve extra work and thought up front, so many students ignore the advice of their teachers and try to work it out by brute force. Professors have no efficient way to ascertain whether these steps have truly been followed. This project has focused on developing a tool that will encourage two habits that make the programming process more straightforward. These habits are: 1. Validating preconditions and postconditions and 2. Visualizing abstract data structures. Both of these can make coding and debugging much simpler tasks, but many students fail to see the point of them - why go to that extra work when it can be done by brute force? Most would rather sit down and begin to type. The tools we have developed will provide beginning students with an incentive to develop these habits. As they develop their first Java programs, our tool will allow them to easily validate preconditions and postconditions and give them a graphical representation of their data structures. As they take advantage of this, they will learn the value of these methods, and will form habits that will make them more efficient, more productive programmers. As a proof-of-concept project, we have written these tools in Java for students being taught Java. To use our tool, students will write their Java programs as they normally would, but with special annotations in their comments. Our program takes the students source code as input, and allows the students to experiment with their Java classes in a graphical environment. They can instantiate their classes and call member functions. Properly configured, our program will give them a graphical representation of their data structures as they manipulate them, and inform them of violations of the preconditions and postconditions that they defined in their annotations. This will establish habits for thinking of their Java classes in these terms. |