2010-10-25 18 views
7

बीटा के बाद से, मैं कई वर्षों से C# के साथ काम कर रहा हूं। मेरे पास OOP से functional-oriented programming (FOP) से आगे बढ़ने का थोड़ा सा समय है। मैंने 1 9 80 के दशक के उत्तरार्ध में procedural programming और कार्यात्मक संरचना की अवधारणाओं के साथ शुरुआत की और 1 99 5 के बाद से ओओ कर रहे थे, जब UML अपने बचपन में था जहां मैं Delphi में प्रोग्रामिंग और ओओ के बहु-प्रतिमान दृष्टिकोण के साथ प्रोग्रामिंग कर रहा था। क्या गहरी जड़ वाले ओओ प्रोग्रामर से कार्यात्मक प्रोग्रामिंग में संक्रमण की मदद करने के लिए कोई अच्छी किताबें सुझाव हैं?ओओपी से एनईटी में शुद्ध कार्यात्मक उन्मुख प्रोग्रामिंग सोच के लिए सोचना कितना मुश्किल है?

मैंने Haskell पुस्तक की कोशिश की, लेकिन ऐसा लगता है कि इस विषय में कुछ पृष्ठभूमि की आवश्यकता है और यह बहुत ही अप्राप्य था।

मेरे पास कुछ O'Reilly, Apress एफ # पर किताबें हैं, लेकिन यह सब कुछ काम करने के लिए थोड़ा ऊन और आधा रास्ता घर लगता है। यह जरूरतों के अनुरूप कार्यों के साथ मिश्रित वस्तुओं को मिश्रित करता है।

F# हास्केल तुलना में बहुत अधिक सोच मेरी OOP में मुझे माफ कर दो करने लगता है, लेकिन मैं सच लाभ मैं एफओपी की मानसिकता में प्राप्त करने के लिए कोड का सर्वश्रेष्ठ परिणाम प्राप्त करने की जरूरत है पाने के लिए लगता है। मैंने अपने दिन-प्रति-दिन सी # सामान के बीच लगभग दो वर्षों तक कार्यात्मक प्रोग्रामिंग को पढ़ा है। लेकिन मुझे लगता है कि मैं सोच में नहीं आ रहा हूं।

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

+1

योजना सीखें, यह मेरे लिए काम करता है :) – leppie

+1

सुंदर व्यक्तिपरक लगता है, सीखने के घटता हर किसी के लिए अलग होने जा रहे हैं, और विभिन्न संक्रमणकालीन उपकरणों की उपयोगिता भी बहुत व्यक्तिगत है। – jball

+0

@jball: यह अवधारणा सीखने का तरीका है, न कि उत्पादन स्तर की भाषा। – ffriend

उत्तर

9

यह निश्चित रूप से व्यक्तिपरक है, लेकिन मुझे लगता है कि बहुत से लोग समान प्रश्न पूछ रहे हैं। मैंने निश्चित रूप से तब किया जब मैंने एफ # सीखना शुरू किया (सी # अनुभव वाला कोई व्यक्ति)। यहाँ कुछ मिश्रित विचार कर रहे हैं:

  • सही लर्निंग समस्याओं उठाओ - कार्यात्मक प्रोग्रामिंग जानने के लिए सबसे अच्छा तरीका है कुछ गैर तुच्छ परियोजनाओं पर काम शुरू करने के लिए है। यदि आप एक परियोजना चुनते हैं जो ओओ तरीके से हल करना आसान है, तो आप शायद ओओ समाधान की तरफ झुकेंगे। हालांकि, अगर आप कुछ परियोजना चुनते हैं जो स्वाभाविक रूप से एफपी समाधान फिट बैठता है, तो आप कुछ सीखेंगे। मेरे मामले में, मैंने एफ # उद्धरणों से जावास्क्रिप्ट में अनुवादक पर काम किया, जिसमें बहुत से पुनरावर्ती प्रसंस्करण और भेदभाव वाले संघ शामिल हैं।

  • सही होने की कोशिश न करें - यदि आप कार्यात्मक तरीके से कुछ लिखने का प्रयास करते हैं, तो यह पहले प्रयास में सही नहीं हो सकता है। इसके बारे में चिंता न करें (और खुद से यह न कहें कि आप ओओ तरीके से बेहतर कर सकते हैं)। आप एफपी तरीके से भी बेहतर कर सकते हैं - यह जानने के लिए बस कुछ समय लगता है कि यह कैसे करें।

  • शुद्ध होने की कोशिश करें - यदि आप हास्केल सीखना शुरू करते हैं तो आपको शुद्ध कार्यात्मक कोड लिखना होगा। एफ # इसे लागू नहीं करता है, लेकिन मुझे नहीं लगता कि F # को कार्यात्मक प्रोग्रामिंग सीखने के लिए कम उपयुक्त बनाता है। यदि आप सी # और .NET जानते हैं, तो आप अपने बहुत सारे अनुभव का पुन: उपयोग कर सकते हैं। बस अपने आप को और अधिक सख्त होने की कोशिश करें और परिवर्तनीय राज्य और विरासत जैसे गैर-कार्यात्मक संरचनाओं का उपयोग करने से बचें - वे कभी-कभी उपयोगी होते हैं, लेकिन आप एफपी तरीके से सोचने के बाद उनका उपयोग कर सकते हैं।

