तो चलिए शुरू करते हैं...
तुम अब पहले वर्ष को समाप्त कर रहे हो (और विश्वास करो, एक साल या दो में कुछ नहीं बदलेगा)। लेकिन इस समय, तुम्हारे दिमाग में लगभग कोई ज्ञान नहीं है। और यहां तक कि जब तुम विश्वविद्यालय खत्म करोगे, तो तुम पहले वर्ष में 250, अधिकतम 300 यूएसडी की सैलरी की उम्मीद कर सकते हो। तुम्हें जूनीयर भी कहना मुश्किल है, क्योंकि तुम बहुत कम थ्योरी जानते हो और तुम्हारे पास कोई प्रैक्टिकल अनुभव नहीं है।
तुम थ्योरी को चार कारणों से अच्छी तरह नहीं जानोगे:
- यह एक बहुत व्यापक क्षेत्र है, और इस पाठ्यक्रम के अंतर्गत सभी कुछ सीखना संभव नहीं है।
- अक्सर पुराना सामग्री पढ़ाई जाती है।
- तुम कक्षाओं में शायद सोशल मीडिया पर होते हो, सहपाठियों के साथ बातचीत करते हो और बस वहां उपस्थित होने के लिए जाते हो। तुम केवल 30-40 प्रतिशत हो रही बातों में शामिल हो, और अगर विषय आसान है और तुमने 80% याद किया है, तो तुम इसे कक्षाओं के बाद प्रैक्टिस से नहीं पुष्टि करते, अपने फ्री टाइम में कंप्यूटर के सामने बैठकर। प्रायोगिक कक्षाओं में, उदाहरण के लिए, मैं अक्सर नेटवर्क पर काउंटर-स्टाइक खेलता था (इस दौरान मैंने किसी तरह से प्रयोगशाला कार्य किए - अंकों के लिए न्यूनतम सेट)।
- कुछ सीखने और ज्ञान में समाहित करने के लिए, आदर्श मनोदशा, आदर्श रुचि और वातावरण की जरूरत होती है। सुबह 8-10 बजे किसी भी छात्र के लिए यह मुश्किल होगा, और परिणामस्वरूप सामग्री अच्छी तरह से ग्रहण नहीं होती। विश्वविद्यालय में कक्षाओं में बैठना और उसी लेक्चर को शाम को अपने सोफे पर यूट्यूब पर देखना अलग-अलग चीजें हैं।

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

मैं शायद ही कभी ऐसा दिन ढूंढ पाता हूं जब मैं कुछ नया नहीं देखता या नहीं सीखता (कभी-कभी मैं यह काम काम के दौरान बैकग्राउंड में करता हूं), लेकिन ज्यादातर समय फ्री टाइम में। मैं हर दिन टहलने भी जाता हूं, और मेरी भी एक व्यक्तिगत जिंदगी है, दौड़ने और फुटबॉल के रूप में खेल, और अन्य रुचियां, शौक और यात्रा भी हैं।

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

प्रोग्रामर आमतौर पर आलसी लोग होते हैं... किताबों के माध्यम से सीखना सबसे अच्छा होता है, लेकिन चूंकि मैं भी आलसी हूं, मैं पॉडकास्ट सुनता हूं और YouTube देखता हूं (और अब मैंने प्रोग्रामिंग की एक अच्छी समझ हासिल कर ली है, और मुझे YouTube पर कुछ नया और अच्छा ढूंढना मुश्किल होता है, लेकिन मैं फिर भी ढूंढता हूं और देखता हूं, और कभी-कभी किताबें पढ़ता हूं)। इसलिए खुद को हर दिन आत्म-शिक्षा करने की आदत डालो। तुम प्रोग्रामिंग के लिए अपने मन के अनुसार पॉडकास्ट चुन सकते हो और नए एपिसोड सुन सकते हो — इस तरह तुम IT की दुनिया में नवीनतम घटनाओं और तकनीकों से अवगत रहोगे।
यह मत सोचो कि डिप्लोमा की रक्षा के बाद कुछ बदल जाएगा... तुम ज्यादा समझदार बन जाओगे, और तुम्हें तुरंत किसी कंपनी से फोन आएगा और कम से कम 400 डॉलर की नौकरी का प्रस्ताव देगा। बस कल्पना करो कि तुमने कल डिप्लोमा प्राप्त किया है, और तुम्हें आगे बढ़ना है।

