Coming all the way from ALGOL 60, FORTRAN and Assembler I wholeheartedly second that statement. It's one of the motivations why I try to stick with J to eventually get away from that 'narrowly channeled' thinking, which has been more of an obstacle than my (meanwhile )rusty Math.

I was reminded again of that initial struggle when I recently came across this adverb (core of Newton-Raphson method)

N=: 1 : '-u % u d. 1'

and ended up joyfully writing my first adverbs (explicit and tacit, for the Bisecection method).

-M

At 2017-11-20 14:47, you wrote:

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,
sppending 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

Reply via email to