This "writing loops"-remark reminds me of what prof. Dijkstra (https://nl.wikipedia.org/wiki/Edsger_Dijkstra ) told his students: "GOTO ruins your life".
R.E. Boss > -----Original Message----- > From: General [mailto:[email protected]] On Behalf > Of Henry Rich > Sent: maandag 20 november 2017 15:47 > To: [email protected] > Subject: Re: [Jgeneral] initial reaction to J > > I taught J to highschoolers for years. They had no trouble picking it up. > Some > picked it up quicker than others, but all could write programs within a few > days... > > ...except... the ones who had some experience with other languages. Just six > months of writing loops would have channeled their thinking so narrowly > that it took weeks for them to see the whole problem rather than the > individual numbers. > > THAT's why people say J is hard, IMO. They mean, It's different, and they > don't realize that what makes it hard is their own set of habits taken from > scalar languages. > > Henry Rich > > On 11/20/2017 9:32 AM, R.E. Boss wrote: > > This book should also be mentioned > > http://www.lulu.com/shop/henry-rich/j-for-c- > programmers/ebook/product- > > 17439968.html > > > > Being a mathematician, the most important thing J brought me is a > complete other way of thinking. > > And always remember, the learning curve remains steep quite some time. > Well, at least it did for me. > > > > > > R.E. Boss > > > > > >> -----Original Message----- > >> From: General [mailto:[email protected]] On > Behalf > >> Of Rob Hodgkinson > >> Sent: maandag 20 november 2017 02:33 > >> To: [email protected] > >> Subject: Re: [Jgeneral] initial reaction to J > >> > >> Enjoyed your comments Daniel, I find them insightful for someone > >> relatively new to the language. > >> > >> Liked your analogy about knives, chefs and kids too ! > >> > >> The general observation is to persist (Andrew) as the more you become > >> familiar with J the more the power dawns on you to the kinds of > possibilities. > >> Most often such power is entwined closely with concepts around higher > >> level arrays and linear algebra where such language notations really > >> shine. I have found phrases around shortest path solution and > >> transitive closure to be incredibly succinctly and elegantly defined in J > >> for > example. > >> > >> For more advanced applications in mathematics (like a J tutorial on > >> steroids focused on very interesting graphics applications) I would > >> also highly recommend Cliff Reiter’s work on Fractals published in > >> eBook form available here (and in print from Amazon). > >> http://www.lulu.com/au/en/shop/clifford-reiter/fractals- > >> visualization-and-j/ebook/product-17513422.html > >> > >> Thanks, Rob > >> > >>> On 20 Nov 2017, at 11:06 am, Daniel Lyons <[email protected]> > wrote: > >>> > >>> Andrew, > >>> > >>> I've been seriously trying to learn J for the last 6 weeks or so. I > >>> am a > >> professional programmer, about 13 years in industry, with extensive > >> experience in many languages. And I am learning J because I am > >> interested in thinking different thoughts. There are a number of ways > >> that programming culture could have gone. APL and J represent a > >> different path. Maybe things that seem like chronic conditions in the > >> main culture (huge reams of code, programming as performance art, > >> faddishness, etc.) may just be symptoms of ingrained thoughts > unexamined too long. > >>> Six weeks in, I could still give up. It certainly takes more effort > >>> to learn J. But > >> I kind of consider that a feature. It really is different from other > >> things. And I am questioning the basis behind a lot of your comments. > >> I got a lot out of this video from the Dyalog conference: > >> https://www.youtube.com/watch?v=9xCJ3BCIudI > >> <https://www.youtube.com/watch?v=9xCJ3BCIudI> the crux of it being, > >> readability is probably the most ill-defined concept in programming. > >> When we say Python is readable, we really mean it is familiar. We > >> have the sense that we could understand it. But I am not going to > >> understand a complex financial, statistical, or scientific > >> calculation in Python or J. The trouble I will have understanding > >> what the code is doing doesn't have much really to do with the language, > though as I'm new to J it will take longer. > >>> To me, J represents thinking about computation at the chemical level > >> rather than at the quark level. Yes, there are a lot more elements in > >> the periodic table than there are types of quark. But, on the other > >> hand, if you have actual things to do, the chemistry might be more > >> applicable than the subatomic physics. As a professional programmer, > >> I feel like I spend a lot of my time rehashing the same things with > >> small variations. So the emphasis on brevity isn't for the sake of > >> laughs here. It's to elevate your thinking to a more abstract level. > >> If I'm going to spend another 20–30 years programming, spending one > >> year really learning a powerful tool like J doesn't seem like a bad > >> investment. It would be weird to take knives away from chefs because > >> kids cut themselves when they're beginning. Now to some of your > specific points. > >>>> On Nov 19, 2017, at 12:15 PM, Andrew Dabrowski > >> <[email protected]> wrote: > >>>> 3. The heart of the language seems to be in tacit definitions, and > >>>> explicit > >> ones seem to be just a necessary but ugly kludge > >>> On the other hand, I see a fair amount of non-tacit definitions in > >>> source > >> code in the addons. I think maybe we bring this to our learning of J > >> because we feel like this is the shining core of J, but I'm not sure that's > really the case. > >> I have made a habit of checking my definitions with 13 : but if the > >> result is bigger or has too many [: caps, I keep the explicit form. I > >> don't so far have the sense that people are policing the use of explicits. > >>> The only way to get better at reading code is reading more code. > >>> You'd be > >> surprised how few people actually try it though, preferring only to > >> read their own. I get the sense that the APL/J folks do a lot more > >> trading of little snippets, and thus, more actual code reading than > >> people who do Java, for some whatever reason. > >>>> 4. Therefore the language can really only be used comfortably in > >>>> domains > >> where functions of arity higher than 2 are rare. > >>> Well, Haskell functions actually only have an arity of 1. If you > >>> need more > >> than one argument, behind the scenes it desugars a 2-arity function > >> to a function returning a function of one argument, and so on. So > >> far, this hasn't been a huge problem for me; one of the manuals has > >> some language about this. I think the J mentality is "control f data" > >> so many cases where you would need a bunch of arguments, you either > >> don't because of adverbs or you don't because you can bundle up a > >> bunch of control data into a larger package with boxes. But that's my > >> beginner's interpretation of what's going on here. Lots of languages > >> have seemingly impossible limitations like this yet are able to get real > work done. > >>>> 5. The mania for terseness is clearly at clinical levels. The > >>>> family of circle > >> functions o. is something that seems like a good idea in the shower > >> or the middle of night, but no one would be foolish enough to actually > implement it. > >> Except Ken Iverson. > >>> I assume that if you do a lot of trig, it eventually comes in handy > >>> to use the > >> function numbers to simplify acquiring sine and cosine of a lot of > >> things at once, or something. It seems overly clever to me too, but > >> overly clever things that survive several decades are probably > >> actually onto something, even if it isn't obvious after first > >> contact. ;) > >>>> 6. In the age of unicode, why /not/ use the special symbols from > >>>> APL? We > >> could use the J expressions to type them, but wouldn't the APL > >> symbols look and read better? As it is J might be said to have the worst > >> of > both worlds. > >>> I have given this some thought myself, and I spent a little time > >>> learning APL > >> as well. My first thought is to agree with you, but in fact most of > >> the APL operators are a bit more about convenience in 1960 than > >> mathematical purity. There's no particularly obvious mathematical > >> reason for base and decode to be T shapes. APL operators have a > >> pleasing regularity because inverses are often literally inverted and > >> whatnot, but the actual shapes they have are more about how many > >> shapes you could fit on a typeball and be distinct after > >> overstriking. So you get kind of a taste of Chinese with radicals > >> that are added to different shapes. Well, J has that too, with > >> periods usually changing a fundamental operator in a common way and > colons doing something less common. > >>> I have found using the APL385 unicode font improves readability with > >>> J > >> somewhat because most fonts try so hard to make punctuation sort of > >> invisible. I imagine it just gets easier with time and we're starting out. > >>> I think you could actually go further than APL. In the book _A > >>> Programming > >> Language_, Iverson describes several notations, including his inner > >> product notation, that are not the way APL the language implemented > >> them, probably because it's not super-feasible in a linear setting. > >> APL looks cool at first blush, but I'm not convinced it's better. J > >> actually improved on APL (IMO) by removing the indexing notation so > >> that everything consistently is verbs and adverbs, and it actually > >> winds up with a simpler and more consistent syntax. > >>>> 10. Maybe beginners aren't the point? Is J really just the > >>>> Shriners of > >> programming? A bunch of crabby geezers riding around on scooters? I > >> might in fact want to join that, but I did kind of get the impression > >> that you were selling J as a serious programming language. > >>> > >>> I'm not sure it's necessary for every language to take beginners so > >> seriously. After all, you will spend most of your time with a > >> language as an intermediate or expert user, and basically every > >> modern language worries a lot about beginners. As an expert > >> programmer (at least in some languages) I find it kind of alluring > >> that there are a few languages that are intended for experts and have > >> left the sharp tools exposed. It has made me want to be better at > >> mathematics, even more than Haskell did. I think if you look at > >> what's happened in the NodeJS ecosystem, you can see what you get if > >> you take a beginners-at-all-costs attitude. Maybe instead of trying to > meet people where they start at the bottom, we should inspire them to > climb up. > >>> -- > >>> Daniel Lyons > >>> > >>> > >>> > >>> > >>> -------------------------------------------------------------------- > >>> -- > >>> For information about J forums see > >> http://www.jsoftware.com/forums.htm > >> > >> --------------------------------------------------------------------- > >> - For information about J forums see > >> http://www.jsoftware.com/forums.htm > > ---------------------------------------------------------------------- > > For information about J forums see > http://www.jsoftware.com/forums.htm > > > --- > This email has been checked for viruses by AVG. > http://www.avg.com > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
