Transcript

Transcript prepared by Bob Therriault and Adám Brudzewsky
[ ] reference numbers refer to Show Notes

00:00:00 [Stephen Taylor]

I think about the innovators dilemma. It seems to relate to a Paul Graham article. Was it breaking the board?

Something like that. Well, about 20 years back where he writes about how they use Lisp to write by a web.

00:00:14 [Conor Hoekstra]

It's like we're already in, we're already in podcast mode and we haven't done the intro. It's like stop talking Stephen and resume once, once, once we're in full podcast 'cause like I'm like we're just going to be repeating this.

00:00:25 [ST]

I just got overexcited at having anything to say.

00:00:29 [MUSIC THEME]

00:00:40 [CH]

Welcome to another episode of Arraycast. I'm your host Conor, and today with me I have 4 panellists. We're going to go around and do brief introductions.

We'll start with Bob, then go to Stephen, and then go to Marshall and finish with Rich, I'm Bob Therriault, I am the J enthusiast and I'm working on the J wiki and with developments on that in the next six weeks.

00:01:00 [ST]

I'm Stephen Taylor. I'm an APL and Q programmer.

00:01:04 [Marshall Lochbaum]

I'm Marshall Lochbaum. I started array programming with J and then I worked for Dyalog for a while and now I make my own language BQN.

00:01:11 [Rich Park]

I'm Rich Park. I'm I'm an APL programmer, educator and evangelist working for Dyalog limited.

00:01:17 [CH]

And as I mentioned before, my name is Conor. I am a research scientist and C developer at NVIDIA, but I'm an array language enthusiast at large.

And I think before we get in today's into today's discussion, we've got 3 announcements. First, we'll go to Rich, then to Stephen and then back to me.

00:01:35 [RP]

Alright, so I'm actually recording right now from Olhão, Portugal, which I've probably butchered though every time I've asked, I'm, yeah, I'm not convinced that they're convinced that I can pronounce that, but at the Dyalog 22 user meeting [01], annual user meeting, but this time for the first time in a couple of years in person. So, you know, we've had hands on workshops on Sunday and then I've just come off the end of the second day of presentations. Which has been really awesome. Today's been focusing largely on like, uh. APL performance indulge interpreter. UM. And it's worth pointing out just off the front here that recordings from the user meeting all the talks that are being given have been given so far and will be given will be available for you to watch on YouTube in about probably about a month from now. But yeah, I don't know if I should say much more than that at this point. Or let's take even talk.

00:02:39 [ST]

A couple of weeks ago we held a vector Dojo online working in Q problem solving. I was somewhat taken aback by the number of people who expressed interest in coming to that, but we managed to accommodate everybody who turned up. With the help of a couple of colleagues who worked as tutors. We spent most of the time working in pairs problem solving with the due to circulating. People seem to enjoy it very much. We've got a couple of hours work and we're going to do one again in the next few weeks. Haven't set the date yet, but if you're interested and you didn't make the first one right to me, that's SJT, at 5JT DOT COM and we'll get you in [02].

00:03:26 [CH]

Awesome. So that's two resources basically to learn more about array languages. The first one APL Dyalog videos plus 'cause there's other folks presenting at the con. And then also yeah, and other folks and I saw a a tweet from the Dyalog account saying that the videos would be online soon.

00:03:38 [RP]

Yeah, loads of people.

00:03:45 [CH]

So whether it's a month or sooner, definitely links in the show notes and then also for the vector Dojo to learn more about Q. And my announcement is on top of those two, another resource which I think I mentioned briefly in the last episode, the opening talk of the Paradigm Conference,[03] which looks at sort of five mainstream programming languages versus 5 less well known languages, one of which is APL, is out on YouTube now, so you can find that link in the description as well. And with all that out of the way, I will throw it over to Bob who is going to introduce our topic for discussion today.

00:04:20 [BT]

So if you're following along the last episode, we talked about doing this episode as the Iversonian languages versus other array languages. And we kind of mentioned that we do tend to call audibles and change things and today we have changed things. So today that it will not be our topic. My guess is it'll probably be our topic next episode. Right now our topic I think is has been pressing for a long time, but we've never actually addressed the elephant in the room. And that is, how do we make the array languages more popular now? This podcast is one way of doing that, and there's been a lot of great response from it, and it's been, I think, quite successful that way. In fact, I think it surprised a lot of people that we're actually 38 episodes in. Now I I know people who told me that, yeah, you'll do four episodes and that's all I'll be to talk about.

00:05:11 [RP]

Surprised me.

00:05:15 [BT]

So one of the panellists it's surprised and and yet he's still here so there still must be things to talk about and I think there is an awful lot to talk about and and one of the things that when I when I thought about putting together this podcast. One of the things was that there seemed to be an awful lot going on within the array communities that nobody knew about unless you were already in the Community, so it's a little bit of a window into the community. And today, I guess to sum up the topic, it's how do we open that window and get the community out of the enclosure. It's in and out into the general population, so more people are aware of it because, I find it really well. A number of things I find very frustrating in the world. One of them is the barrier that's put up in people face towards mathematics, and to me these languages are excellent, are an excellent way to get in and and actually play with mathematics and make mathematics at creative Creative Endeavour, which I really believe it is, I don't, you know, people talk about it being you know numbers and arithmetic and stuff, but it's not that. It's that when you're in grade school, but it's not that when you actually start working with mathematics and the manipulation you have to put your brain through to be good at it is substantial and these languages, I believe really help that. So how do we get these languages out there? We have a number of people who are doing their best on this podcast and a variety of other ways, and I think that's the topic of the episode today. So I'll I'll start off with something that I picked up just the other day. Not I didn't pick it up the other day, but I found it the other day again and it's a book called Everest the Hard Way [04]. It is written by Chris Bonington. And it was the 1975 Everest edition expedition laid took a big team of people up to the top of Everest, and my book just fell on the floor and they had to do logistics, and they did their logistics with APL. They did their logistics with an APL programmer named Stephen Taylor, who actually wrote an appendix in the book. That was the first time I was really aware of APL. I was just coming out of high school and I said, oh, that's interesting I've never heard of that language. And then I think three years later I was actually going in computing science and I actually heard about APL again, but at that point I'll maybe I'll turn it over to Stephen for a little bit of history about how that approach worked and whether there was a ripple out from there to get out to a wider community by using APL in that particular way.

00:08:01 [ST]

Yeah, that that happened because the Managing Director of the company I worked for, a Canadian timesharing company called Comshare and my boss was the chair of the mountaineering club? And he volunteered my services to Chris. And so I trekked up to his home in the Lakeland with a an APL terminal, or a terminal rather, and an acoustic coupler, which some of our older listeners will remember, is something you jammed a phone handset into and you get a data connection. I was supposed to be doing the logistics, but I didn't have the math of the logistics. So what I discovered that my client, Chris, was a very keen board game player. And so I set it up as a game for logistics, for climbing the mountain, and maybe we I wrote a pretty simple loop in APL so that he could make his moves and send oxygen and climbers hither and thither and we played with this model of building the supply pair. So from programming point of view, that was my first ever APL project and I think possibly my first solo programming project where I'm writing software for someone else to use. My APL skills are pretty limited. My mathematics wasn't up to solving a logistics problem, but because the language was so good for hacking with, I was able to do something useful, so we got, we got, we got some useful software and useful experience out of the very limited resource made available for the expertise.

00:09:58 [BT]

