You should definitely check out uiua (https://www.uiua.org/)! Array programming can certainly be intimidating, but I think it's worth doing for a few reasons:
- The "array"-ish solution to a problem is usually a very data-oriented solution. Even if you aren't working in an array-oriented language (and just to be clear, I'm not advocating that people write production code in array languages), "thinking in arrays" helps me come up with more elegant solutions.
- Learning array programming is a little like learning to program all over again. If you really enjoyed the process of learning to program, it lights up those same brain circuits, which I found really enjoyable.
- If you ever want to do any graphics programming the mental model can be very helpful. Array programming really helped me wrap my mind around how shader programs are executed.
Uiua is little unique in that it is also a stack-based language, so learning both paradigms at the same time can definitely be a little challenging, but I think it's well worth it.
Uiua is super friendly. Like the friendliest language ever. It breaks your brain for sure, but in a pleasant way.
It is by far the easiest way to learn an array based language; thanks largely to the web based “Pad” and the clever text to symbol way of writing the code. Do some of the tutorial stuff, it’s fun and all inline on the web. Works great on mobile! Think of it like sudoku, but for programming. You can do real stuff with it also, but for me it’s just for fun.
> As is often the case with array programming, I revisited this last week only to realize I couldn’t read it
> The advantage of array languages in my experience has always been their immediacy.
They seem to have a lot in common with regexes in that regard. Super useful for interactive use cases in editors, search engines, etc. But if you find yourself saving a regex it's at least code smell and probably a red flag.
Some of the array language people seem to think it's sane to write an entire program in regex-lang, which is less red flag and more red banner flying through the sky.
The author is clearly a novice who has just tinkered with array languages a little. Extrapolating from that to absolute properties of a tool seem a bit overeager, don't you think? For example, do you think you could design a legible analog circuit without significant time learning the craft?
My experience is with APL, but I think it is capable of producing some of the most readable and maintainable codebases out there. I've worked for years in various projects using Python, Java, C, Scheme, and a smattering of many other languages. However, it's really hard to overstate the clarity that comes from data-oriented design and dogged elimination of API boundaries.
It just takes a long time to learn to write good software in good APL style. In many ways all the in vogue best practices these days around declarative and functional programming tend to work antithetically to writing good array code. This means that the learning curve for experienced programmers is, perhaps paradoxically, higher than that of a totally naive beginning coder.
I really wish I knew some way to directly convey the experience of working with APL at a high level. There's really nothing else much like it.
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.
joshcsimmons|3 months ago
jcmorrow|3 months ago
- The "array"-ish solution to a problem is usually a very data-oriented solution. Even if you aren't working in an array-oriented language (and just to be clear, I'm not advocating that people write production code in array languages), "thinking in arrays" helps me come up with more elegant solutions.
- Learning array programming is a little like learning to program all over again. If you really enjoyed the process of learning to program, it lights up those same brain circuits, which I found really enjoyable.
- If you ever want to do any graphics programming the mental model can be very helpful. Array programming really helped me wrap my mind around how shader programs are executed.
Uiua is little unique in that it is also a stack-based language, so learning both paradigms at the same time can definitely be a little challenging, but I think it's well worth it.
lll-o-lll|3 months ago
It is by far the easiest way to learn an array based language; thanks largely to the web based “Pad” and the clever text to symbol way of writing the code. Do some of the tutorial stuff, it’s fun and all inline on the web. Works great on mobile! Think of it like sudoku, but for programming. You can do real stuff with it also, but for me it’s just for fun.
Mithriil|3 months ago
Btw, here's the identity matrix of size 3:
˙⊞=⇡3
(It takes the range [0,1,2] then outerproducts it with itself through equality.)
lenkite|3 months ago
IshKebab|3 months ago
> The advantage of array languages in my experience has always been their immediacy.
They seem to have a lot in common with regexes in that regard. Super useful for interactive use cases in editors, search engines, etc. But if you find yourself saving a regex it's at least code smell and probably a red flag.
Some of the array language people seem to think it's sane to write an entire program in regex-lang, which is less red flag and more red banner flying through the sky.
xelxebar|3 months ago
My experience is with APL, but I think it is capable of producing some of the most readable and maintainable codebases out there. I've worked for years in various projects using Python, Java, C, Scheme, and a smattering of many other languages. However, it's really hard to overstate the clarity that comes from data-oriented design and dogged elimination of API boundaries.
It just takes a long time to learn to write good software in good APL style. In many ways all the in vogue best practices these days around declarative and functional programming tend to work antithetically to writing good array code. This means that the learning curve for experienced programmers is, perhaps paradoxically, higher than that of a totally naive beginning coder.
I really wish I knew some way to directly convey the experience of working with APL at a high level. There's really nothing else much like it.
jcmorrow|3 months ago
NooneAtAll3|3 months ago
seems like it wasn't array-combinator codegolfed enough
jcmorrow|3 months ago
unknown|3 months ago
[deleted]