سؤال

جئت J / K / APL قبل بضعة أشهر أثناء العمل في طريقي من خلال بعض مشروع Euler المشاكل، وكان مفتون، أن أقول أقل. لكل حل ثعبان أنيق مظهر 20 خطي أنتجت، سيكون هناك Gobsmacking 20 حرف J الحل الذي ركض في عشر من الوقت. لقد كنت حريصة على تعلم بعض J الأساسية، وقد قدمت بعض المحاولات عند التقاط المفردات، لكنها وجدت منحنى التعلم ليكون شديد الانحدار.

لأولئك الذين هم على دراية بهذه اللغات، هل توصي باستثمار بعض الوقت لتعلم واحدة (أنا أفكر J على وجه الخصوص)؟ أود أن أفعل ذلك بشكل أكبر لغرض تلبية فضولي أكثر من التقدم الوظيفي أو بعض الشيء.

بعض الظروف الشخصية للنظر فيها، إذا كنت تهتم بما يلي:

  • أحب الرياضيات، واستخدمها يوميا في عملي (كجسم رياضيات لبدء بدء التشغيل) ولكن أن نكون صادقين لا أشعر أنني محدود حقا بالأدوات التي أستخدمها (مثل Python + Numpy) لذلك لا يمكنني استخدام هذا العذر وبعد
  • ليس لدي رغبة خاصة في العمل في صناعة التمويل، والتي يبدو أنها المنفذ الرئيسي للدعوة للمستخدمين K على الأقل. بالإضافة إلى أنني يجب أن أتعلم حقا C # كشركة التالية لأنها اللغة الأساسية التي أعمل فيها. وبالتالي التحدث عمليا، ج بالتأكيد تقريبا لا ينبغي ذلك كن اللغة التالية التي أتعلمها.
  • أنا على دراية بشكل معقول مع MATLAB، وبالتالي فإن استخدام لغة البرمجة القائمة على الصفيف لن يشكل تحولا هائلا بارادياغما.

سيكون موضع تقدير أي نصيحة من أولئك الذين يعرفون هذه اللغات.

هل كانت مفيدة؟

المحلول

منذ آلاف السنين، كنت مبرمج APL. من قبل الآلاف، أعني مرة أخرى في السبعينيات عندما تعني مجموعة الأحرف المخصصة أننا تناولنا محطات طباعة خاصة مع لوحة مفاتيح APL ومجموعة الأحرف ومجموعة الأحرف IBM مع الأحرف الخاصة، إلخ.

ذهبت إلى محاضرة من قبل كين إيفرسون على "لماذا كان APL رائع".

أطروحته كانت هذه. ذات مرة، كان الانقسام الطويل عبارة عن عملية رياضية خطيرة، محجوزة لطلاب الدراسات العليا. تدوين أشياء مثل تكرار التوسعات العشرية تشمل كومة كبيرة من الرموز الرياضية. ذات مرة حتى شيء مثل الرقم "السلبي" كان مطلوبا تدوين توضيحي.

على مر السنين - كما وصلنا إلى فهم أفضل لهذه التجريد - لقد توصلنا إلى تدوين أكثر إيصالا لمفاهيم معقدة.

تتمثل نقطة APL (و J و K) في تلخيص الخوارزميات الكبيرة في تدوين مرتب.

في الوقت الحاضر، أنا مبرمج بيثون. أجد أن التعرض المبكر ل APL مشوه ذهني عن طريق إجبارني على طلب "ما هذا يعني؟" و "هل هذه عملية قابلة لإعادة الاستخدام؟" و "ما هو ملخص pithy لجميع زغب الخوارزميات؟"

أيضا، وأنا متابعة مشروع Euler مشاكل "البرمجة الوظيفية لايت" من Python المدعومة من قبل "ذكريات Gin-offaked من APL" هي مفيدة للغاية في معالجة التدريبات.

نصائح أخرى

J هي لغتي البرمجة الأساسية ل EULER للمشروع والاستخدام الشخصي في العمل. لم أتوصل أبدا إلى لغة أفضل لمعالجة الصفيف، ونموذج البرمجة Tacit مفيدة ومثبتة مفيدة ومثيرة للتفكير بمجرد الحصول على تعليقها. (مفيد لأنه يثير إثارة في الواقع، في الواقع) الوصول إلى كفاءة على مستوى الدخول في اللغة صعبة، وقراءة رمز الأشخاص الآخرين هو نشاط منضبطة فكريا، ولكن المثابرة لديها مراتب رئيسية بسبب قوة اللغة والمرونة والزواج.

