सबसे अजीब कोडिंग मानक नियम क्या था जिसे आपको पालन करने के लिए मजबूर किया गया था? [बन्द है]


173

जब मैंने यह सवाल पूछा तो मुझे लगभग हमेशा एक निश्चित हाँ मिली कि आपके पास कोडिंग मानक होने चाहिए।

सबसे अजीब कोडिंग मानक नियम क्या था जिसे आप कभी भी पालन करने के लिए मजबूर थे?

और अजीब तरीके से मेरा मतलब है सबसे मजेदार, या सबसे खराब, या सिर्फ सादा विषम।

प्रत्येक उत्तर में, कृपया बताएं कि कौन सी भाषा, आपकी टीम का आकार क्या था, और इससे आपको और आपकी टीम को कौन से दुष्प्रभाव हुए।


19
इस सूची को पढ़ने के बाद अचानक मुझे ऐसा लगता है कि मैंने इस मजबूर मानक बकवास से बचने के लिए बहुत ही भाग्यशाली कैरियर लिया है!
मैट बी

अगली बार जब मैं एक नौकरी के लिए साक्षात्कार करता हूं, तो मैं इस प्रश्न को "रेड फ्लैग" के रूप में सेवा करने के लिए ब्राउज़ करने जा रहा हूं । भागो! " सूचक। कोडिंग मानक विरोधी पैटर्न, वास्तव में।
स्टु थॉम्पसन

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

जवाबों:


434

जब कई रिटर्न के उपयोग पर प्रतिबंध लगा दिया जाता है तो मुझे इससे नफरत है।


26
इस नियम का माना बिंदु क्या है? व्यक्तिगत रूप से मैं कोड के लिए एक कोड समीक्षा विफल कर दूंगा जिसे दूसरे रिटर्न में डालकर पढ़ना आसान बनाया जा सकता है।
मार्क बेकर

22
दूसरी ओर, शुरुआत में एक विकल्प को समाप्त कर देता है जैसे "if (param == null) return null" आपके कोड को थोड़ा साफ कर सकता है, इसे प्रोत्साहित करने के बजाय इस पर रोक लगाने के लिए कुछ हद तक आपराधिक है।
बिल के पास

39
वर्कअराउंड: यदि ((आरंभ में)) {RetVal = ERR_BADINIT; गोटो वापसी; } (बहुत अधिक कोड) ReturnPoint: वापसी RetVal; } समस्या सुलझ गयी! ;)
मार्क बर्नियर

9
हाल तक तक, कई रिटर्न पर प्रतिबंध लगा दिया गया था। तब तथ्य यह था कि सी से एक बचा हुआ था, सी ++ RAII द्वारा अप्रचलित और 15 लाइनों से कम आकार वाले कार्यों का खुलासा किया गया था। तब से, ब्रेवहार्ट की तरह: "FREEDOM !!!!" ... :
-प

122
आपकी पसंद: यदि कथन हैं तो कई रिटर्न या अधिक नेस्टेड हैं। मैं कई रिटर्न लूंगा।
लांस फिशर

333

रिवर्स इंडेंटेशन। उदाहरण के लिए:

    for(int i = 0; i < 10; i++)
        {
myFunc();
        }

तथा:

    if(something)
        {
// do A
        }
    else
        {
// do B
    }

152
हे भगवान ... क्या मैं उस एक के साथ आए सोशियोपैथ से मिल सकता हूं? वह मुझे एक या दो गलतफहमी के बारे में सिखा सकता है।
जॉन रूडी

23
यह संभवतः सच नहीं हो सकता।
डेन

191
हर बार जब आप इंडेंटेशन को उल्टा करते हैं, भगवान एक रखरखाव डेवलपर को मारता है।
क्रिस वेस्ट

14
OMG, क्या आप मजाक कर रहे हैं?
एंड्रिया अंबू

21
अनमोल बाइट्स बचाता है ... अनमोल, इसे बहुत उपयोग करें
Spikolynn

326

हो सकता है कि आपको जो सबसे अधिक मिला हो, वह न हो, लेकिन मुझे वास्तव में नफरत है जब मुझे डेटाबेस टेबल नामों को 'tbl' के साथ प्रस्तुत करना होगा


5
क्या यह केवल डीबी के लिए मैरी नोटेशन नहीं है?
ARKBAN

19
वैरिएबल उपसर्ग की तरह नहीं है?
ब्रायन आर बॉडी

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

30
मैं वास्तव में तालिका नाम के साथ उपसर्ग किए जाने वाले आईडी कॉलम को पसंद करता हूं। प्रश्नों को लिखना थोड़ा आसान बनाता है। और विदेशी कुंजी के लिए आपके पास विदेशी कुंजी फ़ील्ड कुंजी फ़ील्ड के समान हो सकती है।
क्रेग

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

248

लगभग किसी भी तरह की आयु का अंकन।

आयु संकेतन के साथ समस्या यह है कि यह अक्सर गलत समझा जाता है। मूल विचार चर को उपसर्ग करना था ताकि अर्थ स्पष्ट हो। उदाहरण के लिए:

int appCount = 0; // Number of apples.
int pearCount = 0; // Number of pears.

लेकिन अधिकांश लोग इसका उपयोग प्रकार निर्धारित करने के लिए करते हैं।

int iAppleCount = 0; // Number of apples.
int iPearCount = 0;  // Number of pears.

यह भ्रामक है, क्योंकि हालांकि दोनों संख्या पूर्णांक हैं, हर कोई जानता है, आप सेब की तुलना नाशपाती से नहीं कर सकते।


71
सॉफ़्टवेयर पोस्ट पर इस जोएल को देखें कि हंगेरियन नोटेशन का उचित उपयोग बग्स को कम करने में कैसे मदद कर सकता है: joelonsoftware.com/articles/Wrong.html
flicken

9
बेशक सी के बजाय सी ++ का उपयोग करके आप कोड लिख सकते हैं ताकि सेब नाशपाती की तुलना करते समय कंपाइलर आपको एक त्रुटि दे।
एंड्रियास मैग्यूसन 13

5
हां, जोएल ने इसे सही पाया। काश जोएल के संस्करण को लागू करने के लिए संकलक बनाया जा सकता था।
लोरेन Pechtel

9
"Int cntApples = 0; int cntPeas = 0?" नहीं होना चाहिए? अर्थात। उपसर्ग चर "तरह" है।
Blorgbeard

42
कम से कम पहला वाला सही है ... इसमें "Apple" के साथ सब कुछ "i" के साथ उपसर्ग करने की आवश्यकता है। ;)
जोहान्स चररा

240

जहाँ मैं वर्तमान में काम करता हूँ, वहाँ किसी भी सहायक ऑपरेटर को अनुमति नहीं है:

