आपकी सबसे विवादास्पद प्रोग्रामिंग राय क्या है?


363

यह निश्चित रूप से व्यक्तिपरक है, लेकिन मैं इसे तर्कपूर्ण बनने से बचने की कोशिश करना चाहता हूं। मुझे लगता है कि यह एक दिलचस्प सवाल हो सकता है अगर लोग इसे उचित तरीके से समझें।

इस प्रश्न के लिए विचार से टिप्पणी थ्रेड से आया मेरा उत्तर करने के लिए "क्या हैं पाँच बातें आप अपने पसंदीदा भाषा के बारे में नफरत?" प्रश्न । मैंने तर्क दिया कि C # में कक्षाओं को डिफ़ॉल्ट रूप से सील किया जाना चाहिए - मैं अपने तर्क को प्रश्न में नहीं डालूंगा, लेकिन मैं इस प्रश्न के उत्तर के रूप में एक पूर्ण विवरण लिख सकता हूं। मैं टिप्पणियों में चर्चा की गर्मी पर आश्चर्यचकित था (वर्तमान में 25 टिप्पणियाँ)।

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

कृपया अपनी राय और तर्क प्रस्तुत करें - मैं लोगों को उन मतों के लिए मतदान करने के लिए प्रोत्साहित करूँगा जो अच्छी तरह से तर्क और दिलचस्प हैं, चाहे आप उनसे सहमत हों या न हों।

जवाबों:


875

प्रोग्रामर जो मौज मस्ती के लिए अपने खाली समय में कोड नहीं करते हैं, वे कभी भी उतने अच्छे नहीं बनेंगे जितना वे करते हैं।

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

(नोट: मैं यह नहीं कह रहा हूँ कि अच्छे प्रोग्रामर प्रोग्रामिंग के अलावा और कुछ नहीं करते हैं, लेकिन वे 9 से 5 तक प्रोग्राम से अधिक करते हैं)


769

एकमात्र "सबसे अच्छा अभ्यास" आपको हर समय उपयोग करना चाहिए "यूज़ योर ब्रेन"।

बहुत से लोग बहुत सारे बैंडवागों पर कूदते हैं और उन चीजों पर तरीकों, पैटर्न, रूपरेखा आदि को बल देने की कोशिश करते हैं जो उन्हें वारंट नहीं करते हैं। सिर्फ इसलिए कि कुछ नया है, या क्योंकि किसी सम्मानित व्यक्ति की राय है, इसका मतलब यह नहीं है कि यह सब फिट बैठता है :)

संपादित करें: बस स्पष्ट करने के लिए - मुझे नहीं लगता कि लोगों को सर्वोत्तम प्रथाओं, मूल्यवान विचारों आदि को अनदेखा करना चाहिए। बस लोगों को आँख बंद करके किसी चीज़ पर विचार किए बिना नहीं चलना चाहिए कि यह "बात" इतनी महान क्यों है, क्या यह मेरे लिए लागू है क्या कर रहा हूँ, और क्या लाभ / कमियाँ यह लाता है?


711

"गोग्लिंग इट" ठीक है!

हां, मुझे पता है कि कुछ लोगों को यह पता चलता है कि प्रोग्रामिंग पुस्तकों के उनके वर्षों के गहन संस्मरण और / या शानदार ढेर ऐसे संसाधन से गिरने लगे हैं कि कोई भी सेकंड के भीतर पहुंच सकता है, लेकिन आपको लोगों के खिलाफ नहीं रखना चाहिए इसका उपयोग करें।

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

क्या महत्वपूर्ण है कि आप सामग्री को समझें, इसे एक सफल प्रोग्रामिंग समाधान के अंत के साधन के रूप में उपयोग करें, और क्लाइंट / आपका नियोक्ता परिणामों से खुश है।

(हालाँकि यदि आपको हॉलुकिनट्री बात कर रहे मेंढकों से जवाब मिल रहा है, तो आपको शायद सभी को कुछ मदद मिलनी चाहिए)


710

कोड में अधिकांश टिप्पणियां वास्तव में कोड दोहराव का एक शानदार रूप हैं।

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

मुझे लगता है कि अंततः बहुत से लोग उन्हें खाली कर देते हैं, विशेष रूप से उन फूलों के मठों को।

