Author: Remco C. Veltkamp
Publisher: Springer Science & Business Media
ISBN: 3709194571
Category : Computers
Languages : en
Pages : 178
Book Description
The papers in this volume are a good sampling and overview of current solutions to the problems of creating graphically based systems. This breadth of scope comes out of the closing discussion at the Fourth Eurographics Workshop on Object-Oriented Graphics. The fifth workshop, on Programming Paradigms in Graphics, set out to provide answers and alternatives to the shortcomings of object-oriented graphics. The presentations investigated the applicability, merits and problems of various programming paradigms in computer graphics for design, modelling and implementation. This book contains a revised selection of the best papers from the Fifth Eurograph ics Workshop on Programming Paradigms in Graphics, held 2-3 September 1995 in Maastricht, The ~etherlands. All papers at the workshop were subjected to a thorough review by at least three members of the international programme committee. The se lection for this book was based on further review and the papers also incorporate the relevant aspects of the discussions at the workshop. In past Eurographics workshops on Object-Oriented Graphics the prominent trend has been a discovery of the limits of object-orientation in graphics. The limitations of object-orientation were felt to lie in such areas as the expression of relationships between objects. This is an area of particular strength for the declarative languages, such as constraint-based languages. On the other hand, a notion of state has long been a problem in declarative languages and yet it is often seen as an essential aspect of graphical modelling, particularly in simulation and animation.
Programming Paradigms in Graphics
Author: Remco C. Veltkamp
Publisher: Springer Science & Business Media
ISBN: 3709194571
Category : Computers
Languages : en
Pages : 178
Book Description
The papers in this volume are a good sampling and overview of current solutions to the problems of creating graphically based systems. This breadth of scope comes out of the closing discussion at the Fourth Eurographics Workshop on Object-Oriented Graphics. The fifth workshop, on Programming Paradigms in Graphics, set out to provide answers and alternatives to the shortcomings of object-oriented graphics. The presentations investigated the applicability, merits and problems of various programming paradigms in computer graphics for design, modelling and implementation. This book contains a revised selection of the best papers from the Fifth Eurograph ics Workshop on Programming Paradigms in Graphics, held 2-3 September 1995 in Maastricht, The ~etherlands. All papers at the workshop were subjected to a thorough review by at least three members of the international programme committee. The se lection for this book was based on further review and the papers also incorporate the relevant aspects of the discussions at the workshop. In past Eurographics workshops on Object-Oriented Graphics the prominent trend has been a discovery of the limits of object-orientation in graphics. The limitations of object-orientation were felt to lie in such areas as the expression of relationships between objects. This is an area of particular strength for the declarative languages, such as constraint-based languages. On the other hand, a notion of state has long been a problem in declarative languages and yet it is often seen as an essential aspect of graphical modelling, particularly in simulation and animation.
Publisher: Springer Science & Business Media
ISBN: 3709194571
Category : Computers
Languages : en
Pages : 178
Book Description
The papers in this volume are a good sampling and overview of current solutions to the problems of creating graphically based systems. This breadth of scope comes out of the closing discussion at the Fourth Eurographics Workshop on Object-Oriented Graphics. The fifth workshop, on Programming Paradigms in Graphics, set out to provide answers and alternatives to the shortcomings of object-oriented graphics. The presentations investigated the applicability, merits and problems of various programming paradigms in computer graphics for design, modelling and implementation. This book contains a revised selection of the best papers from the Fifth Eurograph ics Workshop on Programming Paradigms in Graphics, held 2-3 September 1995 in Maastricht, The ~etherlands. All papers at the workshop were subjected to a thorough review by at least three members of the international programme committee. The se lection for this book was based on further review and the papers also incorporate the relevant aspects of the discussions at the workshop. In past Eurographics workshops on Object-Oriented Graphics the prominent trend has been a discovery of the limits of object-orientation in graphics. The limitations of object-orientation were felt to lie in such areas as the expression of relationships between objects. This is an area of particular strength for the declarative languages, such as constraint-based languages. On the other hand, a notion of state has long been a problem in declarative languages and yet it is often seen as an essential aspect of graphical modelling, particularly in simulation and animation.
Windows Graphics Programming
Author: Feng Yuan
Publisher: Prentice Hall Professional
ISBN: 0130869856
Category : Computers
Languages : en
Pages : 1283
Book Description
Currently, there aren't any good books on Windows graphics programming. Programmers looking for help are left to muddle their way through online documentation and API books that don't focus on this topic. This book paves new ground, covering actual graphics implementation, hidden restrictions, and performance issues programmers need to know about.
Publisher: Prentice Hall Professional
ISBN: 0130869856
Category : Computers
Languages : en
Pages : 1283
Book Description
Currently, there aren't any good books on Windows graphics programming. Programmers looking for help are left to muddle their way through online documentation and API books that don't focus on this topic. This book paves new ground, covering actual graphics implementation, hidden restrictions, and performance issues programmers need to know about.
Object-Oriented and Mixed Programming Paradigms
Author: Peter Wisskirchen
Publisher: Springer Science & Business Media
ISBN: 3642610625
Category : Computers
Languages : en
Pages : 196
Book Description
The area of computer graphics is characterized by rapid evolution. New techniques in hardware and software developments, e. g. , new rendering methods, have led to new ap plications and broader acceptance of graphics in fields such as scientific visualization, multi-media applications, computer aided design, and virtual reality systems. The evolving functionality and the growing complexity of graphics algorithms and sys tems make it more difficult for the application programmer to take full advantage of these systems. Conventional programming methods are no longer suited to manage the increasing complexity, so new programming paradigms and system architectures are re quired. One important step in this direction is the introduction and use of object-oriented methods. Intuition teils us that visible graphical entities are objects, and experience has indeed shown that object-oriented software techniques are quite useful for graphics. The expressiveness of object-oriented languages compared to pure procedurallanguages gives the graphics application programmer much better support when transforming his mental intentions into computer code. Moreover, object-oriented software development is a, weil founded technology, allowing software to be built from reusable and extensible compo nents. This book contains selected, reviewed and thoroughly revised vers ions of papers submit ted to and presented at the Fourth Eurographies Workshops on Object-Oriented Graphics, held on May 9-11, 1994 in Sintra, Portugal.
Publisher: Springer Science & Business Media
ISBN: 3642610625
Category : Computers
Languages : en
Pages : 196
Book Description
The area of computer graphics is characterized by rapid evolution. New techniques in hardware and software developments, e. g. , new rendering methods, have led to new ap plications and broader acceptance of graphics in fields such as scientific visualization, multi-media applications, computer aided design, and virtual reality systems. The evolving functionality and the growing complexity of graphics algorithms and sys tems make it more difficult for the application programmer to take full advantage of these systems. Conventional programming methods are no longer suited to manage the increasing complexity, so new programming paradigms and system architectures are re quired. One important step in this direction is the introduction and use of object-oriented methods. Intuition teils us that visible graphical entities are objects, and experience has indeed shown that object-oriented software techniques are quite useful for graphics. The expressiveness of object-oriented languages compared to pure procedurallanguages gives the graphics application programmer much better support when transforming his mental intentions into computer code. Moreover, object-oriented software development is a, weil founded technology, allowing software to be built from reusable and extensible compo nents. This book contains selected, reviewed and thoroughly revised vers ions of papers submit ted to and presented at the Fourth Eurographies Workshops on Object-Oriented Graphics, held on May 9-11, 1994 in Sintra, Portugal.
Literate Programming
Author: Donald Ervin Knuth
Publisher: Stanford Univ Center for the Study
ISBN: 9780937073803
Category : Computers
Languages : en
Pages : 368
Book Description
Literate programming is a programming methodology that combines a programming language with a documentation language, making programs more easily maintained than programs written only in a high-level language. A literate programmer is an essayist who writes programs for humans to understand. When programs are written in the recommended style they can be transformed into documents by a document compiler and into efficient code by an algebraic compiler. This anthology of essays includes Knuth's early papers on related topics such as structured programming as well as the Computer Journal article that launched literate programming. Many examples are given, including excerpts from the programs for TeX and METAFONT. The final essay is an example of CWEB, a system for literate programming in C and related languages. Index included.
Publisher: Stanford Univ Center for the Study
ISBN: 9780937073803
Category : Computers
Languages : en
Pages : 368
Book Description
Literate programming is a programming methodology that combines a programming language with a documentation language, making programs more easily maintained than programs written only in a high-level language. A literate programmer is an essayist who writes programs for humans to understand. When programs are written in the recommended style they can be transformed into documents by a document compiler and into efficient code by an algebraic compiler. This anthology of essays includes Knuth's early papers on related topics such as structured programming as well as the Computer Journal article that launched literate programming. Many examples are given, including excerpts from the programs for TeX and METAFONT. The final essay is an example of CWEB, a system for literate programming in C and related languages. Index included.
Concepts, Techniques, and Models of Computer Programming
Author: Peter Van Roy
Publisher: MIT Press
ISBN: 9780262220699
Category : Computers
Languages : en
Pages : 944
Book Description
Teaching the science and the technology of programming as a unified discipline that shows the deep relationships between programming paradigms. This innovative text presents computer programming as a unified discipline in a way that is both practical and scientifically sound. The book focuses on techniques of lasting value and explains them precisely in terms of a simple abstract machine. The book presents all major programming paradigms in a uniform framework that shows their deep relationships and how and where to use them together. After an introduction to programming concepts, the book presents both well-known and lesser-known computation models ("programming paradigms"). Each model has its own set of techniques and each is included on the basis of its usefulness in practice. The general models include declarative programming, declarative concurrency, message-passing concurrency, explicit state, object-oriented programming, shared-state concurrency, and relational programming. Specialized models include graphical user interface programming, distributed programming, and constraint programming. Each model is based on its kernel language—a simple core language that consists of a small number of programmer-significant elements. The kernel languages are introduced progressively, adding concepts one by one, thus showing the deep relationships between different models. The kernel languages are defined precisely in terms of a simple abstract machine. Because a wide variety of languages and programming paradigms can be modeled by a small set of closely related kernel languages, this approach allows programmer and student to grasp the underlying unity of programming. The book has many program fragments and exercises, all of which can be run on the Mozart Programming System, an Open Source software package that features an interactive incremental development environment.
Publisher: MIT Press
ISBN: 9780262220699
Category : Computers
Languages : en
Pages : 944
Book Description
Teaching the science and the technology of programming as a unified discipline that shows the deep relationships between programming paradigms. This innovative text presents computer programming as a unified discipline in a way that is both practical and scientifically sound. The book focuses on techniques of lasting value and explains them precisely in terms of a simple abstract machine. The book presents all major programming paradigms in a uniform framework that shows their deep relationships and how and where to use them together. After an introduction to programming concepts, the book presents both well-known and lesser-known computation models ("programming paradigms"). Each model has its own set of techniques and each is included on the basis of its usefulness in practice. The general models include declarative programming, declarative concurrency, message-passing concurrency, explicit state, object-oriented programming, shared-state concurrency, and relational programming. Specialized models include graphical user interface programming, distributed programming, and constraint programming. Each model is based on its kernel language—a simple core language that consists of a small number of programmer-significant elements. The kernel languages are introduced progressively, adding concepts one by one, thus showing the deep relationships between different models. The kernel languages are defined precisely in terms of a simple abstract machine. Because a wide variety of languages and programming paradigms can be modeled by a small set of closely related kernel languages, this approach allows programmer and student to grasp the underlying unity of programming. The book has many program fragments and exercises, all of which can be run on the Mozart Programming System, an Open Source software package that features an interactive incremental development environment.
Image Objects
Author: Jacob Gaboury
Publisher: MIT Press
ISBN: 0262045036
Category : Computers
Languages : en
Pages : 323
Book Description
How computer graphics transformed the computer from a calculating machine into an interactive medium, as seen through the histories of five technical objects. Most of us think of computer graphics as a relatively recent invention, enabling the spectacular visual effects and lifelike simulations we see in current films, television shows, and digital games. In fact, computer graphics have been around as long as the modern computer itself, and played a fundamental role in the development of our contemporary culture of computing. In Image Objects, Jacob Gaboury offers a prehistory of computer graphics through an examination of five technical objects--an algorithm, an interface, an object standard, a programming paradigm, and a hardware platform--arguing that computer graphics transformed the computer from a calculating machine into an interactive medium. Gaboury explores early efforts to produce an algorithmic solution for the calculation of object visibility; considers the history of the computer screen and the random-access memory that first made interactive images possible; examines the standardization of graphical objects through the Utah teapot, the most famous graphical model in the history of the field; reviews the graphical origins of the object-oriented programming paradigm; and, finally, considers the development of the graphics processing unit as the catalyst that enabled an explosion in graphical computing at the end of the twentieth century. The development of computer graphics, Gaboury argues, signals a change not only in the way we make images but also in the way we mediate our world through the computer--and how we have come to reimagine that world as computational.
Publisher: MIT Press
ISBN: 0262045036
Category : Computers
Languages : en
Pages : 323
Book Description
How computer graphics transformed the computer from a calculating machine into an interactive medium, as seen through the histories of five technical objects. Most of us think of computer graphics as a relatively recent invention, enabling the spectacular visual effects and lifelike simulations we see in current films, television shows, and digital games. In fact, computer graphics have been around as long as the modern computer itself, and played a fundamental role in the development of our contemporary culture of computing. In Image Objects, Jacob Gaboury offers a prehistory of computer graphics through an examination of five technical objects--an algorithm, an interface, an object standard, a programming paradigm, and a hardware platform--arguing that computer graphics transformed the computer from a calculating machine into an interactive medium. Gaboury explores early efforts to produce an algorithmic solution for the calculation of object visibility; considers the history of the computer screen and the random-access memory that first made interactive images possible; examines the standardization of graphical objects through the Utah teapot, the most famous graphical model in the history of the field; reviews the graphical origins of the object-oriented programming paradigm; and, finally, considers the development of the graphics processing unit as the catalyst that enabled an explosion in graphical computing at the end of the twentieth century. The development of computer graphics, Gaboury argues, signals a change not only in the way we make images but also in the way we mediate our world through the computer--and how we have come to reimagine that world as computational.
Data-Oriented Programming
Author: Yehonathan Sharvit
Publisher: Simon and Schuster
ISBN: 1617298573
Category : Computers
Languages : en
Pages : 422
Book Description
Eliminate the unavoidable complexity of object-oriented designs. The innovative data-oriented programming paradigm makes your systems less complex by making it simpler to access and manipulate data. In Data-Oriented Programming you will learn how to: Separate code from data Represent data with generic data structures Manipulate data with general-purpose functions Manage state without mutating data Control concurrency in highly scalable systems Write data-oriented unit tests Specify the shape of your data Benefit from polymorphism without objects Debug programs without a debugger Data-Oriented Programming is a one-of-a-kind guide that introduces the data-oriented paradigm. This groundbreaking approach represents data with generic immutable data structures. It simplifies state management, eases concurrency, and does away with the common problems you’ll find in object-oriented code. The book presents powerful new ideas through conversations, code snippets, and diagrams that help you quickly grok what’s great about DOP. Best of all, the paradigm is language-agnostic—you’ll learn to write DOP code that can be implemented in JavaScript, Ruby, Python, Clojure, and also in traditional OO languages like Java or C#. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications. About the technology Code that combines behavior and data, as is common in object-oriented designs, can introduce almost unmanageable complexity for state management. The Data-oriented programming (DOP) paradigm simplifies state management by holding application data in immutable generic data structures and then performing calculations using non-mutating general-purpose functions. Your applications are free of state-related bugs and your code is easier to understand and maintain. About the book Data-Oriented Programming teaches you to design software using the groundbreaking data-oriented paradigm. You’ll put DOP into action to design data models for business entities and implement a library management system that manages state without data mutation. The numerous diagrams, intuitive mind maps, and a unique conversational approach all help you get your head around these exciting new ideas. Every chapter has a lightbulb moment that will change the way you think about programming. What's inside Separate code from data Represent data with generic data structures Manage state without mutating data Control concurrency in highly scalable systems Write data-oriented unit tests Specify the shape of your data About the reader For programmers who have experience with a high-level programming language like JavaScript, Java, Python, C#, Clojure, or Ruby. About the author Yehonathan Sharvit has over twenty years of experience as a software engineer. He blogs, speaks at conferences, and leads Data-Oriented Programming workshops around the world. Table of Contents PART 1 FLEXIBILITY 1 Complexity of object-oriented programming 2 Separation between code and data 3 Basic data manipulation 4 State management 5 Basic concurrency control 6 Unit tests PART 2 SCALABILITY 7 Basic data validation 8 Advanced concurrency control 9 Persistent data structures 10 Database operations 11 Web services PART 3 MAINTAINABILITY 12 Advanced data validation 13 Polymorphism 14 Advanced data manipulation 15 Debugging
Publisher: Simon and Schuster
ISBN: 1617298573
Category : Computers
Languages : en
Pages : 422
Book Description
Eliminate the unavoidable complexity of object-oriented designs. The innovative data-oriented programming paradigm makes your systems less complex by making it simpler to access and manipulate data. In Data-Oriented Programming you will learn how to: Separate code from data Represent data with generic data structures Manipulate data with general-purpose functions Manage state without mutating data Control concurrency in highly scalable systems Write data-oriented unit tests Specify the shape of your data Benefit from polymorphism without objects Debug programs without a debugger Data-Oriented Programming is a one-of-a-kind guide that introduces the data-oriented paradigm. This groundbreaking approach represents data with generic immutable data structures. It simplifies state management, eases concurrency, and does away with the common problems you’ll find in object-oriented code. The book presents powerful new ideas through conversations, code snippets, and diagrams that help you quickly grok what’s great about DOP. Best of all, the paradigm is language-agnostic—you’ll learn to write DOP code that can be implemented in JavaScript, Ruby, Python, Clojure, and also in traditional OO languages like Java or C#. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications. About the technology Code that combines behavior and data, as is common in object-oriented designs, can introduce almost unmanageable complexity for state management. The Data-oriented programming (DOP) paradigm simplifies state management by holding application data in immutable generic data structures and then performing calculations using non-mutating general-purpose functions. Your applications are free of state-related bugs and your code is easier to understand and maintain. About the book Data-Oriented Programming teaches you to design software using the groundbreaking data-oriented paradigm. You’ll put DOP into action to design data models for business entities and implement a library management system that manages state without data mutation. The numerous diagrams, intuitive mind maps, and a unique conversational approach all help you get your head around these exciting new ideas. Every chapter has a lightbulb moment that will change the way you think about programming. What's inside Separate code from data Represent data with generic data structures Manage state without mutating data Control concurrency in highly scalable systems Write data-oriented unit tests Specify the shape of your data About the reader For programmers who have experience with a high-level programming language like JavaScript, Java, Python, C#, Clojure, or Ruby. About the author Yehonathan Sharvit has over twenty years of experience as a software engineer. He blogs, speaks at conferences, and leads Data-Oriented Programming workshops around the world. Table of Contents PART 1 FLEXIBILITY 1 Complexity of object-oriented programming 2 Separation between code and data 3 Basic data manipulation 4 State management 5 Basic concurrency control 6 Unit tests PART 2 SCALABILITY 7 Basic data validation 8 Advanced concurrency control 9 Persistent data structures 10 Database operations 11 Web services PART 3 MAINTAINABILITY 12 Advanced data validation 13 Polymorphism 14 Advanced data manipulation 15 Debugging
Vision, Modeling, and Visualization 2000
Author: Bernd Girod
Publisher: IOS Press
ISBN: 9783898380195
Category : Computer vision
Languages : en
Pages : 436
Book Description
Publisher: IOS Press
ISBN: 9783898380195
Category : Computer vision
Languages : en
Pages : 436
Book Description
Unconventional Programming Paradigms
Author: Jean-Pierre Banâtre
Publisher: Springer
ISBN: 3540314822
Category : Computers
Languages : en
Pages : 370
Book Description
Nowadays, developers have to face the proliferation of hardware and software environments, the increasing demands of the users, the growing number of p- grams and the sharing of information, competences and services thanks to the generalization ofdatabasesandcommunication networks. Aprogramisnomore a monolithic entity conceived, produced and ?nalized before being used. A p- gram is now seen as an open and adaptive frame, which, for example, can - namically incorporate services not foreseen by the initial designer. These new needs call for new control structures and program interactions. Unconventionalapproachestoprogramminghavelongbeendevelopedinv- iousnichesandconstituteareservoirofalternativewaystofacetheprogramming languages crisis. New models of programming (e. g. , bio-inspired computing, - ti?cialchemistry,amorphouscomputing,. . . )arealsocurrentlyexperiencinga renewed period of growth as they face speci?c needs and new application - mains. These approaches provide new abstractions and notations or develop new ways of interacting with programs. They are implemented by embedding new sophisticated data structures in a classical programming model (API), by extending an existing language with new constructs (to handle concurrency, - ceptions, open environments, . . . ), by conceiving new software life cycles and program executions (aspect weaving, run-time compilation) or by relying on an entire new paradigm to specify a computation. They are inspired by theoretical considerations (e. g. , topological, algebraic or logical foundations), driven by the domain at hand (domain-speci?c languages like PostScript, musical notation, animation, signal processing, etc. ) or by metaphors taken from various areas (quantum computing, computing with molecules, information processing in - ological tissues, problem solving from nature, ethological and social modeling).
Publisher: Springer
ISBN: 3540314822
Category : Computers
Languages : en
Pages : 370
Book Description
Nowadays, developers have to face the proliferation of hardware and software environments, the increasing demands of the users, the growing number of p- grams and the sharing of information, competences and services thanks to the generalization ofdatabasesandcommunication networks. Aprogramisnomore a monolithic entity conceived, produced and ?nalized before being used. A p- gram is now seen as an open and adaptive frame, which, for example, can - namically incorporate services not foreseen by the initial designer. These new needs call for new control structures and program interactions. Unconventionalapproachestoprogramminghavelongbeendevelopedinv- iousnichesandconstituteareservoirofalternativewaystofacetheprogramming languages crisis. New models of programming (e. g. , bio-inspired computing, - ti?cialchemistry,amorphouscomputing,. . . )arealsocurrentlyexperiencinga renewed period of growth as they face speci?c needs and new application - mains. These approaches provide new abstractions and notations or develop new ways of interacting with programs. They are implemented by embedding new sophisticated data structures in a classical programming model (API), by extending an existing language with new constructs (to handle concurrency, - ceptions, open environments, . . . ), by conceiving new software life cycles and program executions (aspect weaving, run-time compilation) or by relying on an entire new paradigm to specify a computation. They are inspired by theoretical considerations (e. g. , topological, algebraic or logical foundations), driven by the domain at hand (domain-speci?c languages like PostScript, musical notation, animation, signal processing, etc. ) or by metaphors taken from various areas (quantum computing, computing with molecules, information processing in - ological tissues, problem solving from nature, ethological and social modeling).
The Mathematica GuideBook for Graphics
Author: Michael Trott
Publisher: Springer
ISBN: 144198576X
Category : Computers
Languages : en
Pages : 1374
Book Description
This comprehensive, detailed reference provides readers with both a working knowledge of Mathematica in general and a detailed knowledge of the key aspects needed to create the fastest, shortest, and most elegant implementations possible. It gives users a deeper understanding of Mathematica by instructive implementations, explanations, and examples from a range of disciplines at varying levels of complexity. The three volumes - Programming, Graphics, and Mathematics - each with a CD, total 3,000 pages and contain more than 15,000 Mathematica inputs, over 1,500 graphics, 4,000+ references, and more than 500 exercises. This second volume covers 2 and 3D graphics, providing a detailed treatment of creating images from graphic primitives such as points, lines, and polygons. It also shows how to graphically display functions that are given either analytically or in discrete form and a number of images from the Mathamatica graphics gallery. The use of Mathematicas graphics capabilities provides a very efficient and instructive way to learn how to deal with the structures arising in solving complicated problems.
Publisher: Springer
ISBN: 144198576X
Category : Computers
Languages : en
Pages : 1374
Book Description
This comprehensive, detailed reference provides readers with both a working knowledge of Mathematica in general and a detailed knowledge of the key aspects needed to create the fastest, shortest, and most elegant implementations possible. It gives users a deeper understanding of Mathematica by instructive implementations, explanations, and examples from a range of disciplines at varying levels of complexity. The three volumes - Programming, Graphics, and Mathematics - each with a CD, total 3,000 pages and contain more than 15,000 Mathematica inputs, over 1,500 graphics, 4,000+ references, and more than 500 exercises. This second volume covers 2 and 3D graphics, providing a detailed treatment of creating images from graphic primitives such as points, lines, and polygons. It also shows how to graphically display functions that are given either analytically or in discrete form and a number of images from the Mathamatica graphics gallery. The use of Mathematicas graphics capabilities provides a very efficient and instructive way to learn how to deal with the structures arising in solving complicated problems.