Good morning, we interrupt our irregular and unscheduled ramblings with this breaking news bulletin: I am pleased to pass on news of the availability of Jon Skeet's new book "C# in Depth".
I had the privilege of being the technical editor of this book. But I've gotta tell you, when I unzipped the files sent from the publisher, the flattery began immediately. The "front matter" placeholder page read:
FOREWORD: To be written by someone really prominent, hopefully – Eric Lippert, perhaps?
Hah! Don't think I went easy on the book because you buttered me up, Jon.
In all seriousness, I was very pleased and honoured to be asked to write the foreword to Jon's excellent book. This was by far the least work and most fun I've had doing technical editing, and the foreword practically wrote itself. Here's what I whipped up:
There are two kinds of pianists.
There are some pianists who play not because they enjoy it, but because their parents force them to take lessons. Then there are those who play the piano because it pleases them to create music. They don’t need to be forced; on the contrary, they sometimes don’t know when to stop.
Of the latter kind, there are some who play the piano as a hobby. Then there are those who play for a living. That requires a whole new level of dedication, skill and talent. They may have some degree of freedom about what genre of music they play and the stylistic choices they make in playing it, but fundamentally those choices are driven by the needs of the employer or the tastes of the audience.
Of the latter kind, there are some who do it primarily for the money. Then there are those professionals who would want to play the piano in public even if they weren’t being paid. They enjoy using their skills and talents to make music for others. That they can have fun and get paid for it is so much the better.
Of the latter kind, there are some who are self-taught, who “play by ear”, who might have great talent and ability but cannot really communicate that intuitive understanding to others except through the music itself. Then there are those who have formal training in both theory and practice. They can explain what techniques the composer used to achieve the intended emotional effect, and use that knowledge to shape their interpretation of the piece.
Of the latter kind, there are some who have never looked inside their pianos. Then there are those who are fascinated by the clever escapements that lift the damper felts a fraction of a second before the hammers strike the strings. They own key levelers and capstan wrenches. They take delight and pride in being able to understand the mechanisms of an instrument that has five to ten thousand moving parts.
Of the latter kind, there are some who are content to master their craft and exercise their talents for the pleasure and profit it brings. Then there are those who are not just artists, theorists and technicians; somehow they find the time to pass that knowledge on to others as mentors.
I have no idea if Jon Skeet is any kind of pianist. But from my email conversations with him as one of the C# team’s Most Valuable Professionals over the years, from reading his blog and from reading every word of this book at least three times, it has become clear to me that Jon is that latter kind of software developer: enthusiastic, knowledgeable, talented, curious and analytical; a teacher of others.
C# is a highly pragmatic and rapidly evolving language. Through the addition of query comprehensions, richer type inference, a compact syntax for anonymous functions, and so on, I hope that we have enabled a whole new style of programming while still staying true to the statically typed, component-oriented approach that has made C# a success.
Many of these new stylistic elements have the paradoxical quality of feeling very old (lambda expressions go back to the very foundations of computer science in the first half of the twentieth century) and yet at the same time feeling new and unfamiliar to developers used to a more modern object-oriented approach.
Jon gets all that. This book is ideal for professional developers who have a need to understand the “what” and “how” of the latest revision to C#. But it is also for those developers whose understanding is enriched by exploring the “why” of the language's design principles.
Being able to take advantage of all that new power will require some new ways of thinking about data, functions, and the relationship between them. It’s not unlike trying to play jazz after years of classical training – or, perhaps, vice versa. Either way, I am looking forward to finding out what sorts of functional compositions the next generation of C# programmers come up with. Happy composing, and thanks for choosing the key of C# to do it in.