From reading the appendix that you wrote to the book you had the first working prototype in in three days.

00:10:04 [ST]

That's how simple it was, yeah, and to give, to give the expedition its due, this was the last of the big Siege style expeditions for a Himalayan peak before people worked out how to use Alpine climbing techniques and go scrambling up there. Much more dangerously, but much faster and Chris Expedition got the most climbers from the top of Everest of any expedition by the hardest route than no and in the shortest time.

00:10:36 [BT]

And for people who aren't mountain climbers, that actually is the whole key to safety is how fast you can move on a mountain because mountains are dangerous, especially big mountains like Everest, and the longer you're there, the bigger the risk you have. So if you can move through areas that are very dangerous very quickly you substance you're much safer than a person who's taking time to go through and Stephen said the siege mentality was one that was replaced with the Alpine style, which was I think 2 climbers did it and they just did. Done solo just from top to bottom, almost in one push.

00:11:10 [ST]

No oxygen.

00:11:11 [BT]

No oxygen, yeah, no oxygen. That's a big thing and that's the change to it. So they've actually gone to if if we're looking at computers, kind of more of an Agile development where you're really going absolutely lightweight to the top but the older version required something lightweight to organise logistics and it was APL in this case. That was, quote the Killer app and I think we've got to come up with a better name than Killer app because I always think that's kind of a negative. And it's not, it's, it's. It's an application that can really help you, and it moves across. It does things better but that's one approach to popularising the languages and we've got other people who have taken other approaches to popularising languages, and maybe I'll ask Rich if he wants to talk a bit about his videos and some of the stuff he's done with Dyalog and that work that he's done to kind of spread the word whether there's there's opportunities there.

00:12:11 [RP]

I mean I think so 'cause I'm gonna keep doing them, but yeah. How did that start Dyalog? We're already doing some webinars [05] by the time I joined and then I sort of got to to continue that those who are and continue to be largely like you know, helping existing users to use features and especially for their sake, new features or very specific things which come. Sometimes it's useful for people to see outside of the array community, but I think and what I'm working on at the moment and going into the future is doing a lot more bread and butter type programming in APL 'cause I find that one of the things of the array language media as we have it at the moment is we get a quite technical language. Philosophical. We like to talk about the really detailed ways in which sometimes the array languages are different or can sometimes be useful. Well, yeah, a different to conventional languages, which for some people is a large amount of the appeal. But oftentimes it's not that long before they can get started. There's actually quite a lot of really excellent resources for beginning to understand. [06] You know, OK, the syntax is different, but that's explained how all the primitives work. Here's how they can be combined together, but then they still can hit this kind of sticking point with some of the tools or things which maybe in tools that they're already familiar with they're like, oh, that's actually, I already know how to do this here or or I can Google it, which is something we have limited you know limited Google ability in the array language world as well so you know the nice thing and he talked about this I think one of the competition when it's on a on actually Stephens young PLS panel [07] I want to say 19 Dyalog use meeting he said one of the nice things he thought about APL was one of the first things you do in APL, in contrast to other languages when you go to solve problem is not Google the solution. You know partly because I guess you can't. But then you then you find that if you've learned it to an extent, you think about it and and you can solve the problem. But he was also, largely, I think focusing on you know, problem solving problems of the kind that we do talk about in array language media at the minute. It's, you know, sometimes artificial or sometimes data that you've already got in a clean way ready to go and the problem well defined. But there are sort of, yeah, more pragmatic things. Just reading information into your workspace or whatever can be a significant challenge for people who are just getting started to see exactly how to do that with the wide range of things they want to. So videos about that I hope to do. You know start doing and started doing one sort of thing but want to do more of on my RicketyP YouTube channel we can link that self plug [08].

00:15:30 [BT]

And that's actually something that Lib Gibson talked about as well. Only when we interviewed her was was the innovator's dilemma,[09] which is when you get into a space where you're competing with other people who are already successful in this tab. The innovator's dilemma is that there are innovators and you're trying to come in the best approaches and to try and compete with them head-to-head. The best approach is to come in underneath them with something that's easier and maybe doesn't work as well, and that's a key thing. It doesn't have to work as well. These languages work, really well, but the perception is that they're difficult. So in that sense, I suppose they the perception is they don't work as well, but you come in at a point that's under which is easier for more people to use and then that's your foothold, because you can't compete with the people at the top end who are already established in the areas that they're working. And I think that's really true in a lot of the financial stuff with APL.

00:16:25 [RP]

I think the yeah, the thing that we've got that's easier and really much more pleasant than a lot of other languages and software generally is once you've got the stuff workspace ready to go, playing with it in a way that's natural to your problem space and and the way that you think about how you want to approach changing the data is just lovely. If it's just the talking to everything else, that tends to be the pain point.

00:16:35 [ML]

Yeah. So that's one of the things that kind of strikes me about getting into a PL through helping someone climb Mount Everest, I guess. Is that uh all you did was sat down and write the programmers, or you didn't have all these inputs. You didn't say, well, how can I scrape the topography of Everest off of this web page? And uhm, I think that's a lot less what programming is like now. Not necessarily because it should be, but maybe just because there's more data available. Uhm, so one thing I see like people asking about now this is unrepresentative because, you know, if somebody is able to just start with BQN [10] and write out their program that does what they want, they may never come on the QN forms and ask about it, but the things that people do ask about from there, so there are, you know, questions just about like can I do this in the language, can I do that? But also there's a lot about, you know. From somebody who hasn't yet started be created, well, is this going to be able to serve web pages? Is this going to be able to interact with a database or whatever. And so it's a lot less like seeing the language as a tool to figure things out, and more of it is seeing as it as a piece in a system which I guess it's not really as good of a role for for these array languages, because they're not designed to connect with other existing things that are out there so much.

00:18:22 [BT]

I think that's something that that when we had grit Gitte Christensen on [11] that she mentioned is that for most people it's subject matter experts who may not be programmers that end up working with the language because the language is relatively simple to use if you're not a computer programme and you already have the experience. I think that sort of fits in well with what Stephen was doing with Chris Bonington, who's believed me an expert beyond expert Mountaineer and he had that subject matter expertise, but he's able to work with Stephen and Stephen got the click, which was Chris likes board games. And it's a great way to introduce somebody to those kind of that kind of flexible thinking. And then I think I believe Chris was an army officer. So by the time, by the time it comes to, you know, logistics, you give him a tool and say point him in that direction and he's got a goal, well, he's going to use that tool pretty effectively. And I think that's the sort of thing that can happen with subject matter experts. And I guess I'll come back to Conor who's been sort of, you know, sitting back 'cause he sort of threw it in my direction and you've you've come into the array languages kind of as an outsider, so I'd love to hear your impressions on where things are, where they're going and where they've come from, 'cause I think that's that you're the you're the expert in this area.

00:19:49 [CH]

I don't know. I mean, I think that probably I have the least interesting or important things to say here because I don't think I'm necessarily trying to or have ever really thought about how to popularise Array languages 'cause that I don't think is is my goal I think you know, for many of our panellists they either have a language or work for a company where, you know, obviously you're interested in having more users.

00:20:19 [ML]

