Question

Je suis tombé sur J / K / APL il y a quelques mois tout en travaillant mon chemin à travers certains projets rel="noreferrer"> euler problèmes et a été intriguée, pour le moins. Pour chaque élégante recherche solution python 20 ligne je produisais, il y aurait un gobsmacking 20 caractère solution J qui a eu lieu dans un dixième du temps. Je suis désireux d'apprendre quelques J de base, et ont fait quelques tentatives de ramasser le vocabulaire, mais ont trouvé la courbe d'apprentissage pour être assez raide.

Pour ceux qui sont familiers avec ces langues, recommanderiez-vous investir un peu de temps pour apprendre un (je pense en particulier J)? Je le ferais plus dans le but de satisfaire ma curiosité que pour l'avancement de carrière ou quelque chose du genre.

Certaines circonstances personnelles à prendre en compte, si vous tenez à:

  • J'aime les mathématiques, et de l'utiliser tous les jours dans mon travail (en tant que mathématicien pour une start-up), mais pour être honnête, je ne me sens pas vraiment limité par les outils que j'utilise (comme python + NumPy) je ne peux pas utiliser cette excuse.
  • Je ne veux pas particulièrement de travailler dans l'industrie financière, qui semble être le principal port d'escale pour les utilisateurs de K au moins. De plus, je devrais vraiment apprendre C # comme langue suivante comme il est la langue principale où je travaille. Donc, en pratique, J presque certainement ne devrait pas la prochaine langue que j'apprends.
  • Je suis assez familier avec Matlab si en utilisant un langage de programmation basée sur la baie ne constituerait pas un changement de paradigme énorme.

Tous les conseils de ceux qui sont familiers avec ces deux langues serait apprécié.

Était-ce utile?

La solution

Il y a des milliers d'années, je suis un programmeur APL. Par milliers, je veux dire retour dans les années 70 lorsque le jeu de caractères personnalisé signifiait que nous avions des terminaux d'impression spéciaux avec le clavier APL et le jeu de caractères, et IBM Selectric typeballs avec les caractères spéciaux, etc.

Je suis allé à une conférence donnée par Ken Iverson sur "Pourquoi APL était cool".

Sa thèse était la suivante. Il était une fois longue division était une entreprise mathématique sérieuse, réservée aux étudiants diplômés. Notation pour des choses comme la répétition des extensions décimales impliquait un gros tas de symbolisme mathématique. Il était une fois, même quelque chose comme un nombre « négatif » était nécessaire notation élaborée.

Au fil des ans - que nous sommes arrivés à une meilleure compréhension de ces abstractions - nous sommes arrivés avec la notation beaucoup plus compacte pour des concepts complexes

.

Le point d'APL (et J et K) est de résumer les grands algorithmes en notation ordonnée.

De nos jours, je suis un programmeur Python. Je trouve que ma première exposition à mon cerveau APL gauchie en me forçant à demander « qu'est-ce que cela signifie? » et « est-ce une opération réutilisable? » et « ce qui est un résumé lapidaire pour tout cela fluff algorithmiques? »

En outre, comme je poursuis problèmes de projet Euler la « lite de programmation fonctionnelle » de Python soutenu par mon « Gin-imbibée souvenirs de l'APL » sont tous deux très utiles dans la lutte contre les exercices.

Autres conseils

J est mon langage de programmation principal pour le projet Euler et pour un usage personnel au travail. Je ne l'ai jamais rencontré une meilleure langue pour le traitement du tableau, et le paradigme de programmation tacite est à la fois utile et réfléchir une fois que vous obtenez le coup de lui. (Utile parce qu'il est à la réflexion, en fait.) Atteindre les compétences d'entrée dans la langue est difficile, et la lecture du code d'autres personnes est une activité intellectuelle disciplinée, mais la persévérance a de gros avantages en raison de la puissance, la flexibilité et la concision de la langue.

Cela dit, la raison pour laquelle je me réserve pour personnels utilisation au travail est que (1) personne d'autre au travail utilise, (2) la courbe d'apprentissage est assez raide pour qu'il soit pas raisonnable pour moi de demander à mes collègues de le ramasser, et (3) le fait que vous pouvez créer des programmes complexes en une seule ligne de code fait qu'il est difficile de lire une ligne de code, surtout si vous ne l'avez pas écrit vous-même. (Je pense à passer au moins une demi-heure l'étude d'une ligne de code qui utilise dix ou plusieurs opérateurs, à moins qu'ils ont été utilisés de telle sorte que je comprends les principes sous-jacents à fond.)

Voici quelques exemples de caractéristiques amusantes J:

1) Toute fonction définie pour fonctionner sur un seul numéro peut être fait pour fonctionner sur des réseaux de rang arbitraire. Par exemple:

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)

Il est exactement la même fonction, à opérer sur les atomes (composants) un seul élément d'un tableau d'entrée 1xN. De même, vous pouvez prendre une fonction définie pour travailler sur deux tableaux rang (matrices) et l'appliquer à toute matrice de rang supérieur juste en utilisant le «(rang) conjonction.

2) Vous pouvez prendre à peu près toutes les fonctions théoriquement inversible dans J et inverser par 'itérer en arrière. Par exemple,

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

Je travaille dans J et APL pour la plupart des 25 dernières années et recommande vraiment les deux. Je reviens encore à l'un ou l'autre quand j'ai any forme d'analyse de données ad hoc à faire et je l'ai utilisé dans le projet Euler ainsi.

Si vous êtes intéressé par Euler projet alors J est certainement celui de choisir. Son soutien pour les entiers de précision infinis et les nombres premiers en font un très bon ajustement.