और एक छोटे से बेशर्म प्लग - इस तरह एक सवाल का जवाब मेरे Real World Functional Programming पुस्तक के लिए प्रमुख उत्प्रेरक में से एक था, इसलिए हो सकता है कि मदद कर सकता है ...

+0

बुलेट बिंदुओं के साथ पैसे पर आपका अधिकार। सभी तीन पत्र में मेरे अनुभव से संबंधित हैं। :) – WeNeedAnswers

+0

मैंने पाया कि एफ # के साथ यह जानना मुश्किल होता है कि आप शुद्ध (टीहे!) पर्याप्त हैं या नहीं, जिससे मुझे यह पता लगाने की कोशिश की गई कि मैं कुछ सही कर रहा हूं या नहीं। बाद में मैंने हास्केल सीखा और इच्छा है कि मैं उस के साथ शुरू करूंगा।फिर फिर, एसओ पर एक व्यक्ति जिसने हास्केल को सिखाया, उसने कहा कि उसे शुरुआती लोगों के लिए एक कठिन भाषा माना जाता है, इसलिए मैं बेहद फटा हुआ हूं कि मुझे अनिवार्य .NET से आने वाले शुरुआती लोगों को हास्केल या एफ # की सिफारिश करनी चाहिए। –

+1

मैं निश्चित रूप से टॉमस की पुस्तक की अनुशंसा करता हूं। – Benjol

3

कोई अच्छी किताबें सुझाव दिए गए हैं, एक गहरी जड़ें OO प्रोग्रामर

संरचना और व्याख्या कंप्यूटर कार्यक्रम के (SICP) से कार्यात्मक प्रोग्रामिंग के लिए खत्म हो संक्रमण मदद करने के लिए:

उनका कोर्स ज्यादातर कार्यात्मक संरचना पर केंद्रित है। यह LISP में है, लेकिन यह भाषा के बारे में कम है, और अमूर्त अवधारणाओं के बारे में अधिक है।

मुझे नहीं लगता कि वह शुद्ध एफपी के बारे में ज्यादा (या कुछ भी) कहता है, लेकिन मैंने वास्तव में इसे सब कुछ नहीं पढ़ा है :) या तो विचारों और विचारों का तरीका अभी भी लागू होना चाहिए।

+0

लिंक के लिए धन्यवाद। इसे देखेंगे। – WeNeedAnswers

+0

कृपया अपने डाउनवोट्स लोगों को समझाएं ... –

2

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

यह सब आप SICP में पा सकते हैं - न केवल एफपी सीखने के लिए शास्त्रीय पुस्तक, बल्कि सामान्य रूप से प्रोग्रामिंग। कार्यात्मक तरीके को समझने के लिए आपको सभी पुस्तकें पढ़ने की आवश्यकता नहीं होगी, लेकिन कम से कम पहले 3 अध्याय।

