HOME

TheInfoList



OR:

Spaghetti code is a
pejorative A pejorative word, phrase, slur, or derogatory term is a word or grammatical form expressing a negative or disrespectful connotation, a low opinion, or a lack of respect toward someone or something. It is also used to express criticism, hosti ...
phrase for difficult-to- maintain and unstructured
computer A computer is a machine that can be Computer programming, programmed to automatically Execution (computing), carry out sequences of arithmetic or logical operations (''computation''). Modern digital electronic computers can perform generic set ...
source code In computing, source code, or simply code or source, is a plain text computer program written in a programming language. A programmer writes the human readable source code to control the behavior of a computer. Since a computer, at base, only ...
. Code being developed with poor structure can be due to any of several factors, such as volatile project requirements, lack of
programming style Programming style, also known as coding style, are the conventions and patterns used in writing source code, resulting in a consistent and readable codebase. These conventions often encompass aspects such as indentation, naming conventions, cap ...
rules, and
software engineer Software engineering is a branch of both computer science and engineering focused on designing, developing, testing, and maintaining software applications. It involves applying engineering principles and computer programming expertise to develop ...
s with insufficient ability or experience.


Meaning

Code that overuses GOTO statements rather than
structured programming Structured programming is a programming paradigm aimed at improving the clarity, quality, and development time of a computer program by making specific disciplined use of the structured control flow constructs of selection ( if/then/else) and repet ...
constructs, resulting in convoluted and unmaintainable programs, is often called spaghetti code. Such code has a complex and tangled
control structure In computer science, control flow (or flow of control) is the order in which individual statements, instructions or function calls of an imperative program are executed or evaluated. The emphasis on explicit control flow distinguishes an '' ...
, resulting in a program flow that is conceptually like a bowl of spaghetti, twisted and tangled. In a 1980 publication by the United States National Bureau of Standards, the phrase ''spaghetti program'' was used to describe older programs having "fragmented and scattered files". Spaghetti code can also describe an
anti-pattern An anti-pattern in software engineering, project management, and business processes is a common response to a recurring problem that is usually ineffective and risks being highly counterproductive. The term, coined in 1995 by computer programmer An ...
in which
object-oriented code Object-oriented programming (OOP) is a programming paradigm based on the concept of '' objects''. Objects can contain data (called fields, attributes or properties) and have actions they can perform (called procedures or methods and implemen ...
is written in a procedural style, such as by creating classes whose methods are overly long and messy, or forsaking object-oriented concepts like polymorphism. The presence of this form of spaghetti code can significantly reduce the comprehensibility of a system.


History

It is not clear when the phrase spaghetti code came into common usage; however, a references appeared in 1972 including ''The principal motivation behind eliminating the goto statement is the hope that the resulting programs will not look like a bowl of spaghetti.'' by Martin Hopkins. In the 1978 book ''A primer on disciplined programming using PL/I, PL/CS, and PL/CT'', Richard Conway described programs that "have the same clean logical structure as a plate of spaghetti", a phrase repeated in the 1979 book ''An Introduction to Programming'' he co-authored with David Gries. In the 1988 paper ''A spiral model of software development and enhancement'', the term is used to describe the older practice of the ''code and fix model'', which lacked planning and eventually led to the development of the
waterfall model The waterfall model is a breakdown of developmental activities into linear sequential phases, meaning that each phase is passed down onto each other, where each phase depends on the deliverables of the previous one and corresponds to a speciali ...
. In the 1979 book ''Structured programming for the COBOL programmer'', author Paul Noll uses the phrases ''spaghetti code'' and ''rat's nest'' as synonyms to describe poorly structured source code. In the ''Ada – Europe '93'' conference, Ada was described as forcing the programmer to "produce understandable, instead of spaghetti code", because of its restrictive exception propagation mechanism. In a 1981 computer languages spoof in ''The Michigan Technic'' titled "BASICally speaking...FORTRAN bytes!!", the author described FORTRAN stating that "it consists entirely of spaghetti code".
Richard Hamming Richard Wesley Hamming (February 11, 1915 – January 7, 1998) was an American mathematician whose work had many implications for computer engineering and telecommunications. His contributions include the Hamming code (which makes use of a Ha ...
described in his lectures the etymology of the term in the context of early programming in binary codes:


Related phrases


Ravioli code

Ravioli code is a term specific to
object-oriented programming Object-oriented programming (OOP) is a programming paradigm based on the concept of '' objects''. Objects can contain data (called fields, attributes or properties) and have actions they can perform (called procedures or methods and impl ...
. It describes code that comprises well-structured classes that are easy to understand in isolation, but difficult to understand as a whole.


Lasagna code

Lasagna Lasagna (, ; ), also known by the plural form lasagne (), is a type of pasta Pasta (, ; ) is a type of food typically made from an Leavening agent, unleavened dough of wheat flour mixed with water or Eggs as food, eggs, and formed in ...
code refers to code whose layers are so complicated and intertwined that making a change in one layer would necessitate changes in all other layers.


Examples

Here follows what would be considered a trivial example of spaghetti code in
BASIC Basic or BASIC may refer to: Science and technology * BASIC, a computer programming language * Basic (chemistry), having the properties of a base * Basic access authentication, in HTTP Entertainment * Basic (film), ''Basic'' (film), a 2003 film ...
. The program prints each of the numbers 1 to 100 to the screen along with its square. Indentation is not used to differentiate the various actions performed by the code, and the program's GOTO statements create a reliance on
line number In computing, a line number is a method used to specify a particular sequence of characters in a text file. The most common method of assigning numbers to lines is to assign every line a unique number, starting at 1 for the first line, and increm ...
s. The flow of execution from one area to another is harder to predict. Real-world occurrences of spaghetti code are more complex and can add greatly to a program's maintenance costs. 1 i=0 2 i=i+1 3 PRINT i;"squared=";i*i 4 IF i>=100 THEN GOTO 6 5 GOTO 2 6 PRINT "Program Completed." 7 END Here is the same code written in a
structured programming Structured programming is a programming paradigm aimed at improving the clarity, quality, and development time of a computer program by making specific disciplined use of the structured control flow constructs of selection ( if/then/else) and repet ...
style: 1 FOR i=1 TO 100 2 PRINT i;"squared=";i*i 3 NEXT i 4 PRINT "Program Completed." 5 END The program jumps from one area to another, but this jumping is formal and more easily predictable, because
for loop In computer science, a for-loop or for loop is a control flow Statement (computer science), statement for specifying iteration. Specifically, a for-loop functions by running a section of code repeatedly until a certain condition has been satisfi ...
s and functions provide flow control whereas the ''goto'' statement encourages arbitrary flow control. Though this example is small, real world programs are composed of many lines of code and are difficult to maintain when written in a spaghetti code fashion. Here is another example of spaghetti code with embedded GOTO statements. INPUT "How many numbers should be sorted? "; T DIM n(T) FOR i = 1 TO T PRINT "NUMBER:"; i INPUT n(i) NEXT i 'Calculations: C = T E180: C = INT(C / 2) IF C = 0 THEN GOTO C330 D = T - C E = 1 I220: f = E F230: g = f + C IF n(f) > n(g) THEN SWAP n(f), n(g) f = f - C IF f > 0 THEN GOTO F230 E = E + 1 IF E > D THEN GOTO E180 GOTO I220 C330: PRINT "The sorted list is" FOR i = 1 TO T PRINT n(i) NEXT i


See also

*
Big ball of mud An anti-pattern in software engineering, project management, and business processes is a common response to a recurring problem that is usually ineffective and risks being highly counterproductive. The term, coined in 1995 by computer programmer An ...
, a piece of software with no perceivable architecture *
International Obfuscated C Code Contest The International Obfuscated C Code Contest (abbreviated IOCCC) is a computer programming contest for Source code, code written in C (programming language), C that is the most creatively obfuscated code, obfuscated. Held semi-annually, it is desc ...
, a competition to produce pleasingly obscure C code *
Technical debt In software development and other information technology fields, technical debt (also known as design debt or code debt) refers to the implied cost of additional work in the future resulting from choosing an expedient solution over a more robust o ...
* '' The Elements of Programming Style''


References


External links


Go To Statement Considered Harmful
The classic repudiation of spaghetti code by
Edsger Dijkstra Edsger Wybe Dijkstra ( ; ; 11 May 1930 – 6 August 2002) was a Dutch computer scientist, programmer, software engineer, mathematician, and science essayist. Born in Rotterdam in the Netherlands, Dijkstra studied mathematics and physics and the ...

''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
{{Webarchive, url=https://web.archive.org/web/20230121050907/https://blog.docsity.com/en/study-tips/programming-2/programming-pasta-spaghetti-lasagna-ravioli-macaroni-code/ , date=2023-01-21
Pasta Theory of Programming
Anti-patterns Articles with example BASIC code Software engineering folklore Pejorative terms related to technology Metaphors referring to spaghetti