
अनुवादक से: यह पोस्ट
मूल लेख का एक संक्षिप्त संक्षिप्त अनुवाद है, जो गैलिश स्लेसिंगर, एक अनुभवी फ्रंटेंड डेवलपर है। वह वास्तव में प्रोग्रामिंग पसंद करता है, और उसका शौक दोनों काम के उद्देश्यों और अपने स्वयं के पालतू-परियोजनाओं के लिए विभिन्न (और कभी-कभी बहुत अप्रत्याशित) प्रोग्रामिंग भाषाओं का अध्ययन कर रहा है। गैल इस सामग्री में उनमें से कई के फायदे और नुकसान के बारे में भी बात करता है।
इस तथ्य के बावजूद कि मैं अक्सर जावा, जेएस और रूबी के साथ काम करता हूं, मुझे नई भाषाओं और रूपरेखाओं को सीखना पसंद है। यह मुझे लगता है कि निरंतर प्रशिक्षण दिलचस्प नए विचारों को बनाने में मदद करता है जो किसी विशेष समस्या को हल करने के लिए, यदि आवश्यक हो तो उपयोग किया जा सकता है। इसके अलावा, कार्यात्मक प्रोग्रामिंग ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग के बारे में अधिक समझने में मदद करता है, और रेल के साथ निरंतर काम आपको परीक्षण की कई बारीकियों को सीखने की अनुमति देता है (बेशक, यदि आप अभ्यास करते हैं)। समस्या यह है कि जल्दी या बाद में, अन्य भाषाओं को सीखने की प्रक्रिया में, आप आश्चर्य करना शुरू करते हैं: क्या उनके बीच एक आदर्श है, जहां आपके द्वारा दूसरों में पाए जाने वाले सभी उपयोगी कार्य एकत्र किए जाएंगे?
स्किलबॉक्स अनुशंसा करता है: व्यावहारिक पाठ्यक्रम "मोबाइल डेवलपर प्रो" ।
हम आपको याद दिलाते हैं: "हैबर" के सभी पाठकों के लिए - "हैबर" प्रोमो कोड का उपयोग करके किसी भी स्किलबॉक्स कोर्स के लिए पंजीकरण करते समय 10,000 रूबल की छूट।
मैं जोड़ना चाहता हूं: प्रोग्रामिंग भाषाओं में मेरी प्राथमिकताएं आपकी मेल नहीं खा सकती हैं। इस लेख में मैं पिछले कुछ महीनों में अपने अनुभव का वर्णन करता हूं जो प्रमुख परियोजनाओं पर काम कर रहे हैं और जिन्हें मैं अपने खाली समय में बनाता हूं।
गहरे लाल रंग का
मैंने रूबी को केवल इसलिए सीखना शुरू किया क्योंकि उसका समुदाय लगातार इस विचार को दोहराता है कि यहां सब कुछ जावा से अलग है, जिसके साथ मैंने पहले काम किया था। मुझे वास्तव में रूबी पसंद है। यह बड़ी संख्या में तैयार पुस्तकालयों के साथ एक बड़ी भाषा है (हम उन्हें रत्न, जवाहरात कहते हैं), जो आपको जल्दी से विकसित करने और एक नए एप्लिकेशन का उपयोग करने की अनुमति देता है। रेल - क्या कहा जा सकता है "बैठ गया और चला गया।"
रूबी एक ऑब्जेक्ट-ओरिएंटेड भाषा है, जिससे सभी कोड लगभग उसी शैली में होंगे, कोई फर्क नहीं पड़ता कि आप किस लाइब्रेरी को चुनने का निर्णय लेते हैं। यहाँ समुदाय बहुत शक्तिशाली है: प्रोग्रामर हर बार एक नया बनाने के बजाय मौजूदा पुस्तकालयों को संशोधित करना पसंद करते हैं (ActiveRecord और Sequel एक उदाहरण के रूप में)। यह सुविधा आपको अपने जीवन को आसान बनाने की अनुमति देती है।
सच है, जब प्रदर्शन की बात आती है तो रूबी काफी तेज नहीं होती है। घटक आमतौर पर "भारी" होते हैं और लोड होने में लंबा समय लेते हैं। रेल के साथ अभ्यास करना मजेदार है, लेकिन एप्लिकेशन चलाने का अर्थ है समय और पैसा खर्च करना। हरोकू और एडब्ल्यूएस ईसीएस इसके उदाहरण हैं: आपको रैम, फाइल स्पेस, ट्रैफिक और अपटाइम के लिए भुगतान करना होगा। इसके अलावा, यह ध्यान में रखा जाना चाहिए कि औसत-आकार के अनुप्रयोग के लिए अनुमानित प्रारंभ समय 5-10 सेकंड है।
जावास्क्रिप्ट
मुझे जावास्क्रिप्ट बहुत पसंद है। मेरे ज्यादातर फ्रंटएंड प्रोजेक्ट वेब के लिए हैं, क्योंकि अब किसी के पास भी ब्राउजर की पहुंच है। यह अपेक्षाकृत आसान सीखने वाली भाषा है, यह बहुत सामान्य है, प्रवेश सीमा कम है। डेवलपर उपकरण बहुत अच्छे हैं, जावास्क्रिप्ट का उपयोग करके प्रोटोटाइप को लागू करना केवल एक सपना है। समुदाय में कई सदस्य भी होते हैं जो घटकों को बेहतर बनाने के लिए बहुत ध्यान देते हैं।
JS में बहुत सारी खामियां हैं। मुख्य लोगों में से एक समुदाय की भाषा के विकास के विभिन्न क्षेत्रों में अपनी प्राथमिकताओं के अनुसार विभाजन है। तो, मुख्य भेदभाव प्रकार सिस्टम (फ्लो बनाम टीएस) के आसपास है, और पुस्तकालयों का उपयोग करने के लिए दृष्टिकोण और बाकी सब कुछ अलग है। नतीजतन, कई विकास, मॉड्यूल बस "कच्चे" हैं।
तीव्र
पिछली दो भाषाओं के साथ काम करने के बाद, मैंने स्विफ्ट सीखना शुरू किया। मुझे अपने "डेवलपर के खेल" में आगे बढ़ने के लिए भाषा की आवश्यकता थी। प्रारंभ में, मैं स्तर शून्य पर था, क्योंकि मैं केवल जानता था कि नेटिव रिएक्ट के साथ एप्लिकेशन कैसे बनाएं। सिद्धांत रूप में, यह पर्याप्त था, लेकिन मैं और अधिक सीखना चाहता था।
स्विफ्ट एक सांख्यिकीय रूप से टाइप की गई भाषा है। प्रारंभ में, इसे ऐप्पल इकोसिस्टम में एप्लिकेशन विकसित करने के लिए बनाया गया था, लेकिन फिर यह ओपन-सोर्स बन गया, इसलिए वे अब लिनक्स के लिए एप्लिकेशन बनाने के लिए इसके साथ काम करते हैं। भाषा का लाभ यह है कि इसमें लिखे गए एप्लिकेशन जल्दी से लोड होते हैं, और संकलन प्रक्रिया स्पष्ट होती है, इसलिए रनटाइम त्रुटियों की संख्या धीरे-धीरे कम हो जाती है।
भाषा का वाक्य विन्यास दिलचस्प है और सीखने में बहुत मुश्किल नहीं है, कुछ फ़ंक्शन त्रुटियों और समस्याओं से बचने में मदद करते हैं। उदाहरण के लिए, यदि कोड का एक भाग "एक स्ट्रिंग" की उम्मीद करता है, तो पूर्णांक के गलत तरीके से प्रसारण की अनुमति नहीं है। यह आपको विकास प्रक्रिया के शुरुआती चरण में त्रुटियों को पकड़ने और सही करने की अनुमति देता है।
स्विफ्ट मेरे हीरो क्यों नहीं है? तथ्य यह है कि Xcode के अलावा संपादकों में स्विफ्ट में लिखना इतना आसान नहीं है। मैं आमतौर पर विम का उपयोग करता हूं, अन्य संपादक धीमे हैं। किसी तरह मैंने VSCode और Atom की कोशिश की, लेकिन मैंने वास्तव में उन्हें पसंद नहीं किया। शायद अंत में मैं स्विफ्ट सीएलआई पर ध्यान केंद्रित करूंगा, जो आपको संपादक के लिए प्लगइन्स बनाने की अनुमति देगा, लेकिन अब नहीं। स्विफ्ट में भी स्थैतिक संकलन नहीं है, इसलिए सीएलआई का उपयोग करने के लिए आपको स्विफ्ट के साथ अपने पर्यावरण को कॉन्फ़िगर करने की आवश्यकता होगी। मैक अनुप्रयोगों के लिए यह सामान्य है, लेकिन सर्वर लिनक्स हैं।
ReasonML
फेसबुक द्वारा विकसित Ocaml के इस नए वाक्यविन्यास और टूलकिट से मैं बहुत खुश हूं। ट्यूलिट काफी परिपक्व है, यह बहुत सारे कार्य देता है। अच्छे लोग OPAM, पैकेज मैनेजर, साथ ही मर्लिन और OCaml / Reason हैं। यह सब विम के साथ अच्छा काम करता है। और यहां तक कि अगर आप स्वत: पूर्ण इंजन और अन्य कार्यों का उल्लेख नहीं करते हैं। यहां डेवलपर टूल बहुत अच्छे हैं।
जेएस को बकलस्क्रिप्ट का उपयोग करके संकलित किया जा सकता है, जो कारण / OCaml कोड से निष्पादन योग्य जेएस उत्पन्न करता है। यह आश्चर्यजनक है, क्योंकि इस मामले में हमें उत्कृष्ट जेएस इंटरैक्शन के साथ पूरी तरह से टाइप किए गए सिस्टम मिलते हैं, और हम आवश्यक पुस्तकालयों का भी उपयोग कर सकते हैं।
केवल एक चीज जो मुझे पसंद नहीं है वह यह है कि मुझे निर्भरता के उपयोग के लिए कई प्रकार की परिभाषाएँ बनानी होंगी। लेकिन यह कुछ भी नहीं है, क्योंकि हमें पूरे मॉड्यूल को इकट्ठा करने की आवश्यकता नहीं है, लेकिन केवल विशिष्ट फ़ंक्शन / वर्ग / विधि का इनपुट / आउटपुट जो हम उपयोग करते हैं। यह सब बहुत जल्दी और समस्याओं के बिना काम करता है।
एक मूल कारण आवेदन बनाने में कठिनाई कुछ पुस्तकालयों का उपयोग करने के लिए निकला। यह मुख्य रूप से OCaml है, लेकिन चूंकि OCaml और कारण विनिमेय हैं, इसलिए मैंने कारण कोड के साथ काम करने के लिए Chrome एक्सटेंशन का उपयोग किया। समस्या यह है कि एक OCaml कोड है, जिसे संभवतः क्रोम एक्सटेंशन में PPX की कमी के कारण तर्क में परिवर्तित नहीं किया जा सकता है। PPX, जैसा कि मैं इसे समझता हूं, एक सिंटैक्स एक्सटेंशन एक मैक्रो है जो कोड को परिवर्तित करता है। यह एक कोलाहल प्लगइन का एक सा है।
वैसे, Reason / Ocaml मल्टी-कोर का समर्थन नहीं करता है, इसके लिए Lwt है। लेकिन इस पुस्तकालय के लिए अभी भी कोई समझदार मैनुअल नहीं हैं!
OCaml / Reason के लिए प्रवेश सीमा बहुत अधिक है, जो थोड़ा निराशाजनक है। समुदाय बहुत विकसित नहीं है, और कुछ लोग अजीब चीजों को अच्छी तरह से समझाते हैं। शायद यह समय के साथ बदल जाएगा।
Golang
बस एक शानदार भाषा है। यह सीखना आसान है, कोड समस्याओं के बिना संकलन और चलाता है। मल्टी-कोर सिस्टम और कई अन्य उपयोगी सुविधाओं के लिए समर्थन है। समुदाय काफी विकसित है, जिसमें बड़ी संख्या में विशेषज्ञ हैं।
तथ्य यह है कि गो में कई शक्तिशाली मॉड्यूल और एप्लिकेशन लिखे गए हैं, जैसे डोकर, कुबेरनेट्स, कॉकरोचडीबी, इसका मतलब है कि आप अपने आवेदन के अंदर रास्पबेरी पाई के लिए एक बुनियादी ढांचा बाइनरी बना सकते हैं।
जेनरिक की कमी (जो अगले संस्करणों में से एक में जोड़ी जा सकती है) अजीब है क्योंकि ग्राफ़, पेड़ और एल्गोरिदम का उपयोग करते समय "संरचनात्मक" कठिनाइयाँ होती हैं। मैं कंपाइलर को मेरे लिए सब कुछ करना पसंद करूंगा।
इसके अलावा, मेरे लिए समस्या बहुत स्पष्ट मॉड्यूलर वीजीओ प्रणाली नहीं है। समय के साथ, हम इसके बारे में अधिक जानेंगे, क्योंकि समुदाय धीरे-धीरे विकसित हो रहा है, लेकिन अभी तक बहुत कम जानकारी है। भाषा अपने आप में काफी जटिल है। यह इसका उपयोग नहीं करने का एक कारण नहीं है, लेकिन अब मैं गोलंग के साथ पूर्णकालिक काम से बच रहा हूं। वह है, इसलिए बोलना, उबाऊ है। शायद समय के दौरान मैं अपने विचारों पर पुनर्विचार करूंगा।
क्रिस्टल
हमने रूबी के साथ शुरुआत की, इसलिए मैं क्रिस्टल को खत्म करने का सुझाव देता हूं।
यह नई भाषाओं में से एक है, अभी भी 1.0 संस्करण के लिए नहीं मिल रहा है, जो लगभग रूबी की तरह दिखता है, लेकिन यह सांख्यिकीय रूप से टाइप और तेज़ है! यह डेवलपर्स को वैकल्पिक प्रकार, सीएसपी और बहुत अधिक सहित कई प्रकार के कार्य प्रदान करता है। लकी और एम्बर जैसे नए क्रिस्टल वेब फ्रेमवर्क के एक जोड़े हैं। केमल है, जो सिनात्रा की तरह है, लेकिन क्रिस्टल के लिए, इसके अलावा ORM हैं।
लेकिन, चूंकि भाषा अभी भी युवा है, इसलिए यह सक्रिय उपयोग के लिए बिल्कुल तैयार नहीं है। उदाहरण के लिए, मैं क्रिस्टल को सभी कोर का उपयोग करना चाहूंगा, जैसे गो। होवर के दौरान स्वत: पूर्ण और प्रकारों के संकेत वाला एक संपादक भी शानदार नहीं होगा। मैं इस विचार से थोड़ा चिंतित हूं कि क्रिस्टल संस्करण 1.0 में नहीं मिल सकता है। मुझे पूरी उम्मीद है कि वह सफल होंगे।
आपकी पसंदीदा प्रोग्रामिंग भाषा क्या है और क्यों?
स्किलबॉक्स अनुशंसा करता है: