65.9K
CodeProject 正在变化。 阅读更多。
Home

与 Michael Dunn 的程序员访谈

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.99/5 (30投票s)

2012 年 1 月 25 日

CPOL

8分钟阅读

viewsIcon

56239

欢迎来到我们正在进行的Code Project访谈系列,我们在这里与开发者们交流他们的背景、项目、兴趣和厌恶。在本期中,我们采访了迈克尔·邓恩。

欢迎来到我们正在进行的Code Project访谈系列,我们在这里与开发者们交流他们的背景、项目、兴趣和厌恶。在本期中,我们采访了迈克尔·邓恩,他是一位长期的Code Project会员,并且是四届Code Project MVP。

你是谁?

我叫迈克尔·邓恩。我住在著名的硅谷的芒廷维尤,离谷歌和Facebook等公司的总部只有几英里。我在VMware担任高级工程师,负责开发VMware WorkstationPlayerFusion的团队。如果您在Workstation中使用过全屏、多显示器或统一模式,那么您正在运行我的代码。

您做什么?

我于1995年开始从事行业工作,在赛门铁克诺顿杀毒软件团队担任QA工程师。我在大学里学过C++,但对Windows一无所知,所以作为工作的一部分,我在编写自动化测试工具时有机会学习Win32编程。在QA团队工作两年后,我晋升为开发团队成员。我在那里完成的最受关注的工作是重新设计NAV 2000的主界面

我曾就职的另一个您可能认识的公司是Napster。是合法版本。在公司更名为Napster之前几个月,我就加入了该公司。公司被出售并更名后,我们重新设计了独立客户端应用程序和Windows Player插件的用户界面,我领导了重新设计工作。我还编写了与便携式设备(MP3播放器、手机等)交互的代码。

您的开发环境是什么?

在工作场所,我有一台配置强大的戴尔电脑,配备三个显示器,但通常我只使用其中两个。我负责的一些功能是为多显示器环境设计的,所以这就是我拥有这么多显示器的原因。我们的开发机器通常配备大量内存,因为我们需要能够同时运行多个虚拟机。我的机器有12 GB内存,运行64位Windows 7

由于我的团队有Windows、Linux和Mac开发者,因此没有标准化的开发环境。我和其中的一些人一样,使用Visual Studio。我使用的是2008版本,原因有几个:我们不使用C++11,2010版本看起来不太好看,而且几个月前我尝试使用2010版本时,它无法处理我们庞大的代码库。VMware使用Perforce进行源代码控制,一些喜欢git的人会使用git镜像。对于代码审查,我们使用最棒的Review Board

我家里的硬件远没有那么先进。我花在自由时间“有趣的”编程上的时间最近有所减少,所以没有感到迫切需要升级。我使用的是一台5年前的Alienware笔记本电脑,它还能正常运行,尽管电池已经不行了。我还使用Drobo来备份我的照片、源代码和其他重要文件。

毫无疑问,我最喜欢的框架是WTL。它非常适合我。它既是一个可以隐藏繁琐工作的框架,又不至于过于抽象,以至于与底层的Win32层完全不同。我在VMware以及通过Stephan T. Lavavej的精彩系列视频中接触了更多的STL,越是了解,我越是欣赏其设计付出的辛勤努力。

我几乎所有的工作都集中在C++上。我偶尔会涉足JavaScript,并且自己学会了Perl,因为它非常适合我需要的文本处理。但大多数时候,我喜欢用C++做一些技术性的UI工作。

您对哪些新工具、语言或框架感兴趣?

C++11看起来非常不错,尽管我短期内还无法在实际工作中用到它。由于需要跨三个平台共享一个代码库,每个平台都有自己的编译器,因此进行重大升级会有些麻烦。

我最近一直在撰写有关Ribbon的文章,甚至还玩过一点动画引擎。我非常喜欢微软最近设计的COM底层功能。我记得在我还在NAV团队的时候,不得不将任务计划程序集成到NAV中,当时它看起来非常复杂且难以使用。但是Ribbon、动画引擎和Windows 7任务栏功能都有很好的示例,而且它们足够直接,我在阅读文档和示例代码一天后就能掌握每项功能的基础知识。

您最讨厌的编码习惯是什么?

