[FoRK] Top general purpose languages: Practical choices for app logic / presentation & web / server apps
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).
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
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 , web2py for instance
PHP - Web: Various frameworks , 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.
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
More information about the FoRK