Frage

Ich bin vor ein paar Monaten auf J/K/APL gestoßen, als ich einige davon durchgearbeitet habe Projekt Euler Probleme und war, gelinde gesagt, fasziniert.Für jede elegant aussehende Python-Lösung mit 20 Zeilen, die ich erstellt habe, gab es unglaubliche 20 Charakter J-Lösung, die in einem Zehntel der Zeit lief.Ich wollte unbedingt ein paar Grundkenntnisse in J lernen und habe ein paar Versuche unternommen, mir den Wortschatz anzueignen, aber die Lernkurve war ziemlich steil.

Würden Sie denjenigen, die mit diesen Sprachen vertraut sind, empfehlen, etwas Zeit zu investieren, um eine zu lernen (ich denke insbesondere an J)?Ich würde das eher tun, um meine Neugier zu befriedigen, als für den beruflichen Aufstieg oder ähnliches.

Einige persönliche Umstände, die Sie berücksichtigen sollten, wenn Sie möchten:

  • Ich liebe Mathematik und verwende sie täglich in meiner Arbeit (als Mathematiker für ein Startup), aber um ehrlich zu sein, fühle ich mich durch die Tools, die ich verwende (wie Python + NumPy), nicht wirklich eingeschränkt, daher kann ich diese Ausrede nicht verwenden .
  • Ich habe keine besondere Lust, in der Finanzbranche zu arbeiten, die zumindest für K-Benutzer die wichtigste Anlaufstelle zu sein scheint.Außerdem sollte ich unbedingt C# als nächste Sprache lernen, da es die Hauptsprache ist, in der ich arbeite.Praktisch gesehen also fast definitiv J sollte nicht sei die nächste Sprache, die ich lerne.
  • Ich bin mit MATLAB einigermaßen vertraut, daher wäre die Verwendung einer Array-basierten Programmiersprache kein großer Paradigmenwechsel.

Jeder Rat von denjenigen, die mit diesen Sprachen vertraut sind, wäre sehr dankbar.

War es hilfreich?

Lösung

Vor Tausenden von Jahren war ich ein APL-Programmierer. Von Tausenden, meine ich zurück in den 70er Jahren, als die benutzerdefinierten Zeichensatz bedeutete, dass wir spezielle Druckanschlüsse mit dem APL-Tastatur und Zeichensatz und IBM Selectric typeballs mit den Sonderzeichen hatte, etc.

ging ich zu einem Vortrag von Ken Iverson auf "Warum APL War Cool".

Seine These war. Es ist einmal war lange Teilung ein ernsthaftes mathematischen Unternehmen, für Studenten Absolvent vorbehalten. Notation für Dinge wie Dezimalentwicklungen Wiederholung beteiligte einen großen Haufen von mathematischer Symbolik. Es ist einmal sogar so etwas wie eine „negative“ Zahl wurde aufwendige Notation erforderlich.

Im Laufe der Jahre - wie wir zu einem besseren Verständnis dieser Abstraktionen kamen - kamen wir mit vielen kompaktere Notation für komplexe Konzepte bis

.

Der Punkt der APL (und J und K) ist groß Algorithmen in ordentlich Notation zusammenzufassen.

Heute bin ich ein Python-Programmierer. Ich finde, dass meine frühe Exposition zu APL mein Gehirn verzerrt durch zwingt mich zu fragen: „Was ist das bedeuten?“ und „dies ist ein wiederverwendbarer Betrieb?“ und „Was ist eine prägnante Zusammenfassung für all diesen algorithmischen Flaum?“

Auch, wie ich die Projekt Euler Probleme der „funktionale Programmierung lite“ von Python verfolgen unterstützt durch meine „Gin-getränkten Erinnerungen an APL“sind sehr hilfreich, sowohl die Übungen in Angriff zu nehmen.

Andere Tipps

J ist meine primäre Programmiersprache für Project Euler und für den persönlichen Gebrauch bei der Arbeit. Ich habe noch nie eine bessere Sprache für Array-Signalverarbeitung kommen, und das stillschweigende Programmierparadigma ist sowohl nützlich als auch zum Nachdenken anregen, sobald Sie den Dreh raus zu bekommen. (Nützlich, weil es zum Nachdenken anregen, in der Tat.) Erreichen des Einstieg Kompetenz in der Sprache ist schwierig, und der Code andere Leute zu lesen ist eine intellektuell disziplinierte Aktivität, aber Ausdauer hat große Profite wegen der Macht der Sprache, Flexibilität und Prägnanz.