कोड को पठनीय बनाने, आवश्यक के रूप में रीफैक्टरिंग, और मुहावरों और विचित्रता को कम करने पर ध्यान केंद्रित करने के लिए बहुत बेहतर है।

दूसरी ओर, कई पाठ्यक्रम सिखाते हैं कि टिप्पणियाँ कोड की तुलना में बहुत अधिक महत्वपूर्ण हैं, इस अगली पंक्ति के लिए अग्रणी टिप्पणी की चालान शैली में एक जोड़ता है


693

XML अत्यधिक ओवररेटेड है

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

मेरे 5 सेंट


678

सभी प्रोग्रामर समान नहीं बनाए जाते हैं

अक्सर प्रबंधकों को लगता है कि डेवलपर == डेवलपरबी केवल इसलिए क्योंकि उनके पास समान स्तर का अनुभव है और इसी तरह। वास्तव में, एक डेवलपर का प्रदर्शन 10x या दूसरे का 100x भी हो सकता है।

इसके बारे में बात करना राजनीतिक रूप से जोखिम भरा है, लेकिन कभी-कभी मुझे ऐसा लगता है कि भले ही टीम के कई सदस्य समान कौशल के साथ दिखाई दें, लेकिन हमेशा ऐसा नहीं होता है। मैंने ऐसे मामले भी देखे हैं जहां लीड डेवलपर्स 'उम्मीद से परे' थे और जूनियर देवों ने सभी वास्तविक काम किए थे - मुझे यकीन है कि उन्हें क्रेडिट मिला था, हालांकि। :)


614

मैं यह समझने में विफल हूं कि लोग क्यों सोचते हैं कि जावा विश्वविद्यालयों में सिखाई जाने वाली "सबसे पहले" प्रोग्रामिंग भाषा है।

एक के लिए, मेरा मानना ​​है कि पहली प्रोग्रामिंग भाषा ऐसी होनी चाहिए जो नियंत्रण प्रवाह और चर सीखने की आवश्यकता पर प्रकाश डालती है, न कि वस्तुओं और वाक्यविन्यास पर।

दूसरे के लिए, मेरा मानना ​​है कि जिन लोगों को C / C ++ में मेमोरी लीक में डिबगिंग का अनुभव नहीं है, वे पूरी तरह से इस बात की सराहना नहीं कर सकते हैं कि जावा मेज पर क्या लाता है।

इसके अलावा, प्राकृतिक प्रगति "मैं यह कैसे कर सकता हूं" से "मैं उस पुस्तकालय को कैसे ढूंढ सकता हूं जो ऐसा करता है" और दूसरे तरीके से नहीं।


541

यदि आप केवल एक भाषा जानते हैं, चाहे आप इसे कितनी भी अच्छी तरह से जानते हों, आप एक बेहतरीन प्रोग्रामर नहीं हैं।

ऐसा प्रतीत होता है कि एक बार आप C # या Java या किसी अन्य भाषा में जो आपने सीखना शुरू कर दिया है, उसे बोलना अच्छा लगता है। मुझे यह विश्वास नहीं है- मैंने जो भी भाषा सीखी है, वह मुझे प्रोग्रामिंग के बारे में कुछ नया सिखाती है, जिसे मैं अन्य सभी के साथ अपने काम में वापस लाने में सक्षम हूं। मुझे लगता है कि जो कोई भी एक भाषा के लिए खुद को प्रतिबंधित करता है, वह कभी भी उतना अच्छा नहीं होगा जितना वे हो सकते हैं।

यह मुझे पूछताछ और प्रयोग करने की इच्छा की एक निश्चित कमी की ओर संकेत करता है जो कि उन गुणों के साथ जरूरी नहीं है जो मुझे वास्तव में अच्छे प्रोग्रामर में खोजने की उम्मीद है।



488

प्रिंट स्टेटमेंट कोड को डीबग करने का एक मान्य तरीका है

मेरा मानना ​​है कि अपने कोड को System.out.println(या जो भी प्रिंट स्टेटमेंट आपकी भाषा के लिए काम करता है) को लिट कर अपने कोड को डीबग करना पूरी तरह से ठीक है । अक्सर, यह डिबगिंग की तुलना में तेज हो सकता है, और आप ऐप के अन्य रनों के खिलाफ मुद्रित आउटपुट की तुलना कर सकते हैं।

