This project was my final project as an undergraduate in college. My team had about twenty weeks to develop a piece of software from start to finish. The projects available were presented to us within the first week, which were real projects requested by people or companies. My project is know as a Contest Data Package Tester, requested by the developers of the Programming Contest Control (PC²) system from California State University, Sacramento. We communicated with the lead developer on their team, and received a project overview for what this parser actually was.
The PC² system is a collection of software used to host programming contests. Different teams use a client to connect to a central server, and will be given a collection of programming problems to develop under a certain amount of time. When judges are preparing the contest, they have a large collection of input data for problems and need to ensure the output of that input is what’s expected. They’d do this by running a mock contest and test these problems one at a time. This was an incredibly tedious and time-consuming process. That’s the problem our software aimed to solve, where we would provide the user with a method to select problems to test, and visually see the results from testing, simplifying and speeding the process.
Despite our short time frame, we managed to complete the entire software on schedule. I’m incredibly proud of this software, since so much time and effort went into it, along with our client being pleased with the end result. There was a lot that I could take away from this project, but there were some key aspects that I could take away from it.
When we began the project, we spent about a month designing and fleshing out the entire program before writing a line of code. We put a ton of time into the design phase, creating our user interface and our software’s architecture, that when it came time to begin coding, we knew exact what had to be done. This was incredibly helpful, as we were able to solve a lot of the problems of our design before getting to deep into it’s implementation and spending too much time refactoring. Before this project, I never took as much time into the design phase as here. Most of my design was just create a list of features that I wanted to implement and go from there. However, this taught me that by creating a good design beforehand, a lot of the problems can be resolved before even encountering them.
On a more technical level, I’ve become confident in my abilities to work with JavaFX. Before starting this project, I knew nothing about JavaFX, as all my GUI programming was either web-based or in C#. After going through some tutorials and trial and error, I got familiar with the technology. I began to recognize reoccurring issues and how to solve them, how to work with multiple threads alongside the UI thread, and even creating custom FX components to extend the functionality of the pre-existing components. This technology went from one I knew nothing about, to being the one I’m most confident in, which just goes to show how much can be learned about a technology the more you work with it.
Overall, this project was fantastic to work on, and by far one that I’ve learned a ton from. I find myself going back to this code for reference, as a lot of the issues I’m encountering in other projects I’ve already solved here. Sadly, I cannot share the source code for this project, contracts and such, but the knowledge that I was able to take away from developing it is something that will definitely help in the future.