与 Kate Gregory 的程序员访谈






4.95/5 (13投票s)
欢迎来到我们持续进行的 CodeProject 访谈系列,在这个系列中,我们与开发者们探讨他们的背景、项目、兴趣和最令人头疼的问题。在本期中,我们采访了 Kate Gregory,一位长期的 C++ 开发者、培训师和顾问。
欢迎来到我们持续进行的 CodeProject 访谈系列,在这个系列中,我们与开发者们探讨他们的背景、项目、兴趣和最令人头疼的问题。在本期中,我们采访了 Kate Gregory,一位长期的 C++ 开发者、培训师和顾问。
你是谁?
我是 Kate Gregory,是 Gregory Consulting 的两位 Gregory 之一。我的头衔是创始合伙人,但这并不能说明太多。
我们有两种完全不同的客户群:一类我们帮助他们成为更好的开发者(我们指导他们、为他们编写课程、撰写书籍、在会议和用户组中发表演讲),另一类根本不是开发者,我们为他们编写软件。公司里的每个人在这两类工作之间分配的时间比例都不同。最近我更倾向于“帮助你成为更好的开发者”这方面。我负责我们所有的公开活动,比如 写博客、发推文、公开演讲、接受采访、坐飞机等等。出乎意料地(对我来说),我很喜欢这一切。
二十多年来,我一直居住在安大略省的乡村,位于多伦多和彼得伯勒之间,并且大部分时间办公室都设在家里。我喜欢住在乡下,避开高峰时段的交通,并且可以随时停止工作去处理家庭事务——然后晚上再加班来弥补,而不必往返于家和办公室之间。事实上,我们在 1991 年选择房子时,很大程度上就是因为那里的互联网接入(当然是拨号上网)!
您做什么?
我为 Pluralsight 编写了许多课程:Windows 7 开发、扩展 Visual Studio、普通的使用 Visual Studio、C++(三门关于语言本身的课程外加一门关于 Windows 8 开发的课程),还有更多课程正在进行中。Pluralsight 有我已完成课程的列表,你可以去看看。
我还在写一本关于 C++ AMP 的书,预计今年夏末完成。
在经历了一段刻意放缓的时期后,我今年又开始接受演讲邀请并进行旅行了,并且随着对 C++ 的兴趣重燃,很多演讲都是关于 C++ 主题的。例如,我将在 Tech Ed Europe 和 Tech Ed US 的所有全天预备会议上发表演讲,介绍 C++ 的热门话题以及 C++ 中令人兴奋的新特性。我还将在 4 月份的 多伦多 C++ 用户组的首次会议上发表演讲。
我正在指导几位本地开发者(主要是 .NET、WCF、业务应用程序),并且我也会在力所能及的时候参与我们的编码项目。我还有一个关于微软最新技术与 C++ 新特性交叉领域的研究项目,但目前还不能多说。
您的开发环境是什么?
现在我的桌上有两台笔记本电脑和两个额外的显示器,每台笔记本配一个。我日常使用的笔记本电脑运行 Windows 7,安装了 VS 2010 和 VS 11,包括 Express 和 Ultimate 版本。还有 Office、三种浏览器、我使用了 20 年的各种实用工具(说实话,是 Paint Shop Pro – 启动屏幕上显示版权信息是 1991–1997),Camtasia,以及你在工作中自然会积累的所有东西。
第二台笔记本电脑要新得多,也空得多。我选择它是因为它有一块非常好的显卡(对笔记本电脑而言),我需要它来充分发挥 C++ AMP 的性能。C++ AMP 允许你将计算转移到 GPU 上,但这需要一块支持 DirectX 11 的显卡,而我日常使用的笔记本电脑上没有。我在这台机器上没有安装太多其他东西。它支持双启动 Windows 7 或 Windows 8,并且两个系统都安装了 VS 11,但没有 VS 2010 或 Office。我在这两个系统中都安装了 Paint Shop Pro 用于截屏。
现在我的生活中发生了一些非常奇怪的事情:几乎我所有的工作都变成了 C++。这种情况已经很久没有发生了——毕竟是几十年了。即使在 .NET 出现之前,我们也偶尔会做一些 VB 的工作。但无论是巧合还是其他原因,我几乎每天都在 VS 11 中使用 C++ 工作。例如,我在新笔记本电脑的两个启动系统中都将 VS 设置为 C++ 模式,并且当我在别人的机器上看到不同的解决方案资源管理器布局时,感觉有点奇怪。
我的开发环境还有另外两个重要的变化。
一个是拥有一台 Windows 8 电脑。我从 //build/ 会议上带回来一块平板电脑,并把 Windows 8 安装到了很多机器上。现在它们都已更新到测试版,我开始真正喜欢在上面工作了,即使是写代码、写书或制作演示文稿这样的“主动”工作。桌面端的改动并没有引起太多关注,但我发现它在许多小方面比 Windows 7 更易用,而 Windows 7 本来就已经很棒了。
另一个变化是 托管的 TFS 预览版。这是一种非常方便的与客户以及我领域之外的任何人协作的方式。我们自己有一个本地 TFS 服务器,但拥有一个托管的 TFS 服务器也非常容易设置,并且省去了来回发送邮件或告诉人们你已将文件放在 FTP 网站上的麻烦。我甚至发现它是一种方便的方式,可以在两台笔记本电脑之间传输文件——在一台电脑上检入,然后在另一台电脑上获取最新版本。我认为 VS 11 中的 ALM 功能集是我觉得它很有用的原因。在那方面用户体验有了很大的提升。
您对哪些新工具、语言或框架感兴趣?
我正在深入研究 C++ AMP,甚至不确定是否有人会跟着我一起。我现在正在学习关于 GPU 硬件、内存布局、进程调度等方面的知识,比我预期的要多。我正在用 C++ 和 XAML 为 Windows 8 进行一些 Metro 开发,并且非常享受这个过程。我喜欢它与手机开发的相似之处,并且我计划尽快将我们的手机应用(用 C# 和 XAML 编写)移植到 WinRT。这一切都得益于 C++ 语言本身的改变。如今,C++ 编写和阅读起来都容易多了,安全性也更高,当然,在运行时仍然是所有可用语言中最快的。
您最讨厌的编码习惯是什么?
作为一名顾问,你必须能够适应客户使用的编码风格和命名约定(如果他们有的话),或者在他们没有的情况下能够倡导一种风格。
我大部分时间都喜欢将大括号放在单独的一行——例外是在新的 PPL 连续性 中使用 lambda,这时我倾向于将 `}).then(` 放在单独一行,或者将 `});` 放在单独一行。我相信如果你还没有尝试过阅读一个包含 4 或 5 个连续 `then` 调用的链式调用,这看起来会很疯狂,但相信我,在上下文中是有意义的。
对于控件,我对匈牙利命名法(如 `lblResult` 或 `btnEdit`)是可以接受的,但对于字符串、计数器等则不行。
我遵循 Visual Studio 的默认缩进设置,如果遇到一个对缩进(制表符/空格,3/4,括号是否内嵌)非常讲究的人,我就会努力避免在午餐时与他坐在一起。
我最头疼的事情就是这种事:
bool result; result = foo(whatever); if (result == true) { return true; } else { return false; }
我们都见过。当我指导别人时,我会解释为什么这非常没用。如果我在进行代码审查,我会当场替换掉它。
return foo(whatever);
我也会对尤达条件感到非常恼火。
if (true == result)
提高你的警告级别,并保持代码的可读性。
除了这两点,我是一个头脑冷静、有耐心、宽容的人,能够接受各种各样的编程风格。只是每个人都有自己的底线。
您是如何开始编程的?
我应该记住这个吗?好的,1976 年,我们学校来了一台计算机。我想它基本上就是一个计算器。你输入表达式,它就给出答案。格式错误的表达式,或有下溢/上溢的答案,会点亮一个写着 TILT 的标志。(会有人记得弹球机的梗吗?但它确实是这么写的。)这简直是最笨拙的事情了。我试了一下,它在我没料到的情况下显示了 TILT,我感到很恼火,于是决定不再接触计算机。
我去了滑铁卢大学,因为我妈妈是圭尔夫大学的教授,我爸爸是滑铁卢大学的教授,而我当时 16 岁,他们不想让我离家去上大学,所以这些是我的选择。我选择了滑铁卢大学和数学系,因此我成了数百名大一新生之一,在算法课程中学习 WATFOR。我从那门课中几乎只记得我的第一个程序员笑话:
程序员为什么在淋浴时淹死了?[举起一个东西,好像在阅读]“揉搓、冲洗、重复。”
过了一段时间,我转到了化学工程系,因为我很喜欢它,并且在我的合作实习工作中,我被要求编写一些简单的程序,我写了,而且我很喜欢。那基本上都是 Fortran。
作为另一份工作的一部分,我还学习了 PL/1,这非常棒!它内置了数组类型,所以你可以写 `A=B` 而不是逐个元素循环。然后,在我读研究生期间(80 年代后期),我学习了 C++,以便能够编写一些数值积分来处理我正在解决的这些多重偏微分方程。从那以后,我一直是一名 C++ 人,尽管我仍在不断学习新知识。
开发者社区是如何影响您的编码的?
社区对我来说非常重要。我喜欢在会议和用户组中与人们面对面交流。我喜欢人们在我的 博客上发表评论,或者在 Twitter 或我的 Facebook 公共主页上互动。
我在 StackOverflow 和许多其他 StackExchange 网站上非常活跃。我有一个 LinkedIn 个人资料,但并不怎么使用它。我还会在一些微软论坛上关注,这取决于我正在做什么——这样我就可以解决自己的问题,或者了解别人正在为之挣扎的事情。
我惊讶于 Twitter 对我生活带来的改变。我感觉与我经常不见面的人保持联系,我获取重要信息,并且经常大笑。这很好。
您会对一个新兴的程序员提供什么建议?
不要试图独自前行。如果你是公司里唯一的开发者,请参加用户组并认识一些当地的人。只要有可能就去参加会议。如果不行,就等会议的演讲视频上线后再观看。在 Twitter 上关注人们,阅读博客,阅读文章。养成早晨喝咖啡时查看行业动态的习惯。你会在一天的工作中节省回来的时间。如果你团队里有其他开发者,偶尔与他们进行结对编程。花一个小时一起解决问题并让它正常工作,这非常有趣且富有成效。然后你再自己回去整理,当然。
另外,如果有一项技术你很熟悉并且对你有用,不要觉得有义务放弃它而学习新的东西。任何旧事物都会在一二十年后卷土重来,如果你在旧技术和新技术方面都保持最新,你就会非常有价值。这正是我现在发现的。那些在世纪之交左右离开 C++ 的人,根本不知道它现在能做什么。他们受制于他们对它的旧知识。但那些一直坚持下来的人,他们拥有了一套突然变得非常热门的技能。
当然,我不是说不要学习新东西:在过去十年里,我编写了大量的 .NET 代码,而且这些代码质量很高且很有用。不要在这两个方向上都走极端。
(我知道,这是两条建议。但我已经靠编程谋生第四个十年了:我有太多积压的建议了。)