直到你不得不修改那些从未听说过“你应该像维护程序员是一个知道你住在哪里的凶手一样写代码”的人的代码时,你才真正体会到这句话的真理。合理的变量名、写得好的注释和清晰的逻辑会让生活变得更加轻松。缺乏这些东西会让我的工作更困难,甚至让我想买一把斧头。

我坚决支持匈牙利命名法,令人遗憾的是,人们在不了解如何使用它来获得它被设计来提供的益处的情况下就否定了它。可以参考Eric Lippert的“What's Up With Hungarian Notation?”和Joel Spolsky的“Making Wrong Code Look Wrong”,其中有更长、更精彩的文章来论证匈牙利命名法的优势。

至于缩进风格,唯一真正让我恼火的是当匹配的元素不对齐时。那种“if (xyz) {”的风格让我非常难过。这不仅使得扫描代码和查找匹配的大括号变得更困难,而且减少了if(或while,或任何其他)下方的空白区域,导致代码挤压在一起,这也降低了可读性。

您是如何开始编程的?

由于叔叔在他升级旧硬件时把一些旧硬件给我用,我从小就接触了电脑。我当时并没有在上面编程,但偶尔会从书本或杂志上抄写程序。

我真正开始编程的第一台电脑是Apple//e在我四年级或五年级的时候。学校图书馆有几台电脑,图书管理员教了一个放学后的BASIC课程。除了课堂作业,我记得写的第一段程序是使用Apple BASIC的画线命令制作的一个简单的“欢迎来到开放日”动画。

我拥有的第一台被我广泛使用的电脑是Commodore 64。那时我读了很多书,而且我经常订阅《Compute!》、《Compute!'s Gazette》和《Run》等杂志。但64的BASIC功能很有限,所以我更多的是阅读而不是写作。另外,64在游戏方面太出色了,导致我有点分心。:)后来,我买了一台128,它的BASIC足够好,我开始编写一些严肃的程序。我写的最复杂的程序是一个方程绘图仪,它使用了自修改技巧,允许我在运行时输入方程。

我在大学上了一门C和C++课程,那时我才真正意识到,嘿,这是我喜欢并且擅长的事情,我可以以此为生。

你喜欢/讨厌开发者社区的哪些方面?

我喜欢能够帮助那些刚起步的人。这也是我开始写文章的原因之一。当我学习Windows时,没有在线资源,所以当我遇到困难时,我必须自己解决,或者希望团队里有人能帮忙。很高兴CodeProject的作者和其他问答网站积累了如此庞大的知识库。我在Build大会上遇到一位老同事,他说他认识一些使用WTL的开发者,他们都是通过阅读我的文章系列开始学习的。(太棒了,增强了我的自尊心!)

有一些很棒的博主,尤其是Raymond Chen,他们也拥有大量的知识,并花时间分享。他们很好地中和了我在微软每次宣布新产品时通常听到的那种“赞歌”,这些新产品当然比两年前发布的、现在已经被淘汰的产品要好上100倍。

我并不真的讨厌社区的任何东西。我在CodeProject论坛上只有过几次不愉快的经历。话说回来,我一开始就不会卷入巨魔和争论之中。

您认为自己在 10 年后会是什么样子?

老实说我不知道。我可能会成为以下三者之一:程序员、摄影师或职业弹球玩家。每种情况发生的概率会随着时间而变化。

如果你给一个崭露头角的程序员一条建议?

我将公然无视“一件”这个说法。:)

  1. 参见上面关于不要招惹斧头杀手的内容。
  2. 编程以及与之相关的思维技能都需要练习。编写代码以加深对特定领域的理解。编写代码来解决问题并提高你的解决问题的能力。
  3. 我强烈推荐《Writing Solid Code》这本书,它包含了大量关于如何编写代码以尽早发现bug的信息和良好实践。
  4. 培养你的书面语言能力,比如为CodeProject撰写文章。当你与远方的人打交道,或者撰写未来程序员将依赖的注释时,良好、清晰的写作至关重要。
  5. 如果你是英语母语者,你绝对必须学习一门其他语言。虽然人们常说英语很难,但它的语法实际上比罗曼语族或其他日耳曼语族语言要简单得多。学习其他语言可以让你了解英语中不存在但其他语言中很常见的规则,例如名词-形容词一致。如果你不了解其他语言的做法,那么在编写能够正确运行于其他地区的代码时,这可能会成为一个很大的障碍。很容易编写出假设英语语法规则的代码,却不意识到在其他语言中你的输出将完全错误。
© . All rights reserved.