Chris Sells 访谈





5.00/5 (2投票s)
Chris Sells 谈他对世界的看法。
Chris Sells 目前是 DevelopMentor 的软件工程总监,他撰写或合著了许多书籍和杂志文章,曾在 WinSummit、WinDev、VCDC、SD、C++ World、MS Developer Days、MacWorld 和 ATL DevCon 等各种会议上发表演讲,他还是 Attila - ATL for Applications 库的作者。
在 他的主页 上阅读更多关于 Chris 的信息。
首先 - 你能简单介绍一下你自己,以及你白天是如何保持娱乐的吗?
我现在是 DevelopMentor 新软件部门的软件工程总监。我们正在开发一款产品,同样重要的是,我们正在理解如何以可靠、可预测的方式构建产品。我写书和就技术发表演讲多年了,这很棒,但让我远离了主流。在过去的两年里,我回到了第一线,这真是太棒了。我每天的工作包括:编码、设计、编写文档、纠正错误、记录错误、测试、招聘、提供技术支持、做市场推广演示、阅读电子邮件、发送电子邮件、浏览邮件列表,并努力为我的妻子和孩子们(Sells Brothers :)留出合理的时间。
其次:你到底是怎么做到这些的?书籍、文章、演讲、你的网站、ATL 和 Atilla 列表都在正常运行,再加上你对 Gen<X> 的巨大投入。有什么秘诀吗?
我不喝咖啡因。说真的。: ) 远离咖啡因意味着我必须非常投入我所做的事情才能度过一天并保持快乐。一旦我不开心了,我就会结束并继续前进。所以,虽然我过去写过书、文章,做过会议演讲,并负责过 Attila 的工作,但我现在并不做这些了。我仍然会在我的网站上发布我认为有用的信息,并且偶尔会在灵感涌现时写一篇文章,但在过去两年里,我几乎完全专注于 Gen<X>。秘诀?只在你的生活中留出空间给你那些“不得不做”的事情。
你认为五年后的编程未来会是怎样的?
“错误:无法‘放下起落架’——垃圾回收器正在运行。”
二十年后呢?
“恐怕我不能这样做,戴夫。”
是什么让你进入 IT 行业,最重要的是,又是什么让你留在这里?
由于作为一个令人讨厌的 12 岁孩子,我对我的世界缺乏极度的控制,我转向了一个我可以控制的东西——电脑。多年来,我变得成熟了,现在人们可以忍受我超过 5 分钟了,我发现让我感兴趣的两件事是挑战和帮助他人的需求。
挑战的需求促使我攻克了无数艰深的技术,最终接触到了 COM(前神经外科医生 Jon Borden 说 COM 更难 : ),然后转入写作、演讲、教学,现在则致力于发布零售产品。
帮助他人的需求是我写作、教学、在邮件列表中发言、在我的网站上发帖,以及现在发布零售产品的焦点。因为我从来不会长时间做我不喜欢的事情,除非编程很有趣(例如,SAFEARRAY *不是* 有趣的),为什么我期望别人去做呢?另一方面,如果我能让编程更有趣(例如 CComVector),人们的生活就会得到改善,这会让我开心。我无法告诉你有人因为我的一篇文章或我网站上的一段代码而感谢我有多么棒,因为这意味着我帮助了他们。
必不可少的 .NET 问题:那么你对 .NET 有何看法?
支持多语言的 Java,并承认平台的存在。
C#?
带枚举的 Java。
脚本在 .NET 中的未来是什么?
脚本是 .NET 最具潜力的用途之一。拥有 JIT 和运行时只是让 C++ 变慢(尽管可以说更安全)。然而,同样的 JIT 和运行时可以让脚本语言飞速发展。VBScript 和 JScript 将会运行得更快,因为它们现在将在本机代码中运行而不是被解释执行,而且 *任何东西* 都可以动态生成 IL 并将其提供给运行时。这使得执行正则表达式等操作变得更快,因为正则表达式解析器可以将 IL 提供给运行时,让其处理繁重的工作。我还没有听说微软有人谈论 .NET 的脚本托管策略,但他们已经为使其成为杀手级应用打下了基础。
DevelopMentor 一直以来都致力于开发者的培训和教育 - 但关于你们现在进入软件业务的传闻是怎么回事?
大约在十一月份,DM 将发布我们的第一款软件产品,所以我想传闻是真的。:)
你们在构建什么?
Gen<X> 是一个用于泛化和复制代码的工具。我发现我想编写与语言无关的代码模板,并根据元数据驱动代码创建。这使我摆脱了手动将项目需求转换为代码的束缚,并允许我在模板或项目元数据发生变化时自动重新创建代码。事实证明,我不是唯一一个想这样做的人,所以我们决定将其开发成一个产品。详细信息可以在 http://www.develop.com/genx 上找到。另外,可以查看 Visual C++ Developer's journal 的“软件工程的未来”特刊,其中有一篇关于 Gen<X> 所实现的技术的优势的文章。
从个人角度来说,我对 Gen<X> 感到兴奋,因为它代表了我多年来关于如何表示想法和如何将它们转化为代码的思考的结晶。另一方面,它也让我暴露在多年来我一直对微软施加的嘲笑和批评之下,所以我也有点担忧。请温柔一些。: )
你似乎拥有关于电话技术的某种专利(US5471522)?我真的很想听听这其中包含了什么,以及你对整个专利申请过程的看法。
这项专利是关于如何判断来电的类型,即语音、数据或传真。当时美国法律(现在也可能如此,幸运的是我早已离开了电话领域)规定,在电话被接听 *之前*,禁止监听线路上的任何声音,这使得事情更加困难,所以我们必须接听电话才能听到传真音。另一个棘手的问题是,出站数据电话甚至没有声音,那么如何区分语音和数据呢?一旦我们确定了通话类型,我们就希望能够决定是否通过 Windows Telephony API(当时 Intel 正在开发它)来接听。当然,既然我们必须接听电话才能判断是否接听,那么我们的算法就没有太大价值了,就像专利本身一样(它骄傲地挂在壁橱底部的牌匾上)。
我对专利过程有复杂的看法。一方面,我喜欢发表我的想法,让其他人受益。同样,我也喜欢听取他人的想法并根据需要“借鉴”它们。另一方面,我希望其他公司支付我的公司钱,以便我能够养家糊口。我是否认为整个系统需要改革?是的,我认为需要。在此之前,DM 会为我们独特的技术申请专利,以便我们能够更好地竞争。
你的另一个创作 - Attila - 在开发者中非常受欢迎。随着 WTL 的前景不明,Attila 的未来如何?它会与 WTL 共存(或使用 WTL)吗?
Attila 的诞生是因为我们当时没有 WTL。现在我们有了,我正在与 Nenad 合作,将 Attila 中的所有优点融入 WTL,目的是社区只需要 ATL 的一个窗口插件。
我不认为 WTL 的前景如此不明朗。Nenad 已经很清楚地表示,他将竭尽全力确保 WTL 在 PSDK 中发布,到目前为止,尽管 MS 的中层管理人员发表了非常公开的声明,他已经成功地做到了这一点。我们使用 WTL 来构建我们所有的独立应用程序,而且我们很喜欢它。我们希望看到更多的 IDE 集成和更多功能,但情况总是如此吗?
ATL Internals 是 ATL 的圣经之一。
谢谢!Brent 和我为此付出了很多努力。
你的书的下一版本会包含哪些新技术 - WTL、ATL Server、属性、Windows CE 问题?
Brent 和我一直在讨论是否要更新 ATL Internals。坦率地说,我不知道 ATL7 中是否有足够多的新内容来支持 ATL Internals 的第二版。我们可以写几章关于 WTL 的内容,但除非 MS 支持它,否则永远不会有太多 WTL 用户,而且那些用户实际上并不需要这本书。另一方面,我确实希望有足够多的新内容来支持这本书的更新。请写信给你当地的议员。: )
近年来你的编码风格是否发生了变化,有没有什么(大或小)的技巧或窍门在近年来对你产生了影响?
在过去的几年里,我编码风格中最大的变化是控制流程。我过去的做法与 Steve Maguire 在《Writing Solid Code》中所说的相同,那就是先写正常情况,例如:
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; }
随着 COM 的发展,这很快就变成了过多的缩进,而且我原则上开始不同意 Steve 的观点,所以现在我编写代码,使其能够尽早退出错误处理,如下所示:
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; }
有了智能类型,所有的清理工作都会按照我想要的方式进行,无论哪种风格,但用我的方法,我可以使用文本文件左侧的列,我认为这样更具可读性。
Chris Sells
http://staff.develop.com/csells