I think "training wheels" versions of J should just be J, with
documentation tailored to the interests of the audience.

For example, if you want a language like basic, you can easily add
line numbers to a program.

example=: verb define
[1] 'this is line one'
[2] 'this is line two'
[3] 'this is line three'
[4] NB. ...
)

They are not mechanically useful, but they can give the user a way of
referring to a specific line and the familiarity of line numbers might
make the learning transition easier for someone that takes comfort
from them.

Anyways, it's quite true that for a specific task you probably only
need a handful of J primitives, but that handful will tend to vary,
based on the task.

FYI,

-- 
Raul


On Sat, Dec 1, 2012 at 9:17 AM, Ian Clark <earthspo...@gmail.com> wrote:
> Bravo, Alex. These are the right questions you're asking. And -- yes
> -- I too liked Bo's suggestion.
>
> A "training wheels" form of J, tailored to people who know BASIC,
> would be so easy to write. Plus its accompanying textbook (essential
> to write, if not to read). But it really would need testing on
> bona-fide beginners, to see whether the shells are landing on-target.
>
> When I first came to J, I was dismayed at its alien-ness. So
> unnecessary, I thought. A glance inside the _z_ locale convinced me
> this was implicitly recognised, if not publicly admitted. Years later,
> J now seems perfectly natural to me, and I'm shocked at my past
> attitude.
>
> But "users can get used to anything", a respected ergonomist assured
> me once. "They kiss the whip. They grow to love the systems they are
> forced to use". (That's not me, of course. Oh no no no :-)
>
> The need for "training wheels" soon goes away. Gradually. Any
> programmer is amenable to the invitation "ok now, wouldn't you like to
> get rid of an inessential layer...?" I still habitually use smoutput,
> inv and each, instead of 1!:2, ^:_1 and &.>, but I no longer have much
> use for pick, rows and define.
>
> Once upon a time, "implementation languages" (ILs) were in fashion.
> The idea was that every problem domain, like linear algebra or
> electronic circuitry, had its own domain-specific language, or IL,
> typically residing in a library of subroutines. The thing to do (so
> the idea ran) was to write an app (starting with J, say) in 2 clear
> stages:
>      J --> IL --> app
> Most developers do this automatically, though unconsciously and
> unevenly. The proponents of the idea wanted to systematise it,
> especially for developer teams. Also for "courseware", eg a sandbox to
> support a course called: IT for electrical engineers, or IT for
> biology technicians (two actual examples I used to teach.) Such
> courseware would then face becoming a standard in education, acquiring
> its own bestseller textbooks. In the UK in the 80s, the govt actually
> put money behind organisations like BECTa to promote some of the more
> successful ILs. These were typically originated by some university
> dept of education, in cooperation with one or two trial schools.
>
> I mention all this just to say that J is a super language for
> implementing an IL. Even better than APL and FORTH (not forgetting the
> C preprocessor!) -- and these lend themselves to writing an IL far
> better than most of the leading industry languages. Typically an IL
> "primitive" is defined in a single terse line, eg:
>    rfd=: 180 %~ o.    NB. Radians from degrees
>    sin=: 1&o.
>    SIN=: sin@rfd
> making the given IL easy to publish, and distribute to students.
>
> On Sat, Dec 1, 2012 at 4:14 AM, Alex Giannakopoulos
> <aeg...@blueyonder.co.uk> wrote:
>> On 30 November 2012 16:17, Bo Jacoby <bojac...@yahoo.dk> wrote:
>>
>>> J is a rich language, and it might be a good idea to define an elementary
>>> subset for beginners.
>>
>>
>> Couldn't agree more.
>> A simple startup configuration file.  Define verbs for trig functions so
>> they don't look stupidly arbitrary.
>> Some other elementary functions too, like polar2rect and rect2polar
>> conversions that act on vectors (none of this xfy binary stuff here
>> please), you know, stuff like you can find on *calculators*.
>> Define dot-product, matrix-multiplication, cross-product, determinant, etc,
>> as user-friendly built-in verbs.  When I am a beginner, I DO NOT, repeat
>> NOT want to know about the . operator at the level of the jdict, it is a
>> highly advanced subject, intriguing - yes, but not for newbies.  Yet I do
>> want to do matrix ops.  I was told this was a language for linear algebra.
>> It would probably be a good idea, then, if we could do some linalg -
>> straight out of the box - without serious brain damage.  I have had abuse
>> hurled at me by math teachers who have seen J's linalg primitives (LOL).
>> Add some nice libs for equation solving while we're at it.  Simultaneous
>> and also some numeric solvers.  This is what people want.  A language, not
>> an assembler for a language.
>>
>>
>>> J is a nice calculator for elementary computations. You can do a lot of
>>> computing without knowing anything about binomial coefficients and taylor
>>> expansions and capped forks.
>>
>>
>> Agree with the first two, NO way on the third.  Even the 13 verb gives you
>> capped verbs, there is no way to begin learning J without it.  Also they
>> solve the problem of having to figure if you should use At or Atop,
>> invaluable for a beginner who hasn;t quite mastered rank yet.
>>
>> This problem, which once again gives rise to a long thread, could easily be
>> solved by a highly visible Programming FAQ page, with lots of links to.
>> Deal with capped forks, @ and @:  and why you can't have things like   +/ a
>> b c   You know, the questions people *keep asking*.   Remove ancient
>> irrelevant stuff like the use of x. and y.   We are not at J401 any more.
>>
>>
>>> If you need to understand everything in order to be happy, then you may be
>>> unhappy. I taught my son elementary APL when he was 10 years old, and he
>>> loved it!
>>>
>>
>> Would he have been just as happy at 14 when he had to use the cosine rule
>> to solve a triangle?  Would he really prefer
>> cosrule_getang =: 13 : '_2&o.(((+/*:}.y)-*:{.y) % */ 2, }.y)'
>> or
>> cosrule_getang =: [: _2&o. (([: +/ [: *: }.) - [: *: {.) % [: */ 2 , }.
>> to
>> cosrule_getang := (Aa,B,C) -> acos((B^2+C^2-Aa^2)/(2.0*B*C));
>> Just wondering...
>>
>> These are simple enough things to do, and I speak as a J newcomer.  There's
>> not many languages you can say that about after two and a half years!  The
>> Zen of J, grasshopper.
>>
>> Incidentally, is there a way to cap a monadic hook on the left?
>> For example (=<.) was mentioned, but obviously it allows dyadic arguments,
>> and fails if they are offered.
>> Short of wrting monad : 'y=<.y'  is there a way I can keep it monadic (and
>> implicit)?
>> ----------------------------------------------------------------------
>> 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

Reply via email to