क्यों सभी कार्यात्मक प्रोग्रामिंग ट्यूटोरियल इतना मैथी हैं?


20

मैं कार्यात्मक प्रोग्रामिंग और अधिकांश ट्यूटोरियल सीखने की कोशिश कर रहा हूं, मैंने गणित का उपयोग अधिक जटिल निर्माणों के लिए किया है (यहां तक ​​कि कुछ मामलों में सरल भी)। ऐसा क्यों है? मुझे लगता है कि कुछ आसान का इस्तेमाल किया जा सकता है। इसके कारण इसे सीखना मुश्किल हो गया है।

पृष्ठभूमि की जानकारी: मैं 12 वर्षों से सॉफ्टवेयर लिख रहा हूं। मैं कुछ अवधारणाओं को समझता हूं जैसे क्लोजर, फ़र्स्ट क्लास सिटिजन और जेनरिक। मुझे कुछ उन्नत स्तर पर उच्च-क्रम के कार्यों में समस्या हो सकती है, लेकिन मुझे विश्वास है कि मेरे पास एक बुनियादी समझ है। मोनाड्स मुझे बट में काट रहे हैं, और इस बिंदु पर मुझे अतीत नहीं मिला है (मुझे यकीन है कि मैं अंततः होगा, क्योंकि मैं लगातार हूं)।


केवल थोड़ी सी, मैंने आपके द्वारा सुझाई गई अन्य 3 भाषाओं
चार्ल्स लैम्बर्ट

यदि आप C # जानते हैं तो F # शुरू करना सबसे आसान काम है। गणित के बड़े ज्ञान का अनुरोध नहीं करता।
CND

6
SICP आज़माएं - यह हाई स्कूल के गणित से बहुत आगे नहीं जाता है।
एसके-लॉजिक

@Charles लैंबर्ट - ऑफिसस्पेस देखें और आपको अय्यूब की टिप्पणी का दूसरा भाग मिलेगा।
जेटी

@Charles लैम्बर्ट: ग्रेट यू के लिए एक हास्केल सीखो यह बहुत ज्यादा मैथी नहीं है: D
Matthieu M.

जवाबों:


21

वे गणित का उपयोग करते हैं क्योंकि कार्यात्मक प्रोग्रामिंग गणितीय निर्माणों में बहुत अच्छा है और गणितीय अवधारणाओं, विशेष रूप से लैम्ब्डा कैलकुलस में बहुत बंधा हुआ है। चूंकि I / O आम तौर पर विभिन्न भाषाओं की REPLs के माध्यम से कार्यात्मक प्रतिमान गणित की बहुत सारी भाषाओं में एक काफी कांटेदार और उन्नत विषय है, इसलिए पहली बार में भाषा सिखाने का एक अच्छा तरीका बन जाता है।

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

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

http://learnyouahaskell.com/ - शायद कार्यात्मक प्रोग्रामिंग के लिए gentlest परिचय में से एक है, मैंने डबल चेक किया और इसमें मूल बीजगणित और ग्राफ़ सिद्धांत से परे कुछ भी नहीं है।


अगर आप हास्केल के अलावा कुछ और चाहते हैं तो learnyousomeerlang.com भी एक विकल्प है।
ट्रैविस

11

इसके कई कारण हैं, और वे सभी प्रकार से संबंधित हैं:

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

इसके अलावा, एफपी वास्तव में अन्य प्रतिमानों की तुलना में अधिक मैथी नहीं है, लेकिन प्रमुख अवधारणाओं (वास्तविक प्रथम श्रेणी के नागरिकों, उच्च-क्रम के कार्यों, क्लोजर और शुद्धता के रूप में कार्य) को एक निश्चित मानसिकता की आवश्यकता होती है। कुछ बिंदु पर, आपके दिमाग को "क्लिक" जाना चाहिए; यदि आप इन 4 मुख्य विचारों को समझते हैं, तो बाकी किसी भी प्रतिमान की तरह ही आसान होने की संभावना है।


3
शिक्षाविदों में विकसित के लिए +1: कार्यात्मक भाषाओं को बनाने वाले लोग इसे गणितीय गुणों के आधार पर बनाते हैं, इसलिए यह लीक हो जाता है ...
मैथ्यू एम।

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

मैं टेडमर्स से भी सहमत हूं कि गणितीय अवधारणाओं का उपयोग करके भी अनिवार्य भाषाओं का वर्णन किया जा सकता है। वास्तव में, एक अनिवार्य कार्यक्रम का गणितीय विवरण एक कार्यात्मक कार्यक्रम के गणितीय विवरण की तुलना में सामान्य रूप से बहुत अधिक जटिल है। आईएमओ यह बताता है कि क्यों अनिवार्य भाषाओं में बग होने की अधिक संभावना है: यह अनिवार्य रूप से अनिवार्य कोड को पूरी तरह से समझना अधिक कठिन है। कम से कम, यह मेरा व्यक्तिगत अनुभव है कुछ साल की कार्यात्मक प्रोग्रामिंग और कई और वर्षों की अनिवार्य प्रोग्रामिंग।
जियोर्जियो

