कोडिंग की कार्यात्मक शैली के लिए अपनी टीम का परिचय कैसे करें?


10

मेरे पास एक ऐसी स्थिति है जहां मेरे समूह के अधिकांश लोग ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग पृष्ठभूमि से आते हैं जिनमें कार्यात्मक प्रोग्रामिंग की कोई समझ नहीं है। क्लोजर जैसी मूल बातें भी नहीं।

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

मैंने पहले ही कार्यात्मक और कोडिंग प्रतिमानों के बारे में कुछ प्रस्तुतियाँ दी हैं। दुर्भाग्य से हम एक उचित कार्यात्मक प्रोग्रामिंग भाषा का उपयोग नहीं करते हैं, जैसे हास्केल (मूल रूप से विरासत कोड सी, सी ++, जावा में है) इसलिए हमें जो कुछ भी करना है, वह इन के साथ करना होगा।


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

2
@MasonWheeler: मुझे पता है कि हमें कार्यात्मक की आवश्यकता क्यों है। महीने की ठंडी भाषा में नहीं। उसके लिए बहुत पुराना है।
Fanatic23

1
चलो मान लेते हैं कि कोई हास्केल जानता है, तो क्या आप इसे अपने सिस्टम में काम कर सकते हैं?
जेएफओ

4
ऐसा लगता है कि कार्यात्मक प्रोग्रामिंग एक समस्या को हल कर रही है जो आपकी टीम को नहीं मिली है। वे जानते हैं कि सी, सी ++ जावा को कैसे कोडित किया जाए जो कार्यात्मक प्रोग्रामिंग के लिए प्राकृतिक उम्मीदवार नहीं हैं (इन भाषाओं में क्लोजर लागू करना सरल है)।
जेम्स एंडरसन

जवाबों:


8

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

आप पेट्रिसक द्वारा एक वास्तविक विश्व कार्यात्मक प्रोग्रामिंग भी देख सकते हैं जो मेरी राय में कार्यात्मक रूप से सोचने का एक शानदार तरीका है।


यह प्रस्तुति शानदार है .. खासकर जब से यह एक पिशाच द्वारा दी गई है !! जबरदस्त हंसी!! j / k .. दोस्तों को करिश्मा मिला ..
hanzolo

7

क्या आपके सहकर्मी काम के बाहर कोड करते हैं?

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

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

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

याद रखें, ऐसी कार्यात्मक भाषाएँ हैं जो आपके स्टैक (JVM पर चलने वाले स्केला / क्लोजर) पर काम करेंगी। हास्केल की तरह यह "विशुद्ध रूप से कार्यात्मक" नहीं है, लेकिन यह एक लंबी यात्रा पर एक अच्छी शुरुआत है।

यदि आपके पास काम पर रखने का कोई नियंत्रण है, तो ऐसे लोगों को काम पर रखें जिनके पास कुछ कार्यात्मक अनुभव है (या कम से कम कार्यात्मक प्रोग्रामिंग में रुचि रखते हैं)।

और अंत में ... आप गलत कंपनी में हो सकते हैं यदि आप कार्यात्मक कोड लिखने के बारे में भावुक हैं। आप जिस तरह से आपकी पूरी कंपनी सॉफ्टवेयर लिखते हैं, उसे बदलने के लिए नहीं जा रहे हैं - खासकर अगर वे पैसे कमा रहे हैं और यहां तक ​​कि विशेष रूप से किसी भी तरह से कम समय में नहीं।

यह सब देवों को बेचने के बारे में है ... प्रबंधन पूरी तरह से एक अन्य जानवर है।


2

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


2

एक कार्यात्मक प्रोग्रामर किराए पर लें (या मालिक को प्राप्त करें)

आखिरकार, यह आपकी टीम के बाकी हिस्सों में ओ.टी. रगड़ रहा है।

इसके अलावा, जैसा कि पहले कहा गया था, उन्हें अपने ऑफ-टाइम के दौरान एक कार्यात्मक भाषा में कोड लिखने के लिए प्रोत्साहित करना या तो चोट नहीं पहुंचाएगा।


2

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

यदि आप कहते हैं कि जटिलता में अंतर उतना ही व्यापक है, तो यह अपने लिए बोलना चाहिए।


2

स्काला का उल्लेख करने के लिए +1: यह उस उत्तर पर एक टिप्पणी के रूप में शुरू हुआ, लेकिन बहुत बड़ा है ...

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

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

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


1
@timeday बहुत अच्छी तरह से कहा। मैं एक जावा / OO लोग हूँ। मैंने एक साल पहले स्काला को उठाया। और एफपी सीखना मेरे लिए काफी चुनौतीपूर्ण रहा। मैं एक समय में एक सा कर रहा हूं और इसके साथ बैठा हूं। मैं इसे एक बार में पाने की कोशिश नहीं कर रहा हूं।
chaotic3quilibrium

1

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

असल में, स्काला जावा / ओओ को "अर्धविराम के बिना" करने की अनुमति देता है। और फिर एक पूरे एफपी जाने के बिना एफपी के एक बिट की कोशिश कर सकते हैं। उदाहरण के लिए, एफपी करने के लिए खुद को प्रशिक्षित करने में, मैं आम तौर पर क्लास पद्धति के स्तर पर संदर्भात्मक पारदर्शिता पर ध्यान केंद्रित करूंगा, लेकिन मेरे तरीकों में हालांकि कई var-s, mutability और imperative-ness हैं जो मेरे लिए पहला पास करने के लिए आवश्यक हैं एक कार्यान्वयन। फिर, मैं शुद्ध एफपी की ओर बढ़ने के लिए धीरे-धीरे प्रत्येक विधि पर ध्यान केंद्रित करता हूं। और मैं अपने मानसिक / सोच परिवर्तन के साथ सहायता प्राप्त करने के लिए स्टैकऑवरफ्लो, कोडरव्यू, की बहन साइट का भी उपयोग करता हूं। यहाँ एक हालिया पोस्ट का उदाहरण दिया गया है , जो मैंने यह किया है।

वैसे भी, आपकी एफपी यात्रा पर शुभकामनाएं। :)

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