मेरी सलाह:
bash
(और इसके ilk) सामान्य प्रयोजन प्रोग्रामिंग भाषा नहीं हैं। हालांकि bash
सामान्य रूप से प्रोग्रामिंग सीखने का सबसे अच्छा तरीका नहीं है, लेकिन इसमें कुछ परिष्कृत स्क्रिप्टिंग को पूरा करना संभव है । यह सिस्टम प्रशासन के कार्यों को पूरा करने का सबसे स्वाभाविक तरीका है जो मुख्य रूप से अन्य कार्यक्रमों को निष्पादित करने के लिए घूमता है, उनकी डेटा फ़ाइलों और निर्देशिकाओं को संभालता है और इनपुट इनपुट और आउटपुट को उनसे और उनमें से। यदि bash
एक हथौड़ा है, तो इसे उन समस्याओं के लिए आरक्षित करें जो वास्तव में नाखूनों की तरह दिखते हैं। bash
यदि आप कुछ बहुत छोटे उपसमुच्चय सीखते हैं sed
और awk
(क्योंकि स्ट्रिंग हेरफेर bash
काफी हद तक इन "छोटी" भाषाओं में समान संचालन के वाक्यविन्यास से प्रेरित है) तो कुछ भी गैर-तुच्छ करना सीखना बहुत आसान होगा ।
- लिनक्स के तहत सामान्य प्रयोजन प्रोग्रामिंग के लिए आप कई तर्कहीन तर्क सुनेंगे। दो सर्वश्रेष्ठ दावेदार पर्ल और पायथन हैं । ये दोनों बहुत ही उच्च स्तरीय स्क्रिप्टिंग भाषाएं हैं जो सामान्य उद्देश्य हैं, जो आपके सिस्टम पर किसी भी उपयोगकर्ता अंतरिक्ष प्रक्रिया के लिए लगभग किसी भी ऑपरेशन को करने के लिए पर्याप्त निम्न स्तर की कार्यक्षमता को उजागर करती हैं, और उपलब्ध लिखित मॉड्यूल और पुस्तकालयों के विशाल संग्रह के साथ।
मेरा सुझाव है कि आप सी पर एक परिचयात्मक पाठ पढ़ सकते हैं और कुछ समय से चल रहा है खर्च strace
और ltrace
की तरह कुछ सरल उपयोगिता आदेशों पर आदेशों ls
और mkdir
और /bin/echo
आदि (वास्तव में इन दिनों मेरा सुझाव था ltrace -S
के एवज में strace
दोनों आदेशों से और में उत्पादन में लेकिन हमलों ltrace
आउटपुट के रूप में द्वारा संवर्धित -S
विकल्प अत्यंत शैक्षिक हो जाएगा)।
C प्राथमिक प्रोग्रामिंग भाषा है जिसमें लिनक्स कर्नेल और GNU libc लिखे गए हैं। (छोटे हिस्से विधानसभा में हैं)। एक लिनक्स (या अन्य यूनिक्स-जैसी) प्रणाली के लगभग सभी कार्यक्रम सी लाइब्रेरी (libc) के खिलाफ जुड़े हुए हैं। प्राथमिक पर्ल और पायथन दुभाषियों (और अधिकांश अन्य स्क्रिप्टिंग भाषाएं) भी सी में लिखे गए हैं। ये प्रोग्राम (कर्नेल, कॉमन सिस्टम लाइब्रेरी और विभिन्न स्क्रिप्टिंग भाषा दुभाषियों) सभी सी प्रोग्रामर द्वारा लिखे गए हैं उनके डिजाइन और विशेषताएं दृढ़ता से प्रभावित हैं। उनके अंतर्निहित कार्यान्वयन द्वारा। इस प्रकार इनमें से किसी की भी गहरी समझ अंततः सी समझ में आती है। आपको इस स्तर पर प्रोग्रामिंग को समझने के लिए C ++ और जावा के बारे में कुछ भी जानने की आवश्यकता नहीं है। (वे प्रत्येक आपके कैरियर पैच के आधार पर अपने आप में दिलचस्प और आवश्यक हो सकते हैं,)
इसलिए, यदि आप अब तक मेरे परिसर से सहमत हैं, तो हमने इसे पर्ल और पाइथन के बीच चयन के लिए उबाल दिया है।
यहीं से असली लौ के युद्ध शुरू होते हैं।
मेरी सलाह है कि पहले पाइथन (2.x) पर ध्यान दें। पायथन में अपेक्षाकृत सरल और सुसंगत वाक्यविन्यास है। आप कुछ ही घंटों में पायथन सिंटैक्स की मूल बातें जान सकते हैं और यह सिंटैक्स का सबसे बड़ा हिस्सा है जिसका आप कभी भी सामना करेंगे। केवल कुछ विशेषताएं हैं (सूची की समझ, जनरेटर के भाव, सज्जाकार) जो मूल सिंटैक्स के लिए झुर्रियाँ हैं। तो अजगर सीखने में आपका अधिकांश प्रयास व्यापक मानक पुस्तकालयों को सीखने और उन्हें उपयोग करने के लिए "सबसे अच्छा" तरीका खोजने के लिए समर्पित होगा (और यह पता लगाना कि अपवादों के विशिष्ट सेट हैं जो आपके कार्यक्रमों को मजबूत बनाने के लिए निपटने के लायक हैं) और, सबसे महत्वपूर्ण, अंतर्निहित अवधारणाओं को सीखने में।
मुझे लगता है कि अजगर के व्यापक पुस्तकालयों और अपेक्षाकृत सरल वाक्यविन्यास के दो अलग-अलग नुकसान हैं।
सबसे पहले, जैसा कि आप सीखते हैं कि पायथन में बहुत उच्च स्तर पर कैसे बात करते हैं आप थकाऊ होने के लिए निचले स्तर पर काम करने के बारे में सोच सकते हैं। जहां मैं काम करता हूं, पर्ल मानक है। मैं पायथन में अपने काम का प्रोटोटाइप करता हूं, जहां मुझे पता है कि मैं इसे और अधिक तेज़ी से और मज़बूती से काम कर सकता हूं; तब मैंने अपने सहयोगियों के लिए पर्ल से गुजरने और इसे पोर्ट करने का साहस किया। (मैं कभी पायल के वर्षों में यथोचित रूप से अच्छा था इससे पहले कि मैंने कभी पायथन का उपयोग किया था --- इसलिए यह साधारण परिचित का मामला नहीं है)।
दूसरा नुकसान यह है कि पायथन में दिए गए कार्य को पूरा करने के लिए कभी-कभी उच्चतम स्तर का रास्ता खोजना मुश्किल होता है। उदाहरण के लिए एक वेब पेज लाने के लिए आप शुरू में इसे निम्न स्तर के सॉकेट के साथ करने की कोशिश कर सकते हैं ... जो काम करेगा। हालाँकि, आप उस कोड की काफी नकल कर रहे होंगे जिसे आप पहले से ही urllib
और / या urllib2
मॉड्यूल में शामिल कर सकते हैं । मानक तथ्य यह है कि मानक पुस्तकालयों, 2.7.1 के रूप में, इन दोनों में मेरी बात शामिल है। जहां संभव हो पायथन के अनुरक्षकों ने पुराने मॉड्यूल और एपीआई को पारदर्शी रूप से बढ़ाया है; हालांकि ऐसे दर्जनों मामले हैं जहां पायथन दो या तीन मॉड्यूल को बरकरार रखता है जहां किसी कारण से पारदर्शी विस्तार संभव नहीं था। (एक और उदाहरण के लिए आप आदेश पंक्ति विकल्प पार्स करने के लिए विकल्पों को देखने सकता है: argparse
,optparse
, औरgetopt
। अपने कार्यक्रमों को लिखने का थोड़ा नुकसान है getopt
(इनमें से सबसे पुराना)। कुछ विकल्पों के साथ बहुत ही सरल उपयोगिताओं के लिए और एक कठोर कॉलिंग कन्वेंशन (उदाहरण के लिए केवल लोगों के एक छोटे समूह द्वारा उपयोग किया जाता है), फिर sys.argv
अपने आप पर चलने के साथ स्वाभाविक रूप से कुछ भी गलत नहीं है । हालाँकि, यह आमतौर पर डॉक्स को ध्यान से पढ़ने और पुराने या निचले स्तर के मॉड्यूल के बॉटम पर लिंक का अनुसरण करने के लायक है, जो उपलब्ध नई या उच्चतर सुविधाओं का वर्णन करता है।
मेरी सलाह मेरी राय पर आधारित है कि आप गहरी अवधारणाओं पर ध्यान केंद्रित करना चाहते हैं और अपने समय और प्रयास को सिंटैक्टिक और भाषा विशेष के मुद्दों पर ज्यादा खर्च नहीं करना है। जब एक उपप्रकार, एक धागा, या बहु-प्रसंस्करण सुविधाओं का उपयोग करना समझना, जिसे पायथन के साथ शामिल किया गया है, भाषा के साथ और भाषा की परवाह किए बिना प्रोग्रामिंग प्रवीणता के साथ सब कुछ करने के लिए अपेक्षाकृत कम है। (उस बिंदु पर जहाँ आप थ्रेडिंग और मल्टीप्रोसेसिंग की तुलना में ट्विस्टेड ईवेंट संचालित मॉडल के बारे में तर्क को समझ सकते हैं फिर आपने शायद पायथन में महारत हासिल कर ली होगी और किसी भी भाषा में कार्यक्रम के लिए तैयार होंगे)।
पर्ल के लिए काउंटर तर्क सरल और व्यावहारिक है। वहाँ बहुत कुछ और काम हैं जो विशेष रूप से, पर्ल के साथ कौशल के लिए कहेंगे। पर्ल एक शक्तिशाली भाषा है और इसमें बहुत व्यापक पुस्तकालय हैं। (सबसे लिनक्स सिस्टम के साथ वितरित पर्ल का कोर मानक पायथन लाइट्स की तुलना में कार्यक्षमता की एक छोटी श्रृंखला को शामिल करता है। यह माना जाता है कि आपने अपने वितरण से या सीपीएएन के माध्यम से एक अतिरिक्त संख्या में महत्वपूर्ण पैकेज स्थापित किया है - व्यापक पर्ल आर्काइव नेटवर्क)। (इसके विपरीत कम पायथन मॉड्यूल और पैकेज हैं जिन्हें मुझे अलग से लाना है ... वे PyPI --- पायथन पैकेज इंडेक्स से उपलब्ध हैं)।
इसलिए, यदि आप पर्ल को सीखते हैं, तो आपके पास अल्पावधि में, विशेषकर sysadmin नौकरियों को खोजने के लिए एक पैर होगा। हालाँकि, पर्ल का सिंटैक्स ... अच्छा है ... कुछ शब्दों में इसके अपने उत्साही हैं ... "पैथोलॉजिकल रूप से उदार!" पर्ल बेहद चर्चित हो सकता है और इसका कोड काफी विराम चिह्नों से भरा होता है। जो लोग इसे प्यार करते हैं, वे अंतहीन रूप से बहस करेंगे कि यह "आसान" है और सही समझ में आता है --- और उन मंचों पर ऐसा करने के अंतहीन अवसर होंगे जो बिल्कुल भ्रम के साथ भरे हुए हैं कि कोड के एक दिए गए स्निपेट की व्याख्या कैसे की गई थी। सिंटैक्स और दस्तावेज़ में उपयोग की जाने वाली भाषा और सार्वजनिक मंचों पर इसका समर्थन करने वालों के लिए उस बिंदु पर बारी-बारी से चर्चा की जाती है, जहाँ आप उन्हें सीखने के लिए पर्याप्त प्रयास कर सकते हैं।
अब, कृपया महसूस करें कि यह पूर्ववर्ती टिप्पणी व्यक्तिपरक और पक्षपाती है। यह संभव है कि आप पर्ल की कोशिश करेंगे और पाएंगे कि यह सहज और सुखद होने के लिए वाक्यविन्यास है। यदि हां, तो आपको अधिक शक्ति। हालाँकि, मुझे व्यक्तिगत रूप से पता चलता है कि पर्ल की अज्ञातताओं के बारे में मेरी समझ बहुत तेज़ी से घटती है। जिन बुनियादी बातों को मैं बरकरार रखता हूं, लेकिन मुझे यह संघर्ष लगता है जब भी मुझे कोड की कुछ पंक्तियों से अधिक समय के लिए इसे वापस स्विच करना पड़ता है।
जावा, लिस्प और स्कीम, टीसीएल, स्काला और भी बहुत सी अन्य भाषाएं हैं। हालांकि, मैं सुझाव दूंगा कि उपयोगिता और सरलता के बीच सबसे अच्छा संतुलन प्रदान करता है।