int value = (a < b) ? a : b;

... क्योंकि हर कोई "इसे प्राप्त नहीं करता है"। यदि आपने मुझसे कहा, "इसका उपयोग न करें क्योंकि हमें संरचनाओं को बहुत जटिल होने पर उन्हें फिर से लिखना होगा" (नेस्टेड टर्नरी ऑपरेटर, किसी को भी?), तो मैं समझूंगा। लेकिन जब आप मुझे बताते हैं कि कुछ डेवलपर्स उन्हें नहीं समझते हैं ... उम ... ज़रूर।


235
हर किसी के द्वारा, आपके बॉस का मतलब खुद होता है।
ब्रायन आर। बॉडी

13
मैं इस शिविर में पड़ता था ... लेकिन इससे बाहर हो गया, और सशर्त ऑपरेटर (जब यह उपयुक्त है) से प्यार करना सीख गया।
जॉन रूडी

22
यदि कुछ भी हो, तो नियम को "हमेशा टर्नरी ऑपरेटर का उपयोग करना चाहिए", शुद्ध सुंदरता का एक ऑपरेटर :)
बॉबी जैक

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

7
आप पूरे नए फ़ंक्शन को लिखे बिना एक स्थिर चर को सशर्त रूप से कैसे आरंभ कर सकते हैं (जो पठनीयता के लिए बहुत अच्छा नहीं होगा)। स्थानीय "चरों" के लिए कास्ट का उपयोग टर्नरी ऑपरेटर के प्रतिबंध की तुलना में कोड को समझने और अनुसरण करने के लिए अधिक अच्छा है।
एंड्रियास मैग्यूसन 13

239

परिवर्तन करते समय किसी भी कोड को हटाने के लिए नहीं। हमें सभी परिवर्तनों पर टिप्पणी करने के लिए कहा गया था। ध्यान रखें कि हम स्रोत नियंत्रण का उपयोग करते हैं। यह नीति लंबे समय तक नहीं चली क्योंकि डेवलपर्स इसके बारे में ऊहापोह में थे और यह कोड को अपठनीय कैसे बनाएगा।


3
मैं वास्तव में नफरत करता हूं ... कुछ लोग हैं जो यहां करते हैं (हालांकि यह एक मानक या कुछ भी नहीं है)
chills42

7
इस तरह के नियम मुझे रंग में दूसरों से विरासत में मिले स्रोत कोड को प्रिंट करने के लिए एक जरूरी क्यों लगता है। एक पृष्ठ पर, मेरी कंपनी के लिए यह बहुत अच्छा नहीं है - लेकिन यह एकमात्र तरीका है कि मैं इसे पढ़ सकता हूं अगर मुझे इसे प्रिंट करना है। (हमें बहुत कुछ विरासत में मिला है जो इस नियम का पालन करता है ...)
जॉन रूडी

3
एक नियम की तरह लगता है विकसित पूर्व स्रोत नियंत्रण। या प्रोग्रामर की वजह से सप्ताह में केवल एक बार चेकिंग होती है।
क्रेग

6
मुझे इन उत्तरों को पढ़ना अच्छा लगता है क्योंकि इससे मेरा काम 100 गुना बेहतर लगता है।
rjh

2
आप के लिए लग रहा है ... हम 4 साल के लिए SVN पर हैं, लेकिन वरिष्ठ डेवलपर इसे नफरत करता है और लगभग दो महीने में एक बार जांचता है, अगले तीन दिन टूटे हुए कोड के बारे में शिकायत करते हुए खर्च करता है: /
विक्टर स्वैब

204

मैंने एक बार माइटी वीबी किंग के अत्याचार के तहत काम किया था ।

वीबी राजा एमएस एक्सेल और VBA, साथ ही डेटाबेस के शुद्ध मास्टर था ( इसलिए अपने उपनाम: वह एक्सेल के साथ खेला जाता है, जबकि डेवलपर्स compilers के साथ काम किया है, और उसे डेटाबेस पर चुनौती देने के अपने कैरियर पर हानिकारक प्रभाव हो सकता था ... )।

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

  • सभी C / C ++ सरणियाँ, इंडेक्स 1 पर शुरू होंगी। 0. के बजाय, वास्तव में, सरणी के पहले इंडेक्स के रूप में 0 का उपयोग अप्रचलित है, और विजुअल बेसिक 6 के इंसुलेटिव एरे इंडेक्स प्रबंधन द्वारा अलग किया गया है।

  • सभी फ़ंक्शन एक त्रुटि कोड लौटाएंगे: VB6 में कोई अपवाद नहीं हैं, इसलिए हमें उनकी आवश्यकता क्यों होगी? ( यानी C ++ में )

  • चूंकि "सभी फ़ंक्शन एक त्रुटि कोड लौटाएंगे" सार्थक प्रकारों को लौटाने वाले कार्यों के लिए व्यावहारिक नहीं है, सभी कार्यों में पहले [आउट / आउट] पैरामीटर के रूप में एक त्रुटि कोड होगा।

  • हमारे सभी कोड त्रुटि कोड की जांच करेंगे ( यह VBScript का सबसे खराब मामला है अगर मैंने अपने करियर में कभी भी इंडेंटेशन देखा ... निश्चित रूप से "अन्य" खंडों को कभी भी संभाला नहीं गया था, वास्तव में बहुत देर तक कोई त्रुटि नहीं मिली थी। )।

  • चूँकि हम C ++ / COM के साथ काम कर रहे हैं, इसलिए इस दिन को शुरू करते हुए, हम अपने सभी DOM यूटिलिटी फ़ंक्शंस को Visual Basic में कोड करेंगे।

  • एएसपी 115 त्रुटियां बुराई हैं। इस कारण से, हम उनसे बचने के लिए अपने VBScript / ASP कोड में त्रुटि पुनः आरंभ करें का उपयोग करेंगे।

  • XSL-T एक ऑब्जेक्ट ओरिएंटेड भाषा है। अपनी समस्याओं को हल करने के लिए विरासत का उपयोग करें ( गूंगा आश्चर्य ने लगभग एक दिन मेरा जबड़ा खोल दिया )।

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

  • हमारे COM मॉड्यूल के COM इंटरफ़ेस में सभी अपवादों को पकड़ें, और उन्हें चुपचाप निपटान करें ( इस तरह, दुर्घटनाग्रस्त होने के बजाय, एक मॉड्यूल केवल तेज दिखाई देगा ... चमकदार! ... जैसा कि हमने ऊपर वर्णित über त्रुटि हैंडलिंग का उपयोग किया है, यह समझने में भी हमें कुछ समय लगा कि वास्तव में क्या हो रहा था ... आपके पास गति और सही परिणाम दोनों नहीं हो सकते हैं? )।

  • आज से, हमारा कोड आधार चार शाखाओं में विभाजित हो जाएगा। हम उनके तुल्यकालन का प्रबंधन करेंगे और सभी बग सुधार / विकास को हाथ से एकीकृत करेंगे।

