Combining simple instructions and thereby utilizing the universality of computers to construct end user applications is linked to one fundamental element Complexity.
Since the 1940s, when the early computer pioneers were still struggling to fit a computer with the computing-power of a simple calculator into a large room, many valuable principles and paradigms have evolved to deal with the many different facets of complexity in software construction. In particular, one important methodology has emerged during the 1990s called object-oriented programming (OOP).
Our world can be viewed as a collection of objects interacting with each other to accomplish various tasks. For example, a person object can apply a pencil object to write on a paper object. This allows another person object to read the message on the paper object.
OOP imitates this world view by allowing the programmer to create artificial worlds of objects interacting and collaborating with each other to provide the features of a computer program. This approach gives the programmer the powerful ability to divide (and conquer) a seemingly complex programming problem into a set of objects, each significantly simpler than the overall problem. Along with many other advantages, OOP effectively deals with complexity and allows programmers to create better programs in a shorter period of time.
C# provides elaborate support for writing object-oriented programs. Teaching object-oriented programming is arguably best facilitated by learning an object-oriented language, such as C#, simultaneously. This book will provide a complete introduction to C# and utilize its concreteness to clarify the often fuzzy concepts of OOP and, conversely, will employ OOP to explain the design of C#.
Later in this chapter and in Chapter 2, "Your First C# Program," you will take a closer look at C#'s roots, design goals, and core features. However, because C# is closely related to the basic organization of a computer, you can best prepare for this future discussion by first spending time on some important fundamental computer concepts.
A computer consists of two parts hardware and software. Hardware is made up of the physical, tangible parts of the computer. Software is made up of programs, also called applications that contain instructions for the computer to run or execute.
A computer needs software just as much as hardware to be of any real use. Computer hardware without accompanying software is a bit like a book with empty pages. The cover, the back, and the pages inside constitute the hardware of the book, but the book is pretty useless without any text (the software).