top | item 45893012

(no title)

jcmorrow | 3 months ago

100% agree. Even when I am working with J or Uiua enough that I can comfortably read them, I can't really imagine trying to work on a large (even just thousands of lines, let alone larger) project in them. I know that they exist, and I assume that with a team of competent programmers some different mechanisms would evolve to make things easier to understand, but given the choice between Java and uiua, I would much rather maintain a multi-person multi-year project in Java. The verbosity/boilerplate becomes a strength in that setting, rather than a weakness.

discuss

order

RodgerTheGreat|3 months ago

I have experience working with large codebases in K. In practice, most of those codebases don't look dramatically different from any other garden-variety dynamic language. The high-level architectures are similar, and intrinsically-serial business logic still tends to have a lot of named function calls and conditionals. The algorithmic parts, where real work is happening, shrink down to little clusters of operators here and there. Prototypes of new systems and services can be written in a terse, brick-of-code style like some of the K you may find online, but as they get integrated into larger systems they tend to grow comments, descriptive identifier names, and shorter, more diff-friendly lines.

I've never found it hard to come back to reading K after long absences, in no small part because the set of primitives in K is a small fraction of the set in J (or uiua) and the notation, while terse, is more suggestive and legible to me than J's emphasis on digraphs and forks, or the "unicode-soup" of mismatched characters that some modern APL descendants reach for. K is an equally excellent notation for experimenting in a REPL or discussing ideas on a whiteboard.

jcmorrow|3 months ago

Thanks for sharing that perspective! I have not delved too far into k, though I have been a few times confused and discouraged by the fact that there are different versions of the language that are not compatible with each other, and some are proprietary (if I understand the state of the language correctly). Is there a specific version that is best to learn first?

Edit: I just realized that you are the creator of https://beyondloom.com/tools/specialk.html and https://beyondloom.com/decker/index.html. I just want to say that your work is awesome! I've really enjoyed reading through your website many a time.

taeric|3 months ago

I think this often boils down to the same criticisms directed to LISP's FORMAT? https://gigamonkeys.com/book/a-few-format-recipes has my favorite take, "While FORMAT's control strings can be cryptic, at least a single FORMAT expression doesn't clutter things up too badly."

Feels like the same would be true for the array languages. Obviously code golfing it all down to be an array manipulation is going to be unreadable. But if you are legit doing manipulations on an array of data, probably going to be pretty hairy in the expanded version, as well. I can see wins from not necessarily naming every intermediate part of the process.