सभी लेकिन C / C ++ सरणियों , VB DOM उपयोगिता फ़ंक्शंस और XSL-T को OOP भाषा के रूप में हमारे विरोधों के बावजूद लागू किया गया था। बेशक, समय के साथ, कुछ खोजे गए, अहम , टूट गए, और पूरी तरह से छोड़ दिए गए।

बेशक, वीबी किंग की विश्वसनीयता को कभी इसका सामना नहीं करना पड़ा: उच्च प्रबंधन के बीच, वह "शीर्ष बंदूक" तकनीकी विशेषज्ञ बने रहे ...

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


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

31
@jrista: यदि आप मेरे पाठ की वर्तनी पर टिप्पणी नहीं कर रहे हैं, तो कृपया निम्नलिखित को अनदेखा करें ... ... ... ... ... ... ... ... यदि आप मेरे पाठ की टिप्पणी कर रहे हैं, तो कृपया विचार करें (1) सुधारों का प्रस्ताव, (2) वर्तनी को सही करना, या (3) इस बात पर विचार करें कि दुनिया में हर डेवलपर (इससे दूर) मूल अंग्रेजी वक्ता नहीं हैं, इसलिए मुझे लगता है कि गलत वर्तनी को सहन करना न्यूनतम है जो आप कर सकते हैं, या साबित आप फ्रेंच में मुझे सही अनुवाद भेजकर को बेहतर कर सकते हैं ... ^ _ ^ ...
paercebal

4
अगर यह आदमी मेरा बॉस होता, तो मैं उच्च प्रबंधन के हर सदस्य के पास एक लिखित और शिकायतों की लिखित सूची के साथ सीधे जाता और उसे निकाल देता। -1 गेंदों को खुद के लिए खड़े नहीं होने के लिए।
मूसबुल्ला

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

7
@paercebal: एन गनेरेले, c'est सुधारात्मक écrit, sauf que quelques petits erreurs: «स्क्वाच»: ça doit être «स्क्वैश»; «यह एक दिन»: एन सी संदर्भ- là, डायरेट पर «उस दिन»; «रखता प्रक्रियाओं»: «शेयर प्रक्रियाओं»; «चकित» s'écrit «घुटा हुआ»। ऑस्ट्रेलियाई, डैन्स लेस कॉमेंटैरेस, वोस यूज़ेज़ेज़ ने उल्लेख किया है », सी क्यूई डिट्ट être« उल्लेखित »Mais vraiment, tout ça ne justifie pas une telle plainte। एयू गर्भनिरोधक, vous y montrez une excellente marisetrise de l'anglais; बधाई!
intuited

131

80/90 के दशक में वापस, मैंने एक विमान सिम्युलेटर कंपनी के लिए काम किया, जो फोरट्रान का इस्तेमाल करती थी। हमारे फोरट्रान संकलक में चर नामों के लिए 8 वर्णों की सीमा थी। कंपनी के कोडिंग मानकों ने उनमें से पहले तीन को हंगेरियन-नोटेशन शैली की जानकारी के लिए आरक्षित किया है। इसलिए हमें सिर्फ 5 वर्णों के साथ सार्थक चर नाम बनाने की कोशिश करनी थी!


17
विलासिता: हमारे पास सिर्फ 6 वर्ण थे; पैकेज में जी के साथ शुरू होने वाले नाम थे; आंतरिक कार्य सभी शुरू gk; कोड के साथ वर्कस्टेशन ड्राइवर थे जैसे 0p (इसलिए gk0p शुरुआत थी), हमें फोरट्रान नाम के बाकी हिस्सों के लिए दो अक्षर छोड़ दिए। gk0paa, gk0pab, ...
जोनाथन

103
"जब मैं तुम्हारी उम्र का था, तब हमारे पास केवल 2 पात्र थे! और यह मामला असंवेदनशील था!"
pookleblinky

53
हमें बिस्तर पर जाने से 3 घंटे पहले सुबह 2 बजे उठना पड़ता था, फिर अपने कंपाइलर लिखने और कंपनी को काम पर जाने के विशेषाधिकार के लिए भुगतान करना पड़ता था। हमारे चर नामों के लिए हमें केवल A अक्षर की अनुमति थी। तब हमारा मालिक हमारे कोड को हटा देगा और हमारी सूची में हलेलुजाह को गाते हुए नृत्य करेगा।
डेविड अर्नो

12
"50 संभव पहचानकर्ताओं को किसी के लिए पर्याप्त होना चाहिए": पी
क्रिस वेस्ट

5
हेक, बहुत समय पहले हमने जिन बेसिक दुभाषियों के साथ काम किया था, उनमें दो-वर्ण चर नाम थे। 5 की शिकायत क्यों?
डेविड थॉर्नले

107

मैंने ऐसी जगह पर काम किया जिसमें 2 कंपनियों के बीच विलय हुआ था। 'प्रमुख' के पास K & R C (यानी पूर्व-ANSI) में लिखा गया एक प्रमुख सर्वर था। उन्होंने इस प्रारूप का उपयोग करने के लिए जावा टीमों (दोनों कार्यालयों से - संभवतः कुल 20 देवों) को मजबूर किया, जिन्होंने "कंस बहस" के 2 स्तंभों को उल्लासपूर्वक अनदेखा कर दिया और सीधे पागल हो गए:

if ( x == y ) 
    {
    System.out.println("this is painful");
    x = 0;
    y++;
    }

18
मुझे लगता है कि सी और जावा के बीच एक बड़ा दृश्य अंतर बनाए रखने से संक्रमण आसान हो जाएगा। (+1 के लिए "और सीधे पागल हो जाता है।")
जेफरी एल व्हाइटलेज

4
पेटीजॉल्ड द्वारा मूल 'प्रोग्रामिंग विंडोज' में इस्तेमाल किए जाने वाले व्हिटस्मिथ शैली की तरह दिखता है - आंकड़ा! ;)
बॉबी जैक

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

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

6
यह वास्तव में मेरी पसंदीदा शैली है, लेकिन दुनिया में सब कुछ (विजुअल स्टूडियो विशेष रूप से) अन्य मोड में चूक करता है, इसलिए मैंने हार मान ली है। मुझे यह क्यों पसंद है? ब्रेसिज़ हैं निहित कोड "का हिस्सा" - वे के लिए एक एकल बयान "की तरह लग रहे करने के लिए" यह मजबूर करता है, तो है, जो है यह क्या उम्मीद है।
एटारियो

