与 Graham Lee 的程序员访谈






4.94/5 (11投票s)
欢迎来到我们持续进行的 Code Project 访谈系列,在该系列中,我们与开发人员讨论他们的背景、项目、兴趣和烦恼。在本期中,我们采访了格雷厄姆·李。
欢迎来到我们持续进行的 Code Project 访谈系列,在该系列中,我们与开发人员讨论他们的背景、项目、兴趣和烦恼。在本期中,我们采访了 格雷厄姆·李。
你是谁?
我是格雷厄姆·李,在英格兰 皇家莱明顿温泉镇 的一家移动应用开发公司 Agant 工作。我将时间分配在开发 iOS 应用和为其他移动应用开发者提供安全咨询服务上:我的官方头衔是“安全专家”。
您做什么?
我在 Agant 工作的时间还不长,所以还不能指向我们任何一个产品说“我做的”,但我对目前正在进行的项目感到兴奋。
我从事安全工作始于我在 Sophos 公司担任其 Mac 防病毒应用的主开发人员。
离开那里后,我独立工作了几年,并出版了一些书籍:《专业 Cocoa 应用安全》和《测试驱动 iOS 开发》。现在是时候让我少说多做了。
我的职业生涯经历相当多样化,除了苹果技术之外,我还曾从事过 Java、Perl 和 UNIX C 项目。
您的开发环境是什么?
由于我主要编写 iOS 和 Mac 软件,所以我到处都有 Mac:工作时使用 iMac,其他地方使用 MacBook Air。
我通常会同时打开 AppCode 和 Xcode,因为 AppCode 有一个更好的 Objective-C 编辑器,但无法处理 Xcode 使用的接口和数据建模格式。
我编写 Java 代码时使用 Eclipse,部分原因是我之前曾从事过一个 RCP 应用。不过 AppCode 让我考虑转向 IntelliJ。
您对哪些新工具、语言或框架感兴趣?
目前我正密切关注 Windows 8 和 WinRT,并试图抽出时间深入研究。很高兴微软在触摸应用设计方面采取了与 iOS 和 Android 不同的方向,并且他们在 Windows 这个摇钱树上承担了重大的风险。Metro UI 看起来很棒,只是还有待观察开发者们将如何接受它以及我们能用它做什么。
您最讨厌的编码习惯是什么?
我对命名约定相当随和——当与其他开发人员合作时,我们通常能找到一种通用的风格来使用,即使这意味着要改变我放置大括号的位置。
我目前最大的痛点是被称为“术语驱动开发”(Buzzword-Driven Development, BDD)或“简历驱动开发”(Resume-Driven Development, RDD)的技术:放弃当前的工作技术,去追逐新潮。有很多令人兴奋的新语言和框架,但在开发者们转移到下一个事物之前,我们几乎没有时间去发现和解决现有问题。
有时我想,如果将精力用于改进现有 Web 框架,而不是用于制作本周的新 Web 框架,那么世界上就会有更多好的软件。
您是如何开始编程的?
我出生的第二年,我父亲买了一台 Dragon 32(对美国读者来说,这是 Tandy CoCo 的克隆机),所以我从小就从杂志上抄写 BASIC 程序。
然后,在 20 世纪 90 年代,我拥有了一台 Amiga——我还在进行 BASIC 编程,但也开始学习 Pascal 和 C(以及 Amiga E,它现在已经不重要了)。恰好我大学的计算机课程是用 Pascal 教的,所以那些下午过得很轻松!
我的第一份有偿编程工作是大学假期项目,用 Lisp 为 emacs 编写一个语法高亮模式。然而,当我还是学生时,我真正感兴趣的并不是 emacs——而是计算机实验室里的 NeXT 工作站。于是我学习了一些 Objective-C……然后就有了今天的我。
开发者社区是如何影响您的编码的?
如果不是社区,我可能不会比 2006 年的自己进步多少。我现在几乎住在 Twitter 上(我的账号是 @secboffin):除了与同行进行良好的讨论外,我还在那里收到和给出很多推荐。
我很久以前就删除了我的 LinkedIn 账号,因为我从未用过招聘人员,而且他们是唯一与我联系的人。
StackOverflow 在一些特定的技术问题上很有用,我喜欢 programmers.stackexchange.com 上关于实践和原则的更广泛的讨论。
在从社区学习方面,我喜欢了解我直接领域之外的人在做什么,以及思考如何将其应用到我的工作中。这通常意味着当我参加会议时,我会加入我经验很少的议题。我最近在 GOTO Copenhagen 上谈论移动开发,但花了很多时间听 Clojure 和 F# 程序员的演讲。
我对社区运作方式的主要不满之处在于,存在很多“回声室”——人们待在小圈子里重复其陈词滥调。最令人恼火的是,当他们说开发者需要改变工作方式,但从不告诉我们如何改变时。如果我想表现得虚伪,我可以将这种现象的典型症状描述为“陈词滥调驱动开发”或“推特驱动开发”。这意味着会议演讲成为演讲者获取热门短语转发的工具,演讲嘲笑“失败”而不告诉听众如何改进。你在安全专家(“开发者应该做得更好”)和用户体验专业人士(“开发者应该做得更好”)中都能看到这种现象。
告诉我们怎么做,否则你就什么都没告诉我们。
您会对一个新兴的程序员提供什么建议?
除了获得编码经验,关键还要学会抬头看代码之外,从更宏观的角度审视代码。思考你现在正在做的项目:你编写的代码如何与系统的其他部分交互?人们将如何使用它?人们是否会尝试用它来做你没有预料到的事情——或者你是否为了永远不会满足的极端情况编写了过多的代码?最重要的是,你可以和谁交流以获得更多答案?