लिनक्स पर शुरू करने के लिए कौन सी भाषा है? [बन्द है]


19

मैं पर्ड्यू में 4 साल की सूचना सुरक्षा डिग्री शुरू करने वाला हूं। डिग्री किसी भी प्रोग्रामिंग पाठ्यक्रमों के लिए कॉल नहीं करती है। तो केवल एक बार ही मैं ले पाऊंगा कभी-कभार ऐच्छिक। इसलिए मेरा ज्यादातर सीखना अपने आप होगा। हाई स्कूल के अपने वरिष्ठ वर्ष की शुरुआत में मैंने पूरी तरह से लिनक्स पर स्विच करने का फैसला किया। अब तक मैं कुछ लिनक्स और सुरक्षा सामान सीख रहा हूं। हालाँकि, मेरा यह भी मानना ​​है कि कुछ प्रोग्रामिंग भाषाओं को सीखना भी मेरे लिए महत्वपूर्ण होगा।

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

इसके साथ ही मैंने कहा कि मेरे पास कुछ विचार हैं। मैं जावास्क्रिप्ट के साथ शुरू करने के बारे में सोच रहा था, क्योंकि यह क्रॉस-प्लेटफॉर्म है, और मैंने इसे पहले सुझाव दिया है। मैं भी रूबी के बारे में बहुत कुछ सुन रहा हूं या सी के साथ प्राकृतिक लिनक्स मार्ग पर जा सकता हूं मुझे किस दिशा में जाना चाहिए?

जवाबों:


53

सबसे पहले और सबसे महत्वपूर्ण: bashसामान्य कमांड लाइन उपयोगिताओं के साथ। Bashऑपरेटिंग सिस्टम के लिए डिफ़ॉल्ट यूजर इंटरफेस है, और लिनक्स सिस्टम पर बहुत सारे प्रोग्राम किसी स्तर पर शेल स्क्रिप्ट में लपेटे जाएंगे। यह विचित्र हो सकता है, कुछ अज्ञातताएं हैं, और अक्सर नीच गूंगा लगता है, लेकिन यह कुछ ऐसा है जिससे आपको निपटना होगा, इसलिए इसके साथ सहज हो जाओ। मानक उपकरण पसंद grep, diff, head, tail, sort, uniq, और इतने पर, बहुत उपयोगी न केवल शेल पटकथा लेखन के साथ है, लेकिन कमांड लाइन पर अपनी उत्पादकता के साथ किया जाएगा।

कम से कम कुछ सीखें c। यह वही है जो सिस्टम के निम्नतम स्तर में लिखा गया है, और यह आपको संपूर्ण रूप से सिस्टम की बेहतर समझ देगा।

अपनी पसंद की कोई भी उच्च स्तरीय भाषा चुनें। Python, ruby, perl, java, जो कुछ भी - जब तक आप इसे का आनंद लें। यह वह जगह है जहाँ आप वास्तव में "प्रोग्राम" सीखना शुरू करते हैं, और यहाँ से इसे और अधिक भाषाओं को चुनना और सीखना जारी रखना आसान होगा ।


2
मैं यहां सूचीबद्ध सभी बिंदुओं से सहमत हूं।
जो

6
आप बैश सीखने जा रहे हैं, तो आप awk के बारे में, SED, आदि, आदि सीखने सिर, पूंछ, कट, टीआर, diff, ग्रेप, मिल जाए, ps, netstat, tcpdump, प्रकार, uniq, आदि को शामिल करना चाहिए
jftuga

2
@jftuga सहमत। मेरे टूलकिट का एक बड़ा प्रतिशत "डेटा निष्कर्षण और एकीकरण" करने का कौशल है - "फॉर्मेट किए गए संदेशों को हेरफेर करने" का एक फैंसी तरीका। एक बार जब आप पाइप लाइन को समझ जाते हैं, और सामान्य टूल को जान लेते हैं, तो आप किसी भी पूर्व-रोल किए गए सॉफ़्टवेयर के वर्कफ़्लो से अनफ़िट हो जाते हैं। मैं एमएस पॉवरशेल का बहुत बड़ा प्रशंसक भी हूं, जो कई मामलों में बैश के कंधों पर खड़ा है।
एंडी

@jftuga - नोट किया। हालांकि मुझे लगता है कि ये महत्वपूर्ण हैं, मुझे नहीं लगता है कि linux के लिए किसी नए व्यक्ति को बड़ी बंदूकें जैसे कि sed / awk को गहराई से सीखने के बारे में चिंता करने की ज़रूरत है, लेकिन उनके पास मौजूदा कोड को समझने में सक्षम होने के लिए पर्याप्त समझ होनी चाहिए, अगर उन्हें इसका सामना करना चाहिए ।
17

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

10

आप पाएंगे कि हर कोई अपनी पसंदीदा भाषा का सुझाव देगा। मेरी पसंदीदा भाषा पर्ल है, इसलिए मैं यही सलाह देता हूं। :) हालाँकि, मेरी व्यक्तिगत पसंद से परे, कुछ महान कारण हैं जिनके लिए आपको पर्ल का उपयोग करने पर विचार करना चाहिए:

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

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

तीसरा, पर्ल लगभग असीम शक्ति और लचीलेपन के साथ आता है, यह आधिकारिक ऐड-ऑन रिपॉजिटरी, सीपीएएन है । उदाहरण के लिए, सुरक्षा सॉफ्टवेयर लिखने के विचार का पालन करने के लिए, आप किसी प्रकार के कस्टम नेटवर्क सुरक्षा स्कैनर विकसित करना चाहते हैं। सब कुछ लिखने के बजाय, आप NMAP :: स्कैनर को एक स्कैनिंग इंजन के रूप में उपयोग करके शुरू कर सकते हैं , और उसके बाद अपने स्वयं के ट्वीक और सुधार लिख सकते हैं।

अंत में, यदि आप वेब प्रोग्रामिंग का पता लगाना चाहते हैं, तो पर्ल के पास भी है। पर्ल में वेब सॉफ्टवेयर लिखने का एक लोकप्रिय आधुनिक तरीका कैटलिस्ट है , जो किसी भी प्रकार के वेब ऐप को जल्दी से विकसित करने के लिए एक आधुनिक एमवीसी वेब फ्रेमवर्क प्रदान करता है।

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


पर्ल एक (मुख्य रूप से) स्क्रिप्टिंग भाषा है; और अधिकांश OS को C.17 में लिखा गया है
क्रिस एस

ज़रूर, लेकिन मुझे नहीं लगता कि इस सवाल के संदर्भ में यह बहुत मायने रखता है। यह ऐसा नहीं लगता कि ओपी वास्तव में ओएस-स्तरीय प्रोग्रामिंग के बारे में जानना चाहता है या उसकी जरूरत है।
फिल होलेनबैक

मेरा सुझाव है कि पर्ल एक सुरक्षा ऐप के लिए कोड लिखने का एक अच्छा तरीका है जो किसी अन्य भाषा (अक्सर सी) में लिखी गई किसी चीज को लक्षित करता है जिसे आप पहले से ही समझते हैं। इसलिए, यदि यह अंतर समझ में आता है, तो मैं पर्ल को एक ऐसे उपकरण के रूप में वर्गीकृत करूँगा, जिसका आपको उपयोग करना सीखना चाहिए, न कि ऐसी भाषा से जिसे आपको सीखना चाहिए (पूरी तरह से)।
BMDAN

6

तीन भाषाएँ आपको अच्छी पकड़ में रखेंगी। महत्व के घटते क्रम में (अर्थात, सबसे महत्वपूर्ण है):

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

1
Pseudocode के लिए +1। मुझे टिप्पणियों में
छद्मकोड

2
Pseudocode के लिए +1 और "C ++ को छोड़कर अन्य कुछ भी"। लिनक्स की दुनिया में, आपको कम से कम एक सीखना चाहिए script language, जैसे pythonया PHP
16

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

@ जिम: प्वाइंट भाषा के बावजूद, तार्किक रूप से सोचना सीखना है। ईआरडी, यूएमएल, और ऐसा करने के लिए हाथी दांत टॉवर उपकरण हैं, लेकिन आपको औपचारिक रूप से कुछ भी सीखना नहीं है। विचार अपने विचारों को चार्ट करना सीखना है और फिर अपेक्षित परिणाम की तुलना करना है। जब आपको पता चलता है कि, उदाहरण के लिए, डेटाबेस के पास यह जानने का कोई (अंतर्निहित) तरीका नहीं है कि वेब सर्वर के अनुरोध के हिस्से के रूप में HTTP हेडर क्या भेजा गया है, तो आप एक चर को विचार से समाप्त कर सकते हैं। इसी तरह, जब आप किसी फंक्शन के लिए स्यूडोकोड लिखते हैं, तो आप अक्सर किनारे और कोने के मामलों को स्पॉट करते हैं जो आप अन्यथा नहीं करेंगे।
BMDan

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