104

मना किया हुआ:

while (true) {

अनुमति:

for (;;) {

4
दूसरों ने तर्क दिया है कि for (;;) {पहली के लिए एक सी मुहावरा है।
रॉबर्ट पी।

69
अगर मुझे आधुनिक, नई-नई उलझी हुई मुस्कुराहट सही से समझ में आती है, तो यह मानक बयान को रोने के लिए दरिद्र बना देता है!
बेन ब्लैंक

15
यह यहां एक वास्तविक नियम है। VC6, (सत्य) के बारे में नहीं, बल्कि (;;) के बारे में एक संकलक चेतावनी जारी करता है। अन्यथा वे समकक्ष हैं। इसलिए हम चेतावनी मुक्त को चुनते हैं।
user9876

22
बज़्ने एस ने अपनी पुस्तक में कहा, "फॉर (;;) को हमेशा की तरह पढ़ा जाना चाहिए"। यदि यह C ++ के निर्माता के लिए पर्याप्त है, तो यह आपके लिए पर्याप्त होना चाहिए। :-)
फ्रैंक क्रुएगर

58
पहले सी प्रोग्राम में मैंने जिस पर काम किया था, किसी ने कभी #define (;;) जोड़ा था तो आप "हमेशा के लिए {}" कह सकते थे
जेम्स क्यूरन सेप

101

मेरा एक दोस्त - हम उसे कोडमॉन्की कहेंगे - उसे अपनी पहली नौकरी कॉलेज से बाहर मिल गई [ कई साल पहले] कोबोल में इन-हाउस डेवलपमेंट। उनके पहले कार्यक्रम को 'हमारे मानकों का अनुपालन नहीं करने' के रूप में खारिज कर दिया गया था क्योंकि यह इस्तेमाल किया गया था ... [कंपकंपी!] नेफेड नेफ्स बयान

कोडिंग मानकों ने नेस्टेड IF स्टेटमेंट्स के उपयोग पर प्रतिबंध लगा दिया

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

यह संकलक बग, निश्चित रूप से, कम से कम एक दशक के लिए तय किया गया था, लेकिन किसी ने मानकों को चुनौती नहीं दी थी । [baaa!]

CodeMonkey मानकों को बदलने में सफल रहा - अंततः!


7
स्टीवन, यह मुझे बंदर प्रयोग कहानी की याद दिलाता है: ओ) freekvermeulen.blogspot.com/2008/08/…
निक डंडौलकिस

5
@ [निक डी]: हां, मुझे भी - इसलिए कोड-नाम "CodeMonkey"; ;-)
स्टीवन ए। लोव


कारण गलत हो सकता है, लेकिन नेस्टेड इफ
manojisions

97

एक बार एक ऐसी परियोजना पर काम किया जहां अंडरस्कोर पर प्रतिबंध लगा दिया गया था। और मेरा मतलब है कि पूरी तरह से प्रतिबंधित है। इसलिए ac # winforms ऐप में, जब भी हमने एक नया ईवेंट हैंडलर (जैसे एक बटन के लिए) जोड़ा तो हमें बटन नाम से डिफ़ॉल्ट विधि का नाम बदलकर (कुछ और) करना होगा, बस उस आदमी के अहंकार को संतुष्ट करना होगा जिसने कोडिंग लिखी थी। मानकों। आज तक मुझे नहीं पता कि उन्होंने विनम्र अंडरस्कोर के खिलाफ क्या किया


23
हो सकता है कि _ उसके कीबोर्ड पर टूट गया हो;)
रोमन प्लैसिल

139
buttonNameUnderscoreClick ()
vitule

9
डीबगिंग के लिए FILE और LINE के उपयोग को रोकने का दुर्भाग्यपूर्ण दुष्परिणाम है। और हेडर फ़ाइलों में "सीआई __cplusplus बाहरी" C "। और stdint.h में अभिन्न प्रकार। और size_t।
स्टीव जेसप

8
अच्छी बात यह थी कि C # तत्कालीन
विन्यासकर्ता

