8 ms·
I've been knee deep in APL for the past year, working on a YAML parser: https://github.com/xelxebar/dayaml https://github.com/xelxebar/dayaml. It's still very p
by xelxebar 3y ago
I've been knee deep in APL for the past year, working on a YAML parser: https://github.com/xelxebar/dayaml https://github.com/xelxebar/dayaml. It's still very prototypy, but for ~30 lines of code it's surprisingly complete.
The process of getting that project to where it is now really revolutionized how I think of software development in general and how I manage my dev teams at work. Our best practices and wisdom around software dev really are much more strongly tied to historical habits and tooling whims than we'd like to believe. I believe we as a community have a lot of unpicked fruits laying around if we shift focus onto the human side of Human-Computer Interfacing for a while.
About K, though, Arthur Whitney sounds like such a beast, and I would love to mingle with the K community. Within the array programming circles, APL/J/BQN form one cluster and K looks like it's off on its own a bit with different ideas and a laser focus on high performance. Extremely enticing.
- mhuffman 3y agoIf you like podcasts you might check out the Array Cast podcast if you haven't. >https://www.arraycast.com/ https://www.arraycast.com/
- Duanemclemore 3y agoWanna second the Array Cast. Really, really solid stuff even if you're not specifically interested in the array languages.
- mhuffman 3y agoYes, I didn't mention that but they have a rotating schedule of some of the most elite programmers you have ever heard. I will also say that array programming is very seductive if you have the "puzzle solving" mentality that a lot of us have. It seems so elegant. I have never found a legitimate use for it in my paying work, but I am captivated by it privately.
- gitonthescene 3y agoWhat bars do you use to measure “legitimate use”?
- mhuffman 3y agoI don't mean that the languages are not legitimate, mostly what would be acceptable to either management or a client. Also, I feel that setting someone up with code that they might have to maintain if I leave should be easy for them to handle and J, APL, or K would require them finding a rare developer.
- gitonthescene 3y agoBoth are reasonable concerns. If you were running your own company the calculus might change though. Or not but I’d say it certainly could. Similarly for code which is not client facing.
- month13 3y agoYeah, there's really great history and some amazing stories to be heard from the interviews.
- jodrellblank 3y agoI'll third the ArrayCast, the host is Conor Hoekstra, a C++ programmer at NVidia Research. Regular panelists include Adám Brudzewsky[1] who works at Dyalog APL, Bob Therriault[2] who runs the J Wiki[3], Stephen Taylor who works with K and Q and cut his teeth on APL planning one of Chris Bonnington's Mt. Everest[4], Marshall Lochbaum who worked on J and APL and developed the BQN[5] language. All the episodes have transcripts on their site. And their guests include Jeremy Howard the founder of fast.ai and Kaggle, Henry Rich implementer of the J language, Stevan Apter a K programmer and creator of No Stinking Loops site ( nsl.com ), Andrew Sengul who created April a blend of APL and Lisp, Morten Kromberg the CTO of Dyalog APL, Aaron Hsu creator of the co-dfns GPU compiler for APL, Brooke Allen a Wall Street entrepreneur and APL programmer, Eric Iverson son of Ken Iverson the APL creator and J designer/developer, Ashok Reddy former chemical engineer and employee at Rational (the UML people) now CEO of the KX company, Atilla Vrabecz a PhD Chemist turned K language entrepreneur, Leslie Goldsmith former APL developer at I.P. Sharp, John Earnest creator of the Ok language, Troels Henriksen creator of the GPU accelerated language Futhark, Lib Gibson former APL developer and consultant and project/developer manager at I.P. Sharp, programming polyglot Romilly Cocking, programming polyglot Vanessa McHale, and others. [1] https://news.ycombinator.com/user?id=abrudz https://news.ycombinator.com/user?id=abrudz [2] https://news.ycombinator.com/user?id=bobterryo https://news.ycombinator.com/user?id=bobterryo [3] https://code.jsoftware.com/wiki/Main_Page https://code.jsoftware.com/wiki/Main_Page [4] https://github.com/5jt/swf75 https://github.com/5jt/swf75 [5] https://news.ycombinator.com/item?id=24167804 https://news.ycombinator.com/item?id=24167804
- jph00 3y agoIt's a great podcast! I'm the 1st of the guests you listed, in fact. :D If folks are interested in learning APL and array programming, you might like the ~20 hour video series we created: https://forums.fast.ai/t/apl-array-programming/97188 https://forums.fast.ai/t/apl-array-programming/97188 You might also like our complete Dyalog APL reference, which (AFAIK) is unique in never using symbols in examples which haven't been covered earlier in the reference. So you can read it top to bottom to learn the whole set. https://fastai.github.io/apl-study/apl.html https://fastai.github.io/apl-study/apl.html
- haolez 3y agoPlease do tell more. I'm a CTO struggling with managing my devs. What do you mean?
- 7thaccount 3y agoNot OP, but I can guess a bit With modern software development there is a ton of boilerplate and focus on tooling (how many hours do we waste on IDEs or text editors), compilers, build tools... whatever. With APL or K, you don't really have a lot of that. Once someone is proficient, they can do a ton with just a tiny amount of code. Aaron Hsu has a bunch of videos online and chats on HN (user arcfide I think) on the strengths of APL in general and how he built a compiler to run APL on the GPU and got it down to like a page of the alien glyphs. His point is that with APL you can eliminate huge amounts of things like helper functions and see the entire code at a more macro level. He literally uses windows notepad to code in as well, so a lot less time is wasted on learning/managing/configuring all the tools in the ecosystem. Supposedly they've done some studies where people can be taught APL pretty easily if they go in with an open mind. I can code a bit in it after only playing with it a bit. The symbols are a LOT more intuitive than you think (a lot of effort went into making them make sense in representing the operations they do). The big problem is professional devs don't want to get locked into a niche technology or admit there are other ways to do things that don't involve Java-like hell. This is less of a problem with finance workers using Kdb+ (a very fast array database that you access with the k or q languages) that get paid $$$$$$$ to write stock ticker analysis software. As a CTO, I'm not sure what the lessons are except keep code more reasonable. Don't write stuff you don't need...etc. I'm guessing OP has gotten use to the expressive power of APL and the interactive nature of the software and how to keep things lightweight and now sees a lot of modern software as being overly bloated. It reminds me of a vendor that shipped us what should have been a page long application (pretty simple data transformations), but instead it was like 50 class files and all sorts of other junk. I was blown away by the inefficiency and extreme complexity for what we later wrote ourselves in a short script with few functions. Assuming it wasn't outright on purpose, I think certain industry tools encourage over architecture.
- steveBK123 3y ago
- andai 3y agoI laughed when I saw the source: "just" 30 lines, to be sure, but 30 lines of dense, alien glyphs! This is probably 300 (or 3000?) in a less expressive language, right? What's a good place to start for languages like this? k is proprietary, isn't it? I found unrelated languages with the same name on GitHub.
- RodgerTheGreat 3y agothere are at least three reasonably comprehensive open-source k implementations: https://github.com/kevinlawler/kona https://github.com/kevinlawler/kona (k3) https://github.com/JohnEarnest/ok https://github.com/JohnEarnest/ok (k6, js-based) https://codeberg.org/ngn/k https://codeberg.org/ngn/k (k6, c-based) even today, many k programmers learn from the k2 reference manual. k2/k3 are extremely similar: http://web.archive.org/web/20050504070651/http://www.kx.com/technical/documents/kreflite.pdf http://web.archive.org/web/20050504070651/http://www.kx.com/... oK has a briefer manual which describes k5/k6: https://github.com/JohnEarnest/ok/blob/gh-pages/docs/Manual.md https://github.com/JohnEarnest/ok/blob/gh-pages/docs/Manual....
- mhuffman 3y ago>What's a good place to start for languages like this? I recommend: https://xpqz.github.io/learnapl/intro.html#but-it-s-unreadable https://xpqz.github.io/learnapl/intro.html#but-it-s-unreadab... (for apl) and https://xpqz.github.io/kbook/Introduction.html https://xpqz.github.io/kbook/Introduction.html (for k) ... the author admits they are not an expert in either, but the pace and tone are very beginner friendly, which I have found is necessary if you do not have any experience in array languages.
- skruger 3y agoI’m happy to have contributed in some small way to growing the APL community. Thanks for the shoutout.
- ithkuil 3y agoyou may also enjoy uiua (https://www.uiua.org/ https://www.uiua.org/) which uses these alien glyphs but is even more alien because it's a concatenative language (stack oriented), like forth or postscript, but to make it even more alien it's written right to left. For example 1+2 is written "+ 1 2" (in forth it would be "1 2 +") The language and the site are brilliant and I think worth 30m of your time skimming through and trying out the examples in the online editor / tutorial.
- msteffen 3y agoI’ll second the request for elaboration! I’m interested in APLs but have never tried writing more than a tutorial. Any particular examples of things that people {are,aren’t} doing, that they {shouldn’t,should} be doing that you felt like sharing, or just examples of things you realized while writing this, would be really interesting to hear! I (and I know lots and lots of others) in tech feel like we could be doing better but don’t know how, and APL is interesting because it attracts such veneration despite being so weird
- gitonthescene 3y agoI’ve found the notion of a parent vector to be useful for parsing problems. I like to call them Apter trees after this article http://archive.vector.org.uk/art10500340 http://archive.vector.org.uk/art10500340, but it’s also the core idea in Aaron Hsu’s thesis.
- gitonthescene 3y ago≠\ is an awesome trick. You might also like {2 | (1+⍳≢⍵) (⊣ - ⌈\⍤×) ~⍵}` for `⎕IO←0 for detecting which escape characters are themselves escaped. This is translated from BQN: https://github.com/mlochbaum/BQN/blob/master/md.bqn#L53 https://github.com/mlochbaum/BQN/blob/master/md.bqn#L53 This last is more compactly expressed as <\ when you have left to right folds which (unfortunately) APL does not.