2009-04-14 8 views
43

कुछ महीने पहले मैं कुछ समय पहले जे/के/एपीएल में आया था, जबकि कुछ समस्याओं के माध्यम से अपना रास्ता काम कर रहा था, और कम से कम कहने के लिए चिंतित था। मेरे द्वारा उत्पादित हर सुरुचिपूर्ण दिखने वाले 20 लाइन पायथन समाधान के लिए, एक gobsmacking 20 चरित्र जे समाधान होगा जो उस समय के दसवें हिस्से में भाग गया था। मैं कुछ बुनियादी जे सीखने के लिए उत्सुक हूं, और शब्दावली चुनने के कुछ प्रयास किए हैं, लेकिन सीखने की वक्र काफी खड़ी हो गई है।क्या कोई भी जे/के/एपीएल सीखने की सिफारिश करेगा?

उन लोगों के लिए जो इन भाषाओं से परिचित हैं, क्या आप एक सीखने के लिए कुछ समय निवेश करने की सलाह देंगे (मैं विशेष रूप से जे सोच रहा हूं)? मैं करियर उन्नति या ऐसी कुछ चीज़ों की तुलना में अपनी जिज्ञासा को संतुष्ट करने के उद्देश्य से और अधिक करूँगा।

कुछ व्यक्तिगत परिस्थितियों पर विचार करने के, अगर आप ध्यान:

  • मैं गणित प्यार करता हूँ, और दैनिक इसका इस्तेमाल अपने काम में (एक स्टार्टअप के लिए एक गणितज्ञ के रूप), लेकिन ईमानदार मैं वास्तव में नहीं लग रहा है होना करने के लिए मेरे द्वारा उपयोग किए जाने वाले टूल (जैसे पायथन + न्यूमपी) द्वारा सीमित है, इसलिए मैं उस बहाने का उपयोग नहीं कर सकता।
  • मेरे पास वित्त उद्योग में काम करने की कोई विशेष इच्छा नहीं है, जो कम से कम के उपयोगकर्ताओं के लिए कॉल का मुख्य बंदरगाह प्रतीत होता है। इसके अलावा मुझे वास्तव में सी # को अगली भाषा के रूप में सीखना चाहिए क्योंकि यह प्राथमिक भाषा है जहां मैं काम करता हूं। तो व्यावहारिक रूप से बोलते हुए, जे लगभग निश्चित रूप से नहीं होना चाहिए जो अगली भाषा मैं सीखता हूं।
  • मैं MATLAB के साथ उचित रूप से परिचित हूं इसलिए एक सरणी-आधारित प्रोग्रामिंग भाषा का उपयोग करके एक जबरदस्त प्रतिमान बदलाव नहीं होगा।

इन भाषाओं से परिचित लोगों की कोई सलाह बहुत सराहना की जाएगी।

उत्तर

52

हजारों साल पहले, मैं एक एपीएल प्रोग्रामर था। हजारों से, मेरा मतलब है कि '70 के दशक में जब कस्टम कैरेक्टर सेट का मतलब था कि हमारे पास एपीएल कीबोर्ड और कैरेक्टर सेट के साथ विशेष प्रिंटिंग टर्मिनलों और विशेष पात्रों के साथ आईबीएम चुनिंदा टाइपबॉल आदि थे।

मैं एक व्याख्यान में गया "एपीएल कूल क्यों था" पर केन इवर्सन।

उनकी थीसिस यह थी। एक बार एक समय पर लंबे विभाजन एक गंभीर गणितीय उपक्रम था, स्नातक छात्रों के लिए आरक्षित। दशमलव विस्तार को दोहराने जैसी चीजों के लिए नोटेशन में गणितीय प्रतीकवाद का एक बड़ा ढेर शामिल था। एक बार एक समय पर भी "ऋणात्मक" संख्या की तरह कुछ विस्तृत नोटेशन की आवश्यकता थी।

वर्षों से - जैसा कि हम इन अवशेषों की बेहतर समझ में आए - हम जटिल अवधारणाओं के लिए अधिक कॉम्पैक्ट नोटेशन के साथ आए।

एपीएल (और जे और के) का बिंदु बड़े एल्गोरिदम को साफ-सुथरे नोटेशन में सारांशित करना है।

आजकल, मैं एक पायथन प्रोग्रामर हूं।मुझे लगता है कि एपीएल के शुरुआती एक्सपोजर ने मुझे अपने मस्तिष्क को "मुझे क्या मतलब है?" पूछने के लिए मजबूर कर दिया। और "क्या यह एक पुन: प्रयोज्य ऑपरेशन है?" और "इस एल्गोरिदमिक फ्लफ के लिए एक पिथी सारांश क्या है?"

