Outlining a Solution Stack
Question: please excuse my ignorance as I'm an Aerospace Engineer going headfirst into
the software world.

I'm building a web solution that allows small computers (think beagleboard) to
connect to a server that sends and receives data to these clients. The
connection will be over many types including GPRS/3G/4G.

The user will interact with clients in real time through webpages served by
this central server. The solution must scale well.

I've been using python for the client side and some simple ruby code for the
servers with Heroku. I have also tried a bit of NodeJS and Ruby on Rails. With
so many options i'm struggling to see the forest from the trees and wondering
where these languages will fit into my stack.

Your help is appreciated; I'm happy to give more details.


Answer: It all depends on what you are actually trying to do and what your
requirements are.

There is no real "right" language for things like these, it's mostly
determined by the Frameworks you'll be using on those language (since all are
general-purpose programming languages) and your personal
preference/experience.

I can't comment too much on Python as I never tried it really, but from what I
heard/saw it can be used for all things Ruby is also used, although the
Community around Python is a bit smaller with Python being used a lot more in
the Scientific community (that may be good if your app may be doing any crayz
calculations).

That leads us to Ruby. Ruby and the Ruby on Rails framework is mostly used to
write Web-Applications and Services. Ruby is a very elegant language to
program in and the tools are very mature and easy to work with. Rails is a
framework on Ruby that makes Web-Development very simple in providing you with
a very good set of tools especially suited to write data-driven web-apps. Very
flexible and a joy to work with. There are however some drawbacks to Ruby at
the moment, mostly related to poor threading.

Node.JS is a new language that is focused on paralellism and supports all
things Ruby and Python can do, although it's documentation is lacking compared
to what Ruby will give you. It's also not the most beginner-friendly choice as
JavaScript with all it's quirks and the callback-oriented async model is not
of the simplest thing around.

That said, Node is very bare metal and makes it very very easy to write
arbitrary TCP/UDP Servers that don't necessary work over HTTP. Custom
streaming protocols or any custom protocol in fact are almost trivially done
in Node.. (I don't advise you do that, but maybe that's important to your
task).

To be fair there are frameworks that facilitate writing of Web-Apps for node,
but the coices are a) not as mature as Rails or Django, and b) you have to
pick your framework choices.

This means: Where Rails does come with a lot of defaults that guide you,
(Rails for example has a default Database stack it's optimized around), Node
with Frameworks like Express only provide you with a bare-bones HTTP server
where you have to bring in the Database of your choice etc...

In closing: All languages and frameworks you asked about are mostly used for
writing Web-Applications. They all can however be used to write a client that
consumes the service too - it mostly comes down to general preference.