Wie gesagt, der Grund, warum ich behalten es für persönlich Einsatz bei der Arbeit ist, dass (1) sonst niemand bei der Arbeit verwendet sie, (2) die Lernkurve steil genug ist, so dass es nicht sinnvoll ist für mich meine Kollegen zu fragen, um ihn abzuholen, und (3) die Tatsache, dass Sie komplizieren Programme in einer einzigen Zeile Code bauen macht es schwierig, eine einzige Zeile Code zu lesen, besonders wenn man es nicht selbst geschrieben hat. (Ich erwarte, dass mindestens eine halbe Stunde zu verbringen, eine einzige Zeile Code zu studieren, die zehn oder mehr Operatoren verwendet, es sei denn, sie so verwendet wurden, dass ich die zugrunde liegenden Prinzipien gründlich zu verstehen.)

Einige Beispiele für Spaß J Merkmale:

1) Jede Funktion auf eine einzelne Zahl arbeiten definiert sind, können auf Arrays beliebiger Rang arbeiten gemacht werden. Zum Beispiel:

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)

Es ist genau die gleiche Funktion, nur auf den Atom Betrieb (Einzelelement-Komponenten) ein 1xN Eingangsfeldes. In ähnlicher Weise können Sie eine Funktion übernehmen definiert auf Rang zwei und Arrays zu arbeiten (Matrizen) und es auf jede Reihe von höheren Rang nur durch die "(Rang) Verbindung verwendet wird.

2) Sie können fast jede theoretisch umkehrbare Funktion in J nehmen und sie umkehren, indem ‚sie rückwärts iteriert‘. Zum Beispiel:

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

Ich habe für die meisten von den letzten 25 Jahren in J und APL gearbeitet und beide sehr empfehlen kann. Ich zurückkehren noch das eine oder andere, wenn ich jeder Form von Ad-hoc-Datenanalyse zu tun, und ich habe es in Project Euler als gut.

Wenn Sie in Project Euler interessiert sind, dann J ist auf jeden Fall das wählen. Seine Unterstützung für unendliche Präzision ganzer Zahlen und Primzahlen macht es eine sehr gute Passform.

ich meinen Lebensunterhalt mit APL mache seit 1980. Ich bin auf der Suche foward weiterhin so noch einige Jahre zu tun zu kommen. Es ist nicht nur ein großer Spaß zu verwenden, APL, die Sprache bietet hervorragende Debugging-Funktionen. Moderne Implementierungen sind vollwertige funktionale Sprachen und sind objektorientiert als auch.

Ich traf viele Menschen im Laufe der Jahre mich zu fragen, wie lange ich denke, ich mit APL fortsetzen würde. Die Jungs waren dbase und PL / 1 und Algol und Pascal und Forth und C und Fokus und andere Programmierer. Kapiert?!

J ist ein bisschen wie ein Geist: es muss in einer Flasche aufbewahrt werden. eine Menge von Batch-Software in J Aufrechterhaltung ist ein schweren Schmerzen. Die Aufrechterhaltung Schnittstellen (Windows oder Web-basierte, weil ja, Sie können Setup-J zu Apache zu beantworten einer Web-Ausgabe erzeugen) in J ein experimentellen, wenig bekannten Kreis der Hölle ist.

Auf der anderen Seite, J verwendet, ist in Ordnung, wenn Sie wollen: analysieren, sichten, analysieren, crunch, etc einige Daten mit ihm Geige, die feinkörnig einen Algorithmus, um herauszufinden, oder die zu beeindrucken internets mit dem kürzesten möglichen Weg, wie viele Dreiecken einen Kreis passen zu berechnen oder was nicht.

Ich kam sehr nah an dem Hinzufügen J als Deal Breaker auf meiner Karriere auf dem Profil careers.stackoverflow.com , aber ich es schließlich links aus. Für mich, mit J ist in Ordnung, die Herstellung von J, jedoch ist es nicht.

EDIT:

Das war vor einer Weile. Ich denke immer noch schlecht von kompletten J-Lösungen in der Produktion (das heißt, alle Ihre MVC). Da die ursprünglichen Antwort habe ich J als COM in einem C # -Projekt verwendet, wobei J mit einer großen Matrix versehen ist, die klobig wäre in C # zu verwalten, mit großer Zufriedenheit.

