During the second year of university, I worked on Furry-Ninja. It was meant to learn how to use the GPU in Java and learn about 2D programming.
In this project, I learned how to work with real-time applications, how performance can differ in newer APIs and I started integrating more architectural decisions.
I chose classes about architecture at my university. So in this project, I started using abstractions more often and started to loosely-couple my classes.
This project has been a great source of fun: it was very challenging, and I learned loads on architecture at the same time. Using OpenGL was also very exciting. Passing on some polygon information to the GPU and then seeing that it renders my world destruction was just a fantastic feeling.