Well, to to point out my kind of specific situation, no, I'm not really interested in having more users in particular. My goal for BQN, is just to make sure that people who want to do array programming have a really good modern language that's designed for that. So my goal is really to, you know, first just make their language good. And I mean the. Primarily I look at, you know, what do I want to use what, what do I enjoy programming with so that I know at least it works for one person and then I look at making sure it's accessible to those who find it but at the same time, I mean, a lot of Bob's talking about subject matter experts. They're not the people who find DQN or the people who are interested in programming languages as like as a thing in themselves, they're not people who have a problem that they then want to solve.

00:21:06 [RP]

Yeah. Target us for Conor. You're like as well, right? Yeah, one of these uh, language? Programming language. Polyglot collectors. In a sense, you go around hoovering up programming languages left, right and centre to see what you can learn for yourself and your abilities rather than yeah, it's the the traditional APL story, I suppose is the is the domain experts, the people for whom it was such a like revolutionary tool to be able to do things with a computer as someone who wasn't an expert computer programmer.

00:21:44 [ML]

Or a programmer at all?

00:21:45 [RP]

Yeah, true.

00:21:46 [CH]

I think that and I think, yeah, what Marshall said is it's important is to try and articulate what maybe not each individual goals are, but like, yeah, what what the goals of projects or languages are. And for me personally, you know, with my content that I produce, talks, YouTube, etc, I mean, I think, I think definitely this podcast is an attempt to give people an alternative media source that they can consume. Yeah, Troels Hendrickson are our last guests [12] and he, oh yeah, that's something worth announcing. He released a blog post after his conversation with us that followed up and answered a few questions he felt either went unanswered or not as answered as articulately as he would have liked, so that's a great resource to read. We'll link that in the show notes. But he I think he started the blog probably a little bit tongue in cheek or maybe he was being serious, but he said is, you know, the world Premiere Array Language Podcast, which is like saying, you know, my dad, my my favourite father.

00:22:49 [ML]

Well, now he's always talking about Futhark, I guess. Like the the world favourite language named after the runic alphabet, and things like that joke in the same vein.

00:23:00 [CH]

Yeah, identifying what our goals are and I started making content and started covering like array languages just because a lot of the stuff was like mind-blowing to me. And then I would I would cover, you know, 6 or 10 or 16 languages depending on the video. And it wasn't because I wanted everybody. And I try and articulate that a lot of the times in my videos. I'm like, the goal of this video is not to convince people that APL is the language for you, drop Python or drop C++, almost always, you know, keep programming in whatever language you're getting paid to at your work. You know, it's very rarely, you know there are some situations, but it's going to be a very small percentage where it's the right idea to switch from whatever language is currently being used for some project to some other language, let alone sort of an esoteric language, but it's for me it's more like I get super excited about something that I found in some paper from 1979 that is a solution to some problem I previously solved. And then I'm like, Oh my God, I gotta go make a video and tell people about this. And some, some of them, it'll land and be like, wow, this is mind-blowing. And other people will just be like, this is hieroglyphics and yeah, so it's, I don't think I've spent a ton of time thinking about how to popularise them. I think, you know, this podcast is awesome for those that are looking for this kind of content. And I mean Bryce on my other podcast, ADSP [13] we've talked about several times is especially in this 2022 space depending on when you're listening to this, this is, you know, late 2022, right? Now in the C ecosystem. There's a ton of evolution talk. There's carbon from Google, there's CPP from Microsoft, there's other languages like jacked or yak. I'm actually not sure how it's pronounced and so there's a ton of discussion about how is you know C++ going to evolve? Is some language going to replace it? Is it going to be some sort of successor project? And one of the things that always comes up is like it has to be 10X better in some way in order for it to have a chance of being successful. And I think when it comes to popularising array languages, I think definitely content like this, podcasts and other resources help, but potentially, like if I was going to start thinking about that, that's what I would think about is like, you know how our array language is 10X better if your goal is to popularise and I think K&Q are probably the best example of an array language that identified their 10X and did that amazingly well. And I think no one would deny that Q and its space that it's entered has been phenomenally successful because I think it's, I'm not sure what you know, maybe Stephen is better to talk to with the 10X is, but you know performance I think is 10X and I think if you talk to the people that use K&Q [14] they would talk about how much faster they're able to, you know, develop or write whatever they're trying to write you know, I I talked to someone recently who I think was using Scala for their job and and he's trying to convince the their employer to potentially use q. And he was just like, I can just be, I can be 10 times faster. Like I'm writing all this overhead code and I know, I know how to say what I want to say I could do it way faster in Q, but because I'm using Scala it slows me down and so I think you know 10X in terms of purf and 10X in terms of how quickly you can get things done. And the question is I think for other array languages is is what is the 10X and for me personally it's like 10X, maybe even 100X is it's the way that I think about solving things, but that not necessarily is going to, that is not necessarily going to increase the popularity of usage and that's that's another thing to think about is. What does this popularity mean is it popularity and people who know about it? Popularity and people who use it for their day job? People who use it for side projects? People who use it for a background sort of desktop calculator. Anyways, these are all just things that I've been mulling around in the back of my head while listening to other folks talk, and I'll stop rambling and let people respond if they've got thoughts.

00:27:01 [BT]

Well, I guess it it brings it back around to what I was talking about. Mathematics. I think that the thing you have to be very careful about when you're saying 10 times is people think about what can you do that is 10 times better? Well, now you think you've got to go 10 times better than the best people doing things and I I really think the interview that we did with Lib Gibson was illuminating that you don't have to be 10 times better at the best area. You have to be 10 times better in an area that might be underserved right now. And I think that the context you should look at is where are you looking for that 10 times better? And I mean for me and actually going back to Ken Iverson,[15] because so much of what he was doing in in APL, it started out as an educational tool so that he could explain array programming or programming. You know matrices to students and and talk about linear algebra in a meaningful way. And then it became you could actually use a computer as a tool to express that. And then he went to J. And most of what Ken did, aside from the development that he did with Roger in the early days, was educational he's got all these live texts that are labs. And the recent weekend that I spent with everybody down in Victoria, the labs came up as a topic. The labs in J, essentially what they are is text within the IDE so that you can read the text and then you can actually do work. And you can actually, the person who's writing the lab can actually change variables and change input so that you can work in a different environment as the lab progresses. So there's somebody holding your hand along the way and guiding you, giving you instructions and setting things up so that you can use them in in a working interactive development environment and that at that time, which was I think 1992-93 you know, Jupiter notebooks didn't exist. Those kind of things weren't there. Wolfram I don't think had done his notebooks yet and so this was a way with just using this language you could actually get in and manipulate, be guided and manipulate. And that was what the lab was but the labs didn't go any further than that. They I've done some work putting in videos, I've done some work with different areas, making them somewhat interactive you know a little bit more and they're, they're more, they are pretty interactive to begin with, very interactive to begin with that sort of strength but they didn't progress. So that was an area that there, there was a big jump, but it didn't quite take off at that point and and I I think that's those are the areas you know when you say do you want to? How do you how, how do you want to grow your base? Well, I think the way to do it is education. But education is a very tough thing to get into because it's there's not a lot of innovation in education whenever innovation is used, it's trumpeted to the you know we were forced to innovate when we went to go to distance learning during the COVID crisis, you know, which is sort of ongoing, but, but people, people were pushed into that. And and so a lot of people got into situations where it was, you know, an emergency situation and that's the worst situation to try and get into it and innovate and you use that. Those tools, those tools are really, really good, but the way we were forced to use them was really, really not good and that's why people have now sort of a very negative feeling towards online learning. So if I was to identify an area that I think there's a potential it's to actually just use these languages a very simple interactive they're you know they're interpreted, you don't have to compile them am wave to get students used to. They don't have to do all the work of you know that have to know their times tables, but they don't have to, you know, do them over and over and over again because the computer can do that. How you do it is becomes very important.