अब पहले (या दूसरे, कोई फर्क नहीं पड़ता) वर्ष में यह बहुत महत्वपूर्ण है कि तुम समझो कि तुम इस क्षेत्र में क्या करना चाहती हो। चूंकि तुमने IT में प्रोग्रामिंग चुनी है, न कि SEO या डिजाइन, तो यहाँ कुछ दिशा-निर्देश हैं:
- सिस्टम प्रोग्रामिंग (OS, ड्राइवर आदि लिखना) — यह लो-लेवल प्रोग्रामिंग है, मेरे अनुसार यह थोड़ा बोरिंग है, लेकिन कठिन भी है।
- गेम डेवलपमेंट — इस पर कोई टिप्पणी नहीं... भौतिकी का ज्ञान होना अच्छा रहेगा।
- वेब डेवलपमेंट — सब कुछ इतना कठिन नहीं है, काफी दिलचस्प है, लेकिन मैं कह सकता हूं कि बहुत कुछ जानना जरूरी है (हालांकि, शायद अन्य क्षेत्रों में भी ऐसा ही है)।
- मोबाइल डेवलपमेंट — मैं यह नहीं कहूंगा कि यह कठिन है (यहाँ दो क्षेत्रों में विभाजन है: Android या iOS के लिए, हालांकि अन्य छोटे क्षेत्रों भी हैं)। वैसे, वेब में भी दो दिशा-निर्देश हैं: बैकएंड और फ्रंटएंड।
- आवेदनात्मक — लैपटॉप और पीसी के लिए प्रोग्राम लिखना — यह भी सामान्य रूप से जटिलता और रुचि में साधारण है। आमतौर पर, यही विश्वविद्यालयों में शुरुआत होती है।
- वैज्ञानिक — यह कुछ विशिष्ट होता है, जो एक संकीर्ण प्रोफ़ाइल और विज्ञान के लिए तैयार किया गया है: चाहे वह जीव विज्ञान, रसायन विज्ञान, गणित आदि हो।
मेरे अनुसार, सबसे अधिक मांग वाले क्षेत्र वेब, मोबाइल और आवेदनात्मक ऐप्स हैं। किसी भी समय आप दिशा बदल सकते हैं। लेकिन अगर आप आवेदनात्मक प्रोग्रामिंग में सीनियर हैं, तो इसका मतलब यह नहीं है कि जब आप मोबाइल में आएंगे, तो आप वहां भी सीनियर होंगे। आपका स्तर कुछ वर्षों (सर्वश्रेष्ठ स्थिति में एक वर्ष) के लिए मिडल तक गिर जाएगा, क्योंकि यह पूरी तरह से अलग क्षेत्र है, जिसके अपने नुस्खे हैं।
इसके अलावा, प्रोग्रामर्स के पास ज्ञान के स्तर के अनुसार अपनी वर्गीकरण होती है:
- जून — बिल्कुल कुछ नहीं जानता, बहुत गलती करता है। उसके बाद सभी कार्यों की समीक्षा करनी होती है, संभवतः सुधारना पड़ता है। बिना काम के अनुभव या बहुत कम अनुभव के साथ।
- मिडल — एक अच्छा प्रोग्रामर, जो मध्यम और कभी-कभी कठिन समस्याओं (एल्गोरिदम) को हल करने में सक्षम है। 1-2 वर्षों का अनुभव है। कुछ जानता है, और उस पर भरोसा किया जा सकता है।
- सीनियर — बहुत कुशल विशेषज्ञ, जो सब कुछ या लगभग सब कुछ जानता है। काम का अनुभव न्यूनतम 4-5 वर्ष है। कभी-कभी, इस स्तर तक पहुंचने के लिए और भी वर्षों की आवश्यकता हो सकती है (यह व्यक्ति की व्यक्तिगत विशेषताओं और शायद क्षेत्र पर निर्भर करता है)।
फिर से, अनुभव और इन सभी प्रकारों के बारे में — यह सब सापेक्ष है। हमारी मिन्स्क कंपनी में सीनियर, शायद गूगल में केवल जून हो।
एक और वर्गीकरण है टीम लीड (उसे हम टीम में ब्रिगेडियर कह सकते हैं :) )। वह अपनी टीम के सदस्यों के बीच कार्यों को वितरित करता है, सब कुछ जांचता है और कुछ कठिन कार्य भी करता है। उसकी टीम के कार्यों की सारी जिम्मेदारी उस पर होती है। आमतौर पर, वे सीनियर्स होते हैं, लेकिन बहुत अच्छे मिडल भी हो सकते हैं।
फिर सॉफ़्टवेयर आर्किटेक्ट होते हैं — ये मेगाबुद्धिमान लोग होते हैं, जो भी सीनियर्स होते हैं, या शायद इससे भी ऊपर (मैं खुद अभी तक इस ज़ेन स्थिति तक नहीं पहुंचा हूं, इसलिए निश्चित रूप से नहीं कह सकता :))। यह डिग्री पर निर्भर करता है। कहें, कि वेब में सही तरीके से आर्किटेक्चर को डिजाइन करने के लिए, केवल बैकएंड सीनियर होना पर्याप्त नहीं है; फ्रंटएंड को भी अच्छी तरह से जानना आवश्यक है — और यह पहले से ही एक फुलस्टैक डेवलपर माना जाता है।