4

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


अजगर के लिए +1, और पायथन केवल लिनक्स दुनिया में लोकप्रिय नहीं है।
जिओ

4

मैं पर्ड्यू में 4 साल की सूचना सुरक्षा डिग्री शुरू करने वाला हूं। डिग्री किसी भी प्रोग्रामिंग पाठ्यक्रमों के लिए कॉल नहीं करती है।

क्या मैं केवल OMG सोचने वाला व्यक्ति हूँ !!!! इस समय?

मेरा यह भी मानना ​​है कि कुछ प्रोग्रामिंग भाषाओं को सीखना भी मेरे लिए महत्वपूर्ण होगा

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

मैं डेटा क्रंचिंग के लिए awk और / या Perl सीखने की सलाह दूंगा। ऑब्जेक्ट-ओरिएंटेड बॉक्स पर टिक करने के लिए किसी भी आवश्यकता के बारे में परेशान न करें - लेकिन मैं गैर-प्रक्रियात्मक लैंगुग को भी देखने की सलाह दूंगा।

लर्निंग C आपको इस बारे में जानकारी का एक बहुत कुछ उजागर करेगा कि कोड एक निष्पादन योग्य कार्यक्रम में कैसे बदल जाता है (संकलन बहुत जटिल प्रक्रिया में सिर्फ एक कदम है)।

एंड्रॉइड / मोबाइल विकास में रुचि रखने वाले किसी व्यक्ति के लिए स्पष्ट विकल्प जावा होगा - लेकिन जावा डेवलपर को बहुत मुश्किल से ऑपरेटिंग और प्रोटोकॉल की वास्तविकताओं से निपटने की कोशिश करता है - मेरा अनुभव है कि यह वह जगह है जहां आपको जावा के साथ सुरक्षा समस्याएं हैं क्षुधा। यानी यह आपको अपने अंतिम उद्देश्य को प्राप्त करने में मदद कर सकता है, और यह आपके सीवी पर अच्छा लगेगा लेकिन आपके सुरक्षा ज्ञान के पूरक के लिए जावा सीखने की अपेक्षा न करें।


1
केवल तुम ही नहीं हो। : -ओ
कीथ

2

मेरी सलाह:

  • 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 नौकरियों को खोजने के लिए एक पैर होगा। हालाँकि, पर्ल का सिंटैक्स ... अच्छा है ... कुछ शब्दों में इसके अपने उत्साही हैं ... "पैथोलॉजिकल रूप से उदार!" पर्ल बेहद चर्चित हो सकता है और इसका कोड काफी विराम चिह्नों से भरा होता है। जो लोग इसे प्यार करते हैं, वे अंतहीन रूप से बहस करेंगे कि यह "आसान" है और सही समझ में आता है --- और उन मंचों पर ऐसा करने के अंतहीन अवसर होंगे जो बिल्कुल भ्रम के साथ भरे हुए हैं कि कोड के एक दिए गए स्निपेट की व्याख्या कैसे की गई थी। सिंटैक्स और दस्तावेज़ में उपयोग की जाने वाली भाषा और सार्वजनिक मंचों पर इसका समर्थन करने वालों के लिए उस बिंदु पर बारी-बारी से चर्चा की जाती है, जहाँ आप उन्हें सीखने के लिए पर्याप्त प्रयास कर सकते हैं।

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

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


1

लिनक्स की दुनिया में, आपको दो बुनियादी बातें पता होनी चाहिए:

  1. Regular Expression। यह आवश्यक है। RegExएक सार्वभौमिक "भाषा" है, जब आप नियमित अभिव्यक्ति का उपयोग करना जानते हैं, तो आपका जीवन बहुत आसान हो जाएगा :-)
  2. " quick & dirty" लिनक्स दुनिया में बहुत आम है। यदि आप अपना काम कर सकते हैं, तो कोई फर्क नहीं पड़ता कि आपका समाधान कितना बदसूरत है, आप अपना काम कर चुके हैं।

इसलिए, यदि आप लिनक्स पर एक भाषा सीखना चाहते हैं, तो आप चाहिए एक चयन script languageकी तरह, python, PHP, या यहाँ तक bash scripting

