![]() |
General Reading »
Interviews »
General
Intermediate
License: The Code Project Open License (CPOL)
Interview with Chris SellsBy Chris MaunderChris Sells gives us his view on the world. |
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||
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.
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 : ).
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.
"Error: Can't 'lowerLandingGear' -- Garbage Collector is running."
"I'm afraid I can't do that, Dave."
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.
Multi-language Java that acknowledges the platform.
Java with enums.
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.
Sometime in November, DM will be shipping its first software product, so I guess the rumors are true. :)
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. : )
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.
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?
Thanks! Brent and I worked hard to make it so.
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. : )
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
| You must Sign In to use this message board. | |||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 29 Oct 2000 Editor: Chris Maunder |
Copyright 2000 by Chris Maunder Everything else Copyright © CodeProject, 1999-2009 Web09 | Advertise on the Code Project |