Domanda

Mi sono imbattuto in J / K / APL alcuni mesi fa mentre si lavora il mio modo attraverso alcuni Project Euler problemi, e è stato incuriosito, per non dire altro. Per ogni soluzione python 20 linea elegante aspetto che ho prodotto, non ci sarebbe un gobsmacking 20 carattere J soluzione che ha funzionato in un decimo del tempo. Sono stato entusiasta di imparare un po 'di base J, e ho fatto un paio di tentativi di far salire il vocabolario, ma ho trovato la curva di apprendimento per essere abbastanza ripida.

Per coloro che hanno familiarità con questi linguaggi, mi consiglia di investire un po 'di tempo per imparare uno (sto pensando J in particolare)? Lo farei di più per al fine di soddisfare la mia curiosità che per avanzamento di carriera o qualcosa del genere.

Alcune circostanze personali da prendere in considerazione, se si cura di:

  • amo la matematica, e usarlo quotidianamente nel mio lavoro (come un matematico per una startup), ma ad essere onesti non mi sento limitato dagli strumenti che uso (come Python + NumPy) quindi non posso utilizzare questa scusa.
  • Non ho alcun desiderio particolare di lavorare nel settore finanziario, che sembra essere il principale porto di scalo per gli utenti K almeno. Inoltre ho in realtà dovrebbe imparare il C # come linguaggio prossimo in quanto è la lingua principale in cui lavoro. Quindi in pratica, J quasi sicuramente non dovrebbe è la lingua prossimo imparo.
  • Sono abbastanza familiarità con MATLAB in modo da utilizzare un linguaggio di programmazione basata su array non costituirebbe un cambiamento di paradigma tremendo.

Qualche consiglio da chi ha familiarità con queste lingue sarebbe molto apprezzato.

È stato utile?

Soluzione

Migliaia di anni fa, ero un programmatore APL. Con migliaia, intendo indietro negli anni '70 quando il set di caratteri personalizzati significava che dovevamo terminali speciali di stampa con la tastiera e il set di caratteri APL, e typeballs Selectric IBM con i caratteri speciali, ecc.

Sono andato a una conferenza di Ken Iverson sul tema "Perché APL era fresca".

La sua tesi era questo. C'era una volta lunga divisione era un serio impegno matematica, riservato agli studenti universitari. Notazione per cose come la ripetizione espansioni decimali coinvolto un grande mucchio di simbologia matematica. C'era una volta anche qualcosa come un numero "negativo" è stato richiesto di notazione elaborato.

Nel corso degli anni - come siamo venuti ad una migliore comprensione di queste astrazioni - Siamo venuti con la notazione molto più compatto per i concetti complessi

.

Il punto di APL (e J e K) è riassumere grandi algoritmi in notazione ordinata.

Al giorno d'oggi, io sono un programmatore Python. Trovo che la mia esposizione precoce alla APL deformato il mio cervello costringendomi a chiedere "che cosa è questo?" e "questo è un operazione riutilizzabile?" e "che cosa è una sintesi concisa per tutto questo fluff algoritmica?"

Inoltre, come ho perseguire l' Project Euler problemi della "lite programmazione funzionale" di Python sostenuta da mio "gin ricordi di APL" sono entrambi molto utile nell'affrontare le esercitazioni.

Altri suggerimenti

J è il mio linguaggio di programmazione principale per Project Euler e per uso personale sul posto di lavoro. Non ho mai incontrato un linguaggio migliore per l'elaborazione di array, e il paradigma di programmazione tacita è utile e stimolante volta a ottenere il blocco di esso. (Utile perché è da pensare, in effetti). Raggiungere la competenza entry-level nella lingua è difficile, e la lettura di codice di altre persone è un'attività intellettualmente disciplinato, ma la perseveranza ha importanti profitti a causa della propria lingua di potenza, la flessibilità e la concisione.

