Programming is exhilarating. It is a breathtaking venture through problems of the mind accented
by beautiful vistas as solutions are discovered. Throughout the process, a programmer’s view of the
problems he solves and the solutions to these problems is formed through the lens of the language
that he uses and thinks in. So, it is important for a programmer to become intimately familiar with
The problems that developers work on are as varied as the developers themselves. They range
from medical applications to insurance software, from multimedia applications to data mining
tools. The evolution of C# really is about the evolution of the problems that developers face. As the
problems become ever more complex, the language becomes simpler and more powerful to deal
with the complexity.
C# began its life as a way to describe reusable components that run in a variety of execution
environments. During this phase, it solidified its role as a great language for describing the architecture
of components and systems while embracing and extending its roots as a C-like language. One
of the major contributions it added was a fully object-oriented type system that unifies the concepts
of primitive and complex types and garbage collection.
While the first version of C# was a major accomplishment, the second release became the
defining moment for the language. The type system became much richer with the inclusion of
generics. The language also began to provide features like iterators and anonymous methods that
encourage simpler and more elegant designs. These features enabled more flexible and powerful
frameworks to be developed.
The third version of C# really breaks new ground. It blurs the line between code and data. It
introduces declarative query syntax. It empowers programmers through functional features. All of
these additions enable programmers to deal with the difficulties of data whether in-memory, in a
database, or from a web server. Programmers will find that these features put the fun back in programming.
In this book, Trey Nash provides a refreshingly clear explanation of the C# language. He not
only understands C#, but he is also able to guide the reader through the process of learning to excel
in the language. He makes the journey to understanding enjoyable through thought-provoking
examples while taking the time to motivate each feature and demonstrate common and best practices.
I am confident that the reader will write better code by reading this book.