2010-09-02 14 views
13

बनने का मार्ग मैं उन लोगों से सुनना चाहता हूं जिन्होंने एफ # (और सामान्य रूप से कार्यात्मक प्रोग्रामिंग में भी उच्च स्तर की प्रवीणता हासिल की है) अब से मेरे कदम क्या हो सकते हैं बेहतर/पेशेवर एफ # प्रोग्रामर?बेहतर एफ # प्रोग्रामर

मुझे पहले से ही एफ # वाक्यविन्यास के बारे में पता है और सी ++ के साथ कुछ वर्षों का अनुभव है। मेरा लक्ष्य एक इंजीनियर और गणितज्ञ के रूप में बेहतर वैज्ञानिक पुस्तकालयों (रैखिक बीजगणित पैकेज, आंशिक अंतर solvers, आदि) डिजाइन करने के लिए है।

उत्तर

26

क्या को अब से मेरे चरणों का होना चाहिए एक बेहतर/पेशेवर एफ # प्रोग्रामर बन?

रोजमर्रा की कोडिंग :)

मैं सितम्बर '07 में एफ # ट्रेन पर कूद गया, इससे पहले कि मैं सी # अनुभव बहुत सारी था रखें। यह के बारे में 3 महीने लग गए या तो मेरे लिए एक छोटे से मजेदार वाक्य रचना के साथ के रूप में सी # कोड लिखने रोकने के लिए और सही कोडिंग शैली पर उठा शुरू करने के लिए :)

युक्तियाँ और चीजें हैं जो मुझे मदद मिली:

  • मैं पाया कि एफ # गैर-मूर्खतापूर्ण कोड लिखना वाकई मुश्किल है, वास्तव में अच्छा, साफ कोड लिखना आसान है। यदि आप खुद को कंपाइलर से लड़ते हैं, तो 10 में से 9 बार आप कुछ गलत कर रहे हैं। ड्राइंग बोर्ड पर वापस जाएं और पुनः प्रयास करें।

  • अचल स्थिति की पूरी अवधारणा पहली बार में एक रहस्य था, लेकिन Okasaki के पूरी तरह कार्यात्मक डेटा सरंचनाएं से डेटा संरचनाओं के सभी को लागू करने में बेहद मददगार था।

  • काम पर कुछ धीमी दिनों के दौरान, '08 और '0 9 के बीच, मैंने a wikibook लिखा था।मैंने इसे थोड़ी देर में नहीं देखा है, लेकिन मुझे यकीन है कि यह वास्तव में बुरा है --- लेकिन, दूसरों को भाषा समझाए जाने का अनुभव मेरे जैसे किसी के लिए एक अच्छा जंपस्टार्ट था जो सामान्य रूप से शुरू करने के लिए पर्याप्त प्रेरणा नहीं रखता था एफ # :)

  • मानचित्र, मोड़ और फ़िल्टर आपके मित्र हैं। रिकर्सन के साथ लूप को लागू करने के बजाय इन कार्यों में एल्गोरिदम व्यक्त करने का प्रयास करें।

  • गैर-पूंछ पुनरावर्ती कार्य पढ़ने और लिखने के लिए लगभग हमेशा आसान होते हैं। here देखें।

  • प्रोजेक्ट यूलर। बहुत से लोग इसकी अनुशंसा करते हैं, मुझे यह विशेष रूप से सहायक नहीं मिला। यदि आपका गणितज्ञ है, तो आप मुझसे उससे अधिक उपयोग कर सकते हैं।

  • < 3 यूनियन! उन्हें इस्तेमाल करें!

  • उत्परिवर्तनीय स्थिति पर वापस गिरना - बड़ा नंबर नहीं। कम से कम शुरुआती के लिए। सबसे खराब शुरुआती कोड mutables और ref variables से भरा है। अपरिवर्तनीयता पहले एक विदेशी अवधारणा है, इसलिए मैं थोड़ी देर के लिए पूरी तरह से स्टेटलेस प्रोग्राम लिखने की सलाह देता हूं।