साथ ही, जैसा कि मैंने Project Euler समस्याओं का पीछा किया है, मेरी "जीन-एपीएल के जीन-भिगोली यादों" द्वारा समर्थित पायथन का "कार्यात्मक प्रोग्रामिंग लाइट" दोनों अभ्यासों से निपटने में बहुत उपयोगी हैं।

+2

उस स्टीवन के लिए धन्यवाद - यह देखना दिलचस्प होगा कि यह मेरे अपने पायथन को कितना प्रभावित करता है। अगर आपको मुझसे कोई फर्क नहीं पड़ता है, तो प्रोजेक्ट यूलर पर आपका उपयोगकर्ता नाम क्या है? क्या आप अपने पायथन समाधान पोस्ट करते हैं? प्रोजेक्टइलर पर – ozan

+1

, मैं "स्लॉट" हूं। नहीं, मैं अपने समाधान पोस्ट नहीं करता हूं। मैं केवल स्तर 1 हूं, अभी मेरे पास स्तर 2 पर जाने के लिए दो हैं। –

+2

हजारों साल पहले +1। लेकिन कभी भी ब्योरा न दें - जो सिर्फ मजा खराब कर देता है। –

9

मुझे लगता है कि आपके 3 अंक दिखाते हैं कि आपको जे सीखने की आवश्यकता नहीं है। हालांकि, मैं ऐसी किसी भी स्थिति के बारे में नहीं सोच सकता जहां एक नई भाषा सीखना हानिकारक है।

आपकी रुचि रखने वाली किसी चीज़ को जानने के लिए समय लेना (या कोई नई भाषा) हमेशा आपके अन्य प्रोग्रामिंग कौशल में सुधार करती है। आप उन समस्याओं के विभिन्न दृष्टिकोण सीखते हैं जिन्हें आप अन्य भाषाओं के साथ अलग-अलग कार्यान्वित करने में सक्षम हो सकते हैं।

प्लस, जे के न्यूनतम वाक्यविन्यास के साथ, यह सुनिश्चित करने के लिए एक अच्छी भाषा होगी कि जब आप किसी अन्य भाषा में समाधान लागू करते हैं तो आपको सही परिणाम मिल रहे हैं।

7

मैं 1 9 70 के दशक में कई वर्षों पहले एक एपीएल प्रोग्रामर के रूप में काम करता था। मुझे भाषा पसंद है, लेकिन वर्षों से इसका इस्तेमाल नहीं किया है।

कुछ चीजों के लिए यह एक अच्छी भाषा है, लेकिन उदाहरण के लिए मैं वेब विकास के लिए इसका उपयोग नहीं कर सकता हूं।

सांख्यिकीय और मैट्रिक्स संचालन के लिए यह कितना अच्छा है। आप 3 वर्णों में एक लाइनर प्रोग्रामिंग समस्या को हल कर सकते हैं। उस एलपी कार्यान्वयन की शुद्धता को साबित करना बहुत आसान है जो उदाहरण के लिए सी में पेज लेता है।

तो यदि आप इसे सीखने की खुशी के लिए सीखना चाहते हैं, तो मैं इसके लिए कहता हूं। अपनी नौकरी की संभावनाओं को बढ़ाने के लिए, शायद सीखने के लिए कई अन्य चीजें हैं जो संभावित नियोक्ता को अधिक प्रभावित करती हैं।

+1

वित्त में, क्यू/केडीबी + का ज्ञान काफी फिर से शुरू हो सकता है –

8

बड़े दिनों में वापस मैं एपीएल भाषा डेवलपर था, 370 असेंबलर में कोडिंग। मैंने जे को ओएस 2 पर पोर्ट किया, लेकिन वास्तविक काम के लिए इसका उपयोग कैसे नहीं किया। मैं वर्तमान में जावा और PHP में काम कर रहा हूं और पायथन का मूल्यांकन कर रहा था। पायथन ट्यूटोरियल के पहले 3 खंडों के बाद मुझे एपीएल की कई समानताओं से मारा गया, जो मुझे यहां लाया।

मैं दृढ़ता से एपीएल या जे को बौद्धिक अभ्यास के रूप में सीखने की सलाह देता हूं। यह प्रोग्रामिंग (आपके मस्तिष्क को कम करने) के बारे में सोचने का तरीका बदल देगा और शायद आपके पायथन कोडिंग में मदद करेगा। एपीएल और जे प्रोग्रामर के लिए वहां कुछ नौकरियां भी हैं, और शायद नौकरियों की तुलना में कम प्रोग्रामर हैं।