और, यह है की सलाह देते हैं मेरे PHP। यह सरल और बदसूरत है। इसमें एक विस्तृत ऑनलाइन मैनुअल है । इसका अच्छा RegExसमर्थन है। बस इतना ही।


2
कि मैंने कभी सुना है PHP का सबसे अच्छा वर्णन हो गया है ... जब आप लोकप्रियता निकालते हैं तो इसके पीछे बहुत कुछ नहीं बचा है: पी
गॉर्डन गुस्ताफसन

विषय से थोड़ा हटकर, लेकिन मुझे लगता है कि PHPs की लोकप्रियता का मुख्य कारण कई कार्य हैं जो कई लिंकर-लाइब्रेरी में बिखरे होंगे / संकुल अन्य भाषाओं में पीएचपी में मानक हैं (जैसे कि आपको कभी भी सबसे अधिक चीजों को बंडल करना होगा) libc)
फिल लेलो

1

आप लगभग किसी भी भाषा में कोई भी कार्य कर सकते हैं, इसलिए सही विकल्प काफी हद तक उस समस्या से निर्धारित होता है जिसे आप हल कर रहे हैं।

यह निश्चित रूप से निम्नलिखित श्रेणियों से भाषाओं को जानने लायक है:

  • संकलित भाषाएं (जैसे C / C ++ / Java)। C / C ++ बफर ओवरफ्लो, स्टैक करप्शन, आदि के साथ सुरक्षा मुद्दों का पता लगाने के लिए एक अच्छी जगह है।
  • व्याख्या की गई भाषाएँ (जैसे PHP)। शिथिल-टाइप किए गए चर के साथ समस्याओं का पता लगाने के लिए एक अच्छी जगह, और अपरिभाषित कार्यों का पता लगाने तक नहीं, जब तक कि आप उन्हें कॉल न करें।
  • स्क्रिप्टिंग भाषाएँ (श / बश / csh / ksh)। कई उपयोगी शेल उपयोगिताओं (देखें / बिन और / usr / बिन) एक साथ gluing के लिए वास्तव में उपयोगी है

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

यदि आप एक शेल में बहुत काम कर रहे हैं, जो मुझे लगता है कि आप जैसा कि आप विम सीख रहे हैं, तो आप साइड इफेक्ट के रूप में शेल बेसिक स्क्रिप्ट सीखेंगे। UNIX पावर टूल्स अधिक उन्नत सामान सीखने के लिए एक अच्छी पुस्तक थी; मुझे नहीं पता कि यह अभी भी प्रकाशित है।

PHP भी सीखने के लिए एक अच्छी भाषा हो सकती है; नया प्रोग्रामर प्रदान करने वाला मुख्य लाभ यह है कि बहुत सी कार्यक्षमता में बनाया गया है, न कि एक पुस्तकालय की तुलना में जिसे आपको लिंक करना होगा (जो कि एक जटिल काम नहीं है)। इस वजह से, मुख्य डॉक्स ब्राउज़ करना आपको कई चीजों के बारे में सिखाएगा ।


1

सबसे पहले, कुछ नकारात्मक सलाह:

मूल रूप से जो मैं करने की योजना बना रहा हूं, वह सीखने के लिए साइड-बाय-साइड प्रोग्राम करना सीख रहा है कि विम का उपयोग कैसे करें।

ऐसा मत करो। एक संपादक की तलाश करें जो वास्तव में आरामदायक हो। भाषा और संपादक दोनों को सीखना कठिन है जितना कि उन्हें क्रम में सीखना (जाहिर है कि संपादक को पहले जाना चाहिए :-))

जैसा कि मैंने कहा कि मैं सुरक्षा में जा रहा हूं इसलिए मैं ज्यादातर सुरक्षा से संबंधित ऐप बनाऊंगा। जिसमें से अधिकांश नेटवर्किंग से संबंधित होंगे।

संबंधित सुरक्षा एप्लिकेशन नेटवर्किंग? C यहां कोई ब्रेनर चॉइस नहीं है। आपको सिस्टम एपीआई स्तर पर नेटवर्क का उपयोग करने की आवश्यकता होगी, जिसका अर्थ है कि सी जाने का रास्ता है। बेशक इसका मतलब यह नहीं है कि सब कुछ सी में होने की जरूरत है - एक सी लाइब्रेरी + एक $favorite-high-level-languageआवरण आपको सी-संबंधित परेशानियों को उन हिस्सों में बचा सकता है जिन्हें सी की आवश्यकता नहीं है।