फिर भी, सबसे अच्छी सलाह सिर्फ रोज़ाना कोडिंग रखती है।

आशा है कि मदद करता है!

- जूलियट

+0

+1 अच्छी पोस्ट। ProjectEuler पर समस्याओं को हल करते समय मैं व्यक्तिगत रूप से एफ # सीखता हूं। ProjectEuler पर ऐसी दोनों समस्याएं हैं जो कार्यात्मक रूप से सबसे आसान हल की जाती हैं और अन्य जो सबसे आसान हल किए जाते हैं। –

+0

हाय जूलियट, सुझावों के लिए धन्यवाद। शायद मुझे कुछ विकीबुक्स भी लिखना चाहिए, जो दूसरों को पढ़ाने के दौरान भाषा/संरचनाओं की मेरी समझ में सुधार कर सकते हैं। मैंने कुछ साल पहले कॉलेज में हास्केल के साथ काम किया है; तो मेरे पास पहले से ही रिकर्सन (फ़ंक्शंस और डेटा स्ट्रक्चर) और अपरिवर्तनीयता की अच्छी धारणा है। सी ++ के साथ मेरी समस्या स्पष्ट और साफ पुस्तकालयों को डिजाइन कर रही थी। मैंने आधुनिक प्रोग्रामिंग भाषाओं जैसे कि एफ # सीखकर खुद को आधुनिक बनाने का फैसला किया। – Allan

+0

मैं एफ # में भी एक नौसिखिया हूं, लेकिन मेरा जवाब जूलियट होगा: "हर रोज कोडिंग रखें :)" इसके अलावा, कुछ ऐसा करने के लिए सप्ताह में कम से कम एक बार प्रयास करें (अगर रोज़ाना नहीं) तो आप पहले से ही नहीं जानते कि कैसे करने के लिए।इस तरह मैंने मुझे पता चला कि हर दूसरी प्रोग्रामिंग भाषा सीखा। – TechNeilogy

6

किसी भी अन्य भाषा की तरह अब आप सिंटैक्स और मूल बातें जानते हैं, यह कोड और अधिक कोड लिखने का समय है।

  • सुनिश्चित करें कि आपके पास core concepts of functional programming down है।
  • एक बड़ी परियोजना पर काम करें ताकि आप बड़े से न केवल छोटे से परिचित हो जाएं।
  • कुछ अपरिवर्तनीय डेटा संरचनाएं लिखें।
  • विरासत का उपयोग किए बिना एक बड़ी परियोजना पर काम करें।
  • यदि आप design patterns से परिचित हैं तो उनमें से कुछ को पूरी तरह कार्यात्मक तरीके से कार्यान्वित करें और ध्यान दें कि उनमें से कुछ गायब हो जाते हैं।
  • एफ # कार्यात्मक और ओओपी शैलियों को मिश्रण करने के बारे में है। एक बार जब आप विरासत के बिना अमूर्तता की किराया राशि कर लेते हैं तो इसे वापस लाएं और शैलियों को एक साथ मिलाएं। एक संतुलन पाएं।

चूंकि एक इंजीनियर और गणितज्ञ के रूप में आपका लक्ष्य बेहतर वैज्ञानिक पुस्तकालयों को डिजाइन करना है, तो मैं वीडियो गेम शैली सिमुलेशन पर काम कर रहे एक सीखने के अभ्यास के रूप में सुझाव दे सकता हूं। कुछ जिसमें भौतिकी और गणित शामिल है लेकिन राज्य के नियंत्रण की भी आवश्यकता है।

+0

यह वही था जब मैंने सी ++ (~ 4 साल पहले) सीखना शुरू किया था। मैंने स्पेसशिप, गोलियां इत्यादि के साथ एक "क्षुद्रग्रह" खेल लागू किया। मुझे लगता है कि यह अब F # के साथ मदद कर सकता है। बहुत बहुत धन्यवाद। – Allan