ومع ذلك، السبب لماذا أحصل عليه شخصي الاستخدام في العمل هو أن (1) لا أحد آخر في العمل يستخدمه، (2) منحنى التعلم حاد بما فيه الكفاية بحيث لا يكون من المعقول بالنسبة لي أن أسأل زملائي لاستلامه، و (3) حقيقة أنه يمكنك بناء يجعل البرامج المعقدة في سطر واحد من التعليمات البرمجية تحديا لقراءة خط التعليمات البرمجية، خاصة إذا لم تكتب ذلك بنفسك. (أتوقع أن أقضي ما لا يقل عن نصف ساعة دراسة خطا من التعليمات البرمجية التي تستخدم عشرة أو أكثر من المشغلين، ما لم يتم استخدامها بطريقة أفهم المبادئ الأساسية بدقة.)

بعض الأمثلة على المميزات 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) يمكنك أن تأخذ فقط حول أي وظيفة عكسية من الناحية النظرية في 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

لقد عملت في J و APL مقابل معظم السنوات ال 25 الماضية ويمكن أن أوصي بدقة كليهما. ما زلت أعود إلى واحد أو آخر عندما يكون لدي أي شكل تحليل بيانات مخصص للقيام به واستخدمت ذلك في مشروع Euler أيضا.

إذا كنت مهتما في Project Euler ثم J هو بالتأكيد الذي يختاره. دعمها للأعداد الصحيحة الدقيقة اللانهائية والبئرية تجعلها نوبة جيدة جدا.

أقوم بعيشي مع APL منذ عام 1980. أنا أتطلع للأشكال إلى الاستمرار في القيام بذلك لبعض سنوات أخرى قادمة. ليس من الممتع الشديد فقط استخدام APL، تقدم اللغة ميزات تصحيح الأخطاء المستحقة. يتم تشغيل التطبيقات الحديثة بالكامل لغات وظيفية بالكامل وهي موجهة نحو الكائنات أيضا.

التقيت الكثير من الناس على مر السؤال الذين يسألونني كم من الوقت أعتقد أنني سأكون قادرا على الاستمرار في APL. هؤلاء الرجال كانوا DBASE و PL / 1 والغول وموقع جيئة وذهابا و F والتركيز وغيرهم من المبرمجين. فهمتك؟!

ي هو قليلا مثل الجني: يجب أن تبقى داخل زجاجة. الحفاظ على الكثير من برامج الدفعات في J هو ألم خطير. الحفاظ على واجهات (Windows أو القائمة على الويب، لأن نعم، يمكنك إعداد J للإجابة على Apache لإنتاج إخراج ويب) في J هو دائرة تجريبية قليلة من الجحيم.

من ناحية أخرى، باستخدام J على ما يرام إذا كنت ترغب في: تحليل، SIFT، تحليل، أزمة، إلخ بعض البيانات إلى كمان، لمعرفة الحبوب الدقيقة للخوارزمية، أو لإقناع Internets. بأقصر طريقة ممكن لحساب عدد مثلثات تناسبها في دائرة أو ما لا.

جئت قريبا جدا من إضافة J ككسر صفقة على ملف تعريف المهن وظائف .stackoverflow.com., ، لكنني تركها في نهاية المطاف. بالنسبة لي، باستخدام J على ما يرام، إنتاج J، ومع ذلك، ليس كذلك.

تعديل:

كان هذا منذ برهة. ما زلت أفكر بشكل سيء من حلول J كاملة في الإنتاج (أي كل ما تبذلونه من MVC). منذ الاستجابة الأصلية، استخدمت J ك COM في مشروع C #، حيث يتم تزويد J بمصفوفة كبيرة من شأنها أن تكون clunky لإدارة في C #، مع رضا كبير.

جزء من عملنا هو جعل طرازات البيانات والرمز تحدث. وبعد ليس من السهل سد هذه الجملة جودة بناء جملة TERSE للغاية. العديد من الأطر، على عكس j، لديها سهلة العمل - مع IDE، والحصول على دعم كاف للسماح لأحد لترتيب التعليمات البرمجية بطريقة قابلة للقراءة بشرية. لا تعزز قدرات Jber-Matrix j's عن ما يفتقر إليه.