जब आप उत्पादन में जाते हैं तो प्रिंट स्टेटमेंट निकालना सुनिश्चित करें (या बेहतर, उन्हें लॉगिंग स्टेटमेंट में बदल दें)


467

आपका काम खुद को काम से बाहर रखना है।

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

यदि आप किसी बस की चपेट में आ जाते हैं, नौकरी से निकाल दिया जाता है, या नौकरी से निकल जाते हैं, तो आपके नियोक्ता को एक पल की सूचना पर आपको बदलने में सक्षम होना चाहिए, और अगला व्यक्ति आपकी भूमिका में कदम रख सकता है, अपना कोड उठा सकता है और ऊपर उठ सकता है और एक सप्ताह में सबसे ऊपर चल रहा है। यदि वह ऐसा नहीं कर सकता है, तो आप बुरी तरह विफल रहे हैं।

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


465

1) बिजनेस एप्स :

मुझे लगता है कि पूरे "एंटरप्राइज" ढांचे की बात धुआं और दर्पण है। J2EE, .NET, Apache चौखटे के अधिकांश और ऐसी चीज़ों को प्रबंधित करने के लिए अधिकांश अमूर्तताएँ हल करने की तुलना में कहीं अधिक जटिलता पैदा करती हैं।

किसी भी नियमित जावा या .NET ORM, या किसी भी आधुनिक MVC ढांचे को या तो ले लो, जो थकाऊ, सरल कार्यों को हल करने के लिए "जादू" करता है। आप बड़ी मात्रा में बदसूरत एक्सएमएल बॉयलरप्लेट को लिखते हैं जो कि मान्य और जल्दी से लिखना मुश्किल है। आपके पास बड़े पैमाने पर एपीआई हैं, जिनमें से आधे सिर्फ दूसरे एपीआई के काम को एकीकृत करने के लिए हैं, इंटरफेस जो कि रीसायकल करना असंभव है, और अमूर्त कक्षाएं जो केवल जावा और सी # की अनम्यता को दूर करने के लिए आवश्यक हैं। हम बस उस की जरूरत नहीं है।

कैसे के बारे में सभी अपने स्वयं के darned डिस्क्रिप्टर सिंटैक्स, पीढ़ी जटिल डेटाबेस और Groupware उत्पादों के साथ विभिन्न अनुप्रयोग सर्वर?

इसका मतलब यह नहीं है कि जटिलता == बुरा है, यह अनावश्यक जटिलता == बुरा है। मैंने बड़े पैमाने पर एंटरप्राइज़ इंस्टॉलेशन में काम किया है, जहां कुछ आवश्यक थे, लेकिन यहां तक ​​कि ज्यादातर मामलों में कुछ घरेलू-विकसित स्क्रिप्ट और एक साधारण वेब फ्रंटएंड है, जो अधिकांश उपयोग के मामलों को हल करने के लिए आवश्यक है।

मैं इन सभी उद्यमी एप्स को साधारण वेब फ्रेमवर्क, ओपन सोर्स DBs, और ट्रिवियल प्रोग्रामिंग कंस्ट्रक्शन से बदलने की कोशिश करूंगा।

2) एन-वर्षों का अनुभव आवश्यक:

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

3) सामान्य "कंप्यूटर विज्ञान" डिग्री पाठ्यक्रम:

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


439

गेटर्स और सेटर्स अत्यधिक उपयोग किए जाते हैं

मैंने लाखों लोगों को यह दावा करते हुए देखा है कि सार्वजनिक क्षेत्र बुराई हैं, इसलिए वे उन्हें निजी बनाते हैं और उन सभी के लिए गेटर्स और सेटर प्रदान करते हैं। मेरा मानना ​​है कि यह खेतों को सार्वजनिक करने के लिए लगभग समान है, हो सकता है कि यदि आप थ्रेड्स का उपयोग कर रहे हैं (लेकिन आमतौर पर ऐसा नहीं है) या यदि आपके एक्सेसर्स के पास व्यवसाय / प्रस्तुति तर्क (कुछ 'अजीब' कम से कम) है तो यह थोड़ा अलग है।