4

तुम बहुत शायद के रूप में मैं एफ # के साथ प्रवीणता की एक उच्च स्तर प्राप्त नहीं किया है मुझे से सुनने के लिए नहीं करना चाहते, लेकिन मैं अपने आप अपने आप की तरह (बहुत वहाँ प्राप्त करने का लक्ष्य निर्धारित किया है)।

मैंने सोचा कि मैं सुझाव दे सकता हूं कि मेरा सबसे बड़ा शिक्षण उपकरण क्या है: जिद्दीपन।

मैंने अपना स्वयं एक बड़े-आश प्रोजेक्ट (एक गेम, जैसा कि ग्रेडबॉट सुझाव देता है) सेट किया है। मैंने प्रदर्शन लागतों के बावजूद जितना संभव हो उतना अपरिवर्तनीय डेटा का उपयोग करके कोड करने का निर्णय लिया।

फिर अगर मुझे अपरिवर्तनीय डेटा का उपयोग करने का कोई तरीका नहीं मिल सका तो मैं यहां आकर सहायता मांगूंगा।

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

अभी मेरे पास टाइल आधारित 2 डी दुनिया है और एक छोटा सा आदमी जो खजाने के लिए अपना रास्ता ढूंढ सकता है और ए * पथ-खोज का उपयोग करके फिर से घर वापस ले सकता है ... केवल एक चीज जिसे मैं बदलता हूं वह खिड़की का शीर्षक है जो इसे प्रदर्शित होता है में

मुझे केवल जुलाई के अंत में एफ # सीखने के बारे में गंभीरता मिली (मैं इससे पहले डब किया था) और इस परियोजना ने मुझे स्टैक ओवरव्लो में लोगों की मदद से मुझे एक बड़ी राशि सिखाई है।

+0

हाय jdoig, निश्चित रूप से मैं आपसे सुनना चाहता हूँ। हम एक ही नाव में हैं! आपके विकास में अच्छा भाग्यशाली और सलाह के लिए धन्यवाद। – Allan

+0

धन्यवाद एलन, मैं सिर्फ आपकी शुरुआती रेखा के आधार पर मूर्खतापूर्ण था: ¬)। यहां चारों ओर चिपकें, ये लोग उत्कृष्ट f # 'ers हैं। – jdoig

+3

क्या मैं अकेला हूं जो इसे पढ़ता है 'ये लोग उत्कृष्ट एफ हैं! # & Ers!'? :) –

5

मैं केवल सहमत हूं कि दूसरों को कार्यात्मक प्रोग्रामिंग की व्याख्या करने का प्रयास करना सीखने का एक शानदार तरीका है। मैंने अपनी एफ # पुस्तक की संरचना को सोचने के बारे में काफी समय बिताया और मुझे लगता है कि यह वास्तव में मुझे समझने में मदद करता है कि कार्यात्मक अवधारणाएं कैसे संबंधित हैं। यहां तक ​​कि आपकी कंपनी में या आपके दोस्तों के लिए एफ # पर भी एक बात करना एक समान प्रभाव होना चाहिए।

जब मैंने एफ # सीखना शुरू किया, तो मैंने F# WebTools प्रोजेक्ट पर काम करना शुरू कर दिया। मुझे लगता है कि यह काफी उपयोगी था, क्योंकि परियोजना के कई घटक कार्यात्मक प्रोग्रामिंग के लिए बिल्कुल सही थे, इसलिए मैंने कई कार्यात्मक चालें सीखीं (क्योंकि वे समस्या को हल करने का सबसे अच्छा तरीका थे)।परियोजना ने एफ # के स्रोत कोड पेड़ को संसाधित किया और इसे जावास्क्रिप्ट में अनुवादित किया, इसलिए मैं बहुत सारे पुनरावर्ती कार्यों और भेदभाव वाले संघों का उपयोग कर रहा था।

