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

Stephen Williams sdw at lig.net
Tue Jan 18 12:20:26 PST 2011

A few years ago, I used Visual Studio with C# / .NET along with Emacs doing a Java half of the project.  There are some nice 
things about Visual Studio, but a lot I did not like.  Now, a friend of mine has an uber cool plugin that shows the entire 
current source file as sort of a thumb-strip on the right.  I'm going to imitate that somewhere some day.  But otherwise, I'm 
just as happy in Eclipse as Visual Studio (except perhaps the GUI speed on MacOS).

And, most of the time, I'm back to Emacs with alternation to the IDE.  I toggle back and forth in the same development sessions 
depending on whether I want context sensitive help.  Even those IDEs that can be configured with Emacs keystrokes are no match 
for Emacs.  In any case, since I only boot up Windows to run certain programs or test a build, Visual Studio is unlikely to help 
me.  Currently, I develop mobile apps in Java & C++ and desktop apps in Qt/C++.  Qt is so good, I can generally work in any of 
the three environments (MacOS X, Linux, or Windows) and be sure that almost everything will map well.  You have to keep a few 
things in mind, but they are minor and stable.  (ctrl vs. command, etc.)

I did read about LINQ several times.  It reminds me of RDBMS code generators I've written in the past.  It's cool, but I'm a 
little more interested in implementing those as libraries that are nearly as easy to use.  Unless it is done in a completely 
general way, and not a task-specific Visual Basic-like language hack, it remains a hack.  For example, could I implement my own 
RDF graph query language using the same facilities?  (Interesting problems require a lot more than SQL/RDBMS.)  However, it is a 
hack I wouldn't mind having.  I'm not going to switch back to C# just for that however.

In your opinion, what is the current viable range for C#/Mono/.NET?  What doesn't work yet?  Where can you not use it without 
headaches (missing key libraries, etc.)?  How easy is it to interface with native C++?  With Java?


On 1/18/11 1:37 AM, Damien Morton wrote:
> Its worth reconsidering C#, both .NET and Mono. Its more than Java with a
> few tweaks. I find it a much more pleasant experience than Java. In
> particular, its worth familiarising yourself with the LINQ part of the
> language, which is something  extremely powerful and unique to C#. Its also
> worth considering Visual Studio as a huge bonus, possibly the best IDE on
> the market.
> For me the languages of choice are: Python, C#, and C/C++, in order of
> speed.
> On Mon, Jan 17, 2011 at 11:20 PM, Stephen Williams<sdw at lig.net>  wrote:
>> 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
>> sdw
>> --
>> 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
>> _______________________________________________
>> FoRK mailing list
>> http://xent.com/mailman/listinfo/fork
> _______________________________________________
> FoRK mailing list
> http://xent.com/mailman/listinfo/fork

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