About The Project
Other than writing small scripts to perform very specific tasks, this was my first real programming project. I had some difficulties finding applications to make solutions for my research (most applications do not perform the calculations that I needed), so I decided to make my own. I would commonly spend 30-40 minutes just doing calculations, then more time doing them again just to ensure that they were correct. It was during this project that I realized that I truly loved software development.
So the biggest problem I had starting out is a problem I wouldn’t even dream of having today. I couldn’t figure out how to organize packages and functions to make the code
modular. I spent about a month messing around with a broken pile of conditionals and magic values, and eventually gave up. The project wasn’t even functional, and my database was a crappy JSON file. Did I mention that I didn’t even know what a class was? I thought, “Maybe this whole software thing isn’t right for me”.
Some time passed, and I stumbled upon the idea of architecture in code. For as long as I pursued this project, I hadn’t looked into reading about programming practices at all, so the fact that there are agreed upon codebase structures really shocked me. I read more about Object-Oriented Programming, and became familiar with some of the software design patterns commonly used. I quickly decided to refactor the entire codebase using an MVC architecture. After some time, adding features became super easy! The project went from being painfully unmaintainable to functional and even organized. I’m sure there are a lot of areas that could be designed better, but just making the change to modular code made such a huge difference that I’m not even sure what those areas might be.
The only other major challenge was handling dependencies. I used Python and the Kivy framework to build this project, but switched dev machines halfway through. This resulted in a new installation of Kivy that was different from the prior one. I had no idea at the time, and never implemented unit tests, so I didn’t catch the issue until I had already built on top of the new API. I ended up with an application that was built with two incompatible versions of Kivy, that was able to be run on zero platforms. I fixed it eventually. Needless to say, I understood the value of unit testing and dependency management after this absolute fiasco.