Chris Sells is currently the Director of Software
Engineering at DevelopMentor, and has authored and co-authored numerous books
and magazine articles, has spoken at various conferences, including WinSummit,
WinDev, VCDC, SD, C++ World, MS Developer Days, MacWorld and ATL DevCon, and is
also the author of Attila - the ATL for
Applications library.
Read more about Chris at his home page.
Firstly - could you give us a brief rundown on who you are and
what you do to keep yourself amused during the day.
I'm currently the Director of Software Engineering for DevelopMentor's new
software division. We're building a product and just as importantly, we're
building an understanding of what it means to build products in a reliable,
predictable way. I've been writing books and giving talks on technology for
years, and that's been great, but it's kept me out of the mainstream. For
the last two years, I've been back down in the trenches and it's been a
blast. On a daily basis, I code, design, document, beat back bugs, log bugs,
test, hire, do tech support, give marketing presentations, read email, send
email, hang on the mailing lists and try to leave a reasonable amount of
time for my wife and kids (the Sells Brothers : ).
Secondly: How on Earth do you fit that all in? Books, articles,
speeches, your website, ATL and Atilla lists are all kept going,
plus your titanic efforts on Gen<X>. What's the secret?
I don't use caffine. Seriously. : ) Staying away from caffeine means that I
have to be very into what I'm doing to get through the day and stay happy.
As soon as I'm unhappy, I finish up and move on. So, while I've written
books and articles and given conference talks and managed the Attila effort
in the past, I'm not doing any of that right now. I do still post useful (I
think) tidbits on my web site and I write the occassional article when the
spirit moves me, but for the last two years I've dedicated myself almost
exclusively to Gen<X>. The secret? Only make room in your life for those
things you can't *not* do.
What do you see as the future of programming in 5 years time?
"Error: Can't 'lowerLandingGear' -- Garbage Collector is running."
20 years time?
"I'm afraid I can't do that, Dave."
What is it that got you into the IT world, and most importantly,
what keeps you here?
Due to an extreme lack of control over my world as an obnoxious 12 year-old,
I turned to something I could control -- a computer. Over the years, I've
mellowed and now that people can stand me for more than 5 minutes at a time,
I've found that the two things that keep me interested are the challenge and
the need to help folks.
The need for challenge is what drove me through any number of impenetrable
technologies culminating in COM (Jon Borden, an ex-brain surgeon, says that
COM is harder : ), and then into writing, speaker, teaching and now,
shipping a shrink-wrap product.
The need to help folks sets my focus when I write, teach, post on the lists,
post on my web site, and now, shipping a shrink-wrap product. Since I never
do anything I don't like for very long, unless programming is fun (and, for
example, SAFEARRAYs *aren't* fun), why would I expect anyone else to do it?
On the other hand, if I can make programming more fun, (e.g. CComVector),
people's lives are improved and that makes me happy. I can't tell you how
great it is to have somebody thank me for some article or some hunk of code
from my website, because it means I've helped them.
The obligatory .NET question: So whaddya think of .NET?
Multi-language Java that acknowledges the platform.
C#?
Java with enums.
What is the future of scripting in .NET?
Scripting is one of the coolest potential uses for .NET. Having a JIT and a
runtime just makes C++ slower (although arguably safer). However, that same
JIT and runtime can make scripting languages fly. Not only are VBScript and
JScript going to go much faster because now they're going to be running in
native code instead of being interpreted, but *anything* can generate IL on
the fly and feed it to the runtime. This makes things like executing regular
expressions much faster, because the regex parser can feed IL to the runtime
and let it do the heavy lifting. I haven't heard anyone from MS talk about
the script hosting strategy for .NET, but they've laid all the groundwork to
make it killer.
DevelopMentor are traditionally involved in training and
education for developers - but what's with these rumours that you
are now in the software business?
Sometime in November, DM will be shipping its first software product, so I
guess the rumors are true. :)
What are you guys building?
Gen<X> is a tool for generalizing and replicating code. I found that I
wanted to write language-independent code templates and drive the code
creation based on metadata. This freed me from manually translating project
requirements into code and allowed me to re-create the code automatically
when the templates or the project metadata chanced. It turned out that I
wasn't the only one that wanted to do this, so we decided to turn it into a
product. The details are available at http://www.develop.com/genx. Also,
check out the "Future of Software Engineering" issue of the Visual C++
Developer's journal for an essay about the benefits of the technique that
Gen<X> implements.
On a personal note, I'm excited about Gen<X> because it represents the
culmination of years of thinking about how to represent ideas and how to
turn them into code. On the other hand, it suddenly opens me up for all of
the ridicule and criticism that I've been heaping on Microsoft for years, so
I'm a bit apprehensive as well. Be gentle. : )
You have some kind of patent on Telephone technology (US5471522)?
I'd be really curious to hear about what that entailed, and your
impression of the whole patent filing process.
The patent was all about how to tell the type of the incoming call, i.e.
voice, data or fax. What made it harder was that US law at the time (and
maybe still to this day, happily I've left telephony long in my past) made
it illegial to listen for anything on the line *until* the phone was
answered, so we had to pick up the phone to listen for the fax tone. The
other twist was that outgoing data calls don't even have a tone, so how do
you tell voice from data? Once we figured out the kind of call, we wanted to
be able to decide whether to answer it via the Windows Telephony API (Intel
was developing it at the time). Of course, since we had to answer the call
to tell whether to answer it, our algorithm wasn't worth much more than the
patent itself (which hangs proudly on a plaque at the bottom of a closet).
I have mixed feelings about the patenting process. On the one hand, I like
to publish my ideas and have other people benefit from them. Likewise, I
like to hear others' ideas and "leverage" them as necessary. On the other
hand, I want other companies to pay my company money so that I might feed my
family. Do I think the whole system needs an overhaul? I do. Until then, DM
files patents on our unique technology so that we can be better able to
compete.
Another of your creations - Attila - is extremely popular among
developers. With WTL up in the air, what is the future of Attila?
Will it coexist with (or use) WTL?
Attila was built because we didn't have WTL. Now that we do, I'm working
with Nenad to add any of the good ideas from Attila into WTL, with the idea
that the community only needs the one Windowing add-on to ATL.
I don't think WTL is so much up in the air. Nenad has made it pretty clear
that he'll fight tooth and nail to keep WTL shipping in the PSDK and so far,
despite very public statements from middle management at MS, he's managed to
do just that. We use WTL to build all of our stand-along apps and we like
it. We'd like to see more IDE integration and more features, but isn't that
always the case?
ATL Internals is one of the ATL Bibles.
Thanks! Brent and I worked hard to make it so.
What new technologies
will be appearing in the next version of your book - WTL, ATL
Server, attributes, Windows CE issues?
Brent and I have gone back and forth about updating ATL Internals. Frankly,
I don't know if there's enough new in ATL7 to warrant a 2ed of ATL
Internals. We could have a number of chapters on WTL, but unless MS supports
it, there aren't ever going to be many WTL users and the ones there are
don't really need the book. On the other hand, I'd sure like there to be
enough new in ATL to warrant an update of the book. Please write your local
congressman. : )
Has your style of coding changed in recent years, and are there
any tips or tricks that (large or small) have made a difference
to you in recent years?
The single biggest thing that's changed about my coding style in the last
few years is the control flow. I used to do just what Steve Maguire said in
Writing Solid Code, which was to write the nominal case first, e.g.
HRESULT Foo()
{
CComPtr<IUnknown> spunk;
HRESULT hr = spunk.CoCreateInstance(L"Microsoft.Excel");
if( SUCCEEDED(hr) )
{
CComPtr<IDispatch> spdisp;
hr = spunk->QueryInterface(&spdisp);
if( SUCCEEDED(hr) )
{
...
}
}
return hr;
}
With COM, that quickly became too much indentation and I began to disagree
in principle with Steve anyway, so now I write my code to bail early on
errors, like so:
HRESULT Foo()
{
CComPtr<IUnknown> spunk;
HRESULT hr = spunk.CoCreateInstance(L"Microsoft.Excel");
if( FAILED(hr) ) return hr;
CComPtr<IDispatch> spdisp;
hr = spunk->QueryInterface(&spdisp);
if( FAILED(hr) ) return hr;
...
return S_OK;
}
With smart types, all the clean-up happens the way I want in either style,
but my way, I can use the columns on the left of my text file and I think
things are much more readable.
Chris Sells
http://staff.develop.com/csells