質問

数か月前、いくつかの情報を調べているときに J/K/APL に出会いました。 プロジェクトオイラー 控えめに言っても、問題があり、興味をそそられました。私が作成したエレガントに見える 20 行の Python ソリューションごとに、驚くべき 20 行が存在することになります。 キャラクター J ソリューションは 10 分の 1 の時間で実行されました。私は基本的な J を学びたいと思っており、語彙を習得しようと何度か試みましたが、学習曲線がかなり急であることがわかりました。

これらの言語に精通している人に、時間をかけて学習することをお勧めしますか (特に J 言語を考えています)。私はキャリアアップなどのためというよりは、自分の好奇心を満たすためにそうするでしょう。

以下を希望する場合は、考慮すべき個人的な状況がいくつかあります。

  • 私は数学が大好きで、(スタートアップの数学者として) 仕事で毎日数学を使っていますが、正直に言うと、使用するツール (Python + NumPy など) による制限をあまり感じていないので、その言い訳は使えません。 。
  • 私は特に金融業界で働きたいとは思っていません。少なくとも K ユーザーにとっては金融業界が主な目的地であると思われます。さらに、C# が私が働いている主な言語であるため、次の言語として本当に学ぶ必要があります。つまり、実際的に言えば、J はほぼ間違いなく すべきではありません 私が次に学ぶ言語になります。
  • 私は MATLAB についてはある程度の知識があるので、配列ベースのプログラミング言語を使用しても、大きなパラダイム シフトにはなりません。

これらの言語に詳しい方からのアドバイスをいただければ幸いです。

役に立ちましたか?

解決

数千年前、私はAPLプログラマーでした。何千人も、カスタム文字セットを意味したときに、私は戻って「70年代の意味我々は、特別なAPLキーボードと文字セットと印刷端末、および特殊文字とIBMのselectricのtypeballs、などを持っていた。

私は「なぜAPLはカッコよかった」のケン・アイバーソンの講演に行ってきました。

彼の論文は、このでした。むかしむかし、長い部門は大学院生のために予約深刻な数学的な仕事でした。小数展開を繰り返すようなもののための表記法は、数学的な象徴の大きな山を関与しました。むかしむかし、「負」の数のようにも何かが精巧な表記を必要とした。

私たちはこれらの抽象化のより良い理解に来たとして - -

は、長年にわたり、私たちは、複雑な概念のためのよりコンパクトな表記法を思い付いた。

APL(及びJ及びK)の点がきちんと表記に大きなアルゴリズムを要約することである。

この頃、私はPythonプログラマです。私はAPLに私の初期の暴露が尋ねるために私を強制的に私の脳を反っていることを見つけ、「これは何を意味するのか?」そして「これは、再利用可能な操作です?」そして「何がすべてのこのアルゴリズムの綿毛のための簡潔な要約だ?」

私の「ジンずぶぬれに裏打ちされたのPythonの

また、私はプロジェクトオイラーの問題を追求として「関数型プログラミングライト」 APLの思い出は」両方の練習に取り組んで大変参考になります。

他のヒント

Jプロジェクトオイラーのためと職場での個人的な使用のための私の主なプログラミング言語です。私は、配列処理のためのより良い言語に遭遇したことがありません、あなたはそれのこつを得れば暗黙のプログラミングパラダイムは便利と考えさせ両方です。 (それは考えさせているため、実際には便利です。)言語でエントリーレベルの能力への到達が困難であり、そして他の人のコードを読むことは、知的規律の活動ですが、忍耐力があるため、言語の力、柔軟性と簡潔の主要な利益供与を持っています。

私はが仕事で使うの個人のためにそれを予約する理由は、(1)職場で誰もがそれを使用しないことである(2)学習曲線は、それが合理的ではないように、十分に急である、と述べたこと私のためにそれを拾うために私の同僚に尋ねると、(3)あなたは1行のコードで複雑なプログラムを構築することができるという事実は、それが困難なあなたがそれを自分で書いていない場合は特に、コードの行を読み取ることになります。 (私は彼らが私が徹底的に基本的な原理を理解するように使用された場合を除き、10の以上の演算子を使用するコードの行を勉強し、少なくとも半分の時間を過ごすことを期待しています。)

楽しいJの機能のいくつかの例:

1)単一の数で動作するように定義された関数は、任意のランクの配列に動作させることができます。たとえばます:

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)

これは単にの1xN入力アレイの原子(単一要素のコンポーネント)上で動作する、まったく同じ機能です。同様に、あなただけ」(ランク)組み合わせを使用することによってランク2の配列(行列)上で動作し、上位の任意の配列に適用するために定義された関数を取ることができます。

2)あなたはJのいずれかの理論上の可逆機能についてちょうど取ると「後方、それを反復」で、それを反転することができます。たとえば、

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

私は過去 25 年間のほとんどを J と APL で働いてきましたが、どちらも完全にお勧めできます。あるときはまだどちらかに戻ってしまいます どれでも アドホック データ分析の形式であり、私は Project Euler でもそれを使用しました。

Project Euler に興味があるなら、間違いなく J を選択してください。無限精度の整数と素数をサポートしているため、非常によく適合します。

私は、私が来て、いくつかのより多くの年のためにそうし続けることが楽しみです1980年以来APLと私の生活を作ります。これは、言語が優れたデバッグ機能を提供しています、APLを使用するだけでなく、とても楽しいです。近代的な実装では、本格的な関数型言語であり、オブジェクト指向もある。

私はAPLを続行することができるだろうと思いますどのくらい私を求めて長年にわたって多くの人に会いました。それらの人は、dBASEのとPL / 1およびALGOLとPascalとフォースとCとフォーカスと他のプログラマでした。それを手に入れた?!

Jは魔神のようなビットです:それは、ボトル内に保持する必要があります。 Jでバッチソフトウェアの多くを維持することは、深刻な痛みです。 Jは地獄の実験、あまり知られていない円であるに(はい、あなたはJは、Apacheに答えるために、セットアップは、Web出力を生成することができるので、ベースのWindowsまたはWeb)のインターフェイスを維持ます。

あなたがしたい場合は、

一方、Jを使用すると、罰金です:いくつかのデータは、それをいじるためにアルゴリズムの微細結晶粒を把握するために、または、を感動させるなど、解析、ふるい分け、分析、クランチ円またはものではないに収まるどのように多くの三角形を計算するための最短の道でのインターネット

私は careers.stackoverflow.com の上のプロファイル私のキャリアの契約ブレーカとしてJを追加することに非常に近くに来たが、私は最終的にそれを残しましたでる。私には、使用してJはJが、しかし、ではない生産、結構です。

EDITます:

これはしばらく前でした。私はまだ生産の完全なJ・ソリューション(つまり、すべてのあなたのMVCである)の不十分だと思います。オリジナル応答するので、私は大満足で、Jは、C#で管理する不格好であろう大きなマトリックスを備えているC#プロジェクトでCOMとしてJを使用した。

我々の仕事の

パートは、データモデルとコードののはの話をすることです。これは、その品質とJの非常に簡潔な構文を埋める簡単ではありません。いくつかのフレームワークは、Jとは異なり、簡単に仕事とIDEの持っている、もう1つは人間読み込み可能な方法でコードを手配することを可能にするための十分なサポートを持っています。 Jのユーバー行列機能は、それが欠けているもののために補償しない。

私はあなたの3ポイントは、あなたがしかしJ.を学習する必要はありません、私は新しい言語を学ぶことが有害であるどのような状況を考えることができないことを示していると思います。

あなたが興味を持っている何か(または任意の新しい言語)を学ぶために時間を割いて、常にあなたの他のプログラミングのスキルを向上させます。あなたが他の言語とは異なる実装することができるかもしれない問題に異なるアプローチを学びます。

Plusは、Jの最小限の構文で、それはあなたが別の言語でソリューションを実装するときに、正しい結果を得ていることを確認するために適した言語になります。

戻るエルダー日間で私は370アセンブラでコーディングAPL言語の開発者は、でした。私はOS2にJを移植しますが、実際の作業のためにそれを使用する方法を学んだことがありません。私は現在、JavaとPHPで働いているとPythonを評価しました。 Pythonのチュートリアルの最初の3つのセクションの後、私はそれが私をここにもたらしたAPLに持っていた多くの類似点に打たれました。

私は強く、知的な運動として学習APLまたはJをお勧めします。これは、プログラミングについて考えるあなたの方法を変更します(あなたの脳をワープ)と、おそらくあなたのPythonのコーディングをするのに役立ちます。また、仕事よりもAPLとJプログラマ、おそらく少ないプログラマのためにそこにいくつかのジョブがある。

私は戻って1970年代に数年間のためのAPLプログラマーとして働いていました。私は言語が大好きですが、年のためにそれを使用していない。

これは、いくつかのもののための素晴らしい言語ですが、私は本当に例えばWeb開発のためにそれを使用してインビジョンすることはできません。

それは何のために偉大なことは、統計的および行列演算です。あなたは3つの文字でライナーのプログラミングの問題を解決することができます。例えば、C言語でページを取るものよりもそのLPの実装の正しさを証明するためにはるかに簡単です。

あなたが学習の喜びのためにそれを学びたいのであれば、私はそれのために行くと言います。あなたの仕事の見通しを強化するために、ほかより多くの潜在的な雇用者を感動される学ぶために他のものの多くは、おそらく存在します。

これは私にとって面白い確認、50代歳の人である。

以前の今日、私はゼロのプログラミングをやって27年ぶりに新しい、21世紀のプログラミング言語を学ぶことにしました。私たちはすべてが今に住んで、GUIベースおよびオブジェクト指向の世界を恐れ、かなりランダムに、Pythonのを選んます。

多くの私の喜びに、戻って80年代初期におけるAPLの男として生計を立てる私の年は、私は、文字通り瞬時に理解して、材料を介してビュンだということを意味:)ちょうど私がそれを共有したいと考えます。

はい、それはあなたに何ができるかを独自の一見を与える、APL / J / Kを学びます。

私はそのMPelletierの「どのように多くの三角形円に収まる」とその暗黙の@指摘し、「...ではなく、現実世界の問題のために、」少し近視眼的です。はい(、J SoftwareのIDEには、いくつかのものが欠けているが、自分のIDEを構築することが大きな問題ではない、と良いIDEが悪い言語を隠すことができる20文字の収縮に20行でくしゃみをするために、のないのです長くならない場合。)私は、限り@KaiJaegerが持っているとしてAPLを行ってきた、と私の心が反ってもよいが、私は何か他のものに満足してプログラミングしたことはありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top