Between Learning and Doing
A long time ago, when I started building my first video game server for Double Cluepon, my video game company, I did a bad thing. I looked at the AMF library for Perl and Python and decided that Python's looked better. I had always meant to learn Python, and this felt like the perfect opportunity. It had cooperative multitasking (Twisted) and it had an ORM (SQLAlchemy), so along with the messaging format (PyAMF), I had everything I needed to build a server for a Flash MMO (later migrated to AIR).
Let me reiterate my mistake: While under time constraints, I chose to learn a new programming language. I didn't realize my mistake until it was too late.
Being a startup (still), we needed something As Quickly As Possible. So, I cobbled together a marginally-working system from all the examples I could find. Not being familiar with Python's strengths and weaknesses, I tripped over everything, getting more and more frustrated (but still absolutely convinced I had chosen the correct path). When we needed an integrated website, something I already knew how to build in Perl which did not need the aforementioned library which was the reason to use Python, I kept it in Python to "keep the number of languages in active use in the company to a minimum."
In the end, I had something that technically worked, but was more akin to something an amateur programmer would produce. All my experience was worthless while I was trying to learn a new language, new libraries, and new ways of doing the things I already knew how to do.
With our new game, I almost did it again: I was going to write the server component in C++ so that it could be compiled in to the game client to provide for LAN gaming (which is another horrible excuse to learn new things while under time constraints). Lucky for me, some good old-fashioned laziness has again put me under time pressure, and the most expedient way forward is to do what I know: Perl.
Learning new things is a good idea, but it's hard to learn new things while you're also trying to get things done. If you need to get things done quickly, be very careful before deciding to use something new.
Not sure if this'll help you, but this year i actually started work on a multiplayer game in Perl, and you can see the code here:
Otoh, criticism would be useful too. :)
I remember having this conversation with you. I've also tried to learn too many new things while on a deadline. I think its a pitfall you run into as you profess as a developer.
Yeah. Unfortunately, there are also some counter-examples: If I hadn't decided to forego YUI or ExtJS and learn one of Angular, Ember, or Knockout (I chose Angular), the web project would've taken far longer despite my experience with both and though that experience could have made a better ExtJS app, the best ExtJS app isn't nearly as easy to maintain as an average Angular app (which is, of course, an opinion, subject to standard disclaimers).
Which is probably why we fall into that pit: When we do learn something new that really does improve our work, it's one of the best feelings in the world.
If you needed to compile something that you want to sell, why not use the Perl Dev Kit from ActiveState? Press a button and get a binary exe file (or cross-compile it for whatever platform you need it). I think it covers the "as quick as possible" Statement :)
If we intend to release the server app (if people want LAN play, or if we want to spread out game hosting a la TF2), that is the present plan. I only learned about PDK 8 days ago, though I've used perl2exe in the distant past and I've played around with Citrus Perl a bit (so this still is an option even if I'm cheap).