00:31:16 [RP]

And that was uh, Jeremy Howard,[16] who's sort of a little while ago did his own Fast.ai APL study group UM I think one of the early tweets he had that Dyalog was about how, you know, he'd struggled to teach, I think, arithmetic, geometric series using traditional mathematical notation. Here his daughter and her friend didn't grasp it that well and then he went on to try list list comprehensions and then and then gave APL ago and it apparently stuck really well. So then there's something about the the simplicity there, but I'm guessing this, yeah well, there definitely is a massive range of topics in education, all the way from, well, grade school mathematics to the university topics which lead to the domain expertise such as the, you know, traditional way into APL for loads of people, certainly loads of people at the Dyalog user meeting for sure. So yeah, finding a way into there is definitely worthwhile. Adam and I actually it was from December 2019 we did a couple of workshops, went to went to some high schools and tried to do some APL workshops there, but those were in a computer science context. Actually, that's probably a relief in hindsight, because one thing we learned that was kind of interesting was. I mean, I don't know about the various ages of of people on the panel right now I've got a vague idea, but no specifics, but I let's see. It's doing year ten 2005, so that's when you start in a year 8-9, that's when you start doing more stuff with computers they're teaching you how to use word processors and other office things, getting ready for when you will almost inevitably have to use that in the workforce somewhere these days. But at that time, you know, a lot of families had personal computers in the home around that time that was sort of had started to happen or was was quite established or a lot of people in schools had laptops, so their ability to just use a computer interface was as good or better than the people teaching you know the the software to use so you didn't have to. There's a lot of stuff that was just already there for you, you know, we saw speeds up the learning of these types of things quite a lot, but now it turns out because the iPad and the touch screen interface is the more popular in sort of home computing device. You have to start from scratch all over again. That was a weird circular thing to learn about. Imagine that makes you know these sorts of things more tough. Well, I mean. Thanks to being terse. Maybe the array languages still have a chance we can just go straight to whiteboard to start with but eventually, yeah, it's like you said, Bob, you don't we really have to write out the entire matrix of a multiplication table? But I wrote every time the computer can do it. When it's executable, you can navigate much easier. You can play with things much more easily than having to do it by hand.

00:34:37 [BT]

And with iPads. Actually, the discussion this last week on the J forums has been Ian Clark [17] talking about he's he has an iPad, iPhone implementation of J901 on you 'cause it's an app, you can download it and you can run it off your iPad and your phone. Apple has a number of very strict rules about what you can import ad how you can do, so it it turns out that he's done all he can with his application to make it accessible to people. But there are additional things that you can do to use a file system to bring in information. And it turns out that using an iPad with Jay is actually not a lot more restrictive than any other way. You just know how you have to know how to bring files in through the Apple File system, which they will allow because we assume that you're doing it this way so that you know what you're doing, and it means that the areas where he can't rewrite his program and do it programmatically, you can do just as file manipulations and there's a lot of people learning about that this week on the J forms. It's very powerful and we'll put a link into the J 901 there are actually two applications on the iPads and iPhones.mThere's J 901 and there's the old J 700 that's been left there just sort of for purposes for people who might want to do that. But the 901 really is the one to use. Did you have anything else to add to that, Stephen?

00:36:06 [ST]

Circling back to your issue you were saying about identifying the 10 at the 10 axis, so I apologise. While you were talking I was consulting my experience coming back from my memories and I was remembering remembering some incidents. One was Whitney [18] asking me a few years ago, if I'd been much concerned with performance in my programming experience. I had to say I hadn't. It's like most of the programs I've written, performance was kind of OK. It wasn't particularly an issue. Why? You wind up maybe optimising a few particular things, but mostly, you know, whatever I wrote, this code was fast enough, whereas of course in Whitney's world, performance is not.mUhm, what is it they say? It's not everything, it's the only thing. When he started kx with his then wife Janet Lustgarten and Janet told me some years ago, she said all our customers at kayaks in those days were people for whom everything else has failed it's the only reason people use our technology is because they can't get anything else to run fast enough. They do not come to us out of a desire to use our crazy language. They're used to us because nothing else will do. So that's a that's a 10X, if you like, performance people come to the certainly K&Q for performance we you touched on what we could call time to market speed of development. And that's an important one. Years ago, famously, somebody asked Stefano Lanzavecchia [19], who is my predecessor as the editor of Vector, what he thought computer science had still to learn from APL. And he said he thought the lessons available from APL had pretty much been learned. And we were talking in an earlier podcast about the ways that array methods had been rippled out from the other Sony and languages. But he said if he wanted to make $1,000,000 off by writing software, APL is your language to go for and I can think personally of quite a number of examples that people have taken as you were saying everything, they domain language and they've been able to code it up into something usable and the effort, because they didn't have to write well at ceremony, at ceremonial code and so forth, they could work very directly. So they get time to market out of that and I want. I want to pick my friend Paul Mansour [20] as a representative out of this. Out of this class he started out with working on the analysis of mortgage portfolios and writing software to do that, and eventually turned that into his own software product and his own company. And he's been very successful with that. It's somewhere along the line he fell in love with APL. I don't think he, I don't think that he started off on this work in order to use APL to make money or to solve a particular problem. APL was, for one reason or another, the tool that was to hand when he started on this work, but somewhere along the line he fell in love with this stuff and he's now deeply committed to the coding methods that he that he's found work for him and also to the aesthetics. So I worked with Paul on on code. Have worked at his, we worked in his office. Uhm, he's somebody who really cares about the way the stuff looks and works. How did that happen now? Some years ago I was invited to give a talk at the JSA for conference in Toronto,[21] which about which I felt very honoured but also a bit intimidated. Like, I don't actually know any J worth talking about? I thought about what I might talk to that audience about, and I worked up a little talk. I think you were there, Bob, which for which my original working title was why I am a lousy programmer. My reasons for for claiming to be a lousy programmer was really interested in the machinery underneath. I'm not really interested in the performance or the speed of the algorithms. I when I reflected on it, I just like the way it looks, I like it when you can use an inner product to achieve something really nifty. Basically, my confession is that my primary motivator is the aesthetics. That's what I like working in this lights. While when I learned APL all those years ago and got invited to support Chris Bonington. I'm gonna use APL for this. I could have used, you know, basic would have worked just as well. But I'll get pleasure out of writing this stuff and out of making it look beautiful. While Paul makes a good living and provides great software for his clients, I know that he gets an aesthetic kick out of this.,And when I listen to Conor talking excitedly about algorithms and APL primitives, I believe I'm listening to an aesthete so I've covered here three different motivations for using or being interested in the array languages. One is performance, like, I got to learn this language so I can write programs that actually run fast enough and maybe get paid the salaries that Q programmers get paid, or I need a tool with which I can get what I know into a form of software. API is a pretty shrewd choice and it answers the innovators dilemma as the other guys aren't using this so maybe I've got an edge and then there's the poor saps like me, who just fell in love with it. And I I didn't in the end call my talk Why I am a lousy programmer. I thought it was cool to reference a lot of Canadian artists as I was in Toronto and so I slipped in references to Joni Mitchell and Gordon Lightfoot, and I called my talk. I came so far for beauty.

00:43:22 [BT]

Which is Leonard Cohen, right? And it was a very good talk and one thing I'll ask you about now 'cause I get this chance to do it, you say aesthetics, but I think it's a combination because it is the aesthetics of something like the inner product, but it's that combination of symbols that goes together and then to me it's the key thing is it's the power that you can use it for. So it's not just the how it looks, it's what it can do by how it looks.

00:43:52 [ST]

I think I do mean that as part of the aesthetics. Mathematicians use the word elegance a lot, and it's it's in my world that lots of coders are motivated by aesthetics, but they pronounce it cool.

00:44:07 [BT]

Yeah, yeah. There was a lot of talk when we were in Victoria about how to get information out and one of the things that over and over again that I hear and I read on BQN is the excellent documentation, and I think that documentation is really important to get information out on a language that's relatively new. And Marshall, what's your secret to writing really good documentation? 'cause you write really good documentation?

00:44:37 [ML]

Uhm, well, it's not very secret, but there's several 100 hours poured into it.[22] Uh, I mean that. That's about it, really. So I write what what the thing does. I write.

00:44:52 [RP]

I feel like Bob must also be aware how much it is just a work factor if you're working on the J wiki and or similar.

00:44:57 [BT]

Yeah, no, there's no doubt about that. There's an awful lot of work that goes into it. The thing I remember is I think somebody asked Ken Iverson how he got so good at writing papers, and he said, well, first, you write 2000 papers.

00:45:13 [ML]

You might have decreased the number there.

00:45:15 [BT]

Yeah, I might have increased the number there, but but.

00:45:18 [ML]

No decreased.

00:45:19 [BT]

Oh, decrease. Do you think he wrote more papers before he got excellent at it. Yeah, yeah, there's all, there's always sweat equity. But, but is there a point of view you take when you're writing documentation? I mean, you can just throw effort at it, but I I know you're doing more than that.

00:45:33 [ML]

Yeah, well, it's more about the things that I want to to make sure the user has. So I, you know, of course, say what the thing does. That's most important. Say some examples of how you would use it if that's not obvious, like the group function. And Q is one that has a whole lot of uses, so a group basically takes, if you're familiar with J, it's like key or in Dyalog as well, but it's a little simpler. It's you have a bunch of values, and you have the indices in the result where you want those values to go. So those are two different arguments. And it forms a result where each element in the result is a list of all the values that had that index. But it's it's not at all obvious what you can use this for, and you can in fact use it for all sorts of things. You can of course do like histogram type applications with it, but you can also, you know, split up text, distribute things like if you had a bunch of servers and you wanted to put them into pools, you could use group for that. So, so all sorts of things. So that documentation page has a long list of examples of you know the different qualities of the ways that you can use it the different categories of applications, but even if there's not this these non obvious ways, you always want examples that show what it does. So like if you're writing the documentation for reverse, this is pretty obvious, you know when you need it. Uhm, but it should start off with an example of, you know, reverse the string ABCD is the string DCBA [23]. And that means that if somebody is just a, if somebody basically knows what the function does and they just want to remind her, they can very quickly go to the page and see this example and say, oh yeah, that's what it does. I remember now. And something that I also do along those lines, which also takes a whole bunch of time, is to make diagrams that show how it works. So for like scans, say I have one that shows with arrows the whole flow of the the way the function is applied at each step and and then you see like the whole algorithm at once from this picture. So that works very nicely as a quick reference and also to, you know, before you start reading all these words to kind of get your bearings on like what, what sort of context you're in, what the ultimate goal is, and in the actual text is going to tell you what exactly it does. And things like how it applies to higher rank arrays or details that you wouldn't get in a picture that's kind of that's just showing you one usage.

00:48:28 [BT]

Do you have a have a reader in mind when you're writing this stuff? I get the sense that you might sort of have a number of readers in the depending on where they are in learning the language.

00:48:39 [ML]

Yeah, so I I think it should serve a few purposes. What I try to do with documentation and there's a lot of people who say. Also that you should have various different types of resources and I'm probably combining multiple ones in their view. But the things I try to target are somebody who's new to the language, who doesn't know anything about array programming really, who is trying to you know who hasn't even encountered some of these concepts? Like something like a scan they might not even have seen, but then also somebody who's familiar with it once, uh, is like in the process of learning the language and wants to, you know, get it quick like doesn't remember what this function does, but needs to go back and figure it out again. Or you've also got somebody who knows the function pretty well but is missing a detail, so it needs to have all the details of what the primitive does and and those need to be well organised and accessible. Although I think I kind of put that in a backseat role relative to introducing all the functionality, so it's the documentation maybe doesn't work so well as a reference and and then something that I've been gradually deemphasizing is the programmer that is coming from APL or J or K 'cause what I find over time is that these programmers very quickly get stuck on BQ in because they're not like a, it's not like APL or J pain and and so they even if they you know want to get with it eventually they find something that is just too different for them and they say well that's it, I'm done back to this language that I know how to use that works how I like it and I'm giving up on BQN. So yeah, the the current group of people who are using DQN, I would say is actually the majority of them. BQN is their first or a language or their first or a language that they really stuck with.

00:50:46 [ST]

Do you make much of a distinction between reference documentation and kind of introductory material?

00:50:54 [ML]

I do not. That's just because, you know, I can only write so many copies of the documentation. Uhm, the specification is there if you really want. You know just exactly what it does and no more. Uhm, it still tries to. You know, there's higher level descriptions, but they're pretty sure that they're intended for someone who's pretty familiar with BQN. So that's the two divisions I have. And you know, maybe in a language that had a larger user base I would have something between those, but I think what I do have works pretty well for I think, I think we're going to lose rich shortly because he's got other duties back at the the Dyalog user meeting. Did you have anything you wanted to add before you sign off, Rich?

00:51:44 [RP]

Just the types of documentation that Marshalls refer into is also something I'm really interested in for Dyalog. I think we actually, yeah, don't tag too much 'cause there's a lot of comprehensive stuff that's really good, but sometimes when you want to read about how something works, you have to pass quite a lot of text before you get to. You know the thing you the example that might make it clear for you. And I definitely want to work on flipping that on its head a bit and getting the thing that you can just glance at and go, Oh yeah, I get. I know how that works. I can move on or, you know, Scroll down further, read more, get all the details and stuff. So yeah, I agree with everything Marshall saying there. And I do have to go.

00:52:29 [ML]

Well, I can respond to that and then I then I'll have the last word. So Dyalog. One thing Dyalog is very good at is these very short descriptions on the language bar which I would think of that as at a glance, but it really is only a glance because if you need more than that then it's often not enough, but so actually BQN does have something else that's modelled off of that, which are our help pages.[24] And one thing that's good about those is that they're organised not by the functionality, but by this symbol. So those were needed and people asked me for this a lot and I didn't have it. And eventually a user who goes by the name Res time has actually stepped up and contributed these. So now in DQN you can, you can. We don't have hovered text, but you can right click on one of the symbols in the in the web repl and open up the help page for it, which is like Dyalog. It's very short and just says a brief summary of what it does and an example or two.

00:53:35 [BT]

So go off, Richard, and enjoy the wonders of Portugal.

00:53:39 [RP]

Thanks very much. Happy reprogramming everybody.

00:53:42 [BT]

Oh, I'll dub that in later. And, and Conor was nodding vociferously there about, you know, talking about the the clicking on the be able to access the information from BQN, but I'm also, I'm going to push it back to you again 'cause you are a polyglot, you do have a number of different languages that you're following, and so you do have experience across a wide range of languages. What do you see happening with the array languages compared to some of these other languages that may be trying to establish? Ones that are successful ones that are? Where are the areas that you see that the array languages might be able to improve?

00:54:25 [CH]

Is that question for Marshall or me 'cause?

00:54:28 [BT]

It's a question for you.

00:54:29 [CH]

That description polyglot. that have experience in a bunch of languages I think applies to both of us.

00:54:36 [ML]

Yeah, I don't think I have as many as you.

00:54:38 [BT]

You're both polyglots, but the key to you, I believe, is that you have fresh eyes when it comes to these languages, and fresh eyes is a I've learned from years of editing. Fresh eyes is a skill and a talent. That doesn't matter. In fact, the more skilled you get at doing something, the less skilled you are at having fresh eyes, you have to really work at that. It is a skill that you bring to the table, so I'm putting it.

00:55:03 [CH]

On you? Yeah. I mean, this isn't fresh eyes. And this is completely doesn't answer your question, but it just makes me remember when I first started my first job in 2014. We have this complicated insurance software programand I had no idea what I was doing. So I would just, you know, trying to get a sense of the landscape of all the functionality which is it was so vast. You know, it had been built over 30 years and serving insurance companies globally and in the states alone like they have different insurance regulations by state anyway. So the point is, is like the plethora of combinatorial options is immense and I would just go around and like change options and stuff and then I could crash the program like every 10 minutes just 'cause I didn't know what I was doing and so the setups that I would set had absolutely. Like they didn't make any sense and then I'd go and ask my boss so I oh, I think I crashed the program. He's like, oh, I don't think so. And then he'd be like, well, why were you doing this thing so I don't know. Like I'm just trying to figure out what's going on here. Like I have, I have no idea what I'm doing. I'm just, you know, switching switches. It's like going into a, uh, aeroplane cockpit and just flipping stuff around and then watching the plane go down. And anyways, my point.

00:56:07 [ML]

Now you can only crash a plane once.

00:56:11 [CH]

That's true, but the point being is my new individuals that don't know what they're doing are the absolute best testers. Because they don't have this, like, you know information that they come in with, that they I know how to basically set it up and then we'll test what makes sense. You know they're testing what doesn't make sense, which inevitably you know people haven't thought about, and then it ends up crashing anyways. I've totally forgotten what your initial question was, Bob.

00:56:40 [BT]

Uh oh, you're such a good politician. You're so good at this. I'll put it back to you one more time 'cause you know, I'll, I'll take lessons from your your dad as a journalist. You don't let him off the hook that way. OK, So what I was saying was there are a number of different languages you're familiar with. Some of them are esoteric I guess as a term that's used, they're not as popular as they might be or maybe should be. Which ones are doing things that you see that are effective in becoming more known and what areas might they be working in that you go? I understand why they think that would work, but that would never work and the reason I'm asking you, I'm so letting off the hook 'cause I'm giving, I'm spooling up more information. That's something I shouldn't be doing. The reason I'm asking you is because with our experience, we look at it through our lens and quite often somebody comes to us with an idea and says what about this? And you go, Oh yeah, no, that was tried back in and that didn't. I don't want that. I want to say, oh, that's an idea, we should play with that. And so coming back to you, what do you see? Different languages doing what are they doing well, and what things might array languages do that might fit that?

00:58:00 [CH]

So this. I think could be answered with nuance in that a lot of there's a lot of YouTube videos that you'll see is like top five programming languages to learn in 2022, which anyone that is serious about software development and programming that is actually making that video, we'll start that video out, which is very few of them by saying, you know this is a, you know, clickbaity question and you first have to answer what are you trying to do before you can answer you know what's the best language for that? There's no you know, Python is the best for everything, or C++, each of these languages. Languages are better in certain domains, and that informs you know whether they're a good option or not, so that can be applied to this question as well, but I will sort of answer it with broad strokes and the more click baity fashion. Uhm, I think one of the biggest things is easy of being able to get stuff done, and by that I mean. I am not a I'm a professional C++ developer, you know. That's what I've been doing for almost 10 years now, and I find it easier to write a, you know, 2D graphics program or a little game in Python [25] or in Rust than I do in C++ and I don't. I don't know Python or rust as like I know Python quite well, but rust I don't know anywhere near as well as I know C++, but because of Python package management system and Rust's cargo and that you juxtapose that next to the fact that C++ doesn't have a package manager, it's just so much easier to get stuff done. In Python, you know there is. If you go dive deep into this, people will start to tell you about, you know, Python dependency hell, et cetera, et cetera and you know, Asterisk, there's a bunch of things that aren't great with stuff, but like the ability to go, what is it called Rust up? With a Rust project where basically you go rust up and it just automatically builds like your project infrastructure, including a little main Hello World program that you can just start automatically. You know, modifying is is just so much like I remember the first time I really sort of programmed something small in rust. It made me like cry inside because of how easy it was to get going in rust and half the time all gets started. I could list you off like two or three C projects that I get started to get really excited on and then I get to the point where I want to, you know, add static analysis, which is using clang tidy and there's like it's just a terrible story for getting started. You got to go download some Python file and you've got to set up. You know, CMake if you really want to get serious about it, because trying to run it manually on the command line is just a mess and then I'll just sort of like I'll lose I'll lose the excitement and then I'll just stop working on the project. Whereas with Python on like the solution is always a stack overflow away. And you know I can just, I can just go Pip 3 install, whatever I need, guarantee you there's a library out there that like because the language is so large, which is a whole other thing. Anyways, this is just one small thing that I'm focusing on package management and like getting the ball rolling, but just how easy it is to get things done without having to, like, worry about the package management or infrastructure or building. Or if I want to, you know, if I'm in Python And I want to format things, I can just super quickly go in vscode and download Black and PEP 8 extensions and ****, click a button and I'm done. It's like so much more difficult and see I got to go set up a dot clang format file if I want to customise things and I customise everything. And then you know, depending on how it's set up, you know it's not going to work out-of-the-box. And then I might need to go download some other, you know, tool that's going to actually run it properly and so this is once again a long winded ramble, but I think the things that newer programming languages are doing really, really well is making that not barrier to entry, but barrier to like programming a small project super low and they basically are just. If you want you can throw your hands up, click a button, they have a thing you know in rust, they call it rust up I think I could be getting that wrong, but insert whatever the correct word is if that's the wrong word and you're off to the races. And on top of that, I think probably the second thing after that is like the barrier to getting started is the community around it. Rust also does a really great job, I think of having a similar community to sort of the the APL farm discord [27] where if you've got a question you can go and ask and rust has become like a very googleable language. And another great thing, I mean this won't really happen for array languages because almost all of them, if not all of them in the Ivar Sonian circle are interpreted but compiler driven development is a term that came out of. I want to say it's Elm. But it's a term that basically means like your your compiler errors don't just tell you what's wrong, they give you like suggestions like it is once again like I cry inside when I experience programming in rust and I do something that is wrong and they say this is not correct and then they give me like four or five lines of ASCII art giving a description of like you probably were trying to do this, maybe do this and they just give me a line of code that I can copy and paste and I'm like holy smokes like and even when things aren't wrong they'll give me suggestions on how to improve my code if I've added a keyword mute for making a local variable immutable, but I never went and changed it it'll say hey you marked this as mutable. And you never actually changed it, you never mutated it. So like you can get rid of that. Like it is so pleasant it's like having the little Clippy graphic from, you know, if our listeners are old enough to.

01:03:54 [ML]

But a good version.

01:03:54 [CH]

So yeah, it's like a good and I think that's actually what they call, they might call it Rust Clippy. I could be wrong about that. I'm not a rust developer, but it's just it's so pleasant to be programming and learning the language and basically having the compiler. I don't even I don't need to go to the Internet, I just the compiler is helping me out as I go. And yeah, so Community package management, you know lowering the barrier barrier not to entry, but like to programming more than like a one liner 'cause I think a lot of array language enthusiasts including myself, like 95% of the stuff I do is like one liner. And don't get me wrong, you can do a lot with one line in an array language, but I haven't. I think a tic tac toe program is probably the the largest thing that I've coded in an array language. Yeah, I'm not sure. I think probably the reason for that is that like you know the next thing up from that I'd want to do like a little 2D graphics kind of gooey game. And I don't. I don't even know really where to start. I think would J be the best language? I don't know what array language has the best like 2D graphics support like does APL? I know I've seen tonnes of webinars that use like, sorry.

01:05:06 [ML]

Kind of depends on your operating system.

01:05:08 [CH]

I mean, so that's The thing is that I've been writing a a little Scrabble game in Python over the last month or so, and I've written it all in Linux and then I plan to give a talk in the future at some point on it. and I I figured out say oh, let's just see if I can go run this on Windows and I had to just PIP 3 install all the dependencies and it worked. I mean it didn't have the font that I used in Linux, but that was the only that was the only problem. Everything else was perfect and obviously that's not the case for every programming language, but yeah, I guess and that's The thing is I get sort of intimidated, because the things that I have seen in Dyalog webinars about graphics it's using things that were created. We did in the past and then like there's a lot of overhead in terms of HTML dot, I can't, what do they call canvases? And you're rendering things on canvases and that just seems like a lot of a lot of hoops that I gotta jump through and admittedly probably like if you want to do a 2D graphics programme, array programming languages aren't the languages that you want to reach for, but I guess the question is, is, you know, what's the small little project that we should be encouraging people if they sort of want to go that route down where they're going to have the best experience and a lot of the times.

01:06:33 [ML]

Now, Everest.

01:06:38 [CH]

Yeah, man, I this is also, I'm going on tangents today, but I I just watched a couple days ago, the Aftershock Netflix[28]. It's like a three episode series on I think it was 2016. There was a massive earthquake. Oh my goodness, it's it's devastating. I'm. I'm not even sure if I recall hearing about that back in 2016. But for folks that want to be encouraged to never go climb Mount Everest because you're, you're so scared of like, there was people on the mountain and like, depending on where you were on the mountain, there was, you know, I don't know how many people died, I think in Nepal, I think it was. It was thousands from the earthquake in Kathmandu. Anyways, I never had ambitions to climb Mount Everest. Uh, but Lord knows I I will never like, I'm I'm going to be worried about just going to like the West and East Coast where there's faults and stuff. Now you know Toronto, I'm pretty safe here. I don't know if I'm sitting ontop of any. Anyways, hopefully they don't need to go climb Mount Everest 'cause that's going to be to learn APL 'cause.

01:07:45 [ML]

Anyways, hopefully they don't need to go climb Mount Everest 'cause that's going to be to learn APL 'cause. Yeah, but I do hope you know people with the there's some way to get, you know, the people who have the thing they want to do and just don't know how to program it yet. It would be really cool if there was some way to introduce those people to APL instead of NUM PY or something like that. But yeah, it's it's hard to say you know how that happens because those people definitely don't want to be early adopters, so you know, you need the early adopters to kind of bridge that huge gap or crevasse.

01:08:20 [BT]

I think crevasse. I think one of the things you were talking about community. I think that is one thing that I think everything I've seen in the array languages the communities are really strong and they're very supportive and and I I've I've I've seen other communities that and I've heard of other communities that might be a little less so, but I think generally people are helpful, but in in the array programming communities I find they're very helpful. And I always put that down to the fact that there are usually people who've made the effort to try and learn something that might be a bit different than what they've learned in the past. So they're usually very forgiving to people who don't know something because they've been there maybe quite recently, depending on what my memories like it could have been yesterday and I'm trying to figure something out. That they're trying to figure out as well, but I think the Community thing is really strong, but I think the other thing you touch on that I think is really key and and Marshalls touching on as well is you have to choose the areas where you drop the barrier or lower the barrier. So that if you decide that that you want to use an array language for game programming, I'm not saying it's the tool you should use, but at the very least, if you want to attract that audience, you should be making it, for one thing, clear about how J [29] would interact with the tools that you might want to use or an array language might might interact with the tools that you might want to use to create a game, but also to make if you were using an array language is a glue language that could be done really effectively so you don't have to go invent all that, but you can put a person in the position that they can start working from that point and you would generate I'm I'm pretty sure with the elegance of the array languages and the the ability to them for them to quickly develop and prototype so well. I really think that's the area that if you can put those barriers low, people will just come in and use it because it's, it's, it's available. What's happening now is those things, if they are available, haven't been identified to outsiders, so they don't even know that. When when the talk I was down in Victoria, we were talking about databases and and JD, which is the J database, which can't compete with JD Plus. JD B Plus it, you know, it's it's not in the same field, it's not trying to do the same things but K for KDB plus.

01:10:47 [ML]

You mean KDB plus?

01:10:50 [CH]

Yeah. Yeah, I was. I was thinking JD Plus, I haven't heard of this.

01:10:53 [ML]

Or JDB was the old name for JD so.

01:10:56 [BT]

But but JD [30] has a purpose. It's not at that that super high, super fast level, but it does do some things very well. And is relatively easy to use, but people don't even know it's there and so I think that's that's common.

01:11:12 [ML]

Yeah, well it's it's really intended to be a tool for J programmers, so. Uh, in that way it's audience is kind of.

01:11:20 [BT]

But I think a lot of J programmers don't know it's there.

01:11:22 [ML]

Yeah, that may be.

01:11:24 [ST]

Let me come back to the question you the point you're just raising about community 'cause I propose that there's a significant difference between the communities for a large language of for small language. If I'm looking at learning Python, for example, I know like Conor says, there's libraries out there for just about anything I could want to do. If I scout around a little bit on the web, I'll find those examples. All over all kinds of forms, in fact, in a sense it's almost a little off putting because I'm nibbling into the language I've found. Actually there's some pretty crappy examples out there. Offered is accept offers exemplary code and ways of doing things. Then I had a little project a couple of years ago to find to show Python equivalent programmes in Python And Q, and I look for program to do something in Python And then I put the Q program up and I think. Actually, this kind of looks like a straw man. I need a I need a better Python program and I'd figure out on a radio like way to do it. So at least you got some kind of comparability between between the two ways of doing things and so I know the Python community is there. It is kind of big and I'll find answers out there. I expect that finances and Stackoverflow [26], but if you go to a small language community you're going to find a high proportion of language champions and enthusiasts, not just people who are using it and know how to do ship the people who actually want you to understand and adopt the language. So it's going to be kind of a more welcoming place and I would expect so if I go to the BQM community I'd find better quality code. So I'm going to be learning it. Uh, I've got the opportunity to learn at a higher level than if I go starting to learn Python or C#.