11

मैं 1 9 80 से एपीएल के साथ अपनी जिंदगी बना रहा हूं। मैं कुछ और सालों के लिए ऐसा करने के लिए जारी रखने के लिए उत्सुक दिख रहा हूं। एपीएल का उपयोग करना न केवल मजेदार है, भाषा उत्कृष्ट डिबगिंग सुविधाओं की पेशकश करती है। आधुनिक कार्यान्वयन पूरी तरह से कार्यात्मक भाषाएं हैं और ऑब्जेक्ट उन्मुख भी हैं।

मैंने कई वर्षों से मुझसे मुलाकात की मुझसे पूछा कि मुझे कितना समय लगता है कि मैं एपीएल के साथ जारी रखने में सक्षम हूं। वे लोग डीबेस और पीएल/1 और एएलजीओएल और पास्कल और फर्थ और सी और फोकस और अन्य प्रोग्रामर थे। समझ गया?!

+6

क्या आप कृपया बता सकते हैं कि आप एपीएल के साथ पैसे कैसे कमाते हैं? – defhlt

+1

@defhlt http://aplteam.com/ –

11

जे एक जीनी की तरह थोड़ा है: इसे एक बोतल के अंदर रखा जाना चाहिए। जे में बहुत सारे बैच सॉफ़्टवेयर को बनाए रखना एक गंभीर दर्द है। इंटरफेस को बनाए रखना (विंडोज़ या वेब आधारित, क्योंकि हाँ, आप वेब आउटपुट बनाने के लिए अपाचे के जवाब देने के लिए जे सेट कर सकते हैं) जे में नरक का एक प्रयोगात्मक, छोटा ज्ञात सर्कल है।

दूसरी ओर, जे का उपयोग करना ठीक है यदि आप चाहते हैं: पार्स, सिफ्ट, विश्लेषण, क्रंच, आदि कुछ डेटा को इसके साथ खराब करने के लिए, एल्गोरिदम के ठीक अनाज को जानने के लिए, या internets को प्रभावित करने के लिए यह जानने के लिए सबसे कम संभव तरीका है कि सर्कल में कितने त्रिभुज फिट होते हैं या नहीं।

मैं careers.stackoverflow.com पर अपने करियर प्रोफाइल पर एक डील ब्रेकर के रूप में जे जोड़ने के बहुत करीब आया, लेकिन आखिर में मैंने इसे छोड़ दिया। मेरे लिए, जे का उपयोग ठीक है, जे उत्पादन, हालांकि, नहीं है।

संपादित करें:

यह कुछ समय पहले था। मैं अभी भी उत्पादन में पूर्ण जे समाधानों की खराब सोचता हूं (यानी, आपका सभी एमवीसी)। मूल प्रतिक्रिया के बाद से, मैंने जे को सी # प्रोजेक्ट में COM के रूप में उपयोग किया है, जहां जे को एक बड़े मैट्रिक्स के साथ प्रदान किया गया है जो सी # में प्रबंधन के लिए बहुत संतुष्ट होगा।

हमारे काम का हिस्सा डेटा मॉडल और कोड बोलना है। यह आसान ब्रिजिंग नहीं है कि गुणवत्ता और जे के बहुत terse वाक्यविन्यास। जे के विपरीत, कई ढांचे, आईडीई के साथ काम करने में आसान हैं, और एक व्यक्ति को मानवीय पठनीय तरीके से कोड व्यवस्थित करने की अनुमति देने के लिए पर्याप्त समर्थन है। जे की यूबर-मैट्रिक्स क्षमताएं इसकी कमी के लिए क्षतिपूर्ति नहीं करती हैं।

16

मैंने पिछले 25 वर्षों में से अधिकांश के लिए जे और एपीएल में काम किया है और दोनों की पूरी तरह से सिफारिश कर सकते हैं। मैं अभी भी एक या दूसरे पर वापस आ जाता हूं जब मेरे पास कोई विज्ञापन-प्रसार डेटा विश्लेषण का रूप है और मैंने इसे प्रोजेक्ट यूलर में भी उपयोग किया है।

यदि आप प्रोजेक्ट यूलर में रूचि रखते हैं तो जे निश्चित रूप से चुनने वाला है। अनंत परिशुद्धता पूर्णांक और प्राइम्स के लिए इसका समर्थन इसे बहुत अच्छा फिट बनाता है।

14