4
मैं गंभीर रूप से अंडरस्कोर को हतोत्साहित करता हूं (हालांकि ऊपर सूचीबद्ध ओपी मामले में नहीं है। यह एक अतिरिक्त दो कीस्ट्रोक्स (शिफ्ट + _) है जो मुझे पसंद नहीं है जब पास्कल या ऊंट का मामला ठीक होगा।
Tnnat

92

पूरी तरह से बेकार डेटाबेस नामकरण सम्मेलनों। हर टेबल का नाम एक नंबर से शुरू करना होगा। संख्याएँ बताती हैं कि तालिका में किस प्रकार का डेटा है।

  • 0: डेटा जो हर जगह उपयोग किया जाता है
  • 1: डेटा जो केवल एक निश्चित मॉड्यूल द्वारा उपयोग किया जाता है
  • 2: लुकअप टेबल
  • 3: कैलेंडर, चैट और मेल
  • 4: लॉगिंग

यह एक तालिका खोजने के लिए कठिन बनाता है यदि आप केवल इसके नाम का पहला अक्षर जानते हैं। इसके अलावा - जैसा कि यह एक mssql डेटाबेस है - हमें हर जगह वर्ग कोष्ठक के साथ टैबलेन को घेरना होगा।

-- doesn't work
select * from 0examples;

-- does work
select * from [0examples];

65
मुझे खेद है, इसलिए बहुत खेद है ...
कर्क स्ट्रूसर

1
वाह - अच्छा एक। मुझे लगता है कि लेटर्स का उपयोग करना सवाल से बाहर था? ऐसा नहीं है कि यह एक अच्छा विचार है, लेकिन कम से कम आपको सभी तालिका नामों को उद्धृत करने की आवश्यकता नहीं है।
मार्क ब्रिटिंघम

दिमाग चकरा रहा है ... कौन आया? डीबीए
13

90

हम C ++ प्रोजेक्ट कर रहे थे और टीम लीड पास्कल आदमी था।

इसलिए हमारे पास एक कोडिंग मानक था जिसमें pesky C और C ++ सिंटैक्स को फिर से परिभाषित करने के लिए फ़ाइल शामिल थी:

#define BEGIN {
#define END }

लेकिन वहाँ और अधिक इंतजार है!

#define ENDIF }
#define CASE switch

आदि इस समय के बाद याद रखना कठिन है।

यह लिया गया था जो पूरी तरह से पठनीय C ++ कोड होता है और टीम लीड को छोड़कर किसी के लिए भी इसे अवैध बना दिया जाता है।

हमें रिवर्स हंगेरियन नोटेशन का भी उपयोग करना था, अर्थात

MyClass *class_pt  // pt = pointer to type

UINT32 maxHops_u   // u = uint32

हालाँकि अजीब तरह से मैं इस तरह बढ़ता गया।


22
भविष्य के लिए
अचूक

2
हंगेरियन नोटेशन ठीक है। गलत हो गया ... ick। एक उचित प्रकार की प्रणाली दोनों को हरा देती है।
थेला

5
तुम्हें पता है, मुझे लगता है कि मैं तुम्हारे साथ हूँ। जब इस तरह से अंत में निपटने के लिए उम्र मौसा लगभग इतना आपत्तिजनक नहीं हैं।
TED

हाहा मुझे उन दिनों में वापस ले जाता है जब मैंने पास्कल से C ++ (लगभग 16 साल पहले) में स्विच किया था। हर बार मैंने एक {मैंने मानसिक रूप से खुद को बताया {{BEGIN ”। कम से कम मेरे लिए तो यह सिर्फ मेरे दिमाग में था।
थोमसट्रेटर

6
जब मैंने MS VC ++ समर्थन में काम किया, तो हमारे पास कई ग्राहक इस तरह लिखे गए रेप्रो कोड जमा कर रहे थे। हमें यह महसूस करने में थोड़ा समय लगा कि यह वास्तव में C ++ में था (उन्होंने #defines को शामिल नहीं किया था)।
JBRWilkinson

88

पूर्व नौकरी में:

  • "सामान्य" टेबल T_ से शुरू होती हैं
  • "सिस्टम" टेबल (आमतौर पर लुकअप) TS_ के साथ शुरू होते हैं (जब वे नहीं करते हैं क्योंकि कोई उस दिन ऐसा महसूस नहीं करता था)
  • क्रॉस-रेफरेंस टेबल TSX_ से शुरू होते हैं
  • सभी फ़ील्ड नाम F_ से शुरू होते हैं

हाँ य़ह सही हैं। सभी क्षेत्र, हर एक तालिका में। ताकि हम यह बता सकें कि यह एक क्षेत्र है।


और आपके पास प्राथमिक कुंजी फ़ील्ड के लिए कोई विशेष उपसर्ग नहीं था ???
क्ज़िमी

2
@Czimi: मैं यह उल्लेख करना भूल गया। प्रत्येक तालिका में FI_ID नामक फ़ील्ड होती है जिसका उपयोग प्राथमिक कुंजी के रूप में किया जाता है।
जेरोमे इरविन

31
पवित्र श ... इस दुःस्वप्न का आविष्कार करने वाले T_guy को F_gun से मार दिया जाना चाहिए और TSX_hell पर भेज दिया जाना चाहिए।
सर्गेई स्कोब्लिकोव

3
हमारे पास सभी क्षेत्रों और तालिकाओं के लिए tbl और fld था। पूरी तरह से बेकार ...
विन्यासकर्ता

5
@configurator: आपके पास सभी फ़ील्ड के लिए "tbl" और सभी तालिकाओं के लिए "fld" है? :-)))
तिमवी

84

मेरे एक दोस्त ने सरकारी नौकरी में रहते हुए इस नियम का सामना किया। ++ (प्री या पोस्ट) के उपयोग पर पूरी तरह से प्रतिबंध लगा दिया गया था। कारण: विभिन्न संकलक इसकी अलग-अलग व्याख्या कर सकते हैं।


5
ठीक है, उस समय आप सही हो सकते हैं?
कर्क स्ट्रैसर

90
पोस्टफ़िक्स और प्रीफ़िक्स के बीच के अंतर को न समझकर कुछ ने काट लिया, कंपाइलर बग का दावा किया, फिर इसे अन्य लोगों पर भड़काया, मुझे लगता है।
बर्नार्ड

5
दरअसल, वे कुछ परिस्थितियों में सही थे। हालांकि बैनिंग शीर्ष पर थोड़ा सा लगता है। उदाहरण के लिए, पंक्ति: एक [i] = i ++; इससे पहले कि यह अनुक्रमणिका या उसके बाद उपयोग किया जाए, मैं बढ़ सकता हूं। भाषा इसे परिभाषित नहीं करती है।
TED

9
वह सही है - जब आप कथन में कहीं और समान चर का उपयोग करते हैं तो संचालन के आदेश की गारंटी नहीं होती है। बस संभावित अस्पष्ट कोड को प्रतिबंधित करें, हालांकि इसके सभी उपयोग नहीं होते हैं!
लोरेन Pechtel

2
के रूप में अच्छी तरह से प्रतिबंध के =रूप में यह अपरिभाषित व्यवहार का कारण हो सकता है।
कॉन्फ़िगरेशन

81

आधी टीम ने चार-स्थान इंडेंटेशन का पक्ष लिया; अन्य आधे ने दो-स्थान इंडेंटेशन का पक्ष लिया।

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


42
टैब की पहचान इतनी शानदार है। हर कोई अपने संपादक में आकार बदल सकता है;)
xardias

41
हाँ, टैब इंडेंटेशन बहुत अच्छा है ... जब तक आप वास्तव में किसी और की फ़ाइल नहीं खोलते हैं, और चीजों को गलत तरीके से ढूंढते हैं क्योंकि रिक्त स्थान मिश्रित हो गए हैं जहां उन्हें नहीं होना चाहिए, या जहां उन्हें होना चाहिए वहां मिला नहीं। फिर आप ऑटो-रिफॉर्मैट, और वर्जन कंट्रोल अलग हो जाते हैं। ओह।
एलन हेंसल

41
यही कारण है कि आप केवल टैब को इंडेंट करने के लिए उपयोग करने वाले हैं, और केवल रिक्त स्थान को संरेखित करने के लिए, और कभी नहीं मिलेंगे। और यदि आप किसी फ़ाइल में व्हॉट्सएप में बदलाव करने जा रहे हैं, तो आपको केवल उस विशेष चेक-इन के लिए ही बदलाव करने की आवश्यकता है।
joh6nn

16
... और वह कभी काम नहीं करता। : पी
रॉबर्ट पी

10
"सभी को समान रूप से अपमानित करने के लिए" ... मुझे यह पसंद है। मुझे अगली बार यह याद रखना होगा कि मैं किसी तरह एक इंडेंटेशन मानकीकरण युद्ध में शामिल हूं।
माइकल बूर 8

74

परावर्तन का उपयोग करने में सक्षम नहीं होने के कारण प्रबंधक ने दावा किया कि इसमें बहुत अधिक 'जादू' शामिल है।


10
हाँ, जादू को बनाए रखना कठिन है, प्रकट रूप से;) LOL, यद्यपि।
रिक ऑक्ट

19
यह शायद सही नियम है, गलत कारणों से :)
बॉबी जैक

71
'मैजिक' के लिए पठन प्रदर्शन ने अदम्य अस्पष्ट दुःस्वप्न कोड को मार दिया। वह सही है।
gbjbaanb 17

