स्पेगेटी कोड

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

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

राष्ट्रीय मानक और प्रौद्योगिकी संस्थान द्वारा 1980 के प्रकाशन में, वाक्यांश स्पेगेटी प्रोग्राम का उपयोग खंडित और बिखरी हुई फाइलों वाले पुराने कार्यक्रमों का वर्णन करने के लिए किया गया था।

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

इतिहास
यह स्पष्ट नहीं है कि स्पेगेटी कोड वाक्यांश आम उपयोग में कब आया; हालाँकि, 1977 में गाइ स्टील की मैकरोनी इज़ बेटर दैन स्पेगेटी सहित कई संदर्भ सामने आए। 1978 की पुस्तक ए प्राइमर ऑन डिसिप्लिन्ड प्रोग्रामिंग यूजिंग पीएल/आई, पीएल/सीएस, एंड पीएल/सीटी में, रिचर्ड कॉनवे ने उन प्रोग्रामों का वर्णन किया है जिनकी "स्पेगेटी की प्लेट के समान स्वच्छ तार्किक संरचना होती है", एक वाक्यांश दोहराया गया है 1979 की पुस्तक एन इंट्रोडक्शन टू प्रोग्रामिंग उन्होंने डेविड ग्रिज़ के साथ मिलकर लिखी थी। 1988 के पेपर ए स्पाइरल मॉडल ऑफ सॉफ्टवेयर डेवलपमेंट एंड एन्हांसमेंट में, इस शब्द का उपयोग कोड और फिक्स मॉडल के पुराने अभ्यास का वर्णन करने के लिए किया गया है, जिसमें योजना की कमी थी और अंततः वॉटरफॉल मॉडल का विकास हुआ। 1979 की पुस्तक स्ट्रक्चर्ड प्रोग्रामिंग फॉर द COBOL प्रोग्रामर में, लेखक पॉल नोल ने खराब संरचित स्रोत कोड का वर्णन करने के लिए स्पेगेटी कोड और चूहे के घोंसले वाक्यांशों को पर्यायवाची के रूप में उपयोग किया है।

Ada - यूरोप '93 सम्मेलन में, Ada (प्रोग्रामिंग भाषा) को अपने प्रतिबंधात्मक अपवाद प्रचार तंत्र के कारण स्पेगेटी कोड के बजाय समझने योग्य बनाने के लिए प्रोग्रामर को मजबूर करने के रूप में वर्णित किया गया था।

1981 में द मिशिगन टेक्निक में बेसिकली स्पीकिंग...फोरट्रान बाइट्स शीर्षक वाले कंप्यूटर लैंग्वेज स्पूफ!!, लेखक ने फोरट्रान का वर्णन करते हुए कहा कि इसमें पूरी तरह से स्पेगेटी कोड शामिल है।

रिचर्ड हैमिंग ने अपने व्याख्यानों में इसका वर्णन किया है बाइनरी कोड में शुरुआती प्रोग्रामिंग के संदर्भ में शब्द की व्युत्पत्ति:

"If, in fixing up an error, you wanted to insert some omitted instructions then you took the immediately preceding instruction and replaced it by a transfer to some empty space. There you put in the instruction you just wrote over, added the instructions you wanted to insert, and then followed by a transfer back to the main program. Thus the program soon became a sequence of jumps of the control to strange places. When, as almost always happens, there were errors in the corrections you then used the same trick again, using some other available space. As a result the control path of the program through storage soon took on the appearance of a can of spaghetti. Why not simply insert them in the run of instructions? Because then you would have to go over the entire program and change all the addresses which referred to any of the moved instructions! Anything but that!

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

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

लसग्ना कोड
लसग्ना कोड उस कोड को संदर्भित करता है जिसकी परतें इतनी जटिल और आपस में जुड़ी हुई हैं कि एक परत में परिवर्तन करने से अन्य सभी परतों में परिवर्तन की आवश्यकता होगी।

उदाहरण
यहां बताया गया है कि बेसिक स्पेगेटी कोड का एक साधारण उदाहरण क्या माना जाएगा। प्रोग्राम 1 से 100 तक की प्रत्येक संख्या को उसके वर्ग सहित स्क्रीन पर प्रिंट करता है। इंडेंटेशन का उपयोग कोड और प्रोग्राम द्वारा की जाने वाली विभिन्न क्रियाओं में अंतर करने के लिए नहीं किया जाता है  बयान लाइन नंबरों पर निर्भरता उत्पन्न करते हैं। एक क्षेत्र से दूसरे क्षेत्र में निष्पादन के प्रवाह की भविष्यवाणी करना कठिन है। स्पेगेटी कोड की वास्तविक दुनिया में होने वाली घटनाएँ अधिक जटिल हैं और कार्यक्रम के रखरखाव की लागत में बहुत अधिक वृद्धि कर सकती हैं।

यहाँ एक संरचित प्रोग्रामिंग शैली में लिखा गया समान कोड है:

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

यहाँ एम्बेडेड GOTO कथनों के साथ स्पेगेटी कोड का एक और उदाहरण दिया गया है।

यह भी देखें

 * मिट्टी की बड़ी गेंद, सॉफ्टवेयर का एक टुकड़ा जिसमें कोई बोधगम्य वास्तुकला नहीं है
 * अंतर्राष्ट्रीय अस्पष्ट सी कोड प्रतियोगिता, मनभावन अस्पष्ट सी कोड तैयार करने की प्रतियोगिता
 * तकनीकी ऋण
 * प्रोग्रामिंग शैली के तत्व
 * केवल-लिखने वाली भाषा, ऐसे विचित्र सिंटैक्स वाली भाषा जिसके परिणामस्वरूप कोड समझ से बाहर है

बाहरी संबंध

 * Go To Statement Considered Harmful. The classic repudiation of spaghetti code by Edsger Dijkstra
 * We don't know where to GOTO if we don't know where we've COME FROM by R. Lawrence Clark from DATAMATION, December, 1973
 * Refactoring Java spaghetti code into Java bento code separating out a bowl full of code from one class into seven classes
 * Objects and Frameworks – Taking a Step Back by Brian Rinaldi
 * Programming Pasta - Spaghetti, Lasagna, Ravioli and Macaroni Code
 * Pasta Theory of Programming