@ जियोर्जियो: "भाषा में लीक" (किसी तरह) और "ट्यूटोरियल में लीक" के बीच अंतर है। मुझे पूरा यकीन है कि आप उनमें बहुत गणित के बिना कार्यात्मक प्रोग्रामिंग ट्यूटोरियल लिख सकते हैं। बेशक वे बेहतर होंगे या नहीं यह बहस और शायद व्यक्तिपरक है।
मैथ्यू एम।

@ मैथ्यूएमएम .: स्पष्ट करने के लिए बहुत-बहुत धन्यवाद कि लीक का मतलब क्या था (ट्यूटोरियल में लीक करना): आपकी टिप्पणी अब मेरे लिए बहुत मायने रखती है। मैं आपसे सहमत हूं कि एफपी पर एक ट्यूटोरियल में यथासंभव कम गणित होना चाहिए। मैंने किसी तरह आपकी टिप्पणी को गलत समझा था: उद्योग में और अकादमिक दोनों में काम करने के बाद मैं "शिक्षाविदों में थोड़ा सा" हूं कि वे बहुत सारे गणित करते हैं जो वास्तविक दुनिया में बेकार हैं "तरह की टिप्पणियां। आपकी टिप्पणी और टेडमर दोनों के जवाब के लिए +1।
जियोर्जियो

5

ऐसा इसलिए है क्योंकि मौलिक रूप से, कंप्यूटर प्रोग्रामिंग गणित है। इसे ध्यान में रखते हुए कार्यात्मक भाषाओं को डिजाइन किया गया था और यही कारण है कि अधिकांश ट्यूटोरियल गणित पर केंद्रित हैं।

यह सीखना मुश्किल है कि अगर आप गणितीय नींव रखने के रूप में कंप्यूटर प्रोग्रामिंग के बारे में सोच नहीं रहे हैं।


4
मौलिक रूप से कंप्यूटिंग तर्क और अंकगणित का एक संयोजन है। यह गणित नहीं है। आप गणितीय सूत्र में शाखा निर्देश नहीं व्यक्त कर सकते - इसलिए यह गणित में आधारित नहीं हो सकता। कार्यात्मक प्रोग्रामिंग की भीड़ इसे गणित में आधारित होना पसंद करेगी ताकि वे प्रोग्राम भाषाएं विकसित करें जो व्यवहार करते हैं जैसे कि शाखा निर्देश मौजूद नहीं थे।
जेम्स एंडरसन

9
@ जेम्स एंडरसन, क्या आप कह रहे हैं कि तर्क और अंकगणित गणित नहीं हैं? और मैंने कई गणितीय सूत्र देखे हैं जिनमें शाखा निर्देश होते हैं (आमतौर पर स्विच-जैसे औपचारिकता में व्यक्त किए जाते हैं)।
पीटर टेलर

4
गणित गणित का एक सबसेट है जो सरल गणना से संबंधित है। तर्क गणित का एक सुपरसेट है जो सभी तर्कसंगत विचारों का आधार है। संयोग से कार्यात्मक प्रोग्रामिंग समस्याओं को हल करने के लिए एक बहुत अच्छा विचार है जिसे गणितीय रूप से व्यक्त किया जा सकता है; जब आप जीएपी (आम तौर पर स्वीकृत लेखांकन प्रथाओं)
जेम्स एंडरसन

6
@ ian31, आप " मौलिक " शब्द को कैसे परिभाषित करेंगे ? आप जानते हैं, सिविल इंजीनियरिंग भी भौतिकी और गणित पर आधारित है, जबकि व्यावहारिक रूप से यह सभी लोगों के उपयोग और आनंद के लिए सामान बनाने के बारे में है। और, किसी भी तरह, यहां तक ​​कि कुछ वास्तविक दुनिया की समस्या का समाधान प्रोग्रामिंग के बारे में सोचना शुरू करने से पहले, आपको उस समस्या को कुछ गणितीय औपचारिकता में अनुवाद करना होगा । यह सिर्फ दूसरे तरीके से काम नहीं करेगा। प्रोग्रामिंग सभी औपचारिकताओं के बारे में है।
तर्क

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

1

मुझे लगता है कि "द लिटिल स्कीमर" कार्यात्मक प्रोग्रामिंग के लिए एक भयानक परिचय है और यह सभी मैथी में नहीं है। यह मोनाड्स में नहीं मिलता है, इसलिए यह आपके स्वाद के लिए बहुत बुनियादी हो सकता है, लेकिन अंत में वाई-कॉम्बिनेटर की व्युत्पत्ति करता है।

मैं हाल ही में 12 साल पहले कॉलेज के बाद से कोई कार्यात्मक प्रोग्रामिंग नहीं करने के बाद इसके माध्यम से चला गया, और यह एक महान रिफ्रेशर था, मैं निश्चित रूप से रैकेट का उपयोग करके पुस्तक में अधिकांश समस्याओं को काम करने के बाद अधिक उन्नत सामान से निपटने के लिए तैयार महसूस करता हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.