उन लोगों की बातों पर ज्यादा ध्यान मत दो, जो अपनी तकनीकों और प्रोग्रामिंग भाषाओं को लागू करते हैं, यह कहते हुए कि यह उस से बेहतर है... सब कुछ विशेष परिस्थितियों और कार्यों पर निर्भर करता है। और फिर बाजार में शीर्ष 5-10 भाषाएं हैं, जो लगभग 20-25 वर्षों से नहीं बदल रही हैं और अपनी स्थिति बनाए रखी है (कभी-कभी बस आपस में स्थिति छोड़ती हैं, अगर कुछ नया विशेषताओं, अपडेट या उदाहरण के लिए, इन भाषाओं के लिए फ्रेमवर्क के संदर्भ में आया है, लेकिन ये सभी भाषाएं अभी भी विकसित हो रही हैं)। मैं निम्नलिखित भाषाओं को उजागर करूंगा: C, C++, C#, Python, Java, JavaScript और PHP। नए में, Go को उजागर किया जा सकता है, शायद Rust भी। और मोबाइल विकास की भाषाएं, जैसे Kotlin या Swift — ये दो वास्तव में अपेक्षाकृत नए हैं (शायद लगभग 4-5 साल से ही इनका सक्रिय रूप से उपयोग किया जा रहा है) — इसका एक तार्किक स्पष्टीकरण है, क्योंकि मोबाइल विकास वेब या आवेदनात्मक की तुलना में सबसे नया है, इसलिए यहां कुछ निश्चित भाषाएं बाद में विकसित हुई हैं।
यह समझना बहुत जरूरी है कि भाषाएँ कार्यात्मक (फंक्शनल) और वस्तु-उन्मुख (ऑब्जेक्ट-ओरिएंटेड) होती हैं (और भी अन्य पैरेडाइम हैं), और यह जानना आवश्यक है कि वे एक-दूसरे से कैसे भिन्न हैं। इसके अलावा, यह याद रखना चाहिए कि वे कैसे काम करते हैं: कहीं संकलक (कंपाइलर) होता है, कहीं व्याख्याकार (इंटरप्रेटर) होता है (लेकिन यह पहले से ही बारीकियाँ हैं)। यह बहुत अच्छा है जब प्रोग्रामर असिंक्रोनसिटी, प्रक्रियाओं और थ्रेड्स के स्तर पर समझता है, लेकिन इसमें भी समय लगता है।
इसके अलावा, उन लोगों की बातों पर ध्यान मत दो, जो कहते हैं कि, उदाहरण के लिए, PHP एक खराब भाषा है — यह उन लोगों की राय है, जो अपनी मूर्खता और प्रोग्रामिंग की कमी को दिखाते हैं (यह मजाक गंदे कोडर्स से शुरू हुआ, जो भाषा में निम्न प्रवेश स्तर के कारण है, जो इसके लिए अधिक फायदेमंद है, और क्योंकि पहले PHP वास्तव में खराब था... लेकिन यह 2000 में था, अधिकतम 2007-2010 में। अब यह बहुत अच्छा है, और इस पर दुनिया के 70% से अधिक वेब प्रोजेक्ट्स (बैकएंड) काम करते हैं। इसी तरह की बातें JavaScript के बारे में भी कही जा सकती हैं (यहां तक कि JS के बारे में एक मजाक भी है)। मुझे यह भी पसंद नहीं है, लेकिन मैं इसका उपयोग अक्सर करता हूं। मैंने Java और Python के खिलाफ भी आलोचनाएँ सुनी हैं... हालाँकि मुझे लगता है कि किसी भी भाषा के बारे में मजाक ढूंढा जा सकता है। इसलिए यह सब सिर्फ व्यक्तिगत पसंद पर निर्भर करता है।

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

फ्रंट:
- HTML5 (+ यह देखना जरूरी है कि 6वीं संस्करण में क्या योजना बनाई गई है)।
- CSS (आदर्श रूप से, ड्राफ्ट्स पर ध्यान देना चाहिए)। सही तरीके से सेलेक्टर्स का उपयोग करना (याद रखें कि CSS दाएं से बाएं काम करता है और अन्य बातें)।
- कम से कम 1 CSS-फ्रेमवर्क का ज्ञान होना चाहिए और समझना चाहिए कि यह कैसे काम करता है (Bootstrap काफी उपयुक्त है)।
- CSS-प्रेप्रोसेसर्स (Sass, Less आदि) के बारे में जानना चाहिए — यह जानना कि वे कैसे काम करते हैं और उनका उपयोग कर सकना चाहिए।
- बुनियादी SEO की जानकारी आवश्यक है — इसके बिना कहीं नहीं जा सकते (HTML5 टैग्स का सही उपयोग समझना, यह जानना कि ब्लॉक तत्वों को इनलाइन में नहीं डालना चाहिए, h1-h6 टैग्स का उपयोग कैसे और कितनी बार करना है आदि)।
- JavaScript (6वें ECMAScript से) — इस भाषा को शुद्ध रूप में लंबे समय तक अध्ययन किया जा सकता है... और ध्यान देने के लिए कई अन्य बातें हैं:
- jQuery (बहुत शानदार लाइब्रेरी... लेकिन फ्रेमवर्क्स बेहतर हैं)।
- फ्रेमवर्क्स (React, Vue, Angular)।
- npm — पैकेज प्रबंधक।
- बिल्डर्स (Gulp, Grunt, Webpack) — ये SEO के लिए भी आवश्यक हैं, ताकि पृष्ठ पर केवल वही स्टाइल और स्क्रिप्ट्स भेजी जाएं जो इस पृष्ठ के लिए आवश्यक हैं, और कुछ भी अतिरिक्त नहीं।
- Emmet का ज्ञान प्राप्त करें।
- यदि सामान्य स्क्रिप्ट्स पसंद नहीं हैं, तो CoffeeScript या TypeScript या इसी तरह की कोई अन्य भाषा सीखें। तब Babel या अन्ही JS कंपाइलर को सीखना न भूलें।
- खोज इंजन के API और रैंकिंग एल्गोरिदम (यह SEO के लिए है) (+ AMP, Turbo, यांडेक्स.डज़ेन)।
- लेआउट (मान्य, क्रॉस-ब्राउज़र, आधुनिक, उत्तरदायी)।

बैक (मैं PHP के उदाहरण से):
- शुद्ध PHP।
- CMS (मैंने कई के साथ काम किया है, लेकिन WordPress की सलाह देता हूँ)।
- फ्रेमवर्क (Laravel, Symfony, Yii या कोई अन्य)। पहले दो सबसे अच्छे हैं।
- PSR — मानक, कोड कैसे सही तरीके से लिखें, कहाँ कोट्स लगाएं, कहाँ स्पेस (टैब) डालें, वेरिएबल्स के नाम कैसे रखें और बहुत कुछ।
- REST — यह, जैसे कि 4वां बिंदु, सही प्रोग्रामिंग और मेथड्स के सही नामकरण का तरीका है।
- सुरक्षा। मुझे नहीं पता कि मोबाइल एप्लिकेशंस में सुरक्षा पर कितना ध्यान दिया जाता है, लेकिन वेब में यह अक्सर एक बड़ी समस्या होती है। और यह समझ में आता है, क्योंकि वेब डेवलपर का सबसे अच्छा डिबगर ब्राउज़र होता है। इसके माध्यम से आप पृष्ठ के बारे में बहुत सारी जानकारी प्राप्त कर सकते हैं, और यदि आप कुछ एक्सटेंशन्स इंस्टॉल करते हैं, तो आप वास्तव में अच्छे मैनिपुलेशन्स कर सकते हैं। इसलिए, वेब में, आपको कम से कम SQL इंजेक्शन, XSS कमजोरियों और CSRF (क्रॉस-साइट रिक्वेस्ट फॉरगिरी) से कैसे सुरक्षित रहना है, यह जानना चाहिए — हालाँकि ये एकमात्र खतरे नहीं हैं (यहाँ DoS और DDoS को भी जोड़ा जा सकता है — लेकिन यह अधिकतर सर्वर सेटिंग्स से संबंधित है)।
- ORM सिस्टम (Doctrine उपयुक्त है) और PDO।
- कंसोल (मैं लगभग हर दिन इसका उपयोग करता हूँ)।
- सर्वर सेटिंग्स (कम से कम बुनियादी, यह जानना कि सर्वर कैसे काम करता है और अनुरोधों पर बैकएंड में क्या होता है)।
- Docker (इंटरनेट क्लाउड स्टोरेज और पहले से कॉन्फ़िगर किए गए "कंटेनर" पर नज़र डालना अच्छा होगा। यह भी जानना कि Kubernetes, OpenShift क्या हैं। और शायद क्लाउड के लिए जाना आसान होगा, बजाय इसके कि आप अपने पास बड़े टेक्नोलॉजी स्टैक को सेटअप करें)।
- Composer।
- cURL।
- प्रोटोकॉल — इस बिंदु को 4-6 बिंदुओं के करीब रखना चाहिए था। लेकिन अब मैं कुछ नहीं बदलूंगा। आपको HTTP, HTTPS, FTP, SSH और कुछ अन्य के बीच के अंतर और उनके साथ काम करने का तरीका जानना चाहिए।
- IDE सीखें, जैसे PhpStorm या अच्छे टेक्स्ट एडिटर्स (इंस्टॉल किए गए एक्सटेंशन्स के साथ) — यह फ्रंट एंड के लिए भी लागू होता है।
- लिनक्स — अधिकांश सर्वर इस ऑपरेटिंग सिस्टम पर चलते हैं, इसलिए इसे जानना अत्यंत आवश्यक है।
इसके अलावा, आपको OOP (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) के बारे में भी जानना चाहिए। कुछ फंक्शनल भाषाएँ हैं, जहाँ आप बिना किसी क्लास के पूरा स्टार्टअप लिख सकते हैं। लेकिन PHP (जैसे अधिकांश आधुनिक भाषाएँ) ऑब्जेक्ट-ओरिएंटेड है, इसलिए OOP का ज्ञान होना आवश्यक है। जितना गहरा समझेंगे, उतना ही बेहतर होगा (क्लास, इंटरफेस, ट्रेट्स)। विभिन्न प्रोग्रामिंग पैराडाइम्स को जानना भी अच्छा होगा। आपको यह समझना चाहिए कि एक ही कोड को एक ही भाषा में विभिन्न पैराडाइम्स के माध्यम से अलग-अलग तरीके से लिखा जा सकता है। और आपके प्रोजेक्ट को किसी एक पैराडाइम का पालन करना चाहिए। यह वेरिएबल्स के नामों पर भी लागू होता है, यानी या तो हर जगह कैमेल केस हो, या स्नेक केस।
आपको पैटर्न्स के बारे में भी जानना चाहिए — मैं स्वीकार करता हूँ, जब मैंने विश्वविद्यालय में इसे पढ़ा था, तो मुझे यह सबसे बेकार विषय लगा। और यह मानना चाहिए कि यह मेरे लिए सबसे कठिन विषय है। किसी भी पैटर्न को अलग-अलग तरीके से व्याख्या किया जा सकता है (सिर्फ वेब में ही किसी विशेष पैटर्न की कई वास्तविकताएँ मिल सकती हैं। यदि आप एप्लिकेशन या मोबाइल एप्लिकेशन की बात करें, तो वहाँ इसकी थोड़ी अलग वास्तविकता हो सकती है)। संक्षेप में, यह एक ऐसा विषय है जिसे स्पष्ट रूप से समझाना कठिन है, लेकिन यह अत्यंत महत्वपूर्ण है।
SOLID — यह कोड लिखने का तरीका है। और SOLID एकमात्र सिद्धांत नहीं है। वैसे, REST और PSR (जो मैंने ऊपर लिखा) को भी सही कोडिंग के सिद्धांतों में शामिल किया जा सकता है।
टेस्टिंग, स्क्रिप्ट्स पर यूनिट टेस्टिंग करना, PHP में। लेकिन यह आदर्श स्थिति है। मैं लगभग टेस्ट नहीं लिखता... हालाँकि वे आवश्यक हैं। आपको यह समझना चाहिए कि टेस्टिंग भी विभिन्न प्रकार की होती है: फंक्शनल टेस्टिंग, एकसेप्टेंस टे스्टिंग, यूनिट टेस्टिंग आदि। आपको Git, Mercurial या किसी अन्ही वर्जन कंट्रोल सिस्टम को भी सीखना चाहिए।
डेटा फॉर्मेट्स जैसे JSON, XML, YAML के साथ काम करना न भूलें।

अपने द्वारा उपयोग किए जाने वाले भाषाओं और तकनीकों के अपडेट पर नज़र रखना अपनी आदत बना लें। भाषाएँ आमतौर पर बार-बार अपडेट नहीं होती हैं, लेकिन कभी-कभी उनमें मौलिक परिवर्तन होते हैं।

जब मैं शिक्षा संस्थानों में पढ़ाई कर रहा था, तो मुझे लगता था कि बड़े डेटा और कोड ऑप्टिमाइजेशन की समस्या मुझे प्रभावित नहीं करेगी या यह बहुत जल्द नहीं आएगी। लेकिन वास्तव में ऐसा नहीं है। मैं पहले से ही कई हजार रिकॉर्ड के साथ काम कर रहा हूँ। यदि सामान्य डेटाबेस ज्ञान और तालिकाओं का सामान्यीकरण मुझे बैकएंड पर मदद करता है (वहाँ बहुत कम समस्याएँ होती हैं), तो फ्रंटएंड पर यह अधिक बार होता है। खोज इंजन को कोड के लिए ऑप्टिमाइजेशन और गति (विशेषकर गति) के मामले में अत्यधिक मांग होती है। और यहाँ यह समझना आवश्यक है कि सब कुछ असिंक्रोनस या लेट लोड कैसे करना है। आपके पास एक आदर्श सेमांटिक कोर हो सकता है, लेकिन इसका क्या लाभ है यदि पृष्ठों के लोडिंग स्पीड में ऑप्टिमाइजेशन नहीं है — इसलिए इस पर भी ध्यान देना चाहिए।
सही तरीके से कोड लिखें, ताकि वर्षों (या महीनों) के बाद जब आप मॉड्यूल्स को हटाएँ (या बंद करें), तो प्रोजेक्ट में कोई बेकार कोड न बचे। ऐसा फ्रंटएंड में CSS और JS के साथ गलत कोडिंग संगठन के कारण हो सकता है। मैं ऐसे कोड को "मृत" कहता हूँ। यह आवश्यक नहीं है, लेकिन खोज इंजन इसे ढूंढ लेते हैं और उस पर आपत्ति करते हैं।
इस बीच, मैंने डेटाबेस को लगभग छुआ नहीं है... यह मानता है कि आप पहले से ही जानते हैं और उनके साथ काम कर सकते हैं। कौन से डेटाबेस हैं — यह महत्वपूर्ण नहीं है।
आपको आर्किटेक्चरल अप्रोच और एप्लिकेशन आर्किटेक्चर के बारे में जानना चाहिए... फिर से, यह हर जगह पूरी तरह से अलग है: वेब, मोबाइल और एप्लिकेशन। उदाहरण के लिए, एक विशाल वेब प्रोजेक्ट का उदाहरण लें: बैकएंड तीन भागों में बंटा है। एक Symfony पर, दूसरा Laravel पर, और तीसरा शुद्ध PHP पर है। फ्रंटएंड, उदाहरण के लिए, दो भागों में बंटा है, जो React और Vue पर बने हैं। यदि आप किसी भी भाग में गहराई से जाएँ, तो वहाँ अपनी आर्किटेक्चर और अपने पैटर्न हैं — बड़े और छोटे दोनों। बड़े कोड खंडों को लेयर में विभाजित करना आवश्यक है (जैसे, मॉडल्स को रिपॉजिटरी में लपेटना और मॉडल्स के बजाय रिपॉजिटरीज़ से संपर्क करना, ऑब्जर्वर्स का उपयोग करना आदि) — यह सब कोड को सुंदर बनाता है, और एप्लिकेशन को मॉड्यूलर और आसानी से विस्तारित करने योग्य बनाता है। लेकिन साथ ही, यह याद रखना चाहिए कि जितनी पतली लेयर होगी, एप्लिकेशन उतनी ही तेजी से चलेगा (जैसे, जहाँ केवल PDO की आवश्यकता है, वहाँ ORM सिस्टम का उपयोग न करें)। इस सबकी समझ वर्षों के साथ आएगी।

एक और बहुत महत्वपूर्ण बात: आपको फ्रेमवर्क्स का उपयोग करना चाहिए (कम से कम बड़े प्रोजेक्ट्स में)। फ्रेमवर्क्स पर लिखना शुद्ध कोड की तुलना में अधिक कठिन होता है। लेकिन फ्रेमवर्क्स कई अच्छे फायदे प्रदान करते हैं:
- एप्लिकेशन विकास को तेजी से बढ़ाते हैं: फ्रेमवर्क्स एप्लिकेशन के विकास की प्रक्रिया को तेज करते हैं।
- एक निश्चित शैली और दर्शन निर्धारित करते हैं: ये आपको एक निश्चित शैली और दर्शन का पालन करने के लिए मजबूर करते हैं, जिससे आप कम "गंदा कोड" लिखते हैं।
- बहुत सारे तैयार मॉड्यूल उपलब्ध हैं: जैसे कि ऑथेंटिकेशन के लिए, और आपको यह चिंता करने की आवश्यकता नहीं है कि यह कैसे काम करता है (बुनियादी ऑथेंटिकेशन, टोकन आधारित, JWT या कुछ और)।
- सुरक्षा: जैसा कि मैंने पहले कहा, वेब पर सुरक्षा एक समस्या है, जिस पर बहुत समय और प्रयास देना आवश्यक है। और फ्रेमवर्क्स अक्सर यह पहले से ही आपके लिए कर चुके होते हैं।

यह माना जाता है कि फुलस्टैक डेवलपर हमेशा एक मिडल डेवलपर होता है। मैं इस बात से आंशिक रूप से सहमत हूँ, और मैं अपने खाली समय का बहुत सारा हिस्सा सीखने और आत्म-विकास में लगाता हूँ, ताकि यह वाक्यांश मुझ पर लागू न हो और मैं फ्रंट एंड और बैक एंड दोनों पर अच्छे प्रोजेक्ट्स खुद कर सकूँ — और वह भी बिना किसी गलती के, कुछ नया और ताज़ा उपयोग करते हुए।
संभव है कि मैंने कुछ भूल गया हो, क्योंकि सब कुछ दिमाग में नहीं रखा जा सकता। और हाँ, अंग्रेजी के बारे में भी बात नहीं करूंगा... जितनी बेहतर होगी, उतना ही अच्छा है।
तुम्हें तुरंत दोनों दिशाओं को सीखने की आवश्यकता नहीं है, तुम एक को भी चुन सकती हो। और याद रखो: अगर तुम अपने पिछले साल के कोड को गंदा कोड मानती हो और तुम उसे बेहतर तरीके से फिर से लिख सकती हो — तो इसका मतलब है कि तुम सही दिशा में सोच रही हो और विकसित हो रही हो।
तो, मैंने वेब का वर्णन किया... संभव है कि मैंने कुछ भूल गया हो... लेकिन विश्वास करो, यह निश्चित रूप से 90% के आसपास है जो एक अच्छे विशेषज्ञ बनने के लिए जानना आवश्यक है। दूसरी बात यह है कि इसे सीखने में सालों लग सकते हैं।
जैसा कि तुम देख रही हो, वास्तव में मैं केवल दो प्रोग्रामिंग भाषाएँ उपयोग कर रहा हूँ, लेकिन इसके अलावा, जैसा कि मैंने ऊपर बताया, कई अन्य चीजें हैं जो वास्तव में आवश्यक हैं।
अन्य प्रोग्रामिंग क्षेत्रों में मुझे नहीं लगता कि कुछ मौलिक रूप से बदल जाएगा... वहाँ अपनी तकनीकें और भाषाएँ हैं... लेकिन सिद्धांत और मात्रा लगभग वही है।
यह जरूरी नहीं है कि मैं जो चीजें सीखता हूँ (विशेषकर यदि यह कुछ बिल्कुल नया या जटिल है) उन्हें मैं पहले बार में समझ सकूँ... अक्सर मुझे इसे पूरी तरह से समझने के लिए कई बार पढ़ना और देखना पड़ता है। इसलिए तुम भी घबराओ मत, अगर पहले बार में कुछ समझ में न आए। बहुत कुछ इस बात पर निर्भर करता है कि सामग्री को कौन प्रस्तुत कर रहा है (कुछ लेखक और प्रस्तुतकर्ता इसे बेहतर तरीके से समझाते हैं, जबकि अन्य कम)।
```htmlअब तुम जानती हो कि तुम्हारे सामने क्या है, और तुम्हारे पास केवल दो विकल्प हैं: या तो तुरंत दस्तावेज़ ले लो, या आज ही प्रोग्रामिंग सीखना शुरू करो।

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

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