पूर्ण ढेर विकास

Nov 25 2022
पूर्ण-स्टैक डेवलपर शब्द का उपयोग हाल ही में अधिक से अधिक बार किया जा रहा है। विशेष रूप से टीम संरचना, भर्ती के लिए आवश्यकताओं या किसी व्यक्ति की शुद्ध उत्कृष्टता का अनुमान लगाने के बारे में चर्चा में।

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

Unsplash पर माइक माराह द्वारा फोटो

जब मैं सीवी पर इस तरह का बयान देखता हूं या किसी को खुद को फुल-स्टैक बताते हुए सुनता हूं तो कई सवाल दिमाग में आते हैं:

  • फुल-स्टैक डेवलपमेंट से आप क्या समझते हैं?
  • आप किस ढेर पर महारत का दावा कर रहे हैं?
  • प्रत्येक तत्व के लिए आपका ज्ञान कितना व्यापक है? इसे कितना भरा होना चाहिए?
  • क्या फुल-स्टैक डेवलपर एक वास्तविक चीज़ है? क्या वे वास्तव में मौजूद हैं?
  • यदि वे मौजूद हैं तो वे उपयोगी क्यों हैं?
  • क्या फुल-स्टैक जैक ऑफ ऑल ट्रेड्स, मास्टर ऑफ नन कहने का एक और तरीका है?

पृष्ठभूमि

इससे पहले कि हम विवरण में जाएं, यह परिभाषित करने लायक है कि हम क्या विकसित करना और वितरित करना चाहते हैं।

आपके लैपटॉप पर चल रहे PoC के लिए फुल-स्टैक डेवलपर होने का दावा करना यकीनन एक उचित विवरण है क्योंकि आप उस समाधान के हर हिस्से को विकसित करने वाले अकेले व्यक्ति हैं। पैमाना बहुत छोटा है, और खराब डिजाइन या विकास का प्रभाव बहुत सीमित है। मौलिक रूप से आप एक अवधारणा को सेवा प्रदान नहीं कर रहे हैं, जब तक कि यह सीआईओ को घंटे के डेमो के लिए काम कर सकता है, यह ठीक है।

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

इस पोस्ट के प्रयोजनों के लिए, हम वास्तविक ग्राहक डेटा (पीआईआई सहित) की बड़ी मात्रा (प्रति दिन 10 जीबी जीबी) को संसाधित करने वाली प्रणाली पर विचार करेंगे और कम से कम 2 9 उपलब्धता के साथ प्रमुख व्यावसायिक सेवाएं प्रदान करेंगे।

फ़ुल-स्टैक डेवलपर मूल्यवान क्यों हैं?

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

तो, इन स्पष्ट लाभों के आधार पर सभी आईटी संगठनों में इन लोगों की अधिक टीमें क्यों नहीं बनाई गई हैं? कंपनियां इन निंजा टीमों को बनाने के लिए सक्रिय रूप से भर्ती और प्रशिक्षण क्यों नहीं दे रही हैं? क्या यह इसलिए है क्योंकि बैटमैन या टोनी स्टार्क के विकास समकक्ष वास्तव में मौजूद नहीं हैं?

इन सवालों का जवाब देने के लिए, हमें यह देखने की जरूरत है कि (बहुत) सरलीकृत ढेर कैसा दिखता है।

सरलीकृत ढेर

मैं सरलीकरण के उद्देश्य से प्लेटफॉर्म इंफ्रास्ट्रक्चर को छोड़ रहा हूं।

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

हमारे कट डाउन स्कोप के आधार पर मुझे रिएक्ट वेब ऐप्स के बारे में क्या जानने की आवश्यकता है?

अच्छी तरह से सबसे पहले आपको यह समझने की आवश्यकता है कि सिंगल पेज ऐप कैसे काम करते हैं, विशेष रूप से वेब ऐप बनाने, डिबग करने और चलाने के लिए आवश्यक मूल सिद्धांत और संबंधित टूलिंग जैसे एनपीएम, वेबपैक, कंटेंट मैनेजमेंट, रिएक्शन डेवटूल, यूएक्स दिशानिर्देश, ...

आपको तृतीय पक्षों द्वारा प्रदान की जाने वाली कार्यक्षमता जैसे कि सामग्री UI, redux, बूटस्ट्रैप, ... और एक पैकेज प्रबंधन समाधान जैसे npm (सुरक्षा भेद्यताओं को प्रबंधित करने सहित - आमतौर पर एक DevOps विचार, बाद के नोट्स देखें) से बहुत परिचित होने की आवश्यकता होगी।

प्रदर्शन के बारे में क्या है उदाहरण के लिए पहले कंटेंटफुल पेंट के लिए समय, इंटरएक्टिव के लिए समय, ब्लॉकिंग टाइम, ... क्या मुझे मदद के लिए एक प्रगतिशील वेब ऐप आर्किटेक्चर और / या सेवा कर्मचारियों को अपनाना चाहिए? आपको प्रदर्शन कारकों को समझने की आवश्यकता होगी और कैसे विभिन्न कोर पैटर्न विश्लेषण का समर्थन करने के लिए टूलिंग का उपयोग करने में मदद कर सकते हैं जैसे रिएक्ट देवटूल या लाइटहाउस।

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

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

