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
