In this chapter, you have learned about basic concepts related to computer hardware and software. We have also discussed some of the ways C# and .NET aims to solve previous programming problems and some of the exciting new possibilities these technologies present to us.
The following are the important points covered in this chapter:
A programming language like C# allows the programmer to tap into the universality of the computer and write a diverse set of applications that can be used by an end user. A program bridges the gap between the primitive set of operations performed by the computer hardware and useful applications.
C# is an object-oriented programming language that is highly suited to deal with complex programming tasks. It strikes an optimal balance between simplicity and expressiveness, while based on proven useful concepts. C# is tightly connected with .NET.
Main memory consists of long lists of numbered locations called bytes. Each byte contains 8 circuits. A circuit can be 0 or 1. Understanding the binary system helps us understand how numbers are manipulated by the main memory.
When a program is executed, the computer's main memory holds the part of the program that currently is being executed together with the data being manipulated by the program. The end user interacts with this process through input and output devices.
Despite the limited set of basic operations that the circuits can be engaged in, the main memory's high speed and its ability to interpret groups of circuits in different ways makes the computer the ultimate manipulator of abstract object-oriented worlds.
Early, low-level programming languages were difficult to use because they were based on how the hardware worked not on how the programmer reasoned. Today, compilers perform the tedious task of turning a program written in a high-level language like C# into machine code.
.NET provides a host of important services during the construction and execution of a C# program.
.NET uses a common language, called MSIL, that all languages working under .NET must compile too, before it is compiled to machine code. This decoupling between hardware and high-level language allows for language interoperability and dissolves rigid relationships between high-level language compilers and hardware.