इसके साथ ही मैंने कहा कि मेरे पास कुछ विचार हैं। मैं जावास्क्रिप्ट के साथ शुरू करने के बारे में सोच रहा था, क्योंकि यह क्रॉस-प्लेटफॉर्म है, और मैंने इसे पहले सुझाव दिया है।

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

बोले- $favorite-high-level-languageमेरी सलाह है कि आप पायथन के साथ चलें। यह सी के साथ अच्छी तरह से इंटरफेस करता है, यह बहुत सारे उपयोगी पुस्तकालयों के साथ जहाज करता है और इसमें ऐड ऑन के रूप में बहुत अधिक लाइब्रेरी उपलब्ध हैं।


0

जावास्क्रिप्ट सीखने में कुछ भी गलत नहीं है, लेकिन यह केवल एक ब्राउज़र के तहत चलता है, इसलिए आपकी प्रोग्रामिंग वेब पेज से संबंधित ऐप तक सीमित रहेगी।

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


3
केवल ब्राउज़रों पर? अनिमोर नहीं
EEAA 16

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

2
मैंने हमेशा सोचा है कि ECMAScript प्रोग्रामिंग भाषा है और Javascipt DOM को मैनिपुलेट करने के लिए उपयोगी कार्य प्रदान करने के लिए ECMAScript के ऊपर बैठता है। जावास्क्रिप्ट ब्राउज़र के लिए है।
जोनाथन मयंक

0

मेरी सिफारिशें? हममम। ठीक है, आपको तय करना पड़ सकता है। संपूर्ण, अच्छी तरह से गोल सीमा के लिए, आप सामान्य सीएस डिग्री मार्ग पर जा सकते हैं, शायद इस क्रम में नहीं।

(1) C / C ++ - आप ऑब्जेक्ट ओरिएंटेड सामान को नीचे ला सकते हैं, और कम से कम आपने कोशिश की होगी। C ++ 'पेशेवर' मानक है। (2) असेंबली (बस थोड़ा सा - यह आपको प्रोसेसर, मेमोरी आदि के वास्तविक कामकाज को समझने में मदद करेगा - आपको इससे शादी करने की ज़रूरत नहीं है।) (3) पायथन / पर्ल / बैश - ये प्राप्त करें नीचे स्क्रिप्टिंग भाषाओं, वे लिनक्स के अपने स्तर (4) PHP / रूबी, MySQL और HTML के लिए सबसे उपयोगी होंगे - बस अपने वेब प्रोग्रामिंग पर जाओ! आप पूरे सर्वर-क्लाइंट इंटरैक्शन प्रक्रिया, कंप्यूटिंग के एक और स्तर को समझेंगे।

सहायक अवधारणाओं की आवश्यकता है? एअर इंडिया, तंत्रिका नेटवर्क। ये आपको बाहर गोल करना चाहिए।

आप इनमें से किसी एक को चुन सकते हैं या उन सभी को छू सकते हैं। मेरी भाषा? उन सभी को, जैसा कि आवश्यक था, लेकिन 1984 के बाद से मैं प्रोग्रामिंग कर रहा हूं, और एक सीएस डिग्री, लिखित गेम और सभी प्रकार के एम्बेडेड सिस्टम ऐप हैं। यह मैं क्या कर रहा हूँ। आपको यह पता लगाना होगा कि आप कौन हैं और आप क्या करते हैं। बस सुनिश्चित करें कि आप मज़े कर रहे हैं।

का आनंद लें!


0

ओह, सूचना-प्रणालियों के लिए गलत सूचना-सुरक्षा ... ओह, यह अब भी लागू होता है

जावा

  1. एक प्रवेश स्तर का प्रोग्रामिंग कोर्स होना चाहिए जो जावा-आधारित है जो आपकी डिग्री की ओर गिना जाएगा। आपके द्वारा सीखी जा रही सामग्री के लिए क्रेडिट प्राप्त करना हमेशा अच्छा होता है।
  2. यह आपको कुछ करियर ग्रोथ देगा अगर आप सिस्टम-मैन से सख्ती से बीमार हो जाते हैं ... या अगर आप जिस कंपनी में काम करते हैं वह बाद में तय करती है कि सिस्टम टोस्टर की तरह हैं और ऐसे लोग हैं जो उन्हें चलाते हैं।
  3. वस्तु के उन्मुख
  4. आपने कहा कि आप कुछ Android विकास करना चाहते हैं। इसका मतलब जावा है।

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

YMMV

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