I've been working on a program to play the game of Go since roughly mid-2008. My project (called Dakengo) has gone through several iterations, where each iteration involved porting my code to a different programming language. The first version was written in Common Lisp, the next in C++, and the third was in C#/.NET. In August of 2012, I started another rewrite, this time to Java.
I have to admit that my rationale for each switch was not very solid. It was mostly a case of my becoming enamored with some new feature in a language I wasn't currently using. I would feel like I was missing out on the "latest and greatest," so I'd switch -- all the while vowing to never do that again.
With each rewrite, I made solid progress in my understanding of what's involved in writing a Go engine and how I want to do it. I've found and fixed bugs that were as yet undiscovered in previous implementations. So the rewrites weren't a total waste.
But overall, this has had a major cost in time and effort for a relatively small return. I could be much further along in terms of functionality, not to mention all the experience of playing against real-world opponents (humans and bots) that I've missed. For those reasons, I'm 99% sure I'm going to stay the course with Java for my Go engine. I'll find ways to scratch the alternative language itch without disrupting my progress on Dakengo any more.
So, I'm just now getting back to the point where I've got a computer player that can play random legal moves. The next step is to resurrect my Monte Carlo tree searching logic. I've released a chunk of my code as open source hosted on github. Here's the link: