Transcript
Thanks to Rodrigo Girão Serrão for providing the transcript.
[ ] reference numbers refer to Show Notes
00:00:00 [Rodrigo Girão Serrão]
So it all dates back to when I was, I don't know, maybe two or three years old and I was sitting next to my mom at a at a café I think. And of course, I didn't know how to write because I was only like 3 years old, so I was scribbling on a piece of paper and my mother asked me if I was writing and I said no. I'm writing numbers.
00:00:31 [Conor Hoekstra]
Welcome to another episode of Array Cast.My name is Conor and today we have a special guest. But before we get to introducing him, we will go around with quick introductions. First, we'll go to Bob and then we'll go to Rich.
00:00:42 [Bob Therriault]
I'm Bob Therriault, I'm a J enthusiast and involved with putting together the J Wiki right now, which is keeping me very busy. And I've been doing J for about 20 years now.
00:00:56 [Richard Park]
I'm Rich Park. I'm an APL evangelist and educator working for Dyalog Ltd.
00:01:02 [CH]
And my name is Conor as mentioned off the top of the episode. I'm your host for today, not a professional APL, J, k, q, BQN or any other array language developer. I program in C++ day to day, but all of those languages I absolutely love. And I have a blast recording these episodes, so we've got 3 short announcements I think 2 from Bob, one from Rich, and then I will introduce our guest for today.
00:01:25 [BT]
OK, well, I'll start off. I've got two things that are going on currently with J. One is, last this week Eric introduced an add-on for arrayfire, [1] so there is now arrayfire on J and you can start to run it on GPUs, up writing test phases right now so it it kind of had a a lumpy start, but it seems to be running. I've I've run it through and stuff. I'm not you doing a lot of the high I have high speed stuff that you might need to do, and arrayfire is it's an application which actually can allow your computer to run computations from the GPU, so that's what it is, and they've just introduced that in J, which is pretty exciting 'cause it's sort of adds up things to parallelization, a lot of other things as well, and the other thing that just started to happen yesterday and I think sort of happened the result of one of my J wiki group reports, was there's talking about putting dictionaries in J [2], which is really fascinating. 'cause right now literally right now they're trying to figure out what a dictionary in J would be and they're looking at k. They're looking at q. They're looking a whole bunch of different models, but they're actually talking about doing this. Eric came on yesterday and said, yeah, we've been thinking about this for a long time, but we need to figure out how we would do it and whether we would do it so it's it might be out next December when the next beta is launched, you know, released and completely like ready to go, but it's kind of exciting to watch this sort of stuff happen. Which is, it's really neat.
00:02:55 [RP]
Well, so in less technical but more community oriented news, there is, well, I guess when this is released there will be a few days left for you to be able to vote on a shortlist for a potential new APL logo. So historically individual companies, these vendors who produce APL products, APL interpreters, have used their own logos, but there hasn't really been one universal logo for the APL language itself. So the community has set up a page on the APL wiki, which there'll be link which there will be a link to in the show notes [3], and you can go there and find out how to cast your vote. So that closes on, sorry, so yeah, that closes on the 10th of February.
00:03:47 [CH]
Awesome, so we've got GPUs. We've got dictionaries, which I assume means hash maps or some implementation like that, and also logos. So links for all of that, or Bob you want to add something to...
00:03:58 [BT]
Well, I was gonna say that's the big question with dictionaries right now I think they've pretty much settled on a dictionary assembling with key values and and and a you know a value to a pair of things. But past that in J, what does that mean and how can you develop it in a way that's actually beneficial? And so that's that's what's being discussed right now. Now I should say, and I sort of mentioned it off the bat. This does not mean this is going to happen, it just means it's in discussion now. Which is very cool.
00:04:28 [CH]
Interesting, I wonder if there are dictionaries that aren't hash based. Uhm, consider it if it's not going to be hash based, I'd consider it calling it something different 'cause I think in Python they call their hash maps "dictionaries", and that being one of the most popular languages in the world would probably confuse a few or I guess maybe it wouldn't confuse the J folks 'cause they would all just know, but...
00:04:48 [RP]
Plus maybe it's largely to do with the interface, right, that the J user is going to interact with, how they're actually going to create these things, maybe even more so than the underlying implementation, right?
00:05:00 [BT]
I think there has been a decision not to try, do it like Python it because that's one of the languages that I think that's how it all started off. So J Wiki we were talking about different languages and their approaches to bringing people on. And and Python came up, and then people, dictionaries and the decision was made not to try and be Python. That's not, that's not an approach that is likely to happen, but we'll see.
00:05:26 [CH]
Yep, stay tuned we'll, I'm sure we'll hear more in the future. With that all being said though, let me introduce our guest for today, so I'll start off by mispronouncing his name. His name is Rodrigo Girão Serrão, and I'll give him an opportunity to completely re-correct my pronunciation. But Rodrigo is, potentially you might know him from a number of things he operates sort of in multiple different worlds. The APL world and the Python world. So in the APL world he is a coworker of Rich's at Dyalog Ltd., so I believe that makes you the 4th or 5th guest on that we've had from Dyalog Ltd., so, soon, we're going to have the full roster on; I'm sure in, you know, 5 or 10 years and so, yes, an evangelist of APL, sort of content creator, has given talks on both APL and Python. I believe he has a book called “Pydon'ts” [4] and has given a talk at multiple different Python conferences, I think EuroPython and DjangoCon – you can correct me if that's incorrect – and has also given aPL talks at sort of APL conferences [5]. I think, most recently, you spoke at the Dyalog 2021 conference [6] and has spoken at previous webinars and conferences before. Also has a YouTube channel [7] and a blog [8]. Will add links to those in the show notes for you to check it out so he is constantly producing content that you can consume and has lots of interesting views on sort of bridging the world between mathematics and programming languages and different programming languages like Python and APL. So that's what I'll say about Rodrigo. I'll throw it over to him to give, so he can give his own introduction about himself and add anything that I've missed.
00:07:05 [RGS]
Thanks, Conor, I'll I won't be judgmental of your pronunciation of my name if you guys don't judge me too much by my English. Uhm, oftentimes I butcher some words, so that's fine. In Portuguese, my name is said, or is pronounced "Rodrigo Girão Serrão". But for all of you that don't speak Portuguese, Rodrigo is fine. You can call me whatever you want, just don't be offensive. Uhm, as for an introduction, thank you. That was actually quite a flattering introduction. I'm very excited to be here. And it's quite, kind of interesting to see you as I'm I'm used to listening to you and to to transcribing the episode. So actually having the faces talk at the at the same time is yeah, an interesting experience. But yeah, as, about myself, I don't think there's too much I have to have add. I just I, I just think it's important to say that I've always been fascinated by mathematics, as long as I can remember, and that explains a pretty big part of my journey. And at some point as, as I was entering my teens, I got interested in programming as well and I just picked it up because it was a nice way to help me solve maths problems, and that's pretty much how I've got, gotten into the world of programming. It's mostly because of that, and because of my interest in problem solving. And yeah, I just hope that this turns out to be a nice conversation.
00:08:33 [CH]
Awesome, yeah, so maybe you want to tell us a bit more so you were interested in mathematics as was I and I'm sure a ton of array language folks. And then got, stepped into the world of programming. So maybe tell us a little bit more of your path from stepping into programming in your teens and then to here you are now, on an array language podcast and you know you're working for an array language company. Not many folks, I think, take that path 'cause it's you know, the array language world's a pretty nice world. How did you end up, you know, you know, taking an interest in APL and array languages?
00:09:07 [RGS]
Well, let's, I will try to not make it too long. So it all dates back to when I was, I don't know, maybe two or three years old, and I was sitting next to my mom at a at a café I think. And of course I didn't know how to write because I was only like 3 years old. So I was scribbling on a piece of paper and my mother asked me if I was writing and I said no. I'm writing numbers. So I wasn't writing my name or anything. I said I was, – of course I wasn't, but well, I said I was, and so my interest in mathematics started early. I was I'm not trying to say I was like very clever, I'm just saying I was interested in it. And I was always very curious, I think. And this sounds kind of cliché, but it's well, it is true. So I was very curious and when I was 12 or 13, I asked my father what a what a website was. And my father told me it was a file, a text file in a server. And this, and this didn't make any sense to me because the only text files I knew were Word documents. And I had no idea what a server was, and so I started Googling and I found out about HTML. And so that's how I first dove into the world of programming. And then I picked up a bunch of different languages. I picked up JavaScript and Visual Basic and C and eventually a colleague of mine in high school suggested I started learning Python. And so Idid, because I was curious and I loved learning bits and pieces of new languages. And for some reason, Python clicked in the sense that even though I kept exploring other languages, I always kept coming back to Python to do all sorts of small hobby projects I decided to do, so, that's why I've been writing Python code for so long. For example, combinatorics was never my strong suit. But combinatorics is all about counting things right? So I could write Python programs that create all of those objects and then they just, the program just counts them for me, so I could check my answers to combinatorics problems with Python, so that was always one of the reasons why I've I've kept programming around. And then, as for APL and the array languages in the beginning of 2020, I started – do you all know code golf [09], the code golf website? OK so I started posting some problems over there [10] and people would answer the code golf challenges in all sorts of crazy languages and I started seeing people answering in APL. And I thought, because of the context, it looked like APL was a... An esoteric language, like, created with the sole purpose of solving code golf challenges. But then I found out about the APL Orchard[11] and I met Adám over the Internet, and so I started learning APL. Adám taught me over, over at the APL Orchard, and at some point, Adám asked if I wouldn't be interested in interning with dyalog, so I sent my CV to them. And they were interested, and so Idid a summer internship working on "Mastering Dyalog APL"[12], you know, and I guess they liked my work because they said that they'd been interested in keeping me when I was done with my masters thesis. And so when Idid finish my masters thesis, I joined Dyalog and have been working with them ever since. We're in a one year long relationship by now, yeah.
00:12:30 [RP]
So it actually feels a bit longer.
00:12:33 [RGS]
You're already tired of me.
00:12:35 [RP]
Still still not finished that, still hasn't finished that damn book.
00:12:38 [RGS]
Yeah, it's it's a long book.
00:12:42 [RP]
It is. It's a big deal by, turning, you're turning it into an ebook and it's also it was published originally 2009, so Rodrigo is also updating a lot of the sections for language enhancements and other stuff, right?
00:12:56 [RGS]
Yeah, so we're creating new chapters and whatnot.
00:12:59 [CH]
So what does the, I guess for, I'm sure there's a bunch of listeners that are hearing about "Mastering Dyalog APL"[13] the first time. Does one of you, Rich or Rodrigo want to give a high level short overview of what it is, what it covers up to currently, and what the goal is with the the future version or addition. I'm not sure what's being called... 2.0?
00:13:19 [RGS]
I, I guess we're calling it a rework. Can we can we just say "MDAPL" because it's faster? So, MDAPL – which is short for "Mastering Dyalog APL" –, is a book that was published in 2009 and was written with the purpose of serving as an APL tutorial, and it's like 800 pages long. It's a huge book and it covers like all of the language and then some some other relevant tools, like charting tools and databases and whatnot, but this was 15 years ago and in the world of technology, 15 years is a long time, so plenty of new things were added to APL, and so what I'm doing is, I'm taking the old book, which is a, it's a paper book you can buy, but it's also available for free as a PDF[13]. And what I'm doing is I'm going over the book rewriting it. What's... Pretty much everything I'm writing, I'm keeping it the same. Maybe just updating some examples, but then I'm adding the new things and I'm trying to figure out what goes where in terms of keeping it a cohesive book that teaches APL. It's just a matter of really updating things. Maybe removing some examples that are outdated because now new primitives solve that specific thing. Uhm, but yeah, the purpose is to have a, you can, you can actually go to mastering.dyalog.com[12] and you have the the web version of the rework so you can see how far I've come by going to that website and checking the the rework there.
00:14:51 [CH]
Awesome, yeah. I'm definitely looking forward to the reworked version. I've used the PDF[13] version as a resource, but yeah, definitely it doesn't cover anything in the last decade. Of which if you go to the APL Wiki page for features and things that have been added with the new versions[14], I mean, what version was Dyalog APL?
00:15:10 [RGS]
12.0
00:15:10 [CH]
12.0. Yeah, now we're up to 18 point something right soon to be 19.0. So, so yeah, that's a it's a lot of a lot of language versions, and it wasn't only like one or two things that went into each each version. There's a lot of stuff, so and I think most of, most of the tacit stuff, of course, which we've talked a lot about on this podcast, isn't in the 12.0 version, I don't think.
00:15:34 [RGS]
You're right.
00:15:34 [CH]
Alright, so skipping back, what prompted you to add your own problems? You just just were curious to see how people would solve these in different languages. And you knew about it from...
00:15:45 [RGS]
Yeah, I'm not entirely I, I honestly don't remember. I stumbled on the, I had stumbled on the website a couple of years earlier and I did create an account, but I never went there. And then for some reason I stumbled upon it and, I don't know, I guess my nature just propelled me to start posting challenges because it's something I like to do, I don't know. And I realized it was a community filled with people that actually love solving challenges. So creating a challenge for a bunch of people that enjoy solving it is very rewarding. And so I started posting there. Uhm I don't remember why. I just I just did.
00:16:28 [CH]
OK, and so you start posting these, you see APL solutions, and then you find yourself on APL Orchard[11]. After you know, looking into APL a little bit. Yeah, what was what was that like? I mean most people, cool, I mean, we've talked about this countless times on this podcast. They see APL and they're just like, oh, this is a crazy language. And then they just they just see their, they either run away or they ignore it. They don't usually walk towards it. So, So what, what piqued your interest, I guess.
00:16:57 [RGS]
So the first thing that sparked interest was just seeing APL code because of all the glyphs. That was very new. Because, even though, I guess we could say I have written code in many different languages, but they were all very similar, right? Using English keywords and whatnot. So APL and some of the other languages that you can find on code golf[09], they they strike me as very different because they tend to use different symbols. And APL, especially because the glyphs, the Unicode symbols that they use, not all of them, or most of them are not word, sorry, letters, like the letters of the Latin alphabet and on code golf[09], most of the esoteric languages make use of those 26 letters plus all sorts of accents on top of them, so it looks different.
00:17:50 [RP]
By ASCII, right?
00:17:51 [RGS]
Yeah, not not only ASCII, because it's only, it's not. There's not enough characters in there.
00:17:56 [RP]
But a lot of the the golfing languages are like that, right?
00:17:59 [RGS]
Yeah yeah, but some of them also use like letters and accents and it's so it it looks more different. But it still looks familiar to me, especially because in Portuguese we have plenty of accents in letters, so, but APL looked very different, and because I'm inherently curious, I thought, well, let's try to learn a little bit of this. And then if I'm just. It's it's not Adám's fault, but Adám just wouldn't let go and it it looked very interesting and the, what do you call it? I feel there's a very high affinity that APL has with mathematics, and because I'm also very into the world of mathematics, I guess just it just made sense to keep learning because it looked very interesting. And it it it it, it felt familiar in a sense, because the things, the things I was learning, they were immediately relevant uhm, when I was playing around with mathematics. And I guess that just it hooked me because I'm, I just kept on learning more.
00:19:01 [CH]
Interesting, so it sounds like basically curiosity, which is exactly what we talked about I think, was it last episode, [15] collecting curious people with with Aaron and then also a predisposition towards mathematics are the two things that kind of hooked you in, and so how do you go?
00:19:17 [RGS]
For me, yeah.
00:19:19 [CH]
Or maybe at that point you already sort of had entered, because now you've you've got your blog[08], you've got your YouTube channel[07] and you are trying to sort of create content that you you know it says on your blog sort of bridges the world between math and programming and hm, and you've, and you're not just giving talks about APL. You're also giving talks and the book that you've written is on Python. Do you want to talk a bit about sort of your strategy there, of, you know, having a foot in two different worlds or multiple different worlds and and how that influences the content that you create?
00:19:52 [RGS]
Well, calling it a strategy... I think it's too far fetched because I don't think there's like, a... I'm not being strategic in in having Python content and APL content. It's just that I, what's, I guess what's interesting is that, or what maybe we could talk about and sorry to maybe redirect you is the way that I feel APL has influenced my Python code because I wrote, I was already fairly let's, let's say fluent in Python, when I started learning APL. And learning APL meant I was learning a whole new paradigm, right? Because array oriented programming was essentially new to me, even though I have, I had seen numpy[16] and and so, learning APL in, learning the array oriented paradigm actually influenced my Python code and and I think that's that's something that's quite interesting and it goes back to to this quote I keep I keep quoting or citing or, whenever I get the chance, which is that's, a language that's, gosh, I keep forgetting it as well. What was it?
00:21:05 [CH]
Like "a language that doesn't change the way you think is not worth learning"[17].
00:21:08 [RGS]
Yes, thank you.
00:21:09 [CH]
By Alan Perlis. Yeah, every every APL programmer picks that up at some point. I think it's at the beginning of the "Structure and Interpretation of Computer Programs"[18] as well, which is a very famous textbook that has nothing to do with APL. Although it mentions APL several times in footnotes and stuff like that.
00:21:27 [RP]
Rodrigo, couldn't, can I ask you about was a so you did the the YouTube series of videos on learning, learning APL with neural nets[07], so neural networks you implemented that was that pretty early on in you learning APL and seriously trying to do APL stuff.
00:21:46 [RGS]
Yeah it was.
00:21:47 [RP]
And you said, you mentioned numpy[16] before? Have you done a similar thing like in Python or using Python frameworks as well?
00:21:55 [RGS]
Yes, Ihave, yeah.
00:21:56 [RP]
'cause there's one. There is a thing that comes up for in discussions of array languages versus other ones, or, you know, conventional languages that either have array semantics, or like, numpy[16]: it's a it's a package designed to kind of do array processing within Python and it's this idea that somehow you can take, I don't know, the specific parts that people perceive as useful from the array languages and just inject them into the other ones, but did you find there's actually a more, some other difference when you actually want to use APL versus you know a similar experience in Python? I don't know if you used numpy[16] but...
00:22:37 [RGS]
Yeah, no Idid use numpy[16], I, from my limit... So, everything I say of course is tempered by my own experience and my own views and whatnot, but from my limited experience it's it's almost insulting to say that you can take whatever from APL and just put it into numpy and that you get the, I mean, you can get good things from APL and you can put them in numpy, but it's not, it's not the same thing. Writing Python code with numpy is definitely not the same thing as writing APL. For the particular example of the neural networks I use numpy because, at the core of the neural networks, you have just a bit of linear algebra, some matrix multiplications and whatnot, and so using numpy for that makes a lot of sense, because I don't want to be creating my own matrices from scratch and implementing matrix multiplication and whatever. But doing neural networks, so so the the matrix multiplications, obviously I'm going to do them with numpy, but then everything else, the whole architecture and everything else will be Python. You have some for loops and some if statements and some functions and some classes and whatever with APL. I'm doing everything in an array-oriented way, so obviously matrix multiplication is still matrix multiplication, but everything else is done, that's quote unquote in the APL way, and so it's it's very different right? There's just a tiny subset that looks very similar because it's matrix multiplication and vector addition and linear algebra, but then everything else looks very, very different.
00:24:18 [BT]
Rodrigo, does it make a difference if you're doing APL style thinking with the machine learning and and the AI and that stuff, does it change the way that you do it compared to how you would do it in Python? I know they would look different, but does it change your perception?
00:24:35 [RGS]
It does. I don't think I, I don't have to be writing uhm, machine learning related Python code to be influenced by my APL experience. Something as simple as what's called a list comprehension in Python. The way I write those was very influenced by the fact that APL has some scalar functions. And and the fact that you can combine, I don't know, adding two vectors in APL, you just add them. But in Python, first you don't really have vectors. You have lists and the typical way or what a beginner would definitely do is use a for loop to go over both lists at the same time and then add them, and list comprehensions turn this upside down: instead of having the for loop in in a highlighted position and then the addition or whatever operation you want to do, list comprehensions put the transformation you are doing at the front, and the the ceremony related to the for loop, they put it on the right. It's in a it's not as a, it's not so highlighted, so the the the the transformation, which is what's important, right? It's what matters is that you're adding things. It gets highlighted, the transformation gets highlighted and I only understood that this was what list comprehensions were doing, so I only understood that list comprehensions were nice, this was the major advantage of a list comprehension because I use APL, and because in APL I essentially only do the list, the data transformation, for example. And just things like being more comfortable with doing what's, what I've heard people call like data driven conditionals and using Booleans to to implicitly, but also kind of explicitly change the results you're computing, I got that from APL because in APL Booleans are just zeros and ones, and it's it's very natural to, I don't know, sum a vector of Booleans, right? And so it it, it makes a world of a difference to know in, to know array oriented programming when you're writing Python code and probably any other language.
00:27:00 [BT]
So I would guess part of it is once you have that understanding, once you realize that and you go in to adjust what you've done or make a change to what you've done, you're making that change in a completely different level of understanding because you're focusing on a different part of the program to make the change.
00:27:17 [RGS]
Yeah, absolutely it's it's like it's just, you have a whole new understanding. I've I've written list comprehensions way before knowing APL and only now ,because of APL, I can definitely say list comprehensions are nice because the data transformation is under the spotlight and this only clicked because of APL.
00:27:38 [CH]
I've been trying to, like I've been wrestling with this recently 'cause I have the exact same thing, but that APL, functional languages in general. They just they completely changed the way I write code in other languages and just the other day, you know, 'cause Wordle[19] is, the you know, it's the fun thing of the it's the fad of the whatever, not sure if it'll be the year. New York Times just bought wordle, so I think we can all say RIP to our streaks and as soon as as soon as my streak is gone, 'cause you know humblebrag I've never lost so I have like whatever n/n and as soon as that is gone, I'm done with Wordle. It's like it's like I'm not sure if everyone in this call will know about Snapchat streaks, but it's like as soon as you lose your Snapchat Snapchat streak of like 100, it's like do you really want to start? Over it's like no, not really. So if New York Times, if you're listening 'cause we know we probably have the whole staff of the New York Times listening, you better keep my streak alive. And if you put some behind some paywall and reset it to 0 this is done anyways, not the point. Went on a tangent there. Is that I was recently writing a Python script to do some like Wordle analysis and hm at first I wrote something that was like a nested for loop, you know over the words in the dictionary and the letters in the words or something like that? But then very quickly, using exactly what Rodrigo was saying, you know, list comprehensions. And honestly I think that like list con–, list comprehensions, generator expressions combined with destructuring or iterable unpacking, I think, is what they more commonly call it in Python And zip like you can get, you can get so much you can get so far with just like list comprehensions, zip and iterable, unpacking and enumerate as well, zip and enumerate. I just use all over the place and at first when I wrote the first piece of Python code, I was like nested for loops. They sucked, but then very quickly I was like, Oh yeah, I don't, this doesn't need to be a a for loop. I can change that to a list comprehension and then oh, I can change that one to a list and at the end I was using counter as well, which is a collection that sort of mimics group by. And you need to know all the little things you need to know as zip and enumerate and and the counter collection and how to use list comprehensions. But at the end of it I was like, oh, this is actually this is actually quite nice code like it started off awful, but because I know functional techniques and like array techniques and it ended up really nice and I was thinking to myself like this was actually quite pleasant. Like you know, I'm not I'm not very sad that I'm in Python right now. Like it's a bit irregular, like the fact that you know, zip, enumerate, are built-in and list comprehensions are part of the language, and then I have to reach for collections and know that counter is there to get the group by stuff, whereas in aPL or in other languages, it's it's all a lot more regular. But anyways, my, I've been wrestling with like this idea of like do I really need a full blown array language or do I just need a nice language that has all these facilities and then I know how to use them? And and like there's a bunch of different quotes that I've heard, you know, there's the imperative shell functional core of like try to design the core of your programs functionally, but like obviously you need a bunch of IO on the outside. So like if you've ever tried to write that game of like the guessing game of, you know you randomly choose a number and then is it, did you guess too high or guessed too low? And then you just go back and forth like writing that game in any language. It's like 80% just like reading and parsing input and then printing stuff to the screen like it ends up looking terrible in any sort of functional or like array language, because you're just using like flow control and like a while loop until the answer's guessed correctly and I also heard another quote recently that was that Elixir [20] was like a functional language for the working person, in that it's got all the functional you know things that you'd want except for algebraic data types, I think, which is sad. You should add that, Elixir. But it also gives you the ability to do all the things that you might want to do in terms of IO and and and you know Python and these scripting languages, and so you can very easily do that kind of functional core imperative shell, and I feel like maybe I haven't coded enough in APL, but like that's lacking there, or like we do have the flow control, sort of if and whatnot, but yeah anyways, that was just like a long winded incoherent ramble of you know what? What is like the ideal language like and it just came from like coding in Python and at first being unhappy because I wasn't in APL and then realizing at the end after sort of refactoring the code that was like, yeah, this is actually quite nice, like most Python programmers aren't going to program like this, but like I made myself happy because the language offered a lot of stuff and it's like, should we be trying to get people to come to languages where that sort of behavior is encouraged more? Or should we just be doing you know Python talks like Rodrigo and trying to influence the Python community that hey you can you can code in this method, that's nicer. I'm not sure if folks have thoughts or I don't even really have an opinion. It's just a incoherent, like I said, long winded ramble, right?
00:32:40 [BT]
Yeah, I think you know I don't think so much in terms of individual languages. I think it's paradigms because I think if I was, I was lucky enough when Idid my university training, I had a comparative languages course, and in that course Idid PL1, which dates me and Lisp, which was at that point the original Lisp. And APL and those are three different, very different paradigms for programming and and at that time this again dates me back on batch processing with computers compared to with which was PL-1 compared to interpreted languages like LISP and APL, and it changes it radically changes the way you look at programming just the difference between compiling a language and waiting for it to come back from and finding out that it compiled OK, and then it was optimized, then you get your result as compared to typing in something on the screen and getting a result back in a REPL. And at that time, Lisp and APL I think were the two that were predominant that were doing REPLs. I guess I'm trying to think there was probably a couple of others that were like SNOBOL and a few others that were maybe using that modeling stuff similar maybe, but it was very different one from what people were traditionally being taught in computing languages. But when you start looking, the more nuanced as opposed to interpreted compared to compile. You get the different ways of looking at data. The different ways of looking at functions. Functional programming starts to show up, which again is a different approach. Object oriented with Smalltalk and things that show up, that's a different approach. I think you end up taking a little bit from all the different paradigms, now which language you use in a paradigm I don't think is. As important as being exposed to that different way of looking at the whole process, because I think the different way of looking at the process, this really does change the way you look at the overall thing, and at that point when you've got sort of a sense of the different paradigms, the different languages just becomes syntactic details. You do it this way because this is how they interpret it, but the overall look at it, I think, is more to do with the paradigm.
00:34:52 [CH]
You have thoughts, Rodrigo?
00:34:53 [RGS]
Yeah, I went I think I was in the back of my mind I was thinking about what Conor said and now I think it plays nicely with with what was said because I also I wrote a bit of code to solve Wordle and I started out why I didn't do it in in Python. First I started by playing around with it in APL. And you can do imperative programming in APL, but it it it favors, APL favors array oriented programming a lot, so I always obviously started by writing some array oriented code you know to filter some words and then I have these clues so these letters can be here and whatnot. And well, I played around a bit and I figured out OK, so this is the kind of code I need if I want to, I don't know, take a list of clues, take a list of words and figure out which words could be the next ones. And then I put that away and then I opened Python and I started doing the same thing, because I was essentially, exactly, I was challenged by someone on Twitter, from the Python community, and so I thought it made sense to present a Python program. But my initial thinking and my initial, my initial train of thought was done in APL because I could very clearly see in my head the matrix of words that they all have the same length. So why wouldn't I stack them up in a matrix? And then I knew I was filtering by columns and whatnot, so it made a lot of sense. So I played around with it in APL and when I had it right, I just wrote the Python shell around the APL core, and of course I didn't write APL code in Python, but Idid what what you just mentioned, I used Counter, I used generator expressions, I use zip, I used enumerate, like literally those tools. And it's it's just I mean, it's just a way of, it's just the fact of having the right mindset, because if I hadn't known APL, and from your description, maybe you too, I would have written a maybe a double nested for loop or a triple nested for loop or whatever and I would be done with it.
00:37:01 [RP]
This is a story that we hear quite a lot with recent adopters of APL is when it comes to actually solving a problem, they'll think about it in this way from what they've learned but when, then at some point they have to, they're going to translate it into some other language, sort of just for the utility that other people speak it already, you know. That's what it happens for other reasons. This idea of an array languages is good for prototyping and exploration, and things like that, comes up quite a lot.
00:37:33 [CH]
Yeah, it's interesting to like what role does the googleability of the language play. 'cause like I actually did think about writing this little Wordle solve Wordle solving script in in APL, but I knew down the road what I wanted, so the so what my script does is it you provide it two lists basically, the list of your guesses and then the list of the you know 5 character strings, where a Y represents a yellow, green represents green and I guess should we now that we're like this is half of a Wordle episode, should we explain what Wordle is to our listener? It's basically a mastermind game. Hopefully you're familiar with that game, but if not you guess a 5 character word, so you know for instance, TEARS and you're going to have 6 guesses in total and the goal is to guess the target word which you don't know and say that your target word is TALLY because you guessed TEARS, t is in the correct position and A is in the wrong position, so your T will be lit up green and your A will be lit up yellow and then so with that information you can make your next guest. So next guest might be I don't know what's a good off the top of... TALON, like talon of a falcon and so then you'd get T, A, L all lit up green with the O and the N as just nothing and so from there you make another guest. And so on and so forth.
00:39:08 [BT]
And the other key thing is when you when it isn't lit up, you know that letter is not in your Wordle word, so it's you're not just being told where it is and if it's somewhere in the word, but if if a letter doesn't show up, you know not to use that letter again, which is I thought was kind of interesting when my wife plays it, I don't.
00:39:26 [CH]
Yeah, it's it's addicting for sure, especially the I love Scrabble and so it's a, you know, Scrabble-adjacent kind of game, but so the one thing about Wordle is that it doesn't use a full list of five letter words. So in the Scrabble dictionary there's like 8900. You know, 30 something, five letter words, but the list that they use is only roughly 2500 long. And so when I initially wrote my script, I just I happen to have a Scrabble dictionary TXT file on my computer, so I just sort of used that as the basis, but then a couple people 'cause I tweet about it, a couple people were like you know, oh, you know, it's not the Scrabble dictionary. There's a you can get the word list online, and so my program basically you'd give it the list of your words and the list of your guesses, and then you know the yellow and green status and then it will show you based on, you know after your first guest how many words are there less left that you could possibly guess. So you know, after your first guess, mine is usually AROSE. There'll be like 400 or 500 possible guesses and then after your next guess, I think yesterday's was... So, so we won't be spoiling, although this will be out, you know a few days, but in case if you guys are playing it and you haven't done it yet, yesterday's so it's already done was wRONG. Is that right? No it wasn't. It was one that didn't have any, well, we'll just assume who who plays it, does anyone play it here? What was yesterday's I can't remember?
00:40:52 [BT]
I'm beginning to see why your streak is still intact.
00:40:57 [CH]
It's, anyways there was one where AROSE missed on every single letter and then Oh yeah, the word was LIGHT and so I guessed AROSE and it was a complete whiff. So then my next guest was UNTIL and then, So I think after the 1st guest there was 300 left and after until there was like you know 30 words that you could possibly guess, and then I guessed filth. And then after that there was only like one word which was light or something like that. But The thing is, is it underneath that or underneath the number of guesses that it shows you a number it gives you like a sort of what a really good guess would be based on some sort of proprietary, not proprietary, some random metric it's just it's something really simple that I came up with, but it it chooses that from all of the Scrabble words and what I wanted eventually was to color code it so that it would show up in my terminal as green if it was a valid Wordle word, and then red if it was only in the Scrabble dictionary, and so this long winded explanation is all to say that I thought about you know, at the end of the day, this is what I really wanted. I knew I could get to like the halfway mark before the colors, and like tabulating something would actually have been pretty simple. You know, loading 2 dictionaries in checking whether they exist in one or the other that's brilliant for APL. But then as soon as Ineed to color code the words I don't even know where to begin, and I know in Python, even though I don't really know where to begin either, I've done something like that in the past, then quickly Googling how to change the color of something in the terminal. You get like 3 different options, all of which are just you know, a pip install something and you're off to the races. And this brings me back to my original question after a 10 minute ramble of you know what is the importance of the googleability of, uh, language, because I basically chose Python because I knew that I could get to my endpoint like quite easily without a lot of extra effort to like learn how to change the color or something on the screen, whereas for APL I don't I would have to I don't even know if I probably couldn't do it in the terminal. I'd have to figure out some way to launch some sort of panel like J panel color box thing. And I've seen Aaron Hsu do it on like some of his talks where he just like he has this little graphics GFX and then boom everything is changing colors, but he does it so quickly. I have no idea what he's doing. Anyways I'm not sure if if folks have thoughts on.
00:43:20 [RP]
We'll ask him to make little tutorial. Yeah, there is also a terminal based GUIthing, but I can't recommend to use it. But back in the day people were making little terminal based graphical interfaces and you can you can do it there. The default display for some application that comes with Dyalog has some really awful color scheme. So I'm saying, yeah yeah, these things are possible. But you're absolutely right, the googleability makes that super appealing.
00:43:49 [CH]
Yeah, so you get to a certain point is it like it's influenced the way I write, APL? But then I still didn't choose APL because I knew that there was some extra 20% that I would would be a little bit too hard for me to figure out and I just like ask for it. I can do this in Python. Rodrigo, you're going to say something, yeah.
00:44:06 [RGS]
But I'm not sure if I'm just cleaning too much to this specific example, but I think that this wasn't really a matter of, or maybe I'm misunderstanding what the googleability of the language means, but this doesn't feel like an issue being hard to Google about the language, it's just that you were missing that final tool to do the terminal colored stuff right? Because in Python you do maybe pip install rich[21], which is a tool I've been using a lot lately to actually do highlighting like you've mentioned and it's just you don't have that already in APL, so probably no one builds a rich for APL, and you would have to look at maybe under the hood of rich and realize OK, this is just using ANSI escape sequences and you would have to do it in APL yourself. I think it's just the fact that maybe not many people share their tools.
00:44:58 [CH]
Well, my guess is that you know, if we were playing the Aaron game and he was here like if we challenged him to do this he could, like I guarantee you. Sure, you might not be able to do it in a terminal, but it's not actually, like a a terminal based thing was not what I was necessarily after. It was just like a A color coded you know whether it was a pop up window or some sort of graphics panel or something, or if it was inline in the RIDE editor. All of the above work, it was just sort of like the coloring of text based on some sort of, you know information and my guess is that APL, definitely you can do that. The question is, is like what is the barrier to like me figuring that out and I can't Google it, which means I need to either go like my best guess my probably what I would do is I would try and go find like a webinar talks 'cause I know that there's been a a bunch of webinar talks from past Dyalog conferences with people talking about graphics and plotting and stuff like that. And like that, that would be where I would go to try and find that info because I don't think I don't think Googling would work, and even going to like the APL Wiki or trying to find like a tutorial like I don't I think that would be that would be very very hard if it exists, like I'm not even sure if that tutorial exists, I could be wrong. But yeah, Bob.
00:46:20 [BT]
Yeah, this this sort of just strikes on two things for me. One is the the the approach we're trying to take to the J Wiki eventually is to provide those kind of access to those kind of tools. So that's a huge job and it's not going to be done in months, or probably even a short number of years. But the idea would be that you would have access to those tools through that and you'd get a you know either tutorial or or some kind of a framework that you look at. What is the bigger issue? I think is and it was striking me partly 'cause we're having Rodrigo on as again was there's a generational thing that happens with the array languages. There's an older generation that often started things out, and for some reason there's a middle generation that is kind of missing I think, and at the time when other languages were coming on and developing these other tools that wasn't happening with the array languages. They were sort of going off on their own merry way, doing their mathematics, doing their financials or fintech stuff, all that stuff happening but not the media, not the web, not all that other stuff that the other languages were making use of and now what's I can see happening is you've got an older generation that does isn't versed in these things wasn't developing those tools, and a younger generation coming in and there is one coming in which I think is tremendously exciting. Being one of the graybeards, literally, you see another generation coming in and the the good news is they're coming in and they're interested in this because it is a different way of looking at things. The challenge is they come in and they they look at it and go but where is, how do Ido the graphics? What do you mean I have to...? This is nuts! And why would I have to do all this work? I can do all these other things with these other languages, and often with Python what's mentioned is the libraries. You can do any number of things with Python libraries. That's a big advantage of Python where those libraries are, there are a lot of libraries with the array languages as well, but they're not in the areas that would be popular with most programmers today. OK, and I'd love to get a sense from you guys since I think you're at least trending towards the younger generation, whether you see that difference. Again, when I say generations, I'm generalizing.
00:48:46 [CH]
Like that, those subtle shots fired subtle shots fired there.
00:48:50 [RP]
I mean, well, I do have to mention well I got to mention something I've been uh, looking into sort of recently as well, and the I don't know I hope I don't get shot or fired for saying this, but when you look at the you know Dyalog's more mature tools for uh, graphical interfaces and also graphics plotting and stuff they're both well, Dyalog came, uh came along a lot for, you know, Windows desktop applications and and moving things which used to live on mainframes onto modern desktop computers. Or were they? How long has it been since since desktop computers turned up, but you know the thing called ⎕WC is a is sort of a a really rich, uh, interface to Win Forms and Win 32 GUI and stuff. So if you want to build that right, there's, actually about 1/3 of the "Mastering Dyalog APL" from 2009, the last third of that is all about creating GUIon on Windows but as bob mentioned it's kind of the the rest of the world has said, well, we're going to use web stack. I guess that's why we do GUI now, so you know, working on figuring out exactly what the yeah, the Dyalog story is going to be for that. You know, there's the DUI, Dyalog User Interface and there used to be MiServer[22] or Mi, miServer still exists, but you know there are things they're looking into that. But the other thing I wanted to mention is are plotting and sort of reports stuff, something called SharpLeaf and SharpPlot[23]. I don't know if you've heard of those, but you know they're also touted, you know, they're really quite mature, really rich packages, but they were sort of designed around print media, right? You know, actually, publishing printed reports and books, so they're really geared for that. Yeah, it is a it's a it's a little bit of a open question it is a lot of what bob said where aPL, kind of the array languages lived in their own world, while while the python and that lot were developing these packages to to collaborate and maybe a little bit for the googleability, a bit of a chicken and egg problem where you know by now there's enough users to generate all of these StackOverflow answers for those more popular languages, and it's just now going to take a bit of time before you can just Google, you know how do I make colourful words in Dyalog, yep, and get a decent answer.
00:51:17 [CH]
Maybe I should do a live stream where I actually attempt to do this and watch it'll be over in 20 minutes 'cause I'll I'll find something but but yeah, it's it's an interesting it's interesting 'cause like I'm a huge array language fan and I was like honestly I could do, when I when I first was like oh it would be cool to have like a little sort of it's a teaching tool, it's like, I say, hacking Wordle, but really, it's in hindsight, how good were my guesses, and and like you know, was this a good guess? Did it narrow it down to only three or whatever? And it's like I knew I could do 80% of it in a language like APL but I ended up choosing Python because I knew I could do 100% even though I, you know, didn't fully know. I knew a couple Googles and I'd be on my way. And then at the end of it, I wasn't even that sad. I mean, actually, the coloring code is pretty horrific, and that probably I should that's the thing is, I listen to a Python podcast, and they're always talking about rich and textual, so I probably should have made use of that. But I made use of some library called termcolor and just just it's just a bunch of print statements all over the place inside a loop. It's pretty bad, but that's the thing is, I don't even I don't even know like if you could do it in APL. Well, yeah, I guess it would just be like some multiply, might have some mask that's just like a one for red and a zero for green and maybe it would be easy, as easy as that.
00:52:40 [RP]
It came up in the Orchard, I think last week or something, people are talking about, you know introductory examples or for people who are like new to programming and some of the most appealing things are these graphical things, specially making games or or websites which I think is also where I started like Rodrigo, like you know you see these websites you like, oh how do Ido that? And then you learn it's not that not that hard really, up to a point, well back in 2000 and whatever.
00:53:08 [CH]
Yeah, you could you could think of a couple like really cool like you know, building a Tetris in APL like that's like a perfect kind of game 'cause.
00:53:16 [RP]
Yeah, but so so Adám kind of objected at the time because he was like, well, the problem I find is that the the the part with the user interaction the user input is just like so much boilerplate gets in the way of the the problem to solve and it's like you were saying, kind of like 80% of what you were doing that you thought you could have done in APL is the actual problem you're trying to solve. It's the extra 20% with all this sort of gubbins around it to make it nicer, the shell to make it presentable and sort of user friendly in bits like this. But Ido think that is something that would be useful to have in in array language examples is an easier way to get into those things where I don't know there's a lot of power to the the feedback, both of like making something that you can then play with afterwards, but then also something that you can show other non-technical people and they do know so the sort of value of what you're showing them like without it being like, oh, you did that in three lines of code or good for you, mate. I've no, I don't know if it's a gibberish to me, you know, but when they can like play with a game or they can see a graphical thing happening on the screen, you know you can show that off as a as a young kid learning programming and go. Oh look at this cool thing Idid. And your parents can go, Oh yeah, that is actually quite nice without going Oh yeah, OK, and I don't know what that means for...
00:54:34 [CH]
Yeah, there's definitely some value to having like
00:54:36 [RP]
yeah, I think there's something to that.
00:54:37 [CH]
a flashy example and a lot of time flashy examples come with... flashiness, in the...
00:54:44 [RP]
But it is true and I think most most of the languages the code for that bit looks a little bit ah, not that exciting, and possibly a bit ugly.
00:54:54 [CH]
But I think that's that's the that's the whole point is right is that, like imperative shell functional core that you know the engine part's always going to look nice, and then the imperative stuff on the outside, which is why when you have that example that I mentioned before, like the guessing game or whatever, it's just like, well, that's like there is no logic there. It's like the logic is less than or greater than sign or whatever, then everything else is just, you know, reading in and outputting. But like a game like Tetris, yeah, there'd probably be a lot of noise but still, like writing the writing the code.
00:55:26 [RP]
Right the yeah, the bit in the middle will literally be like a couple of lines that tells if there's a line completed or not.
00:55:36 [BT]
But that that's the nature of the paradigm, isn't it? Because a great language programmer is going to get most interested in that little bit in the middle, because it sort of breaks the whole thing down. That's why I think it's attractive to people who are into mathematics because you're taking a complex problem with all these layers on top of it, distilling it down to this one little thing, saying holy smokes it all boils down to this. And then at that point the array programmer goes oh did it! Oh, and then they go "But by the way, now you have to spend all this time building an interface to make it look flashy." and they're going, yeah, that that's not what I'm into, sorry. And 'cause I
00:56:12 [RP]
that would be interest–
00:56:14 [BT]
yeah, but I think that's that is the nature of array programming is that you tend to get focused on this core stuff that's really conceptually really interesting, and it is a really challenging and it it it has this sort of magnet attraction. But I think we do have to come up with ways to make that interaction back to the rest of the world a little easier for us to write and also make it make an allowance. I've heard stories about the big problem with our, you know, modern civilization is all engineers want to invent new things. Very few want to maintain. And there's not a lot of sexiness in maintenance. You're just working at making something go on working. But it's really important I think you have to start to draw back into that say you know that that mindset that says you know what I've got this new thing that's really cool, but what's also really important is I provide a structure around it I provide this around it and I'm basically making something to make it more accessible to everybody, not just that little core at the middle that to me is so attractive.
00:57:25 [CH]
Rodrigo.
00:57:25 [RGS]
Yeah, I was listening to you folks and I was thinking about the fact that I am I'm currently trying to build a a Python introductory course and it's aimed at kids and so I'm very interested in having those flashy examples because of it's, it's rewarding to me as, it's rewarding to me, II'm not exactly a kid anymore, but it's rewarding to get flashy things working, so it's obviously rewarding to a teen. But I think that there are two things at play here and one is that if I'm going to make, say, a game in Python, there are plenty of libraries. Yeah, fine, that's great, but then I will end up teaching the library to the to those kids and not Python right, So what i'll teach them to do is make a bunch of function calls, so I'm not really teaching them programming or I'm not teaching them Python. I'm just teaching them the framework. But then there's one other thing, and that is the framework looks a lot like Python. And in APL, if you have whatever tool to do whatever, maybe maybe we're talking about SharpLeaf and SharpPlot, maybe you want to make some plots and the code for the plots looks very different from that core that Bob was talking about. The core that we we really want to get down to, the problem, and really solve the problem and write that code, and this is very subjective, but that code will have a certain look and feel to it, and then adding the shell that makes it flashy and presentable to the rest of the world looks very different. And I think I was thinking that that particular aspect of it might have an impact in us maybe not wanting to spend that much time maybe creating those tools, or I don't know because it just looks different from the rest of the language.
00:59:22 [RP]
Yeah, one thing I've got on my, gets further and further down my To Do List as time goes on, but last year in March when we had all sort of APL Seeds meeting[24], targeting new users, and Thomas Gustafson the the Stormwind boat simulator guy came and he he presented. You know he's doing graphics in raw APL[25], except he has a bit of middle middleware that's sort of Windows specifics for when it actually has to draw it to the, sorry, when it actually has to draw it to the screen. But I want to take that and maybe just stick it in maybe there's, uh, there's I know there's JavaScript libraries that will do the drawing to the screen bit, but then maybe you can work towards something that's a bit closer to that where even the bit that turns it flashy is actually raw aPL that looks, and they can be used to teach APL itself rather than just, so what I've done in the past is, well, I guess Idid that for one thing where I computed the, like, locations of some points that are going to be drawn up, but then I just passed those points to another thing that turned them into balls. But I guess what you want is the APL to do the creation of the the balls and everything. Everything up to the point where it has to go on a screen which you know you can either, but at some point you're using some kind of library to talk to graphics drivers, but and anyway, I think that'll be quite a good example. If anyone else wants to do it and has got time.
01:00:54 [BT]
For procedural languages, I always think of Scratch[26], which was the MIT project which is, you know, basically drag and drop for the different for loops or all the different things. And it's very media driven. So in other words, there's lots of things you can do with your audio and your video and, and you can make games with it, and there's a sort of a community thing where they were coughing you and show what you you've done. To me, that's probably the way to do. Yeah, you're actually, you've created a shell that teaches your concepts as opposed to trying to teach your concepts within the language. Because coming out of something like Scratch, I think you understand procedural stuff pretty well, and then you can go back into a language and you've sort of learned the paradigm. Recently at the last week J Wiki, I think it was Art Anger said to me like we we talked a bit about Scratch as a as an entry point, something like that. He says, why couldn't you do scratch for J or scratch for APL? Well and I said, you know, it's funny. I thought of that at one point and I just I've never really developed it. I just and and I'm sort of feeling the same way. It had...
01:02:03 [RP]
Adám actually made a thing at one point that was sort of a visual drag and drop plugs, and it was like he got a primitive symbol, it had two slots if it was dyadic he did start on that, but you know...
01:02:16 [BT]
But having said that, like what do you do beyond your dyadic? I think the thing with the for loop is you can drop something in there and there's only integers fit in that, and then you know that you've got these different types. With APL or with J oK, so you've got Monadic and you got dyadic, OK. You've got operators, and you've got verbs, or, you know, conjunctions, adverbs, and verbs, OK. And then past that everything can fit onto each other. That's the magic of it, but you don't have that "This only fits here sort of thing." which is what you're kind of teaching with Scratch in a procedural language. So the power of the language is you can fit all these things together, that makes it hard to do that way because you can fit all these things together so it's like throwing a bunch of Legos out on the table and saying, OK, make something with it. Well, this could fit here, it could fit here, it could fit here, yeah, the idea is you think about where it could fit, but that's what you're actually trying to teach not so much by physical connection how they go together, 'cause they all fit together, but why would you do it this way? And that's a different kind of a again, I think you're dealing with a different paradigm, so it does take a different approach. You're trying to abstract that paradigm that you're teaching, not the syntactic sugar that goes with it.
01:03:32 [RP]
Yeah, we go back to what would Aaron, what would Aaron do? 'cause his he had this one talk about? Does APL need ADT's? [27] And he's like no everything's arrays, but you use the arrays to do the representation. That's where part of the imagination comes in. So you have to come up with a representation of the thing you're trying to do as an array and an APL lets you do all of the manipulation and the shuffling and stuff. Uhm, but maybe something about visualizing different things represented in arrays I don't know. This can't go anywhere anywhere from this discussion like I'm not developing this right now. But it's interesting.
01:04:16 [BT]
Well, somebody might you know somebody might take it and run with it and that would be really interesting to see where they go.
01:04:21 [CH]
Is interesting what Rodrigo said earlier about the libraries not looking like the language 'cause that's actually, there's a very famous talk by Guy Steele, one of the creators of Scheme Lisp dialect, and that talk's called 'Growing a Language' [28] which it comes in paper form as well. And in that talk he mentions APL and says that he thinks the key reason that APL wasn't successful was exactly what Rodrigo mentioned, it's that but a user, when they write APL, it doesn't look like the language their library, or if they create a library or whatever they're creating. You have no way I mean, I know that there are implementations of APLs that enable you to define your own new Unicode symbols[29], but obviously that's like it's a nonstarter in terms of a scalability kind of thing, you're not going to, you're not going to want to do that at scale. But yeah, he mentions that it's the fact that when you write your own code it looks wildly different than than the core language of APL. And I don't know if I agree or disagree, but it's just interesting that you commented on that, Rodrigo, with respect to sort of teaching beginners. And if you're going to focus on some library, sure, maybe in a language like Python, it's not the end of the world 'cause it it does sort of look like it still is Python and sure, you you have to teach him a framework, but at least it still looks like the language that you intended to teach them, whereas with APL, if you're going to teach them, you know whatever it is the the two different, what was it SharpPlot and SharpLeaf, or ⎕WC for the that that stuff is going to end up at least to a certain extent different than your classic examples that don't have anything to do with plotting or or graphics.
01:06:13 [BT]
But but J kind of works against that, because what I write in J looks exactly like, I mean not the DLLs. The calls that are the calls for the primitives, 'cause that goes off to C. But other than the fact that I've got a primitive to start with the the things I'm writing look exactly like the other parts of the structure of the language. The the the Z locale, all the utilities that are around when you dive into them if they're not going to a DLL, they are written exactly the same type of language that I would write if I was writing my own verbs.
01:06:44 [RP]
I mean not to bring his his ghost in here, but that is, I think, largely Aaron reason for structuring Co-Dfns the way he does. He leans heavily into trains, he uses one letter variable names, and it's partially so that the end code I think you can see it that really looks like APL. You see a lot of systems-heavy APL stuff and it's heavy on the control structures and big imperative style loops and even literal calls to .NET things that make it look like C# code, you know know so maybe that is, uh, a part, worth exploring whether it be the key to APL's longevity, you know who the hell knows?
01:07:27 [CH]
Well, I think I'm not actually sure when we started recording, but I feel like we're we're past past the hour mark here, and we've
01:07:34 [RP]
been 35 minutes already?
01:07:36 [CH]
And we've we've covered a breadth of topics from from Rodrigo beginnings and Python to APL, to Wordle to Aaron like several times.
01:07:51 [RGS]
Yeah, I just like to I just like to highlight that Corner has a Scrabble dictionary just lying around in his computer always at hand.
01:07:59 [CH]
I mean, as one does, as one does. It's also on my GitHub for those that you go go to my GitHub page and look for the Scrabble repo if you'd like it [30], I think it's 4th edition, not 5th edition, so, don't @ me. And for Scrabble people they'll know what that means. Yeah, it's a frustrating day. There's a. There's a story, a frustrating day when you're playing Scrabble and someone plays a 2 letter word DA. And you're like that's not a word and then you go to scrabbledictionary.com and and you lose that challenge 'cause the the 5th edition is now out and they've added DA and does your opponent know that? They do not. They do not. No, they're just guessing. And you know what's up, they don't. And anyways, I'm just we're not going to talk about it. We're not going to talk about it.
01:08:45 [RP]
Uhm, well, no. Let's dive into that. What is DA?
01:08:49 [CH]
Not, well, actually, let's that'll be a good closing note here. Bear with me. Bear with me. It's great.
01:08:54 [RGS]
It works in Portuguese, but I'm assuming the Scrabble dictionary is English.
01:09:00 [CH]
DA. Play along, listener. If you're, I have the definition down, I'll give you a couple seconds to think what you think it means... And it is, the definition is a single word, and it is DAD.
01:09:13 [RP]
Oh right, fair enough.
01:09:16 [CH]
Another two letter word that was added in the 5th edition was OM, which is a mantra used in contemplation of ultimate reality, yes. Alright, this this episode fully fully gone off the rails.
01:09:32 [BT]
One thing I will say I was talking before about generational, I have a tremendous amount of hope going forward, when Richard I think was saying you know, so it depends where we go from here and hopefully it's in good hands. It's in good hands, the newer generation that I see coming on, people using the language. I'm just terrifically impressed with a a number of things, one of which they're super bright. I did, uh, I guess I sat in with Remy Clark on on the on the Discord [31], and he was he he was in Japan. I was in West Coast of North America. I didn't realize it was Japan, but the point was is he's going through all this stuff that he's doing with J and I'm just going "Wow" I yeah whole and he comes up with this really interesting invisible modifier that just blew me away. Well, I realized at that point there's no problem with people coming up with new things or the new generation discovering new things. They're absolutely automatically doing that, but the second thing I think is really important to the whole community is I still see that same sense of community supporting each other in these languages, which doesn't always happen in other languages, and sometimes it's been the downfall of some very useful languages. The the culture I find is really supportive and tends to help, tends to teach more than it is trying to show off, which I think is I mean everybody is going to have different, everybody wants to show a little bit, but the point is, is mostly if you go into any of these groups and ask a question, you're not going to get flamed. You're going to get some really interesting answers, and usually very useful, and quite often step by step how to do something because everybody knows these languages are hard to change your concepts at the beginning, everybody has been there, so as a result, I think that makes the Community really supportive. And I'd I have lots of faith in the future of these languages just because I see those two things happening: really bright people being helpful to each other. That's a, that's the core.
01:11:42 [CH]
That's a perfect way to end it, on that hopeful note. Yeah, any any other last things? I guess Bob you've got the array contact at array, something something I should know, but I don't.
01:11:56 [BT]
contact at arraycast dot com. [32] Yeah, that's how to get in touch with us. Actually there was a really interesting idea somebody came up with that I think we're going to probably do in in a future show, and it had to do with control flow and those kind of things some definitely if you suggest ideas if you should suggest guests last week or last two weeks ago Aaron Hsu was the guest. And Aaron was suggested, I mean, we wanted Aaron on anyway, but there was a number of suggestions and a number of responses, people saying they were really happy to see him on, so that's a way to get in touch with us. The show notes are important. The transcript, the big thing my my big affect by Rodrigo is the transcript, that is done most most episodes by Rodrigo. He does that and fires it over to me so I don't have to and that's a huge job and I don't want to say really appreciative of the work that you do on that, and he's got his hand up, so he's going to say something now.
01:12:58 [RGS]
Just defend myself. Actually, most of the transcript is automatically generated. I just try to I just spent an insurmountable amount of hours putting the sentences together. But thank you, Bob.
01:13:13 [BT]
But yeah, a couple of times I've had to do work from that machine code generated transcript. And that's still hours and hours of reformatting and and laughing at all the misspellings. Because though sometimes those are hilarious. But yeah, it's a tremendous amount of work and it happens every time, and I think it benefits everybody, because you can always go to the episode and read it. And and good for you. Thank you for that.
01:13:38 [CH]
doing that. Yeah, huge thanks to Rodrigo, not just for that but also for for coming on and being our guest today. Uh, as I mentioned before, yeah, links to all of Rodrigo content in the form of his YouTube channel talks that aren't on his YouTube channel, but that he's given at other conferences, his blog, your book also too. Uh, is there other other content that I'm missing that that we want to plug right now 'cause? I know you've got I think that's plenty.
01:14:08 [RGS]
I think that's plenty.
01:14:11 [CH]
Alright so yeah and potentially there's going to be a Python course that's coming out in the future as well, so stay tuned for that in in, in the future, at some undefined date.
01:14:20 [BT]
And I just want to say about Rodrigo's videos, the thing that amazes me about them is he goes in cold with a with a problem and then solves it live, which I've never had the guts to do. When Ido a video, I figure it out ahead of time. He doesn't, and occasionally he backs up and starts again, but I think that's just so impressive and actually, I think that shows the power of array languages as much as anything else that you can be that flexible and change, and go back and forth and come up with these answers so his videos are really worth checking out.
01:14:51 [CH]
Especially if you like LeetCode[33] because a lot of his most recent videos, honestly, I love him 'cause they're short and I usually end up learning at least one or two things from each one. I think Rich, you actually, we'll plug Rich's channel as well, rikedyp[34], also used to, I mean not not as much. Yeah, not as much recently, but you used to also solve like LeetCode or Pearl Weekly challenges.
01:15:12 [RP]
Yeah, I haven't made content in a while. Yeah, should get back on it.
01:15:16 [CH]
Two different, and Bob will plug your YouTube channel[35] too and mine[36] we're plugging I guess all four of us have youTube channels so check the show notes and you can start with Rodrigo's channel and if you you get through all of his videos you can work your way to the rest of ours. But with that I think we'll say happy array programming.
01:15:34 [All]
Happy array programming.