What does one do with a software project that has stagnated and needs a good push to move forward? Rewrite in another language, obviously.
While I say the above in jest, I plan on doing just that with justCheckers. For years the project existed in Java, and was in fact started as a way for me to learn and improve my skills in Java and later Android. However I took a number of missteps early on in the project, focusing on a grand architecture instead of code. Later on the project stagnated because I tried to build a generic enough game engine to handle all the various variants of checkers known to man. I should of concentrated on working code and on implementing the simplest code first and expanding on the codebase afterwards.
Today as an experienced developer I know better. The project needs a reboot to get it back on track. I still very much want to achieve the initial goals of creating an ambitious checkers game with lots of features. However when I look at the code, it is not manageable in its current state. The code needs tests, an overall update and lots of simplification. However I do not want to throw out the good ideas and restart with a new codebase. Instead I plan on transitioning the current Java codebase into Python.
Historically for the justCheckers project, changing languages is nothing new. I created justCheckers’ predecessor, Civilization Checkers in Visual Basic 6. I rewrote the code to Java when I entered university and kept with it for years. In the past 2 years I became part of the local Python community in Toronto, and in a short period of time has Python become the language that I am most familiar with. I found Python as a language, easy to pick up, understand and master. Also I find Python much terser as language when compared to Java. Using Python means it should take much less time and effort to port the codebase to Python and then to maintain it as-is.
As for cross-platform support, the plan is to use PySide for the user interface. PySide being hooks for Qt, definitely works with all desktop operating systems. Mobile OS like Android or iOS is harder, but sounds like it is possible to setup something with PySide. Worst case scenario, I will fall back on using Kivy for the frontend, if PySide proves too cumbersome.
Currently I have a branch on Github with my porting attempt so far (https://github.com/dorianpula/justcheckers/tree/pyside-migration). Hopefully I will have the port complete by the end of the month.