Detto questo, il motivo per cui mi riservo per personale uso sul posto di lavoro è che (1) nessun altro posto di lavoro lo usa, (2) la curva di apprendimento è abbastanza ripida quindi che non è ragionevole per me di chiedere ai miei colleghi per raccoglierlo, e (3) il fatto che è possibile costruire programmi complessi in una riga di codice rende difficile leggere una riga di codice, soprattutto se non hai scritto da te. (Mi aspetto di passare almeno mezz'ora a studiare una riga di codice che usa dieci o più operatori, a meno che non sono stati utilizzati in modo tale che ho capito a fondo i principi di fondo.)

Alcuni esempi di divertimento caratteristiche J:

1) Qualsiasi funzione definita ad operare su un singolo numero può essere fatto funzionare su array di rango arbitrario. Ad esempio:

NB. totient(n) = n * \prod_{p|n} (1 - 1/p)
totient=: * -.@%@~.&.q:

NB. Finding the totient of 10
totient 10

NB. Finding the totient of all numbers from 1 to 10
totient"0 (1+i.10)

E 'esattamente la stessa funzione, semplicemente agendo sulle atomi (componenti singolo elemento) di una matrice di input 1xN. Allo stesso modo, si può prendere una funzione definita per lavorare su rango due array (matrici) e applicarla a qualsiasi matrice di rango superiore semplicemente utilizzando il (grado) congiunzione ".

2) Si può prendere praticamente qualsiasi funzione teoricamente invertibile in J e capovolgere lo da 'iterazione all'indietro'. Ad esempio,