जिस क्षेत्र में आप काम कर रहे हैं वह मेरे से काफी अलग है, इसलिए मैं आपको कोई विशिष्ट सलाह नहीं दे सकता, लेकिन एक स्पष्ट कार्यात्मक तरीके से कार्यक्रम लिखना एक अच्छा विचार है - भले ही आपको लगता है कि यह अच्छा लगेगा अगर आपने इसे सी ++ शैली में लिखा है। जब आप इसे लिखते हैं, तो आपको शायद अपने कोड को सरल बनाने के लिए कुछ रास्ता मिल जाएगा।

तो, मुझे लगता है कि सुझावों मैं दे सकता है कर रहे हैं: दूसरों के लिए एफ # समझाने के लिए

  • प्रयास करें - यह आप अपने मन में विचारों को व्यवस्थित करने
  • अच्छा समस्याओं के साथ शुरू करने के लिए उठाओ मदद करता है - जैसे एल्गोरिदमिक समस्याएं, प्रसंस्करण वृक्ष संरचनाएं, आदि
  • जितना आप कर सकते हैं उतना एफ # लिखें और ऐसे समाधान से शुरू करने से डरो मत जो आपको सही नहीं लग रहा है - मैं अपने पहले कार्यक्रम को कई बार फिर से लिखता हूं!
+0

हाय टॉमस, बहुत बहुत धन्यवाद। ऐसा होता है कि मैं हमेशा अपने कोड से असंतुष्ट हूं। ऐसा लगता है कि मैं हमेशा "सही संरचना/डिजाइन" के साथ "स्वच्छतम कोड" को लागू करने की कोशिश कर रहा था। यह मुझे बहुत समय लगता है! शायद यह एफ # के साथ बदल जाएगा! – Allan

+0

@ एलन: मैं सी # से एफ # आया था और मुझे यह भावना पता है! मुझे लगता है कि एफ # अधिक अभिव्यक्तिपूर्ण है, इसलिए आपके पास "सही कोड" लिखने के लिए बेहतर विकल्प हैं। अभी भी कुछ सीमाएं हैं, लेकिन आप आमतौर पर कम बार में दौड़ते हैं। दूसरी तरफ, सभी सर्वोत्तम प्रथाओं को सीखना अधिक कठिन है, क्योंकि इसमें अधिक लचीलापन है (और इसके अलावा, उनके बारे में कम संसाधन हैं) –

3

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

एफ # ब्लॉग Planet F# पर सिंडिकेटेड शुरू करने के लिए एक अच्छी जगह है, लेकिन भाषा पर कई उत्कृष्ट किताबें और प्रस्तुतिकरण भी हैं।

+1

आप एफ # मानक पुस्तकालय से भी बहुत कुछ चुन सकते हैं। –

3

अपने प्रश्न का यह केवल उत्तर हिस्सा है, लेकिन जैसा कि आप एफ # में पुस्तकालयों बनाने के लिए इच्छुक के बारे में बात करते हैं, एफ # घटक डिज़ाइन दिशा निर्देशों सिर्फ बाहर आया था:

http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/fsharp-component-design-guidelines.pdf

3

आप वैज्ञानिक पुस्तकालयों में रुचि रखते हैं मैं आपको जॉन हैरोप के F# for Scientists पर एक नज़र डालने का सुझाव है।

इसके अलावा अपने गणितज्ञ पक्ष के लिए catter को मैं सुझाव है कि आप Doets-वान Eijck The Haskell Road to Logic, Maths and Programming को पढ़ने के लिए है, हालांकि हास्केल में लिखा है, आप निश्चित रूप से पाठ के सबसे पालन करने के लिए सक्षम हो जाएगा, और एफ # में नमूने फिर से लागू करने सका एक अच्छा अभ्यास हो।

+1

धन्यवाद! इसके अलावा, मेरी नवीनतम पुस्तक "तकनीकी कंप्यूटिंग के लिए विजुअल एफ # 2010" बहुत अधिक अद्यतित है! –