I’ve done it. I can’t believe it.
After finishing a usable implementation of Kongzi Desktop for kongzi.ca, I had taken October off to clear my mind and focus on Dota 2. The code was getting a little complex again and those who know me know I see this as a major red flag that the code needs to go in a different direction.
Kongzi has, for the better part of twenty years, been a personal project of mine. Yes, I have used it in the classroom, in highschools, universities, as well as private instruction. But no one except myself ever had a copy. It was never placed on the Internet, it was never made available for sale or download. A very large part of that was because I was unsure of how to copy protect my program. I wasn’t being greedy at all; I knew that as a teacher, if I was going to bother making a proper language learning program, it would require enough time that I would have to sacrifice my time at work to code and do data entry. Now, maybe you think some other hobbyist coder could get it done for free, and maybe you’re right, but that experiment was tried in Anki and other programs and it failed. In that respect the truth is I didn’t release my program because it wasn’t as good as Anki. You can think that way if it makes you feel better. No one would have paid for it, and thusly I did not spend a very large amount of time developing the user interface. Kongzi Desktop was, is, and always will be something I used personally to assist me in my own job. In that respect, I believe it gave me an edge that some other language teachers simply did not have. Maybe, and maybe not. I think so.
But today I rewrote the main engine of the software. You see I never begin coding unless I can see the entire program in my head. At least from a top-down design perspective. But what truly shocked me is not that I rewrote software, but that I rewrote it in about an hour before I had to teach a class. And when I was done it worked and many of the problems I had experienced earlier wrt UI design simply disappeared. I had found it, the treasure mountain. I knew I had done it: I had finally killed Anki. I laughed all the way to class. But of course, that was never the goal, just solving all the problems of using SRS in the classroom. But when I realized that all the problems of SRS in the classroom had finally been solved: with Kongzi Online. I couldn’t believe it. The result turned out into something that would even be very likely to kill Anki on the desktop, too. I don’t just mean a little. I mean, this is a black and white situation. Anki is going to be absolutely killed. Sure there will always be fanboys. But they will shudder hard at what I’ve produced.
k zero. I rewrote the core of Kongzi this evening. It was quick. About an hour. I shocked myself. I finished it so fast that there wasn’t even a link to the software (or a container for it, which I am thinking of making) but it worked when you loaded the drill-cycle page directly. The whole thing is literally an order of magnitude better than what I had before. I was so suprised at how simple the algorithm and the code had become compared to what I had come up with four weeks ago (around the time of my last coupe of blog posts). Now I realized that all along I had been coding the wrong way. But now, finally, I understood. Finally everything is perfect. Kongzi is perfect. I did it. I’m finally able to relax. The sense of accomplishment I feel is staggering.
I call it k0. It’s available now but I won’t publish the link yet, I want to build a small container to integrate it onto the website as it is now. That will come later. But the very existence of k0 is important for the most important reason of all which I haven’t said yet: because it closes this chapter, finally, of Kongzi’s development. After this point I can finally begin working on K1, or just work on other aspects of the software.
Now, after taking a month off, I will return to coding but not be as into it as I was before (I have some other things I need to take care of well into next spring and summer). I plan to work more on the user experience of kongzi and re-evaluate the data entry and storage features of the program. I have a plan to have it suggest new words for you to learn, which is a difficult problem, but which will remove the need to edit your own cards. This has it’s own pros and cons I will end up discussing in a blog post. But for now, I plan to take it easy with the coding and move forward, albeit slowly. The next thing I will be thinking about and working on is a blog post discussing the pros and cons of the K-0 algorithm. I won’t even discuss plans for K-1, not directly anyways, but it will be there in theory when I discuss the pros and cons of K-0. After all, it’s a goal to keep the good and toss out the bad. Also to discuss what it is, really, that makes SRS great and how we might want to implement a SRS algorithm without masters level calculus (see: SuperMemo). How far we can get with a simple method. And just improving the general UI experience of Kongzi Online.