01:13:35 [ML]

Uhm, you get kind of an interesting mix because like I said, there are a lot of people in BQN who are new to our programming. So they're not bad programmers or anything, but they they're not really familiar with the idioms yet. And a lot of the times they do write BQ in code, they can pretty easily be simplified like a lot. Uhm, so you see, and I mean, there are definitely a lot of people as well who are who have some great programming experience or or have spent enough time with PQN that they've really gotten used to it and write very good code as well, yeah, it's hard to say. Yeah, and I wouldn't really know another array or another language can be in depth enough to compare them, but you definitely get a bit of both. Yeah, one thing I've noted is that like BQN has a lot of things that could be made in libraries for the language, but there are not really a lot of people stepping up who want to like write this. And partly I think that's 'cause a lot of people don't, you know, have the confidence in themselves that they really should. But it's hard to say I I don't think I fully understand really why people you know are very enthusiastic about doing like adventive code, but not necessarily about making the libraries to, you know, work with Json or whatever.

01:15:07 [CH]

I mean. I can kind of answer that from my personal experience, which is that I only have one library. That is officially hosted on some kind of package management. A repository. Any guesses what language that's in?

01:15:27 [ST]

C++.

01:15:27 [CH]

Nope

01:15:31 [BT]

I'm going to say Haskell.

01:15:31 [CH]

No not Haskell

01:15:34 [ML]

Well, I'll go with Python.

01:15:37 [CH]

It's not Python, the language is Racket [31] and that's because the ability to post something to racket like is so easy. I don't. I don't know anything about racket. I mean, I've it used to be in my top five favourite programming languages. And you know, I did the sicp structure interpretation of computer programming textbook, which you can do in racket or scheme. It was just so easy that I thought, why not? And I found that the algorithm package name was still available and I was like, well that seems like, you know, God is speaking to me. It's like algorithms headers from C++. And I don't know how racket could no one could have named squatted on this. I guess the community is small and so I just like I created. I think my initial motivation was that there was no. There was folds that come with racket, full DeLand folder, but there was no scans and that irritated me as and I went and searched other libraries and I I couldn't really find one. And Racket has a bunch of issues about it that there's a bunch of dialect issues because you can very easily create your own language. But anyways, I just created this small library there's a couple years ago, added the scans and then a few other algorithms that I really like and then randomly in the last like couple months. A couple people said, oh, I'm going to port this to guile, which is another scheme dialect, and they've been making like code contributions and fixing up my documentation, of which there was, you know, very little. But it's just it's once again, it's that barrier to entry. And the other thing is, is that racket is such a simple language. That and lisps in general that I was less intimidated that I was really going to make something bad. You know, it might not be as performant based on a couple of my implementations of things, but because it's such a simple language, I'm not worried that it's going to be like, oh, if you do something in C++, you know you haven't considered forward referencing, and in C + + 17 they added this language feature that's going to simplify it. And getting just a billion people telling me that I'm doing something suboptimally is like the area that you could do something, the surface area that you could do something suboptimally in racket is quite small that like it's mostly going to be per for, you know, formatting or something. And I think definitely for BQN like I don't, I'm not at the level where I thought. Like I could write something that wouldn't just be completely needed to be rewritten, basically, and I think that's the case for many, many languages.

01:17:58 [ML]

That's true. But I'd kind of hope people would, you know, write something that we need now, even if I, I mean, and right now we don't even have a package manager. So you could not submit a package, you could, you could write the code and you know, tell before him, hey, I wrote this utility code which people are you know on there to say I wrote this program or that programme, but very rarely you know, frameworks that you would that another programmer would be able to use for a different problem. Uhm, so I kind of hope people within BQN feel comfortable writing something that maybe isn't the best, but also nobody else has done.

01:18:39 [CH]

Right. There's a great, there's a great quote by, I think it's attributed to Joe Armstrong,[32] the creator of Erlang and that it says. First, make it work, then make it beautiful. Then make it fast if you need to. And I heard this actually from my thesis advisor. I think I'd heard it before, but he had said it when? He wanted me to start writing some code in smalltalk or something and I said no, I'm not, I'm not ready yet. I haven't learned enough. And he said whoa, whoa, stop, stop, stop, stop, stop. He's like just enough of that. You are. You've been programming for, you know, number of years. You definitely know enough to get started. It doesn't need to be perfect. And I think there's this. This intimidation factor of like well, I I haven't learned enough and I don't know all the language features in order to make this like perfect on my first go when really, you shouldn't be intimidated. You should just write it, know that it's going to need a bunch of refactoring, and it's not going to be perfect. But you should have something that's at least running partially for what you need to get done before you start worrying about. Is this fast enough or is this beautiful enough? Just make it work first then. And, you know, make it look really nice and then if you need to optimise it because it might turn out, you know, as Marshall mentioned before, and we've talked about this, is that a lot of times you don't need things to be, you know, it's running in a fraction of a second anyways. Sure, it might be using some quadratic algorithm, but going from quadratic to linear is just going to be a fraction of a section second too. You know, still a fraction of a second.

01:20:13 [BT]

So you know you're not even going to Notice it and the computer time. Human time interface is that if a computer is doing it very slowly, it seems very quick to us in a lot of cases when you're getting reaction.

01:20:24 [ML]

Yeah, exactly. I mean, you have this processor that can do billions of computations every 2nd and you think you're gonna? You're going to waste time on that.

01:20:37 [BT]

So I think from what I'm gathering off this episode, and we're getting towards wrapping it up, is there's a lot of work to be done. I think that's the very basic level and the idea is to identify the audiences that might be interested and make it easy for them to use the languages. Do other people have things they would like to add in before we wrap up?

01:21:01 [CH]

I I guess I can add like probably the biggest thing that we have going for array languages is all these Online REPLS.[33] You know APL book J. There is one for KX&Q I believe and even. Yeah, and even like nial, I believe you can access on TIO the tried online web. Right. And yeah, that I mean having a REPL, in terms of getting started, it doesn't help with the barrier to entry of a small project, but it does definitely help with the barrier entry to your first line of code. And maybe, yeah, maybe there's some graphic that is the barrier to entry to and then insert a bunch of things. First line of code. You know, small project, large project and I think it's the project ones that is where a lot of work needs to be done. At least from my perspective 'cause I haven't gotten to that point for one reason or another, whether it's package management or the fact that I'm choosing the wrong thing for to do a small project in.

01:22:07 [BT]

Yeah, OK, well I'll let Conor do the wrap up 'cause he does it so well and I'll mention contact AT array cast Dot com actually. I'll also mention we also have a resources page on the the site. It's probably could be updated, I should probably should spend some time doing that, but it does have links to a lot of the information on the different languages and where you can find more information, I think that would be very useful. And also I think earlier before we started this, you mentioned APL Orchard Marshall, which is a really great and the APL wiki [34].

01:22:39 [ML]

Oh yeah, we skipped over that entirely. Uhm.

01:22:42 [BT]

Yeah, but there are, there are, you know, ways online to get involved with people who know the languages very well and are supportive and you can, you know, there are ways to lower the barriers. Unfortunately at this point we're still working on putting the the barriers lower and so there's still maybe barriers you have to overcome, but there are people to help you over the barrier right now. So that's always a good thing.

01:23:07 [CH]

Awesome. And with that, we'll say happy array programming.

01:23:15 [EVERYONE]

Happy array programming

01:23:17 [MUSIC]