This is a pretty massive question, so this is not intended to be a full answer, but hopefully this can help to inform general practice around determining the best tool for the job when it comes to data science. Generally, I have a relatively short list of qualifications I look for when it comes to any tool in this space. In no particular order they are:
- Performance: Basically boils down to how quickly the language does matrix multiplication, as that is more or less the most important task in data science.
- Scalability: At least for me personally, this comes down to ease of building a distributed system. This is somewhere where languages like
Julia really shine.
- Community: With any language, you're really looking for an active community that can help you when you get stuck using whichever tool you're using. This is where
python pulls very far ahead of most other languages.
- Flexibility: Nothing is worse than being limited by the language that you use. It doesn't happen very often, but trying to represent graph structures in
haskell is a notorious pain, and
Julia is filled with a lot of code architectures pains as a result of being such a young language.
- Ease of Use: If you want to use something in a larger environment, you want to make sure that setup is a straightforward and it can be automated. Nothing is worse than having to set up a finnicky build on half a dozen machines.
There are a ton of articles out there about performance and scalability, but in general you're going to be looking at a performance differential of maybe 5-10x between languages, which may or may not matter depending on your specific application. As far as GPU acceleration goes,
cudamat is a really seamless way of getting it working with
python, and the
cuda library in general has made GPU acceleration far more accessible than it used to be.
The two primary metrics I use for both community and flexibility are to look at the language's package manager, and the language questions on a site like SO. If there are a large number of high-quality questions and answers, it's a good sign that the community is active. Number of packages and the general activity on those packages can also be a good proxy for this metric.
As far as ease of use goes, I am a firm believer that the only way to actually know is to actually set it up yourself. There's a lot of superstition around a lot of Data Science tools, specifically things like databases and distributed computing architecture, but there's no way to really know if something is easy or hard to setup up and deploy without just building it yourself.