4
मुझे लगता है कि आपको तब .Net में कोड करने की अनुमति नहीं थी। आखिरकार, फ्रेमवर्क कैसे कार्यान्वित होता है, इसका बहुत कुछ प्रतिबिंब के माध्यम से होता है।
NotMe

5
उन जादूगरों के साथ नीचे !! हमेशा अपने जादू के साथ , हमारी नौकरियों को चुराने, हमारी महिलाओं को बहकाने और हमारे बच्चों को भ्रष्ट करने के लिए!
ZJR

71

मेरे पास जो सबसे अजीब था, और एक जो मुझे उखाड़ फेंकने में काफी समय लगा, वह था जब हमारी कंपनी के मालिक ने मांग की कि हमारा नया उत्पाद केवल IE हो। यदि यह फ़ायरफ़ॉक्स पर काम कर सकता है, तो यह ठीक था, लेकिन इसे केवल IE होना था।

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

यह जानकर शायद आपको झटका नहीं लगेगा कि हमारी कंपनी दिवालिया हो गई।


1
मैं कहूंगा, यह बहुत अजीब है।
ब्रैड गिल्बर्ट

14
पूंजीवाद के लिए तीन चीयर्स!
स्टारब्लू

46
योग्यतम के अस्तित्व के लिए याय ... यह आदमी अपने सॉफ्टवेयर व्यवसाय चलाने के लायक नहीं था।
मार्क ब्रिटिंघम

10
अंतिम वाक्य महान था। जब वे इस तरह के निर्णय लेते हैं तो किसी को गंभीरता से कैसे लिया जा सकता है?
श्री शिखाडांस

54

सामान्य संख्या वाले पहचानकर्ता नामों का उपयोग करना

मेरे वर्तमान कार्य में हमारे दो नियम हैं जो वास्तव में मायने रखते हैं:

नियम 1: हर बार जब हम डेटाबेस तालिका में एक नया क्षेत्र बनाते हैं तो हमें भविष्य में उपयोग के लिए अतिरिक्त आरक्षित क्षेत्र जोड़ना होगा। इन आरक्षित क्षेत्रों को क्रमांकित किया जाता है (क्योंकि किसी को नहीं पता कि वे किसी दिन कौन सा डेटा धारण करेंगे) अगली बार जब हमें एक नए क्षेत्र की आवश्यकता होगी तो हम पहली बार अप्रयुक्त आरक्षित क्षेत्र की तलाश करेंगे।

इसलिए हम customer.reserve_field_14ग्राहक के ई-मेल पते के साथ समाप्त करते हैं।

एक दिन हमारे बॉस ने रिजर्व टेबल शुरू करने के बारे में सोचा , लेकिन सौभाग्य से हम उसे ऐसा न करने के लिए मना सकते थे।

नियम 2: हमारे उत्पादों में से एक VB6 में लिखा गया है और VB6 में विभिन्न पहचानकर्ता नामों की कुल संख्या की सीमा है और चूंकि कोड बहुत बड़ा है, हम लगातार इस सीमा में चलते हैं। "समाधान" के रूप में सभी स्थानीय चर नाम गिने जाते हैं:

  • Lvarlong1
  • Lvarlong2
  • Lvarstr1
  • ...

यद्यपि यह प्रभावी रूप से पहचानकर्ता सीमा को कम करता है, इन दोनों नियमों ने संयुक्त रूप से इस तरह के सुंदर कोड को जन्म दिया:

...

If Lvarbool1 Then
  Lvarbool2 = True
End If

If Lvarbool2 Or Lvarstr1 <> Lvarstr5 Then
  db.Execute("DELETE FROM customer WHERE " _ 
      & "reserve_field_12 = '" & Lvarstr1 & "'")
End If

...

आप कल्पना कर सकते हैं कि पुराने या किसी और के कोड को ठीक करना कितना कठिन है ...

नवीनतम अपडेट: अब हम निजी सदस्यों के लिए "आरक्षित प्रक्रियाओं" का भी उपयोग कर रहे हैं:

Private Sub LSub1(Lvarlong1 As Long, Lvarstr1 As String)
  If Lvarlong1 >= 0 Then 
    Lvarbool1 = LFunc1(Lvarstr1)
  Else
    Lvarbool1 = LFunc6()
  End If
  If Lvarbool1 Then
    LSub4 Lvarstr1
  End If
End Sub

EDIT: ऐसा लगता है कि यह कोड पैटर्न अधिक से अधिक लोकप्रिय हो रहा है। और जानने के लिए दैनिक डेलीएफ पोस्ट देखें : दृष्टिवैषम्य :)


10
मजाक नहीं। मुझे यकीन है कि यह हमेशा के लिए जाने के लिए और उन सभी SQL इंजेक्शन को हटाने के लिए ले लिया। ;-)
किर्क स्ट्रेसर

वह शुद्ध दुष्टता है। मुझे यकीन है कि आपका बॉस / टीएल एक अधिपति है जो अपने अवसर की प्रतीक्षा कर रहा है।
मैनुअल फेरेरिया

5
omg, इस तरह के नियमों के साथ नरक कौन आएगा ??? सबसे महत्वपूर्ण बात: आपकी टीम कोड का प्रबंधन कैसे करती है ??
hasen

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

2
maibe आप कोड प्रीप्रोसेसिंग का उपयोग कर सकते हैं, जहाँ आप अपने कोड को अर्थफुल चर नामों का उपयोग करके लिखेंगे और फिर '% s / ईमेल / Reserve_field_12 / g';) जैसे कुछgtinh को संकलित करने से पहले इसे "सही वाले" से बदल देंगे
João Portela

53

वापस मेरे C ++ दिनों में हमें ==,> =, <=, &&, आदि का उपयोग करने की अनुमति नहीं थी ...

if (bob EQ 7 AND alice LEQ 10)
{
   // blah
}

यह स्पष्ट रूप से "सशर्त बग में पुराने आकस्मिक कार्य" से निपटने के लिए था , हालांकि हमारे पास "चर से पहले स्थिरांक" नियम भी था, इसलिए

if (NULL EQ ptr); //ok
if (ptr EQ NULL); //not ok

बस याद है, मैंने जो सबसे सरल कोडिंग मानक सुना था, वह था "कोड लिखें जैसे कि अगला अनुचर एक शातिर मनोरोगी है जो जानता है कि आप कहां रहते हैं।"


1
rofl .. C. में फोरट्रान लिखना
रॉबर्ट पॉलसन

