14.01.2015 Views

Eric lippert - Amazon Web Services

Eric lippert - Amazon Web Services

Eric lippert - Amazon Web Services

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!