[FoRK] Top general purpose languages: Practical choices for app logic / presentation & web / server apps

Stephen Williams sdw at lig.net
Mon Jan 17 19:20:33 PST 2011

Additions and comments on these points would be helpful.  In the following, proprietary-ish choices are filtered out (Visual Basic, 
.Net, etc.) except when they have a very privileged spot in a hot market (Objective-C/Cocoa) and are at least mostly open.  (And, 
no, Mono isn't going to make .Net attractive.  It is just Java with a few tweaks and a different library.  Not worth the headaches.)

I'm working on building and documenting some architecture and coding techniques and examples.  Due to recent activity, and also 
breadth of market footprint for at least certain kinds of apps, my main targets are Java/Android and Qt/C++, with Objective-C/Cocoa 
when I get time.  These days, frameworks / libraries are so important and torque the design so much that I think of 
language/framework combinations as independent language points.  For instance, C++/Qt is distinct from C++/STL/Boost which is miles 
away from C++/MS-whatever, even though generic C++ code would work with any of them.

For desktop app development, the obvious choices are: C++/Qt (possibly with OpenFrameworks or OpenGL additions), Java (Swing or SWT 
or Processing), or Flash/Air/Flex.  There doesn't seem to be a strong reason do go with Objective-C/Cocoa for desktop applications, 
unless you only want to target Mac OS and iOS/iPhone/iPod/iPad.  PyQt is interesting as it leverages cross-platform Qt and Python in 
a powerful way.  Mostly secondary to C++/Qt so far though.

For mobile development, current front-runners in terms of market and/or technology: Android, iOS/Objective-C, and Qt (either 
directly for Nokia smartphones or as an emerging method for Android).

For web development, Javascript via various libraries (Node.js, etc.) and with Java via GWT doing HTML5 seem tops currently, plus 
Flash as a separate strong option and Java applets as a weaker, but sometimes important option.  For instance, I'm finishing a 
Java-based PC emulator that runs as an applet, similar to but better than JPC (JavaPC) which is uber cool.

For server development, the top candidates are Java, Python, Ruby, and PHP.  With current licensing, I wouldn't be surprised to see 
the rise of C++/Qt as a server development environment.  A lot of server environments (Apache, etc.) are written in C or C++, but 
few applications.  Qt provides a nice enough application environment (like effortless reference counted auto shallow/deep copy 
objects and templates along with one of the best thread-safe signaling mechanisms) that it would be a good alternate choice to Java 
and Python.  Javascript has been getting some server play too.  And Perl is still there, but not growing or interesting anymore.  
I'm not too hot on Ruby: While there is great buzz, momentum, and fast-start frameworks, there seems to be a fatal shallowness that 
is a turnoff.

I mostly count the j* (jython, jruby, scala, etc.) languages as part of Java, although few of them would work with Android/Dalvik.

There are some interesting emerging languages: Go, etc.  What are the best possibilities here?

In order of interestingness for client/desktop:
Java - Client: Android & Processing/SWT, Web: GWT, raw to JS libraries
C++ - Client: C++/Qt, Web: C++/Wt (GPL/commercial) or similar for web
Objective-C: Client: Objective-C/Cocoa
Python - Client: PyQt, Web: various frameworks [1], web2py for instance
PHP - Web: Various frameworks [2], Symfony for instance

For web development, the order is:
Java/GWT, possibly with a C++ layer
Python/web2py et al, possibly with a C++ layer
C++/Wt, possibly with a Java layer
PHP, Symfony et al

PHP, while popular, venerable, and having grown past the simple start, is still hard to take as seriously as 
Java/C++/Python/Objective-C for potentially large, complex, and/or scalable projects.

Now that it is easy to do rich Java-C++ integration (I'm publishing / presenting soon!), the line is a little more blurred between 
Java/C++ both for Android and other client environments and for server apps, GWT for instance.  However, Qt is a far better GUI 
framework than anything available for Java.

[1] http://wiki.python.org/moin/WebFrameworks
[2] https://secure.wikimedia.org/wikipedia/en/wiki/Comparison_of_web_application_frameworks

Stephen D. Williams sdw at lig.net stephendwilliams at gmail.com LinkedIn: http://sdw.st/in V:650-450-UNIX (8649) V:866.SDW.UNIX 
V:703.371.9362 F:703.995.0407 AIM:sdw Skype:StephenDWilliams Yahoo:sdwlignet Resume: http://sdw.st/gres Personal: http://sdw.st 
facebook.com/sdwlig twitter.com/scienteer

More information about the FoRK mailing list