मुख्य निष्कर्ष
1. बेहतरीन डेवलपर्स को ढूँढना और बनाए रखना सक्रिय भर्ती और विशिष्ट माहौल की मांग करता है।
बेहतरीन सॉफ्टवेयर डेवलपर्स, वास्तव में हर क्षेत्र के श्रेष्ठ लोग, आमतौर पर बाजार में उपलब्ध नहीं होते।
भर्ती सक्रिय होती है। चूंकि शीर्ष डेवलपर्स सार्वजनिक जॉब बोर्ड्स पर नौकरी की तलाश कम ही करते हैं, इसलिए कंपनियों को उन्हें सक्रिय रूप से खोजने की जरूरत होती है। इसके लिए संबंधित सम्मेलनों में जाना, इंटर्नशिप के माध्यम से प्रतिभा की पहचान करना और कंपनी या उसके उत्पादों के इर्द-गिर्द एक समुदाय बनाना आवश्यक है ताकि समान सोच वाले लोग आकर्षित हों। केवल बड़े, सामान्य जॉब साइट्स पर निर्भर रहना उचित नहीं क्योंकि वहां अयोग्य उम्मीदवारों की संख्या अधिक होती है।
कार्यस्थल का महत्व। वेतन के अलावा, बेहतरीन डेवलपर्स विशिष्ट परिस्थितियों की तलाश करते हैं। वे ध्यान केंद्रित करने के लिए निजी ऑफिस, उच्च गुणवत्ता वाले उपकरण (मॉनिटर, कुर्सियाँ), बुद्धिमान और सहयोगी सहकर्मियों के साथ सामाजिक माहौल, और अपने काम में स्वतंत्रता और स्वायत्तता को महत्व देते हैं। डेवलपर्स का सम्मान करना और उन्हें "सितारों" की तरह ट्रीट करना उनकी आकर्षण और स्थिरता के लिए बेहद जरूरी है।
पैसे बाद में आते हैं। प्रतिस्पर्धी वेतन उचित है, लेकिन शीर्ष प्रतिभा के लिए यह मुख्य प्रेरक नहीं होता। यदि डेवलपर्स वेतन की शिकायत करते हैं, तो यह अक्सर नौकरी के अन्य पहलुओं जैसे सम्मान की कमी, खराब कार्य परिस्थितियाँ या राजनीतिक असंतोष का संकेत होता है। केवल उच्च वेतन खराब माहौल की भरपाई नहीं कर सकता।
2. सॉफ्टवेयर प्रबंधन केवल आदेश या प्रोत्साहन से नहीं, बल्कि पहचान और साझा जानकारी से होता है।
यहाँ लक्ष्य यह है कि लोग उन लक्ष्यों के साथ पहचान बनाएं जिन्हें आप हासिल करना चाहते हैं।
आदेश और नियंत्रण विफल होता है। सैन्य शैली का प्रबंधन, जहाँ नेता आदेश देते हैं, उच्च तकनीकी टीमों में कारगर नहीं होता। प्रबंधकों के पास अक्सर व्यक्तिगत योगदानकर्ताओं के पास मौजूद तकनीकी जानकारी नहीं होती, जिससे निर्णय खराब होते हैं। यह तरीका बुद्धिमान, स्वायत्त डेवलपर्स को अलग कर देता है जो कार्य के पीछे 'क्यों' समझना पसंद करते हैं।
आर्थिक प्रोत्साहन उल्टा असर करता है। केवल वित्तीय प्रोत्साहन (विशिष्ट मेट्रिक्स के लिए बोनस) के माध्यम से प्रबंधन करना हानिकारक होता है। यह आंतरिक प्रेरणा को कमजोर बाहरी प्रेरणा से बदल देता है और लोगों को मेट्रिक के लिए सिस्टम को गेम करने के लिए प्रोत्साहित करता है, न कि वांछित परिणाम के लिए। यह प्रबंधन की जिम्मेदारी से मुंह मोड़ना है जो प्रभावी सिस्टम बनाने और लोगों को प्रशिक्षित करने की होती है।
पहचान और जानकारी सशक्त बनाती है। सबसे प्रभावी तरीका पहचान प्रबंधन है, जो टीम के भीतर साझा उद्देश्य और निष्ठा की भावना को बढ़ावा देता है (जैसे परिवार)। प्रबंधकों को आवश्यक जानकारी (जैसे वित्तीय लक्ष्य, बाजार संदर्भ) साझा करनी चाहिए ताकि व्यक्ति सूचित निर्णय ले सकें जो संगठन के उद्देश्यों के अनुरूप हों, भले ही परिस्थितियाँ बदल जाएं।
3. एक मजबूत तकनीकी आधार, जिसमें "कठिन" अवधारणाएँ शामिल हैं, वास्तव में सक्षम प्रोग्रामरों के लिए अनिवार्य है।
पॉइंटर्स और रेकर्शन के लिए तर्क करने की क्षमता, अमूर्त सोच और एक साथ कई स्तरों पर समस्या को देखने की योग्यता चाहिए।
जावा स्कूल्स कम पड़ते हैं। केवल जावा और ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग पर केंद्रित विश्वविद्यालय छात्रों को आवश्यक कौशल नहीं दे पाते। पॉइंटर्स (अक्सर C में सिखाए जाते हैं) और रेकर्शन (फंक्शनल प्रोग्रामिंग) जैसी अवधारणाएँ पारंपरिक रूप से "छंटनी" वाली होती हैं जो मानसिक चुस्ती विकसित करती हैं। इनके बिना ऑपरेटिंग सिस्टम जैसे निम्न-स्तरीय सिस्टम या पैरेलल प्रोसेसिंग जैसे उच्च-स्तरीय अमूर्तताओं को समझना मुश्किल होता है।
सिंटैक्स से परे। C या स्कीम जैसी भाषाएँ सीखने का मूल्य केवल उन भाषाओं को जानना नहीं, बल्कि वे मस्तिष्क को जिस तरह प्रशिक्षित करती हैं, उसमें है। ये प्रोग्रामरों को मेमोरी प्रबंधन, प्रदर्शन और विभिन्न अमूर्तता स्तरों के बारे में सोचने के लिए मजबूर करती हैं। यह मानसिक लचीलापन मजबूत सॉफ्टवेयर आर्किटेक्चर डिजाइन करने और जटिल समस्याओं से निपटने के लिए आवश्यक है।
नवाचार पर प्रभाव। इन मूल अवधारणाओं की कमी नवाचार में बाधा डाल सकती है। उदाहरण के लिए, Google के स्केलेबिलिटी के लिए मूलभूत MapReduce एल्गोरिदम सीधे फंक्शनल प्रोग्रामिंग अवधारणाओं (Map और Reduce) से प्रेरित है। जिन कंपनियों के डेवलपर्स के पास यह पृष्ठभूमि नहीं है, वे ऐसे पैरेडाइम्स को समझने या आविष्कार करने में संघर्ष कर सकते हैं।
4. सॉफ्टवेयर विकास कंप्यूटर विज्ञान से अलग एक कला है, जो व्यावहारिक कौशल और स्पष्ट संचार की मांग करती है।
तकनीकी विषयों पर स्पष्ट रूप से लिख पाने की क्षमता एक साधारण योगदानकर्ता प्रोग्रामर और एक नेता के बीच का अंतर है।
CS बनाम विकास। कंप्यूटर विज्ञान की डिग्री सैद्धांतिक आधार प्रदान करती है, लेकिन स्वचालित रूप से सॉफ्टवेयर विकास नहीं सिखाती। व्यावहारिक, प्रोग्रामिंग-केंद्रित पाठ्यक्रम वास्तविक कोडिंग अनुभव के लिए आवश्यक हैं। कई प्रतिष्ठित विश्वविद्यालय सिद्धांत को प्राथमिकता देते हैं, व्यावहारिक कौशल कहीं और सीखना पड़ता है।
लेखन का महत्व। स्पष्ट रूप से लिखने और संवाद करने की क्षमता प्रोग्रामरों के लिए अत्यंत महत्वपूर्ण है। यह प्रचार-प्रसार (जैसे लिनस टॉर्वाल्ड्स का लिनक्स के साथ), संगठन के भीतर प्रभावी संवाद, स्पष्ट विनिर्देश और दस्तावेज़ीकरण, और सहयोग को सक्षम बनाता है। जो प्रोग्रामर अच्छी तरह लिखते हैं, वे अधिक प्रभावशाली और व्यवसाय के लिए मूल्यवान होते हैं।
इन-हाउस जॉब्स की चुनौतियाँ। कई प्रोग्रामिंग नौकरियाँ गैर-सॉफ्टवेयर कंपनियों के लिए "इन-हाउस सॉफ्टवेयर" से जुड़ी होती हैं। ये भूमिकाएँ अक्सर संतोषजनक नहीं होतीं क्योंकि:
- काम अक्सर त्वरित होता है, न कि सुरुचिपूर्ण।
- परियोजनाएँ "पर्याप्त अच्छा" होने पर रुक जाती हैं, जिससे सुधार की गुंजाइश कम होती है।
- प्रोग्रामरों की स्थिति मुख्य व्यवसाय कर्मचारियों की तुलना में कम होती है।
जहाँ सॉफ्टवेयर ही व्यवसाय है, वहाँ उत्पाद कंपनियाँ डेवलपर्स को शिल्प कौशल में गर्व और करियर उन्नति के अधिक अवसर देती हैं।
5. सफल सॉफ्टवेयर डिज़ाइन उपयोगिता से परे सामाजिक गतिशीलता और भावनात्मक जुड़ाव को भी समेटता है।
एक ऐसा एप्लिकेशन जो वास्तव में कुछ बेहतरीन करता है जिसे लोग करना चाहते हैं, भले ही वह उपयोग में कठिन हो, फिर भी सफल हो सकता है।
उपयोगिता आवश्यक है, पर्याप्त नहीं। सॉफ्टवेयर को उपयोग में आसान बनाना महत्वपूर्ण है, लेकिन सफलता के लिए यह अकेला कारण नहीं है। ऐसे उत्पाद जो मजबूत जरूरत को पूरा करते हैं या आकर्षक फीचर्स देते हैं, खराब उपयोगिता के बावजूद सफल हो सकते हैं (जैसे प्रारंभिक नैपस्टर, टेक्स्ट मैसेजिंग)। इसके विपरीत, अत्यंत उपयोगी सॉफ्टवेयर जो समस्या हल नहीं करता, विफल होगा।
सामाजिक इंटरफ़ेस डिज़ाइन। मानव-मानव संवाद को मध्यस्थता करने वाले सॉफ्टवेयर (जैसे सोशल नेटवर्क, फोरम) के लिए "सामाजिक इंटरफ़ेस" महत्वपूर्ण है। यह इस बात का डिज़ाइन है कि सॉफ्टवेयर उपयोगकर्ता व्यवहार और समुदाय की गतिशीलता को कैसे प्रभावित करता है। यह समाज की सफलता में मदद करता है, भले ही इसका मतलब व्यक्तिगत उपयोगकर्ताओं पर कुछ प्रतिबंध लगाना हो (जैसे स्पैम स्वीकार्यता को नकली बनाना)।
भावनात्मक अपील मायने रखती है। बेहतरीन सॉफ्टवेयर अक्सर उपयोगकर्ताओं के साथ भावनात्मक रूप से जुड़ता है। इसमें शामिल हैं:
- सौंदर्य और आकर्षण (जैसे iPod का डिज़ाइन)
- हास्य और व्यक्तित्व (जैसे Winamp की वेबसाइट की कॉपी)
- उपयोगकर्ताओं को नियंत्रण में महसूस कराना (जैसे iPod का स्क्रॉल व्हील फीडबैक)
ये तत्व अक्सर शीर्ष प्रतिभा का परिणाम होते हैं और औसत टीमों के लिए दोहराना मुश्किल होते हैं, जिससे स्थायी प्रतिस्पर्धात्मक लाभ बनता है।
6. कठिन, "जटिल" समस्याओं को हल करना वास्तविक व्यावसायिक मूल्य और प्रतिस्पर्धात्मक लाभ का स्रोत है।
बाजार जटिल समस्याओं के समाधान के लिए भुगतान करता है, आसान समस्याओं के लिए नहीं।
मूल्य कठिनाई से आता है। हर काम में एक चुनौतीपूर्ण, अप्रिय मूल समस्या ("मक") होती है। इन कठिन समस्याओं को हल करने की क्षमता को बाजार पुरस्कृत करता है ("पैसा")। आसान समस्याओं पर आधारित व्यवसायों को प्रवेश बाधाओं का सामना करना पड़ता है और प्रतिस्पर्धा तीव्र होती है।
सरल हमेशा मूल्यवान नहीं। सरल, उपयोग में आसान एप्लिकेशन आकर्षक होते हैं, लेकिन यदि वे उपयोगकर्ता या व्यवसाय के लिए महत्वपूर्ण अंतर्निहित जटिलता को हल नहीं करते, तो उनका गहरा मूल्य नहीं होता। जो कंपनियाँ सभी "जटिल" पहलुओं से बचती हैं (जैसे विभिन्न वातावरणों में इंस्टॉल करने योग्य सॉफ्टवेयर का समर्थन), वे अपने बाजार और राजस्व की संभावनाओं को सीमित कर सकती हैं।
डिज़ाइन एक जटिल समस्या है। सुरुचिपूर्ण और अत्यंत उपयोगी सॉफ्टवेयर बनाना स्वयं एक कठिन चुनौती है। इसके लिए महत्वपूर्ण प्रतिभा और प्रयास की आवश्यकता होती है, जो एक स्थायी प्रतिस्पर्धात्मक लाभ का स्रोत बनता है जिसे प्रतियोगी आसानी से नकल नहीं कर सकते, भले ही सतह सरल दिखे। लगातार नई, कठिन समस्याओं को हल करना व्यवसाय को बढ़ने और बाजार का विस्तार करने देता है।
7. यथार्थवादी समय-सारिणी, डेटा से सूचित, स्कोप प्रबंधन और सफल उत्पाद वितरण के लिए आवश्यक है।
आप अपने समय को उन चीज़ों पर खर्च करना चाहते हैं जो सबसे अधिक मूल्य देती हैं। और यह जानना जरूरी है कि आपकी मेहनत की कीमत क्या होगी, इसके बिना आप सही योजना नहीं बना सकते।
डेवलपर्स समय-सारिणी से बचते हैं। प्रोग्रामर अक्सर समय-सारिणी बनाना पसंद नहीं करते, इसे अवास्तविक या बोझिल मानते हैं। हालांकि, समय-सारिणी फीचर प्राथमिकता और संसाधन आवंटन के लिए सूचित निर्णय लेने के लिए आवश्यक है। इनके बिना परियोजनाएँ अक्सर विलंबित हो जाती हैं।
साक्ष्य-आधारित समय-सारिणी (EBS)। एक विश्वसनीय तरीका है काम को छोटे कार्यों (16 घंटे से कम) में विभाजित करना, वास्तविक समय (विच्छेद सहित) ट्रैक करना ताकि व्यक्तिगत "गति" (अनुमान/वास्तविक) निकाली जा सके, और इस ऐतिहासिक डेटा का उपयोग मोंटे कार्लो सिमुलेशन में संभावित शिपिंग तिथियों की भविष्यवाणी के लिए करना। यह व्यक्तिगत अनुमान पूर्वाग्रह और अप्रत्याशित कारकों को ध्यान में रखता है।
समय-सारिणी कटौती को मजबूर करती है। यथार्थवादी समय-सारिणी का एक मुख्य लाभ यह है कि यह दिखाती है जब योजनाबद्ध फीचर्स उपलब्ध समय से अधिक हो जाते हैं। इससे आवश्यक फीचर कटौती होती है, जिससे सबसे मूल्यवान फीचर्स को प्राथमिकता मिलती है और उत्पाद जल्दी रिलीज़ होता है। समय दबाव के कारण कटे फीचर्स अक्सर कम महत्वपूर्ण होते हैं।
8. मौजूदा कोड को पुनर्गठित करना और सुधारना आमतौर पर नए सिरे से शुरू करने से बेहतर होता है।
एक कमज़ोर कंपनी, शायद एक्सप्रेस-पैकेज-डिलीवरी व्यवसाय से आई कोई, कोड को फेंक कर नया शुरू करने का फैसला कर सकती है।
कोड पुनर्लेखन जोखिम भरा है। जब मौजूदा कोड गड़बड़ या वर्तमान उद्देश्य के लिए उपयुक्त न हो, तो नया कोड बेस शुरू करना आकर्षक लगता है। लेकिन यह आमतौर पर गलत होता है क्योंकि यह संचित ज्ञान (बग फिक्स सहित) को खो देता है और अनुमान से कहीं अधिक समय लेता है, अक्सर शिप नहीं होता या नई समस्याएँ लाता है।
सफाई प्रभावी है। बेहतर तरीका है मौजूदा कोड बेस को "साफ़" या पुनर्गठित करना। इसका मतलब है छोटे, तार्किक परिवर्तन करना ताकि आंतरिक संरचना, पठनीयता और रखरखाव में सुधार हो, बिना नए फीचर्स जोड़े या मौजूदा कार्यक्षमता को तोड़े। यह प्रक्रिया क्रमिक और पूर्वानुमेय हो सकती है।
पुनर्गठन के लाभ। कोड की सफाई, यहां तक कि लाइन दर लाइन, नए फीचर्स जोड़ना आसान बनाती है, नए बग्स के आने की संभावना कम करती है (क्योंकि जटिल लॉजिक को फिर से नहीं लिखा जा रहा), और मौजूदा कोड में निहित मूल्यवान ज्ञान को संरक्षित करती है। यह स्वस्थ कोड बेस के लिए अधिक कुशल और कम जोखिम भरा रास्ता है।
9. सॉफ्टवेयर की कीमत निर्धारण में बाजार की गतिशीलता, ग्राहक मूल्य और दीर्घकालिक रणनीति को समझना आवश्यक है।
सबसे बड़ी गलती जो सॉफ्टवेयर कंपनियाँ करती हैं, वह है बहुत कम चार्ज करना, जिससे उन्हें पर्याप्त आय नहीं मिलती और वे बंद हो जाती हैं। उससे भी बड़ी गलती, हाँ, सबसे बड़ी गलती से भी बड़ी, है बहुत अधिक चार्ज करना, जिससे ग्राहक नहीं मिलते और वे बंद हो जाती हैं।
मांग वक्र नीचे की ओर झुका होता है। सामान्यतः, जितनी अधिक कीमत होगी, उतने कम ग्राहक खरीदेंगे। लक्ष्य मात्र इकाइयों की बिक्री अधिकतम करना नहीं, बल्कि...
[त्रुटि: उत्तर अधूरा है]
अंतिम अपडेट:
समीक्षाएं
मोर जोएल ऑन सॉफ्टवेयर जोएल स्पोलस्की द्वारा लिखे गए ब्लॉग पोस्टों का संग्रह है, जो सॉफ्टवेयर विकास और व्यवसाय के विभिन्न पहलुओं को समेटे हुए है। पाठक स्पोलस्की की चतुराई, गहरी समझ और स्पष्ट लेखन शैली की खूब सराहना करते हैं। यह पुस्तक प्रोग्रामिंग, प्रबंधन और सॉफ्टवेयर उद्योग से जुड़ी महत्वपूर्ण सलाह प्रदान करती है। हालांकि कुछ सामग्री पुरानी हो सकती है, फिर भी कई सिद्धांत आज भी प्रासंगिक बने हुए हैं। समीक्षकों ने इस पुस्तक को आनंददायक और ज्ञानवर्धक पाया, खासकर उन लोगों के लिए जो सॉफ्टवेयर विकास या उद्यमिता में हैं। कुछ आलोचकों ने पिछली रचनाओं से दोहराव और पुरानी जानकारी की ओर इशारा किया है, लेकिन कुल मिलाकर, यह पुस्तक अपनी व्यावहारिक बुद्धिमत्ता और रोचक विषय-वस्तु के लिए अच्छी तरह स्वीकार की गई है।
Joel On Software Series
Similar Books









