Without starting a religious war, I'd like feedback on languages I'm considering for a project. I've done a lot of research, but I have a lot of gaps still and am hoping to narrow my research efforts. I've had friends advise me, but most are experienced in one language on my list and can't compare them well (and I know a few are VERY prejudiced!). I'd like feedback in case any points I list are inaccurate and so I can get an idea of which languages to research more.
Each of my human clients will have a server (which I have full control over) on their office LAN. But I can't count on a static IP address and, for several reasons, can't count on installing anything but a VERY bare minimum on my client's workstations. The server is an embedded system (500 MB memory, 500 Mhz CPU, running Debian Linux).
I'll have a VERY minimal install on their workstation that sends a broadcast message, finds my server, then runs the rest of the program from an SMB (or NFS) mount existing on my server. The program needs to run on Windows, OS X, and Linux.
I think it's fair to make an assumption that the client's workstation wil have Java installed.
I'm considering several languages to use based on a several different factors:
1) Footprint: The less I have to install on the client computer, the better.
2) Coding speed/time: Naturally I want to get it done sooner rather than later.
3) Portability: I don't want to have to write much OS specific code or use a non-automated build process for different OSes. (Which will help when patches are issued, of course.)
4) Learning a new language: I'm willing to sacrifice SOME coding speed to learn a new language, or learn more about one I know a little of (this applies mainly to C++ and Python).
5) GUI: It'd be great to provide a native GUI look 'n' feel for each platform (OS X, Linux, and Windows), but that's unlikely. I want to avoid a GUI most users will consider ugly. (In other words, I'd like to avoid some of the GUIs used more on *nix on Windows, since many less technical people consider them boxy or clunky.) Having one GUI look 'n' feel (like in Java) for all three platforms would be a good choice.
Here are the languages I'm considering:
Java:
Positive: It's WORA, I can pretty much count on a JVM being on any desktop computer. The GUI look 'n' feel will be the same on all three platforms, so tweaking GUI elements for each OS won't be much of an issue.
Issues: I code MUCH slower in Java than almost anything. It's a frustrating language for me to write in.
Perl:
Positive: I code quickly in Perl (about 5x faster than with Java), it's got great text and string handling abilities.
Issues: Requires Perl langauge executable installed on client (remember, minimal install on client computer!), and I'm told some things, like multi-threading, have to be handled differently on Windows than on *nix. I'm also not sure how much OS specific code I'd have to write.
Python:
Positive: I'm very new to Python (barely know any at this point), so learing it will be a big plus. I'm told, by several people, that an experienced Perl coder can code faster in Python than Perl. I can also compile Python to Java byte code with Jython, so I have all the advantages of Java without the lack of coding speed I have with Java and I can use Swing, so the GUI will be easy to handle without OS specific code.
Issues: I don't know Python as well, so I don't know if the above statements are true. I don't know if I'm likely to end up with code that works on Python but not on Jython.
C++:
Positive: I actually code faster in C++ than Java (but not as fast as Perl). I haven't used it too much, so I'd be learning a lot. Friends tell me that if I'm not doing low-level stuff, that I wouldn't need OS specific code and it even handles multi-threading on Windows better than Perl. I can use something like wxWindows for a multi-OS GUI. C++ would give me native code for each OS, which would mean no need for an interpreter.
Issues: Is it really standardized across platforms as I'm told? And does it actually handle multi-threading well on Windows with the same code I'd use on Linux? With something like wxWindows, how much OS specific code would the GUI need? How easy is it to automate the build process for three different OSes?
Thank you for supporting or correcting any assumptions I've stated and for any additional feedback on the strengths or issues in the different languages.
