Eric lippert - Amazon Web Services
Eric lippert - Amazon Web Services
Eric lippert - Amazon Web Services
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
ecently: basically, it was to become a<br />
domain expert by answering as many<br />
user questions as I possibly could. But<br />
the best programming advice is a bit<br />
harder to put my finger on. I learned so<br />
much at Microsoft from world-class<br />
experts in programming language<br />
design, performance analysis and many<br />
other fields, that it is hard to name just<br />
one.<br />
Here’s one thing that has stuck with<br />
me from even before my Microsoft days<br />
though. One day many years ago Brian<br />
Kernighan gave a talk about<br />
programming at UW. At one point he put<br />
up a slide showing some code that was<br />
clearly wrong. You knew it was wrong<br />
because what the comment above the<br />
code said and what the code actually did<br />
were opposites. Kernighan said<br />
something to the effect of “pop<br />
quiz: what actually runs, the code<br />
or the comments” I still ask myself<br />
that same rhetorical question<br />
when I’m trying to understand a<br />
piece of buggy code; it is<br />
frequently the case that the<br />
comments are misleading,<br />
out-of-date or just plain wrong,<br />
and it is frequently the case that<br />
the comments are right and you<br />
don’t even bother to read the<br />
buggy code that follows them.<br />
Kernighan’s talk changed my<br />
attitude towards commenting<br />
completely. Since then I’ve tried<br />
to write comments that explain<br />
what the goal of a particular piece<br />
of code is, rather than trying to<br />
explain how it works.<br />
DNC: When your team started the development of C#, what were<br />
some key goals in your mind Are you happy the way C# has<br />
matured<br />
EL: To be clear: I started working on C# just as the final corner<br />
cases in the design of C# 3.0 were being hammered out and<br />
development was beginning in earnest. I have followed C#<br />
carefully since its creation over a decade ago, but I wasn’t actually<br />
a part of the C# 1.0 or 2.0 team.<br />
When thinking about goals, I try to distinguish the “business” goals<br />
from the “technical” goals; these goals are strongly aligned, but<br />
they are different perspectives. From a business perspective, the<br />
primary goal of the C# product was – and continues to be – to<br />
create rich, compelling language tools that enable developers to<br />
take advantage of the .NET platform specifically, and more<br />
generally to improve the state of the art for the whole Windows<br />
ecosystem. Better tools means more productive developers, more<br />
productive developers means better applications for their users,<br />
and better applications means the platform becomes more<br />
attractive, and everyone wins.<br />
From a language design perspective, there are a number of core<br />
principles that the design team goes back to over and over again.<br />
The language is intended to be a modern, relevant and pragmatic<br />
general-purpose programming language, used by professional<br />
programmers working in teams on line-of-business application<br />
software. It’s intended to be object-oriented, but not<br />
dogmatically so; the language design team happily takes ideas<br />
from other programming paradigms and incorporates them where<br />
they make sense.<br />
C# 1.0 started off as a pretty typical modern language. Obviously<br />
it was heavily influenced by C and C++; the design team sought to<br />
mitigate some of the shortcomings of C/C++ while still permitting<br />
access to the raw power of unsafe code. But in the decade since<br />
it has grown in leaps and bounds, adding a generic type system,<br />
sequence generators, functional closures, query comprehensions,<br />
dynamic language interoperability and lately, greatly improved<br />
support for writing asynchronous workflows. I am thrilled with<br />
how the language has evolved over the past twelve years, and it’s<br />
been a privilege to have been a part of it for some of the most<br />
exciting changes. I’m looking forward to continuing to work in the<br />
C# ecosystem.<br />
DNcmagazine www.dotnetcurry.com | 37