A Java Stocks Program
Code is not available due to course limitations.
I developed this project for Bucknell's CSCI 205 course. Although this course uses Java, the real learning of this course is through teamwork and documentation. Even though I had four years of experience with Java before coming into the course, it challenged what I knew. This project specifically was a big shift for me – I came in as a computer science student and came out a software engineer. This project specifically gave me valuable knowledge of what types of projects I like, how I fit on teams, and technical skills I can improve.
Technical Details
The stock market visualization tool is a data-driven financial application. This was a huge leap in my programming ability as I had to consider both the data, and the user. This project served as a real-world software engineering project. It required the integration of interactive visualization and data processing. Turning indicators into algorithms for the program was an interesting feat, as well as deciding how to store and load the data.
Central to the project is the Model View Controller architecture. This choice keeps the code maintenance simple. I was able to separately test my data, logic, and UI. For example, there is a model file that is only dedicated to loading the data. Building this API was a strong choice – if I want to move to PostgreSQL instead of a CSV file it is a relatively easy change and will only affect that portion of the program. Also, I used the Java Streams API to perform data processing and financial analysis. I did this separately and was able to unit test my whole indicators package instead of relying on all components to work.
This project transitioned me from building apps based on client requirements to knowing when and where to make decisions. For example, I had to write out tests for my algorithms to confirm they worked properly. It was a lot easier to see something is "working" with code coverage displayed in my IDE. I was able to test algorithms as I was writing them.
On that note, I realized how shipping a project is much more important than the actual development. By giving myself a list of features I need and giving myself a deadline, I locked myself into being a professional and allocating time as needed. I estimated how much time each aspect would take and since I am just a student – planned my life accordingly.
Post-Assignment Analysis (Reflection)
Like I hinted at earlier, this project was transformative. It forced me to look beyond Java and at the software as a product. Instead of writing this code for simply a grade, I wanted the app to be extensible, easy to use, and also be something I am proud of.
Displaying the data elegantly and quickly was far more of a challenge than dealing with the data. It took trial and error to make sure the models, views, and controllers were SOLID. Part of that is making sure they only do one job – and do it well. Specifically I had to refactor my model to pre-process data for the controller. This didn't make sense at first because it seems that the controller should do ALL of the heavy lifting. But once I started unit testing, I just wanted to test my algorithms without having to rely on building a view for the controller.
Writing tests and UML before code actually seemed to save me time. I wasn't going back and forth on how things should be when I laid them out myself. Something I struggle with on pet projects is creating requirements that are both rigid and able to be changed later on. By writing the documentation, I was able to fallback to this on important decisions that would affect the timeline of the project.