मुख्य एफपी अवधारणाओं को समझने के बाद और इसकी शैली में कुछ भी लागू करने में सक्षम होने के बाद, स्थाई टाइप की गई भाषाओं पर किसी भी पुस्तक को पढ़ें। जैसे एफ # पर अप्रेस किताबें पढ़ने के लिए बहुत आसान हो जाएगी।

+0

मैंने अप्रेस किताबों की कोशिश की, डॉन साइम्स बहुत अच्छे हैं। मैं कार्यात्मक प्रोग्रामिंग पर एक संभाल लेना चाहता हूं, हालांकि, पहली बार भाषा अज्ञेयवादी, लेकिन मैं एफ # कर रहा हूं। मेरी इच्छा है कि वहाँ एक अच्छा "बेवकूफों के लिए हैस्केल सीखें" किताब थी। मैंने जो उठाया वह मेरे दिमाग को चोट पहुंचाता है। यह बहुत सूखा था, मैंने इसे कुछ साल पहले एक विश्वविद्यालय परिसर में उठाया था, सब ठीक चल रहे थे, फिर मैंने कभी देखा है कि मैंने मोनाड्स के सबसे बुरे परिचय को मारा और मैंने पुस्तक में विश्वास खो दिया। – WeNeedAnswers

+1

@WeNeedAnswers: यदि आप वास्तव में कुछ भाषा अज्ञेयवादी चाहते हैं, तो शायद लैम्ब्डा कैलकुस की जांच करें। मैंने अपने कॉलेज के दिनों के दौरान इसका अध्ययन किया है और एफ # सीखते समय मुझे कुछ हद तक मदद मिली है। – Stringer

+0

आप एक कार्यात्मक भाषा में किसी ऑब्जेक्ट के रूप में कुछ क्यों प्रस्तुत करना चाहते हैं? यह परिवर्तनीय स्थिति का मतलब होगा। – WeNeedAnswers

1

Learn You a Haskell, एक सभ्य पढ़ा है, हालांकि यह शायद थोड़ा भी बुनियादी आप शायद पहले से ही उन पुस्तकों कि आप उठाया में से एक से हास्केल के वाक्य रचना पता दिया है ...

एक पायदान ऊपर ले जा रहा है, वहाँ Programming in Haskell, यदि आप उस पृष्ठ पर स्क्रॉल करते हैं, तो एमएस रिसर्च के एरिक मीजर द्वारा दी गई पुस्तक के आधार पर वीडियो व्याख्यान के लिंक का एक समूह है।

समेकित तर्क सामग्री विशेष रूप से दिलचस्प है, अगर केवल अकादमिक रूप से।

आवेदन के संदर्भ में, अन्य उत्तर में दी गई वास्तविक-दुनिया की कार्यात्मक प्रोग्रामिंग पुस्तक वास्तव में अच्छी लगती है - हालांकि मैंने इसे पढ़ा नहीं है, इसलिए मैं कोई निर्णय नहीं ले सकता।

+0

मुझे आपको एक हास्केल लिंक सीखना पसंद है। यह सुंदर रंग और सब कुछ मिला है। शर्म की बात है कि यह बहुत बुनियादी है, हालांकि पहली नजर पुस्तक के रूप में महान होगा। Http://www.amazon.co.uk/Haskell- कार्यात्मक- प्रोग्रामिंग- इंटरनेशनल- कंप्यूटर/डीपी/0201342758 – WeNeedAnswers

+0

तर्कसंगत बिट कठिन सामग्री है। अपघटन के साधन के रूप में कॉम्बिनेटर लॉजिक के आसपास अपना सिर प्राप्त करना। मैं इसे प्राप्त कर रहा हूं, बस इतना ही असहज है। मैं बस कुछ कक्षाओं को नया बनाना चाहता हूं, जो एफ # में बहुत आसान है लेकिन मुझे लगता है कि यह एफओपी में अब तक जो भी समझ में आता है उससे गलत है। राज्य की सामग्री भी अजीब है, इसलिए Encapsulation का उपयोग करने के लिए प्रयोग किया जाता है। – WeNeedAnswers

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