أعتقد أن 3 نقاط الخاصة بك تظهر أنك لست بحاجة إلى تعلم J. ومع ذلك، لا أستطيع التفكير في أي موقف حيث تعلم لغة جديدة ضارة.

أخذ بعض الوقت لتعلم شيئا مهتما به (أو أي لغة جديدة) يحسن دائما مهارات البرمجة الأخرى. تتعلم مناهج مختلفة للمشاكل التي قد تكون قادرا على تطبيقها بشكل مختلف مع لغات أخرى.

بالإضافة إلى ذلك، مع الحد الأدنى من بناء الجملة من J، ستكون لغة جيدة للتأكد من أنك تحصل على النتائج الصحيحة عند تطبيق حل بلغة أخرى.

مرة أخرى في أيام Eldar كنت مطور لغة APL، ترميز في 370 مجمع. لقد استندت J إلى OS2، لكنني لم تعلمها أبدا كيفية استخدامها للعمل الحقيقي. أنا أعمل حاليا في Java و PHP وكان تقييم بيثون. بعد أول 3 أقسام من برامج تعليمي بيثون، أصيبت بوجود العديد من أوجه التشابه التي كان عليها أن أحضرني هنا.

كنت أوصي بشدة بتعلم APL أو J كممارسة فكرية. سوف يغير طريقك في التفكير في البرمجة (الاعوجاج عقلك) وربما يساعد ترميز الثيثون الخاص بك. أيضا هناك عدد قليل من الوظائف هناك للمبرمجين APL و J، وربما عدد مبرمجين أقل من الوظائف.

اعتدت أن أعمل كمبرمج APL لعدة سنوات مرة أخرى في السبعينيات. أنا أحب اللغة، لكنني لم أستخدمها لسنوات.

إنها لغة رائعة لبعض الأشياء، لكنني لا أستطيع حقا عدم استخدامها باستخدام تنمية الويب على سبيل المثال.

ما هو رائع بالنسبة للعمليات الإحصائية والمصفوفة. يمكنك حل مشكلة برمجة بطانة في 3 أحرف. من الأسهل بكثير إثبات صحة ذلك تنفيذ LP أكثر من واحد يأخذ الصفحات في C على سبيل المثال.

لذلك إذا كنت ترغب في تعلم ذلك من أجل فرحة التعلم، أقول أذهب لذلك. لتعزيز فرص عملك، حسنا، ربما هناك الكثير من الأشياء الأخرى التي يجب تعلمها والتي ستؤثر إقناع صاحب العمل المحتمل أكثر.

هذا هو تأكيد مسلية بالنسبة لي، شخص يبلغ من العمر خمسين عاما.

في وقت سابق اليوم، قررت أن أتعلم لغة برمجة جديدة من القرن الحادي والعشرين بعد فاصل استمرت 27 عاما برمجة صفرية. اخترت بيثون، تماما عشوائيا، خوفا من العالم الموجود في واجهة المستخدم الرسومية الموجهة نحو الوثوق بهم، ونحن جميعا نعيش جميعا الآن.

الكثير لفرتي، سنواتي كسب العيش بأنه رجل APL مرة أخرى في الفترة الثمانينات في وقت مبكر يعني أنني تقليل حرفيا من خلال المواد، مع فهم فوري :) اعتقدت فقط أنني أشارك ذلك.

نعم، تعلم APL / J / K، وسوف يعطيك لمحة فريدة من نوعها في ما هو ممكن.

أشر إلى أن @ mpelletier's "عدد المثلثات التي تناسبها في دائرة" وتضفيها "... ولكن ليس لمشاكل في العالم الحقيقي"، فهو قصير النظر قليلا. نعم، يفتقر IDE للبرنامج J إلى بعض الأشياء، لكن بناء IDE الخاص بالمرء ليس مشكلة كبيرة، ويمكن أن يقنع IDE جيدا لغة سيئة (خطوط 20 حرفا 20 حرفا ليس لتكون عطية في.) لقد كنت أفعل APL طالما أن Kaijaeger لديه، إن لم يكن لفترة أطول، ويمكن أن يكون رأيي، لكنني لم أكن أبدا برمجة سعيدة مع أي شيء آخر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top