जे परियोजना यूलर के लिए मेरी प्राथमिक प्रोग्रामिंग भाषा है और काम पर व्यक्तिगत उपयोग के लिए है। मैं सरणी प्रसंस्करण के लिए कभी भी बेहतर भाषा में नहीं आया हूं, और जब आप इसे लटकते हैं तो टैसिट प्रोग्रामिंग प्रतिमान उपयोगी और विचार-विमर्श दोनों होता है। (उपयोगी क्योंकि यह वास्तव में विचार-विमर्शकारी है।) भाषा में प्रवेश स्तर की क्षमता तक पहुंचना मुश्किल है, और अन्य लोगों के कोड को पढ़ना एक बौद्धिक अनुशासित गतिविधि है, लेकिन भाषा की शक्ति, लचीलापन और एकता के कारण दृढ़ता का बड़ा भुगतान होता है।

जिसके अनुसार, कारण है कि मैं यह काम पर व्यक्तिगत उपयोग के लिए आरक्षित (2) सीखने की अवस्था काफी खड़ी है इतना है कि यह उचित नहीं है मुझे पूछने के लिए के लिए, कि (1) काम पर और कोई नहीं इसे इस्तेमाल करता है मेरे सहयोगियों को इसे लेने के लिए, और (3) तथ्य यह है कि आप कोड की एक पंक्ति में जटिल कार्यक्रम बना सकते हैं, यह कोड की एक पंक्ति को पढ़ने में चुनौतीपूर्ण बनाता है, खासकर अगर आपने इसे स्वयं नहीं लिखा है। (मैं कम से कम आधे घंटे में कोड की एक पंक्ति का अध्ययन करने की उम्मीद करता हूं जो दस या अधिक ऑपरेटरों का उपयोग करता है, जब तक कि इन्हें इस तरह इस्तेमाल नहीं किया जाता है कि मैं अंतर्निहित सिद्धांतों को अच्छी तरह से समझता हूं।)

मज़ेदार जे के कुछ उदाहरण विशेषताएं:

1) किसी भी संख्या पर संचालित करने के लिए परिभाषित कोई भी फ़ंक्शन मनमाने ढंग से रैंक के सरणी पर काम करने के लिए किया जा सकता है। उदाहरण के लिए:

NB. totient(n) = n * \prod_{p|n} (1 - 1/p) 
totient=: * [email protected]%@~.&.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) आप किसी सैद्धांतिक रूप से किसी भी सैद्धांतिक रूप से ले सकते हैं जम्मू में उलटी समारोह और द्वारा 'यह पीछे की ओर पुनरावृत्ति' यह उलटने। उदाहरण के लिए,

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 
5

हाँ, जानने के एपीएल/जम्मू/कश्मीर, यह तुम क्या संभव है में अद्वितीय झलक दे देंगे।

मैं इंगित करें कि @ एमपीएललेटियर का "कितने त्रिकोण एक सर्कल में फिट होते हैं" और इसके निहित "... लेकिन असली दुनिया की समस्याओं के लिए नहीं," थोड़ा छोटा दिखता है। हाँ, जे सॉफ्टवेयर के आईडीई में कुछ कमी नहीं है चीजें, लेकिन किसी का अपना आईडीई बनाना कोई बड़ी समस्या नहीं है, और एक अच्छी आईडीई एक बुरी भाषा मास्क कर सकती है (20 वर्णों में 20 वर्णों की संकोचन पर छींकने के लिए नहीं है।) मैं एपीएल को तब तक कर रहा हूं जब तक @ काइजेगर ने, यदि अधिक समय नहीं है, और मेरा दिमाग खराब हो सकता है, लेकिन मैं कभी भी किसी और चीज़ के साथ प्रोग्रामिंग खुश नहीं रहा हूं।

6

यह मेरे लिए एक पचास वर्षीय व्यक्ति के लिए मनोरंजक पुष्टि है।

इससे पहले, मैंने शून्य प्रोग्रामिंग करने के 27 वर्षों के अंतराल के बाद एक नई, 21 वीं शताब्दी प्रोग्रामिंग भाषा सीखने का फैसला किया। मैंने पाइथन चुना, काफी यादृच्छिक रूप से, गुई आधारित और ऑब्जेक्ट उन्मुख दुनिया से डरते हुए हम सभी अब रहते हैं।

मेरी खुशी के लिए, मेरे 80 साल के शुरुआती दशक में एक एपीएल लड़के के रूप में जीवित कमाई करने का मतलब है कि मैं सचमुच समझ के साथ सामग्री के माध्यम से ज़िप कर रहा हूं :) बस सोचा कि मैं इसे साझा करूंगा।

संबंधित मुद्दे

 संबंधित मुद्दे