DRAFT POST
I very much need to start standardizing myself on a smaller set of tools. Maybe tools is not the best choice of ord, o much as it is a question of languages and libraries. It's actually kind of ironic, I really would like to learn several more languages (Ada, Fortran, C#, Erlang, and I never did wrap my head around Scheme).
C++
Pro's:
can do low level stuff
can interface well with C code and libraries
Qt is natively C++ and supports everything I need it to run on (in Qt4 OSE hehe)
Fairly portable and standardized (at least much of the 1998 standard...) with several compilers available.
Mainly toolkits and frame works available, both native and from C.
Widely used and my first language
Con's:
having to dig into lower level interfaces is very error prone when doing it with a headache the size of California.
Often not my first choice for building a prototype *quickly* but good for final implementation.
Java
Pro's:
Inheritable portable between JVMs of the same implementation (e.g. Sun JVM for Win and Sun VM for Mac can run same code).
Simpler OOP syntax then C++, imho
The Swing GUI toolkit is fairly portable and SWT sufficiently supports the platforms I want to avoid skipping.
I like the way it handles exceptions, and usually like checked exceptions -- when a class is designed
appropriately.
It's well defined if not perfectly standardized and compliant implementations are fairly common enough (Sun's)
Wildly used and my third language.
Well documented (if a bit boring)
Con's:
Everything is OOP....
I prefer native code to waiting on java to load
Requires a suitable runtime
Conventions expected by some tools can occasionally be irksome (to me)
C# (C Sharp)
Pro's:
It's not Java
It's similar to Java/C++
Core elements are standardized
Less resistance to shooting oneself in the foot / doing stupid things then Java but not as much as C++.
Gtk#, the binding of GTK+ to C# is available on the platforms I care about.
Con's:
Most C# applications are probably tied to Microsoft Windows implementation via .NET or through Gnome related interfaces
Requires a runtime (e.g. .NET, Mono, or Dot GNU)
Requires just enough learning of it's differences from Java, for me to use it.
PHP5
Pro's:
Portable and interpreted
Widely used across the WWW for server side scripting.
GTK+ bindings to PHP available and portable'ish
Simple language and member of the
CBF.
The OOP increasingly resembles Java syntax and is just "enough" syntax to be useful without cramming.
Well documented
Con's:
Local php.ini files can cause problems (how much can you assume?)
Needs a run time (php) of the right version (5)
php4/php5 is less common off web servers or developers systems
Python
Pro's:
Great for writing prototypes
Several toolkits available that are fairly portable
Easy to work with and quit portable (and issues of portability well noted in the docs)
Large standard library
Implementations for the Java Virtual Machine and Microsoft .NET framework are available (if not as current as CPython) as well as the standard (C)Python implementation.
Con's:
Requires a run time
I *hate* it's handling of
regular expressions after being so used to Perl...
It's slower then native code
Interfacing with C /or C++ code can, uhh... Get interesting, from a portability perspective.
The program is the source
Ruby
Pro's:
Handy pure OOP language
Great handling of regular expressions within the language itself, as opposed through importing an object oriented interface (i.e. as in Python/Java/C++)
Usually very "comfortable" to write.
Large standard library
Con's:
It requires a run time and alternative compilers (e.g. xruby, ironpython) may be lacking in reliability or cause some features to be unavailable
The program is the source
Wishing Ruby 2 would come sooner....
Documentation can be irksome at times
It's slower then native code and even slower then Python (Ruby 1.8.x)