Ein Teil unserer Arbeit ist es, Datenmodelle und Code zu machen sprechen . Es ist nicht leicht, dass Qualität und J sehr knappe Syntax überbrückt. Mehrere Gerüste, im Gegensatz zu J, haben einfach zu arbeits mit IDE, und haben genügend Unterstützung zu ermöglichen, einen Code in einer menschlich lesbaren Art und Weise zu organisieren. Js über-Matrix-Funktionen nicht kompensieren, was ihm fehlt.

Ich denke, Ihre 3 Punkte zeigen, dass Sie nicht brauchen, J. jedoch zu lernen, kann ich nicht jede Situation denken, wo eine neue Sprache schädlich ist zu lernen.

Zeit nehmen, etwas, das Sie interessiert sind (oder eine neue Sprache) zu lernen, immer Ihre andere Programmierkenntnisse verbessert. Sie lernen verschiedene Ansätze, um Probleme, die Sie in der Lage sein können, anders mit anderen Sprachen zu implementieren.

Plus, mit der minimalen Syntax von J, wäre es eine gute Sprache, die Sie korrekte Ergebnisse erhalten, um sicherzustellen, wenn Sie eine Lösung in einer anderen Sprache implementieren.

In den Eldar-Tagen war ich APL-Sprachentwickler und programmierte in 370 Assembler.Ich habe J auf OS2 portiert, aber nie gelernt, wie man es für die richtige Arbeit nutzt.Ich arbeite derzeit in Java und PHP und habe Python evaluiert.Nach den ersten drei Abschnitten des Python-Tutorials war ich beeindruckt von den vielen Ähnlichkeiten mit APL, die mich hierher gebracht haben.

Ich würde dringend empfehlen, APL oder J als intellektuelle Übung zu lernen.Es wird Ihre Denkweise über das Programmieren verändern (Ihr Gehirn verzerren) und wahrscheinlich Ihrer Python-Codierung helfen.Außerdem gibt es ein paar Jobs für APL- und J-Programmierer und wahrscheinlich weniger Programmierer als Jobs.

für mehrere Jahre

habe ich als APL-Programmierer in den 1970er Jahren wieder an der Arbeit. Ich liebe die Sprache, haben aber seit Jahren nicht mehr verwendet wird.

Es ist eine großartige Sprache für einige Dinge, aber ich kann wirklich nicht Invision es für Web-Entwicklung zum Beispiel verwendet wird.

Was es ist großartig für ist statistisch und Matrix-Operationen. Sie können ein Liner Programmierproblem in 3 Zeichen lösen. Es ist viel einfacher, die Richtigkeit dieser LP Implementierung als eine zu beweisen, welche Seiten in C zum Beispiel nimmt.

Also, wenn Sie wollen, dass es für die Freude am Lernen lernen, sage ich für ihn gehen. Um Ihre Jobaussichten zu verbessern, und es gibt wahrscheinlich viele andere Dinge zu lernen, die einen potenziellen Arbeitgeber mehr beeindrucken werden.

Das ist amüsant Bestätigung für mich, ein fünfzig etwas Jährige.

Bereits heute Morgen habe ich beschlossen, eine neue, 21. Jahrhundert Programmiersprache nach einem Intervall von 27 Jahren Null-Programmierung zu tun zu lernen. Ich nahm Python, ganz zufällig, Angst vor der GUI-basierten und objektorientierte Welt, die wir alle jetzt leben.

Zu meiner großen Freude, meine Jahre ihren Lebensunterhalt als APL Mann zurück in den frühen 80er Jahren zu verdienen bedeutet, dass ich buchstäblich durch das Material, mit Sofort Verständnis bin zippen :) Ich dachte, ich würde das gemeinsam nutzen.

Ja, lernen APL / J / K, es wird Ihnen einen einzigartigen Einblick in das, was möglich ist.

ich darauf hinweisen, dass @ MPelletier ist „wie viele Dreiecke einen Kreis passen“ und seine impliziten „... aber nicht für reale Probleme,“ ein wenig kurzsichtig ist. Ja, J Software IDE fehlen einige Dinge, aber die eigene IDE bauen, ist kein großes Problem, und eine gute IDE kann eine schlechte Sprache (die 20 Zeilen zu 20 Zeichen Schrumpfung Maske nicht an geniest werden I.) habe APL tun, solange @KaiJaeger hat, wenn nicht mehr, und mein Geist kann verzerrt sein, aber ich habe nie glücklich Programmierung mit etwas anderes gewesen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top