Je gagne ma vie avec APL depuis 1980. Je suis à la recherche foward de continuer à le faire pour quelques années à venir. Il est non seulement très amusant à utiliser APL, la langue offre des fonctionnalités de débogage en cours. implémentations modernes sont les langages fonctionnels à part entière et sont orientées objet ainsi.

J'ai rencontré beaucoup de gens au cours des années à me demander combien de temps je suppose que je serais en mesure de poursuivre l'APL. Ces gars-là étaient dBase et PL / 1 et Algol et Pascal et Forth et C et Focus et d'autres programmeurs. Got it!

J est un peu comme un génie: il doit être gardé à l'intérieur d'une bouteille. Le maintien d'un grand nombre de logiciels de traitement par lots dans J est une douleur grave. Le maintien d'interfaces (Windows ou à partir du Web, parce que oui, vous pouvez configurer J pour répondre à Apache pour produire une sortie web) en J est un cercle expérimental, peu connu de l'enfer.

D'autre part, en utilisant J est bien si vous voulez: analyser, passer au crible, analyser, crunch, etc quelques données à jouer avec lui, pour comprendre le grain fin d'un algorithme, ou pour impressionner les internets avec le chemin le plus court possible de calculer le nombre de triangles correspondent dans un cercle ou de ce pas.

Je suis venu très près d'ajouter J comme un facteur de rupture sur mes Careers sur careers.stackoverflow.com , mais je finalement laissé en dehors. Pour moi, en utilisant J est très bien, la production de J, cependant, n'est pas.

EDIT:

C'était il y a un certain temps. Je pense encore mal de solutions complètes de J dans la production (c'est tout votre MVC). Depuis la réponse initiale, je l'ai utilisé J comme COM dans un projet C #, où J est pourvu d'une grande matrice qui serait clunky à gérer en C #, avec une grande satisfaction.

Une partie de notre travail est de faire des modèles de données et le code parler . Il n'est pas facile de transition que la qualité et la syntaxe très laconique J. Plusieurs cadres, contrairement à J ont facile à travailler avec IDE, et suffisamment de soutien pour permettre à un code d'organiser d'une manière lisible par l'homme. Les capacités de la matrice über de J ne compensent pas ce qui lui manque.

Je pense que vos 3 points montrent que vous n'avez pas besoin d'apprendre J. Cependant, je ne peux pas penser à une situation où l'apprentissage d'une nouvelle langue est nuisible.

Prendre le temps d'apprendre quelque chose qui vous intéresse (ou toute nouvelle langue) améliore toujours vos autres compétences en programmation. Vous apprendrez les différentes approches des problèmes que vous pourriez être en mesure de mettre en œuvre différemment avec d'autres langues.

De plus, avec la syntaxe minimale de J, ce serait une bonne langue pour vous assurer d'obtenir des résultats corrects lorsque vous implémentez une solution dans une autre langue.

De retour dans les jours Eldar j'étais un développeur de langage APL, le codage en assembleur 370. Je Ported J à OS2, mais jamais appris à l'utiliser pour le travail réel. Je travaille actuellement en Java et PHP et évaluait Python. Après les 3 premières sections du tutoriel Python j'ai été frappé par les nombreuses similitudes qu'il avait à l'APL, qui m'a amené ici.

Je recommande fortement l'apprentissage APL ou J comme un exercice intellectuel. Il va changer votre façon de penser à la programmation (chaîne de votre cerveau) et probablement aider votre codage Python. En outre, il y a quelques emplois là-bas pour l'APL et les programmeurs J, et probablement moins les programmeurs que les emplois.

Je travaillais en tant que programmeur APL depuis plusieurs années dans les années 1970. J'aime la langue, mais ne l'ai pas utilisé pendant des années.

Il est une grande langue pour certaines choses, mais je ne peux vraiment pas Invision utiliser pour le développement web par exemple.

Qu'est-ce qu'il est idéal pour les opérations statistiques et est la matrice. Vous pouvez résoudre un problème de programmation de ligne en 3 caractères. Il est beaucoup plus facile de prouver l'exactitude de cette mise en œuvre de LP que celui qui prend des pages en C par exemple.

Donc, si vous voulez apprendre pour la joie d'apprendre, dis-je aller pour elle. Pour améliorer vos perspectives d'emploi, bien il y a probablement beaucoup d'autres choses à apprendre qui impressionnera plus d'un employeur potentiel.

Ceci est une confirmation amusante pour moi, une personne de cinquante-année quelque chose.

Un peu plus tôt aujourd'hui, j'ai décidé d'apprendre un nouveau langage de programmation du 21e siècle après un intervalle de 27 ans faisant la programmation zéro. Je pris Python, tout à fait au hasard monde, peur de l'interface utilisateur graphique et orienté objet, nous vivons tous maintenant.

À ma grande joie, mes années gagner sa vie comme un gars APL retour au début des années 80 signifie que je suis littéralement passer comme un éclair à travers le matériau, avec la compréhension instantanée :) Juste pensé que je partage cela.

Oui, apprendre APL / J / K, il vous donnera un aperçu unique dans ce qui est possible.

Je signale que @ MPelletier de « combien de triangles intègrent dans un cercle » et son sous-entendu « ... mais pas pour les problèmes du monde réel » est un peu courte vue. Oui, l'IDE J Software manque certaines choses, mais la construction de son propre IDE est pas un gros problème, et un bon IDE peut masquer une mauvaise langue (les 20 lignes à 20 retrait de caractères est pas à dédaigner .) Je fais APL aussi longtemps que @KaiJaeger a, sinon plus, et mon esprit peut être déformée, mais je l'ai jamais été heureux avec la programmation quoi que ce soit d'autre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top