मैं अभी भी n == चर c # में करता हूं। मुझे पता है कि मुझे इसके बारे में चिंता करने की ज़रूरत नहीं है, लेकिन मैं अपनी मदद नहीं कर सकता। अगर मैं इसे दूसरे तरीके से देखता हूं तो मुझे घबराहट होती है। पुरानी आदतें मुश्किल से जाती हैं।
ट्रॉय हॉवर्ड

मनोरोगी के बारे में आखिरी कुछ लोगों को लगभग तुरंत ही मार दिया जाएगा।
श्री शिखाडांस ०

31
शातिर मनोरोगी के लिए +1।
लालटेन

मंचों पर कोड पोस्ट करते समय, मैं कभी-कभी एलटी और एसएचएल जैसी चीजों का उपयोग करूंगा, ताकि ऑपरेटरों को एचटीएमएल के रूप में पिघलाया जा सके।
सुपरकैट

45

सामान्य रूप में हंगेरियन अंकन।


11
खैर, मुझे एक पृष्ठ पर नियंत्रण के लिए एच / एन पसंद है। यह बहुत आसान है कि इंटेलीजेंसी ड्रॉपडाउन में सभी टेक्स्टबॉक्स नियंत्रणों को पाया जाए, जब मुझे सभी को देखना है तो txtFooBar।
cciotti

20
विशाल संकेतन बुराई नहीं है, बस ठीक से उपयोग करने की आवश्यकता है joelonsoftware.com/articles/Wrong.html
Czimi

1
मैं नियंत्रण के संबंध में स्वीकार करूंगा। तब हंगेरियन नोटेशन मददगार हो सकता है। सामान्य तौर पर, मुझे लगता है कि हंगेरियन नोटेशन अप्रचलित है, और आम तौर पर इसका दुरुपयोग होता है। यह मूल इरादे से बह गया है।
vfilby

9
बुरी तरह से दुरुपयोग, हाँ। गलत, नहीं।
लोरेन Pechtel

2
बहुत से लोग I, IEnumerable, IList के साथ एक इंटरफ़ेस नाम शुरू करते हैं ... .Net फ्रेमवर्क में इंटरफेस एक I.
tuinstoel

43

मेरे पास बहुत सारे बेवकूफ नियम हैं, लेकिन बहुत कुछ ऐसा नहीं है जिसे मैं सर्वथा अजीब मानता हूं।

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

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

एक विशिष्ट असाइनमेंट स्टेटमेंट (पहले से ही Ada में क्रिया) कुछ इस तरह दिख रहा है:

NABC_The_Package_Name.X := NABC_The_Package_Name.X + 
  CXYZ_Some_Other_Package_Name.Delta_X;

सौभाग्य से वे कम से कम प्रबुद्ध थे जो हमें 80 से अधिक स्तंभों की अनुमति देने के लिए पर्याप्त थे! फिर भी, सुविधा मस्सा से काफी नफरत की गई थी कि मस्सा से छुटकारा पाने के लिए Ada "renames" का उपयोग करने के लिए सभी के स्रोत फ़ाइलों के शीर्ष पर बॉयलरप्लेट कोड बन गया। प्रत्येक आयातित ("मुरझाया हुआ") पैकेज के लिए एक नाम होगा। ऐशे ही:

package Package_Name renames NABC_Package_Name;
package Some_Other_Package_Name renames CXYZ_Some_Other_Package_Name;
--// Repeated in this vein for an average of 10 lines or so

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

with CANT_Interface_Package;
with WONT_Interface_Package;

1
उस सब के साथ और नासा अभी भी पता नहीं लगा सका है कि किलोमीटर या मील में गणना करना है ...
NotMe

16
धिक्कार है, और मुझे वास्तव में लगा कि आप सभी बाहर जाने वाले हैं और एक CUN * _ और W * NK_ पैकेज नामकरण सम्मेलन का उपयोग कर रहे हैं। क्षमा करें, मेरे पास धीमी गति से जलने वाला, विस्फोटक, पाठीय ट्यूरेट है। लेकिन तुम्हारा बहुत था, बहुत, मजेदार!
डिफेमेटा

41

जब मैंने एक स्थान पर काम करना शुरू कर दिया, और अपने कोड को स्रोत नियंत्रण में दर्ज करना शुरू कर दिया, तो मेरे बॉस अचानक मेरे पास आए, और मुझे इतना कम करने के लिए कहा। उन्होंने मुझे बताया कि यह एक डेवलपर के लिए प्रति दिन 1 से अधिक प्रतिबद्ध करने के लिए हतोत्साहित किया जाता है क्योंकि यह स्रोत नियंत्रण को सीमित करता है। मैं बस उस पर ...

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


ईमेल हाइलाइट करें, हटाएं पर क्लिक करें
TheLQ

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

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

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

34

Sql Server 2000 में संग्रहीत कार्यविधियों के माध्यम से सभी डेटाबेस क्वेरीज़ करना। जटिल मल्टी-टेबल क्वेरीज़ से सरल लोगों तक जैसे:

select id, name from people

प्रक्रियाओं के पक्ष में तर्क थे:

  • प्रदर्शन
  • सुरक्षा
  • रख-रखाव

मुझे पता है कि प्रक्रिया विषय काफी विवादास्पद है, इसलिए बेझिझक मेरे जवाब को गोल कर दें;)


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

2
मैं मानता हूं कि सामान्य उद्देश्यों के लिए यह 100% wtf नहीं है, लेकिन इस लिंक को देखें: codinghorror.com/blog/archives/000292.html
azkotoki

2
"SP का उपयोग करने के लिए सुरक्षा मुख्य कारण है" नहीं SQL सर्वर में SP के बारे में कुछ भी अधिक सुरक्षित नहीं है। उन्हें केवल तभी सुरक्षित किया जाता है जब उन्हें एक अलग-अलग प्रश्नों के रूप में कहा जाता है, जो कि गतिशील एसक्यूएल के साथ ही किया जा सकता है।
फ्लोरी ऑक्ट

4
नाह: स्पार्क्स उपयोगी हैं। हालांकि यह कई बार दर्द हो सकता है, आप एक बेहतर, अधिक पुन: प्रयोज्य डेटाबेस इंटरफ़ेस लिखना समाप्त करते हैं। आपके dba की प्रदर्शन समस्याओं का विश्लेषण करने का एक आसान समय भी हो सकता है और ऐप कोड परिवर्तन के बिना उत्पादन प्रणाली को अपडेट कर सकता है। मैं हालांकि स्पोक्स में बिज़ लॉजिक की वकालत नहीं करता।
रॉबर्ट पॉलसन

4
संकलित कोड में प्रश्नों को दफनाना एक ऐसा दर्द है, मैं अकेले अमूर्त के लिए 100% sprocs नीति के पीछे 100%
हूं

33