मैं सार्वजनिक क्षेत्रों के पक्ष में नहीं हूं, लेकिन उन सभी के लिए एक गेटटर / सेटर (या संपत्ति) बनाने के खिलाफ हूं, और फिर दावा कर रहा हूं कि ऐसा करना एनकैप्सुलेशन या जानकारी छिपाना है ... हा!

अपडेट करें:

इस उत्तर ने टिप्पणी में कुछ विवाद खड़ा कर दिया है, इसलिए मैं इसे थोड़ा स्पष्ट करने की कोशिश करूँगा (मैं मूल अछूता छोड़ दूंगा क्योंकि बहुत से लोग अपवित्र हैं)।

सबसे पहले: जो कोई भी सार्वजनिक क्षेत्रों का उपयोग करता है वह जेल के समय का हकदार होता है

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

बहुत लोग सोचते हैं:

private fields + public accessors == encapsulation

मैं कहता हूं कि आपके खेतों के लिए गेट्टर / सेटर जोड़ी की स्वचालित (या नहीं) पीढ़ी प्रभावी रूप से उस तथाकथित एनकैप्सुलेशन के खिलाफ जाती है जिसे आप प्राप्त करने की कोशिश कर रहे हैं।

अंत में, मुझे इस विषय में अंकल बॉब को उद्धृत करें ("क्लीन कोड" के अध्याय 6 से लिया गया):

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



381

राय: SQL कोड है। इसे ऐसे समझो

यही है, अपने सी #, जावा, या अन्य पसंदीदा वस्तु / प्रक्रिया भाषा की तरह, एक प्रारूपण शैली विकसित करें जो पठनीय और रखरखाव योग्य हो।

जब मैं मैला मुक्त-स्वरूपित SQL कोड देखता हूं तो मुझे घृणा होती है। यदि आप किसी पृष्ठ पर घुंघराले ब्रेसिज़ की दोनों शैलियों को देखते समय चिल्लाते हैं, तो जब आप नि: शुल्क स्वरूपित SQL या SQL देखते हैं तो क्यों नहीं चिल्लाते हैं या जोइस स्थिति को अस्पष्ट या बाधित करते हैं?


354

पठनीयता आपके कोड का सबसे महत्वपूर्ण पहलू है।

शुद्धता से भी ज्यादा। यदि यह पठनीय है, तो इसे ठीक करना आसान है। इसे अनुकूलित करना आसान है, बदलना आसान है, समझना आसान है। और उम्मीद है कि अन्य डेवलपर्स भी इससे कुछ सीख सकते हैं।


342

यदि आप एक डेवलपर हैं, तो आपको कोड लिखने में सक्षम होना चाहिए

मैंने पिछले साल काफी साक्षात्कार किया था, और साक्षात्कार के अपने हिस्से के लिए मुझे लोगों के सोचने के तरीके का परीक्षण करना था, और उन्होंने एक सफेद बोर्ड पर सरल-से-मध्यम एल्गोरिदम को कैसे लागू किया। मैं शुरू में सवालों के साथ शुरू कर दिया था:

यह देखते हुए कि फ़ंक्शन 4 का उपयोग करके Pi का अनुमान लगाया जा सकता है (1 - 1/3 + 1/5 - 1/7 + ...) अधिक सटीकता देने वाले शब्दों के साथ, एक फ़ंक्शन लिखें जो 5 दशमलव स्थानों की सटीकता के लिए Pi की गणना करता है। ।