इसलिए, यह मानते हुए कि मैंने अपने सिर में प्रत्येक परत के लिए पैटर्न, मानकों, सर्वोत्तम प्रथाओं और हाथों के कौशल को अपने सिर में रटने में कामयाबी हासिल की है, इसके बिना मुझे और क्या जानने की आवश्यकता है? क्या कोई सहायक क्षमताओं की आवश्यकता है?

सहायक क्षमताएं

टेक स्टैक के साथ बैठकर समाधान के सभी घटकों को डिज़ाइन करने, बनाने, वितरित करने और चलाने के लिए कई सहायक क्षमताएँ आवश्यक हैं।

वास्तुकला और एसडब्ल्यू इंजीनियरिंग

किसी भी भाषा / ढांचे में एक अच्छा कार्यान्वयन बनाने वाली परतों में वास्तुशिल्प डिजाइन का समर्थन करने के लिए कौशल का मुख्य सेट

  • SOLID (एकल उत्तरदायित्व, खुली/बंद, प्रतिस्थापन, इंटरफ़ेस अलगाव, निर्भरता व्युत्क्रम)
  • 'इलिटीज' पुन: प्रयोज्यता, रखरखाव, पोर्टेबिलिटी, एक्स्टेंसिबिलिटी, ...
  • क्षैतिज और लंबवत स्केलिंग
  • कोडिंग संरचना
  • लॉगिंग
  • कोड समीक्षाएँ

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

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

सभी डेवलपर्स को मुख्य परीक्षण कौशल की आवश्यकता होती है, आपकी अपनी सुविधाओं का परीक्षण करने में सक्षम नहीं होने का कोई बहाना नहीं है। और एक फुल-स्टैक वातावरण में जिसका अर्थ है ऊपर दिए गए आरेख पर प्रत्येक घटक।

परीक्षण के विभिन्न प्रकारों और चरणों को समझना और उन्हें लागू करने में सक्षम होना (अपने स्वयं के होमवर्क को चिह्नित किए बिना):

  • कार्यात्मक और गैर-कार्यात्मक
  • ब्लैक बॉक्स बनाम व्हाइट बॉक्स
  • इकाई, एकीकरण, प्रणाली, उपयोगकर्ता स्वीकृति, प्रतिगमन, धुआं, ...

सतत एकीकरण और सतत परिनियोजन पाइपलाइनों का विकास और रखरखाव

सीआईसीडी के लिए मुख्य सक्षमकर्ता अक्सर एक केंद्रीकृत/समर्पित टीम द्वारा बनाए जाते हैं, लेकिन हर किसी को कम से कम पाइपलाइनों को अपडेट करने और बनाए रखने में सक्षम होना चाहिए। (हाँ, मुझे पता है; यदि आपके पास एक DevOps टीम है तो आप DevOps नहीं कर रहे हैं लेकिन बहुत सारे संगठन करते हैं)

टूल्स का उपयोग करना जैसे:

  • जेनकिंस, ट्रैविससीआई, स्पिनंकर
  • गिटहब, बिटबकेट
  • सोनारक्यूबे
  • जैप्रोक्सी
  • वेराकोड, स्नीक
  • डॉकर, एंकर, हार्बर

यदि हम "आप इसे बनाते हैं, आप इसे चलाते हैं" की उपेक्षा करते हैं, तो ऑपरेशन के आसपास एक पूर्ण-स्टैक डेवलपर की आवश्यकताओं को काफी सरल बना दिया जाता है

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

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

टेक स्टैक की परतों की तरह, पूर्ण-स्टैक स्थिति का दावा करने के लिए आवश्यक सहायक क्षमताओं का दायरा विशाल है।

निष्कर्ष

मेरा मानना ​​​​है कि सच्चा फुल-स्टैक डेवलपर एक मिथक (काफी हद तक) है और तब से है जब स्टैक 1980 के दशक में 6502 पर असेंबलर चलाने से आगे बढ़ गया था। अपने आप को यह सोचने में मूर्ख मत बनाओ कि K8 नोड पर चल रहे नोड में लिखे कुछ एपीआई से फ्रंट एंड अप प्राप्त करने और चलने का मतलब है कि आप एक पूर्ण-स्टैक डेवलपर हैं।

ये व्यक्ति न केवल ज्ञान और अनुभव की गहराई के कारण पौराणिक हैं, बल्कि इसलिए भी क्योंकि यह दायरा लगातार बढ़ रहा है - हर साल प्रत्येक डोमेन में प्रौद्योगिकियों और पैटर्न में भारी विकास हो रहा है, आज तक बहुत, बहुत कठिन है।

इसके अलावा, ये व्यक्ति आम तौर पर अधिक पैसे मांगने जा रहे हैं जो कि अधिकांश आईटी संगठन उन्हें भुगतान नहीं कर सकते हैं, लेकिन अगर वे वास्तव में पूर्ण-स्टैक हैं तो वे इसके लायक हैं - जैसा कि विज्ञापन जाता है।

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

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

बोनस टिप्पणी:

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

*हमारे सरलीकृत स्टैक में, हम कह सकते हैं कि मॉडल माइक्रोसर्विसेज बिट में जाता है... थोड़े