Does It Pass the "So What?" Test?
Throughout the years, I have implemented "The Animal Game" in the following languages:
I would have done Java, but...
In general, it takes me a few hours to recall how to make the linked list work and get something on the air. To allow someone else to play the game unsupervised (which means doing some error handling) usually takes me a few days of programming. I could probably go faster if I could ever find legacy code for any of the previous implementations, but I never can. The exercise gets repeated with a periodicity of every four to five years, which is just long enough to lose the last example.
But, you say, why should you need legacy code? Don't you have a design spec, a pseudo-code document, or a UML diagram lying around that would enable you to do the implementation without referring to the last piece of code you wrote?
The answer is twofold: Yes, I do develop the diagrams and pseudo-code, but I get to do it over again each time because I can never find that, either. Second, seeing how you did something in the last language is a useful crutch when trying to do the same thing in the new language. If I had my druthers, I'd be able to locate both my last diagrams and pseudo-code version and my last language implementation. Together, they would give me a quicker start. If only I kept better records. Oh well. Although this would be a grievous infraction for a software development organization, it is a somewhat lesser sin for what is, after all, a small, personal, programming effort.
By far the most bizarre implementations I've done were in APL and FORTH. Practitioners of those languages will probably understand why, and it is futile to try to explain this to non-practitioners. Absent from the list of likely suspects are LISP, Smalltalk, PL/I, and COBOL. There is nothing to prevent you from trying these; I just never have.
Incidentally, one of the other things you learn each time you do this exercise is the nature of the development environment and the available tools. I learned, for example, that the early C++ debuggers were not that wonderful; on the other hand, the utility of the Rational Environment was apparent, and my Ada implementation was done in record time. When I did it in FORTH, I learned how to reboot my machine every time there was a runtime error.