यह एक समस्या है जिसे आपको सोचना चाहिए, लेकिन एक अनुभवी डेवलपर तक पहुंच से बाहर नहीं होना चाहिए (इसका उत्तर C # की लगभग 10 पंक्तियों में दिया जा सकता है)। हालांकि, हमारे कई (माना जाता है कि एजेंसी द्वारा पूर्व-जांच की गई) उम्मीदवार इसका उत्तर देना शुरू नहीं कर सकते, या यह भी बता सकते हैं कि वे इसका उत्तर कैसे दे सकते हैं। इसलिए थोड़ी देर बाद मैंने सरल प्रश्न पूछना शुरू किया:

किसी सर्कल के क्षेत्र को देखते हुए त्रिज्या वर्ग द्वारा पाई दिया जाता है, एक सर्कल के क्षेत्र की गणना करने के लिए एक फ़ंक्शन लिखें।

आश्चर्यजनक रूप से, आधे से अधिक उम्मीदवार इस फ़ंक्शन को किसी भी भाषा में नहीं लिख सकते थे (मैं सबसे लोकप्रिय भाषाओं को पढ़ सकता हूं इसलिए मैंने उन्हें छद्म कोड सहित अपनी पसंद की किसी भी भाषा का उपयोग करने दिया)। हमारे पास "C # डेवलपर्स" थे जो इस फ़ंक्शन को C # में नहीं लिख सकते थे।

मुझे इससे आश्चर्य हुआ। मैंने हमेशा सोचा था कि डेवलपर्स को कोड लिखने में सक्षम होना चाहिए। ऐसा लगता है कि, आजकल, यह एक विवादास्पद राय है। निश्चित रूप से यह साक्षात्कार के उम्मीदवारों के बीच है!


संपादित करें:

टिप्पणियों में बहुत सारी चर्चा है कि क्या पहला प्रश्न अच्छा है या बुरा है, और क्या आपको एक साक्षात्कार में इस बारे में जटिल प्रश्न पूछना चाहिए। मैं यहाँ यह (यह एक नया सवाल है) के अलावा पूरी तरह से पोस्ट के बिंदु याद आ रहे हैं कहने के लिए नहीं जा रहा हूँ ।

हां, मैंने कहा कि लोग इसके साथ कोई हेडवे नहीं बना सकते, लेकिन दूसरा सवाल तुच्छ है और बहुत से लोग किसी एक के साथ कोई हेडवे नहीं बना सकते हैं! जो कोई भी खुद को डेवलपर कहता है, उसे बिना सोचे-समझे कुछ सेकंड में दूसरे को जवाब लिखने में सक्षम होना चाहिए। और कई नहीं कर सकते।


330

आयु संकेतन के उपयोग को मौत की सजा दी जानी चाहिए।

यह विवादास्पद होना चाहिए;)


287

डिजाइन पैटर्न अच्छे डिजाइन को नुकसान पहुंचा रहे हैं, जितना वे इसकी मदद कर रहे हैं।

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

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


274

कम कोड अधिक से बेहतर है!

यदि उपयोगकर्ता कहते हैं कि "यह बात है?", और आपका काम अदृश्य रहता है, तो यह सही है। महिमा कहीं और मिल सकती है।



262

इकाई परीक्षण आपको अच्छा कोड लिखने में मदद नहीं करेगा

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

और इसके अलावा, अच्छे डेवलपर्स सामंजस्य कम रखेंगे, जो मौजूदा सामान के साथ समस्याओं का कारण बनने के लिए नए कोड को जोड़ देगा।

वास्तव में, मैं इसे और भी सामान्य करूंगा,

सॉफ़्टवेयर इंजीनियरिंग में अधिकांश "बेस्ट प्रैक्टिस" खराब प्रोग्रामर को बहुत अधिक नुकसान करने से रोकने के लिए हैं

वे खराब डेवलपर्स को हाथ से पकड़ने और उन्हें डंबास गलतियाँ करने से रोकते हैं। बेशक, चूंकि अधिकांश डेवलपर्स खराब हैं, यह एक अच्छी बात है, लेकिन अच्छे डेवलपर्स को पास होना चाहिए।


256

छोटे-छोटे तरीके लिखिए। ऐसा लगता है कि प्रोग्रामर loooong तरीकों को लिखना पसंद करते हैं जहां वे कई अलग-अलग चीजें करते हैं।

मुझे लगता है कि एक विधि बनाई जानी चाहिए जहां भी आप किसी का नाम रख सकते हैं।


235

कचरा कोड एक बार में लिखना ठीक है

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


196

कोड == डिज़ाइन

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


यहाँ कोड के विषय पर एक लेख है जैसा कि डिजाइन


186

सॉफ्टवेयर डेवलपमेंट सिर्फ एक काम है

मुझे गलत मत समझो, मुझे सॉफ्टवेयर डेवलपमेंट बहुत पसंद है। मैंने पिछले कुछ वर्षों से इस विषय पर एक ब्लॉग लिखा है। मैंने यहाँ पर 5000 समय बिताए हैं> 5000 प्रतिष्ठा अंक। और मैं एक स्टार्ट-अप में काम करता हूं जो आम तौर पर ठेकेदार के रूप में मिल सकता है, क्योंकि टीम शानदार है और काम दिलचस्प है।

