I've invested something around 50 hours in J, I tried to write half a dozen 
serious algorithms, and to bind some external libraries. I've concluded 
thereafter that J just doesn't fit my workload. Here are my main reasons for 
giving up on J for now in hope that it helps with future direction:

* Package management and batteries. The addon eco-system is tiny and the 
packages in it are barebones at best. This is scary because it takes no time at 
all to find things you need that you can't implement yourself quickly. E.g. 
loading an Avro/Parquet/ORC file, run simulated annealing, fit a Bayesian model 
using hamiltonian multi carlo, write a linear programming optimisation, call 
Neo4J, and so on. I'm use to being able to expect that what I need will have a 
package for it already. Other languages get around this a bit by either using a 
common VM as more established language (e.g. Clojure) or by having very 
ergonomic FFI (e.g. Julia with Python). Further, I think there needs to be a 
formal system for the packing, versioning, deployment, and dependency 
management of code, else people will revert to literally copy pasting all 
dependencies into a directory to make sure their code works on another 
environment.

* FFI. When the function in question takes a C struct or an otherwise 
complicated data structure then you can't easily call the function from J. It 
seems you have to write a bunch of C to convert the target interface into 
something that can be called more easily from J. Contrast this to Julia's 
Python FFI interface as an example, or Rcpp in R.

* No non-array data structures: hash tables, trie, graphs, etc. This is a show 
stopper because so many problems are easier to reason about and to solve by 
picking a more suitable data structure. In the Wiki, Dan Bron says: One of J's 
primary advantages is that it makes (array) programming easy.  If its notation 
is inapplicable to your problem (more or less), there is not much reason left 
to use it. This lead me to dismay.

* No parallelism. This is a show stopper. I work on large data and hard 
problems which cannot be crunched quickly on a single processor. J seemingly 
has no multi-threading, multi-processing or GPU support. Parallelism for me is 
almost always more complicated than just splitting the data and running the 
same thing many times, so J offers no way to solve problems needing parallelism 
that can't be emulated at an OS level by running many copies of a script.

So its farewell for now, but I'll keep an eye on developments in hope for the 
future!

Emir
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to