कोड की प्रति 1000 लाइनों में 165 यूनिट परीक्षण (जरूरी नहीं कि स्वचालित हो) होना चाहिए। यह लगभग 8 लाइनों के लिए एक परीक्षण में काम करता है।

कहने की जरूरत नहीं है, कोड की कुछ पंक्तियां काफी लंबी हैं, और फ़ंक्शंस इस पॉइंटर्स को चैनिंग की अनुमति देते हैं।


कैसे एक इकाई परीक्षण स्वचालित नहीं है।
पिल्ला 10

वे जादू नंबर 8 के साथ कैसे आए?
रोहित

1
164 होने पर क्या होता है? 166?
डैनियल डारनास

8
6 लाइनों की तरह।
पुनरावर्ती

1
यह इस बात पर निर्भर करता है कि आपके परीक्षण कितने बारीक हैं, मुझे लगता है। मैं function(x).should == 2एक ही परीक्षण करना चाहूंगा, जबकि अन्य एक साथ 10 को बंडल करेंगे और इसे एक ही परीक्षण कहेंगे।
ओरियन एडवर्ड्स

30

हमें कक्षाओं में सभी कार्यों को वर्णानुक्रम में क्रमबद्ध करना था, ताकि उन्हें "खोजने में आसान" बनाया जा सके। कभी भी विचार नहीं था कि विचारधारा नीचे है। वह बहुत अधिक क्लिक था।

(एक ही टेक लीड ने हमारे स्रोत कोड से सभी टिप्पणियों को हटाने के लिए एक ऐप लिखा है)।


3
ठीक है, 'कारण टिप्पणियाँ सिर्फ अव्यवस्था हैं, आखिरकार ... और सोचें कि संकलन के समय पूर्व-प्रोसेसर कितने चक्र बचाता है! (ऐप नियम से भी मजेदार है। अच्छा है।)
ओज्र्क

7
बेशक! डेवलपर्स को कोड लिखना चाहिए, टिप्पणी लिखने में समय बर्बाद नहीं करना चाहिए :)
डैनियल रिकोव्स्की

2
हाँ! और टिप्पणियाँ बिल्ड को धीमा कर देती हैं!
ग्रेग डी

2
फिर भी मुझे लगता है कि सदस्यों को प्रकार (फ़ील्ड, गुण, विधियाँ) और नाम के अनुसार क्रमबद्ध करना एक अच्छा नियम है
abatishchev

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

29

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

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

किसी भी दर पर, उन्होंने अपने प्राइम-आधारित सॉफ़्टवेयर के लिए कई कोडिंग मानक स्थापित किए, जिनमें से कई दो बुनियादी स्थितियों से प्राप्त हुए: 1) 80-कॉलम डंबल टर्मिनलों का उपयोग, और 2) तथ्य यह है कि 'प्राइम डन' के बाद से t के पास एक विज़ुअल एडिटर है, वह खुद लिखेगा। पिक कोड की जादुई पोर्टेबिलिटी के कारण, वह अपने संपादक को रहस्योद्घाटन में ले आया, और पीसी पर पूरी परियोजना का उपयोग करके बनाया था।

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

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

अरे हाँ। जब आप कोड की प्रत्येक पंक्ति पर टिप्पणी करते हैं, तो यह अंतिम-पंक्ति टिप्पणियों के साथ होती थी। संक्षेप में, प्रत्येक पंक्ति के पहले ६४ अक्षर कोड के लिए थे, फिर एक अर्धविराम था, और फिर आपके १४ वर्णों का वर्णन करने के लिए आपके पास १५ वर्ण थे। संक्षेप में, हम अपने पिक / बेसिक कोड को प्रारूपित करने के लिए असेंबली भाषा के सम्मेलन का उपयोग कर रहे थे। इससे ऐसी चीजें सामने आईं जो इस तरह दिखती थीं:

EVENT.LIST[DATE.INDEX][-1] = _         ;ADD THE MOST RECENT EVENT
   EVENTS[LEN(EVENTS)]                 ;TO THE END OF EVENT LIST

(वास्तव में, 20 वर्षों के बाद मैं अंत में आर / बेसिक की लाइन-कंटिन्यू सिंटैक्स भूल गया हूं, इसलिए यह अलग दिख सकता है। लेकिन आपको यह विचार मिल सकता है।)

इसके अतिरिक्त, जब भी आपको बहु-भाषी टिप्पणियां सम्मिलित करनी थीं, नियम यह था कि आप एक फूल बॉक्स का उपयोग करें:

************************************************************************
**  IN CASE YOU NEVER HEARD OF ONE, OR COULDN'T GUESS FROM ITS NAME,  **
**  THIS IS A FLOWER BOX.                                             **
************************************************************************

हां, प्रत्येक लाइन पर तारांकन बंद करने वालों की आवश्यकता थी। आखिरकार, यदि आपने उसके संपादक का उपयोग किया, तो फूल बॉक्स डालना सिर्फ एक साधारण संपादक कमांड था।

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

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

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


14
+1 जब मुद्रण के लिए टिप्पणी फ़ॉर्मेटर
ब्रैड

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

26

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

और बस चीजों को और बेहतर बनाने के लिए, सभी चर को वैश्विक होना चाहिए था।

उस नौकरी की मेरी सबसे अच्छी यादों में से एक सामान्य विद्रोह का हिस्सा है, जिसने उन मानकों को नष्ट कर दिया।


2
मुझे लगता है कि एक बैठक के कमरे में कागज पर यह अच्छा लग रहा था, लेकिन मुझे प्रोग्रामर को दया
आती है

अंग्रेजी शिक्षक द्वारा डिजाइन किया गया है।
योदी

एक COBOL प्रोग्रामर द्वारा डिज़ाइन किया गया होना चाहिए।
ब्रूनो

बहुत उपयोग किया है चाहिए goto
new123456

26

एक बाहरी-लिखित सी कोडिंग मानक जिसमें नियम था 'ऑपरेटर की पूर्ववर्तीता में निर्मित पर भरोसा न करें, हमेशा ब्रैकेट का उपयोग करें'

निष्पक्ष रूप से, स्पष्ट इरादा प्रतिबंध लगाने का था:

a = 3 + 6 * 2;

के पक्ष में:

a = 3 + (6 * 2);

बात यह थी, यह एक उपकरण द्वारा लागू किया गया था जो C वाक्यविन्यास नियमों का पालन करता था कि '=', '==', '।' और सरणी पहुंच ऑपरेटर हैं। तो कोड की तरह:

a[i].x += b[i].y + d - 7;

के रूप में लिखा जाना था:

((a[i]).x) += (((b[i]).y + d) - 7);

2
हो सकता है ((a) [(i)])। x) + = ((((((b) [(i)]) y) ((d)) - ())); ?
बेहरोज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.