लेकिन चीजों की भव्य योजना में, यह सिर्फ एक नौकरी है।

यह कई चीजों जैसे परिवार, मेरी प्रेमिका, दोस्त, खुशी आदि के नीचे महत्व रखता है, और अन्य चीजों के नीचे, अगर मैं नकदी की असीमित आपूर्ति करता था जैसे कि मोटरबाइक्स, नौकायन नौका, या स्नोबोर्डिंग।

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


184

मुझे भी लगता है कि स्रोत नियंत्रण में बायनेरिज़ होने में कुछ भी गलत नहीं है .. अगर इसके लिए एक अच्छा कारण है। अगर मेरे पास एक असेंबली है जिसके लिए मेरे पास स्रोत नहीं है, और जरूरी नहीं कि प्रत्येक देव मशीन पर एक ही जगह हो, तो मैं आमतौर पर इसे "बायनेरी" निर्देशिका में चिपका दूंगा और किसी रिश्तेदार पथ का उपयोग करके इसे परियोजना में संदर्भित कर सकता हूं ।

काफी लोगों को लगता है कि मुझे एक ही वाक्य में "स्रोत नियंत्रण" और "बाइनरी" का उल्लेख करने के लिए दांव पर जला दिया जाना चाहिए। मुझे ऐसी जगहों के बारे में भी पता है जिनके सख्त नियम हैं जो कहती हैं कि आप उन्हें नहीं जोड़ सकते।


180

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


164

सॉफ्टवेयर आर्किटेक्ट्स / डिजाइनर ओवररेटेड हैं

एक डेवलपर के रूप में, मुझे सॉफ्टवेयर आर्किटेक्ट्स के विचार से नफरत है। वे मूल रूप से ऐसे लोग हैं जो अब पूरे समय कोड नहीं करते हैं, पत्रिकाओं और लेखों को पढ़ते हैं, और फिर आपको सॉफ्टवेयर डिजाइन करने का तरीका बताते हैं। केवल वे लोग जो वास्तव में जीवन जीने के लिए पूरा समय सॉफ्टवेयर लिखते हैं, उन्हें ऐसा करना चाहिए। मुझे परवाह नहीं है अगर आप आर्किटेक्ट बनने से पहले 5 साल पहले दुनिया के सर्वश्रेष्ठ कोडर थे, तो आपकी राय मेरे लिए बेकार है।

विवादास्पद कैसे है?

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


152

विकास के लिए "एक आकार सभी फिट बैठता है" नहीं है

मुझे आश्चर्य है कि यह एक विवादास्पद राय है, क्योंकि यह मुझे सामान्य ज्ञान की तरह लगता है। हालाँकि, लोकप्रिय ब्लॉग्स पर "एक आकार फिट बैठता है" को बढ़ावा देने वाली कई प्रविष्टियाँ हैं जो कि विकास के लिए दृष्टिकोण हैं इसलिए मुझे लगता है कि मैं वास्तव में अल्पसंख्यक में हो सकता हूं।

जिन चीजों को मैंने किसी भी परियोजना के लिए सही दृष्टिकोण के रूप में देखा जा रहा है - इससे पहले कि किसी भी जानकारी के बारे में पता हो - टेस्ट ड्रिवेन डेवलपमेंट (TDD), डोमेन ड्रिवेन डिज़ाइन (DDD), ऑब्जेक्ट-रिलेशनल मैपिंग (ORM) के उपयोग जैसी चीज़ें हैं , फुर्तीली (पूँजी A), ऑब्जेक्ट ओरिएंटेशन (OO), इत्यादि इत्यादि सब कुछ कार्यप्रणाली से स्थापत्य कला से घटकों तक। सभी अच्छे विपणन के साथ, बेशक।

यहां तक ​​कि लोग अपने ब्लॉग पर बैज लगाते हुए भी जाते दिखते हैं जैसे कि "आई एम टेस्ट ड्रिवेन" या इसी तरह, जैसे कि एक एकल दृष्टिकोण के लिए उनका सख्त पालन जो भी प्रोजेक्ट प्रोजेक्ट का विवरण वास्तव में एक अच्छी बात है

यह नहीं है।

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

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