NB. Converts an array of binary digits to a decimal number
(#.) 1 0 1
5

NB. Converts a decimal number to an array of binary digits
(#.^:_1) 5
1 0 1

Ho lavorato in J e APL per la maggior parte degli ultimi 25 anni e consiglio vivamente entrambe. Ho ancora tornare ad una o l'altra quando ho qualsiasi forma di analisi dei dati ad hoc da fare e l'ho usato in Project Euler pure.

Se siete interessati a Project Euler allora J è sicuramente quello di scegliere. Il suo sostegno per gli interi precisione infinita e numeri primi rendono una misura molto buona.

Mi guadagno da vivere con APL dal 1980. Sto cercando con impazienza di continuare a farlo per alcuni anni a venire. Non è solo molto divertente da usare APL, la lingua offre funzionalità di debug eccezionali. implementazioni moderne sono a pieno titolo linguaggi funzionali e sono orientati agli oggetti pure.

Ho incontrato molte persone nel corso degli anni mi chiede quanto tempo Credo che sarei stato in grado di continuare con APL. Quei ragazzi erano dbase e PL / 1 e ALGOL e Pascal e indietro e C e di messa a fuoco e di altri programmatori. Capito?!

J è un po 'come un genio: ha bisogno di essere mantenuta all'interno di una bottiglia. Il mantenimento di un sacco di software lotto in J è un dolore grave. Il mantenimento di interfacce (Windows o web based, perché sì, è possibile l'installazione J per rispondere ad Apache per produrre un output web) nella J è un poco conosciuto cerchio sperimentale, dell'inferno.

D'altra parte, utilizzando J va bene se si vuole: analizzare, vagliare, analizzare, scricchiolio, ecc alcuni dati a giocherellare con esso, per capire la grana fine di un algoritmo, o per impressionare il internet con la via più breve possibile calcolare quanti triangoli forma in un cerchio o non quello.

Sono venuto molto vicino ad aggiungere J come una garanzia di insuccesso sulla mia carriera profilo su careers.stackoverflow.com , ma alla fine ho lasciato su. Per me, utilizzando J va bene, producendo J, tuttavia, non è.

EDIT:

E 'stato qualche tempo fa. Continuo a pensare male di soluzioni complete J della produzione (vale a dire, tutto il vostro MVC). Dal momento che la risposta originale, ho usato come J COM in un progetto C #, dove J è dotata di una grande matrice che sarebbe goffo di gestire in C #, con grande soddisfazione.

Una parte del nostro lavoro è quello di rendere i modelli e codice dati parlano . Non è facile colmare che la qualità e la sintassi molto concisa di J. Diversi quadri, a differenza di J, un facile-to-work-con IDE, e hanno un sostegno sufficiente per consentire di organizzare il codice in un modo umanamente leggibile. capacità über-matrice di J non compensano ciò che manca.

Credo che i tuoi 3 punti dimostrano che non hai bisogno di imparare J. Tuttavia, non riesco a pensare di qualsiasi situazione in cui imparare una nuova lingua è dannoso.

Prendendo tempo per imparare qualcosa che ti interessa (o qualsiasi nuova lingua) migliora sempre le vostre altre competenze di programmazione. Si impara diversi approcci ai problemi che si può essere in grado di implementare in modo diverso con altre lingue.

Inoltre, con la sintassi minima di J, sarebbe un buon linguaggio per garantire che si stanno ottenendo risultati corretti quando si implementa una soluzione in un'altra lingua.

Torna nei giorni Eldar ero uno sviluppatore linguaggio APL, codifica in 370 assembler. Ho portato a J OS2, ma mai imparato come usarlo per il lavoro vero e proprio. Al momento sto lavorando in Java e PHP e stava valutando Python. Dopo le prime 3 sezioni del tutorial di Python sono rimasto colpito dalle molte somiglianze che aveva a APL, che mi ha portato qui.

Mi consiglia vivamente di imparare APL o J come un esercizio intellettuale. Cambierà il vostro modo di pensare di programmazione (deformare il vostro cervello) e probabilmente aiutare il vostro codice Python. Inoltre ci sono un paio di posti di lavoro là fuori per APL e programmatori J, e probabilmente meno programmatori di posti di lavoro.

Ho usato per lavorare come programmatore di APL per diversi anni indietro nel 1970. Amo la lingua, ma non l'ho usato per anni.

Si tratta di un grande linguaggio per alcune cose, ma davvero non può InVision usarlo per lo sviluppo web per esempio.

Ciò che è grande è l'operazioni statistiche e di matrice. È possibile risolvere un problema di programmazione di linea in 3 caratteri. È molto più facile da dimostrare la correttezza di che l'attuazione di un LP che prende le pagine in C per esempio.

Quindi, se volete imparare per la gioia di imparare, dico andare per esso. Per migliorare le prospettive di lavoro, beh probabilmente ci sono un sacco di altre cose da imparare, che impressionerà un potenziale datore di lavoro di più.

Questa è la conferma divertente per me, un anno cinquantenne persona anziana.

Prima di oggi, ho deciso di imparare un nuovo linguaggio di programmazione del 21 ° secolo, dopo un intervallo di 27 anni fa la programmazione zero. Ho scelto Python, del tutto a caso, paura della GUI basata e oggetto mondo in cui tutti viviamo orientato in ora.

Con mia grande gioia, i miei anni che guadagnano da vivere come un ragazzo APL indietro negli anni '80 significa che sto letteralmente zippare attraverso il materiale, con la comprensione immediata :) Ho pensato di condividere questo.

Sì, imparare APL / J / K, che vi darà una visione unica in quello che è possibile.

faccio notare che @ di MPelletier "quanti triangoli si inseriscono in un cerchio" e la sua implicita "... ma non per i problemi del mondo reale," è un po 'miope. Sì, IDE di J Software manca di alcune cose, ma costruire il proprio IDE non è un grosso problema, e un buon IDE può mascherare una lingua cattiva (la contrazione di 20 righe per 20 caratteri è non da buttar via .) ho fatto APL finché @KaiJaeger ha, se non di più, e la mia mente può essere deformato, ma non sono mai stato felice di programmazione con qualsiasi altra cosa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top