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

与 Dave Ward 的程序员访谈

starIconstarIconstarIconstarIconstarIcon

5.00/5 (13投票s)

2012 年 2 月 8 日

CPOL

11分钟阅读

viewsIcon

42363

欢迎阅读我们的Code Project访谈系列。在此系列中,我们将与开发者们探讨他们的背景、项目、兴趣和一些烦心事。本期我们采访了戴夫·沃德,他的许多读者和追随者更熟悉他的另一个名字:Encosia。

欢迎阅读我们的Code Project访谈系列。在此系列中,我们将与开发者们探讨他们的背景、项目、兴趣和一些烦心事。本期我们采访了戴夫·沃德,他的许多读者和追随者更熟悉他的另一个名字:Encosia。

你是谁?

我叫戴夫·沃德。我住在乔治亚州的罗斯威尔,那是亚特兰大以北约20英里处的一个郊区。我通常开玩笑说我是Encosia有限责任公司的“看门人”,但我也设法做了一些写作和咨询工作。

您参与过哪些项目?

我最引以为傲的项目是Encosia.com。我投入了无数个小时来撰写、修订和维护那里的内容,回答评论中出现的问题,并回复来自网站的电子邮件。数百万访问者之后,Encosia在其领域取得的成功让我既感到谦卑又心满意足。

我的另一个我认为做得很好的项目是TekPub上的Mastering jQuery。我看过的大多数jQuery视频教程都比詹姆斯和我制作的更华丽,但它们提供的很多内容jQuery文档中都已经有了。在Mastering jQuery中,我们投入了大量精力提供更高级的指导,涵盖了诸如将jQuery与ASP.NET WebForms/MVC结合使用,使用自定义事件(即发布/订阅)来解耦代码,以及如何使用jQuery的Deferred来减轻异步编程的痛苦等主题。

我的日常工作千差万别。我将时间分配给客户工作、维护自己的网站、写作以及在Stack Overflow、ASP.NET论坛、我的帖子评论和收到的电子邮件中回答问题。对于我的客户,我做的事情从整个项目的低头开发到快速进出的“蝙蝠侠式”解决问题。通常,我的工作涉及ASP.NET(驯服WebForms或享受MVC)和JavaScript/jQuery。最近,jQuery MobilePhoneGapNode.js的工作量有所增加,但有些日子我仍然在处理Java小程序或维护ASP经典网站。

在这所有工作之间,我尽量花尽可能多的时间尝试新的语言、平台和框架。我最大的恐惧之一是随着年龄增长而停滞不前,这可能我们都见过发生在朋友和同事身上的情况。在一个节奏如此快速的行业中保持与时俱进可能是一个挑战,但我更愿意将其视为永不无聊。

您的开发环境是什么?

我的绝大部分开发工作都是在一台配备24GB内存和固态硬盘的Windows 7机器上进行的。如果你对开发是认真的,我强烈推荐这两项升级。与它们能为你带来的生产力相比,现在的货币成本绝对是物超所值的。

我最近也升级到了双30英寸显示器,它们非常棒。虽然它们的成本比内存和固态硬盘更难合理化,但我为它们花的每一分钱都不后悔。

我还会使用MacBook Air来处理不在主机器旁时的轻度/紧急开发任务,以及编译PhoneGap应用的iOS版本。如今喜欢Windows并不流行,但我非常喜欢它胜过OS X

我使用MacBook的主要用途是大部分写作、处理电子邮件和回复博客评论。尽管我不是OS X的忠实粉丝,但苹果硬件的质量让我可以愉快地在城镇中漫步,并在不同地点工作,而无需拖着笨重或脆弱的机器,也无需担心电池续航时间。随着越来越多的研究表明长时间坐着盯着电脑屏幕对健康的影响,我尝试在不需我的完整开发机器的任务上,多走动并采取游牧式工作方式。

由于同时使用这两个平台,我开始欣赏那些在Windows和OS X上都能很好运行的工具。例如,DropboxEvernotePhpStormSublime Text 2已经变得非常宝贵。

当然,我在处理ASP.NET项目时仍然使用Visual Studio,并且在构建PhoneGap应用的iOS版本时别无选择,只能使用Xcode(这让我很感激Visual Studio)。

Beyond Compare是我对跨平台软件偏好中的一个明显例外。当我寻求OS X上Beyond Compare的替代品时,很明显,那些只使用Mac的人根本不知道Beyond Compare能带来什么。

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

首先,Node.js。我相信Web开发的未来在于全栈JavaScript。这不会一蹴而就,但最终向新的Web开发者推销一个需要他们学习n + 1种语言的堆栈将是一个艰难的提议。在某个时候,我认为为与UI相关的代码使用不同的服务器端语言,将不再比今天使用Java小程序进行鼠标悬停效果更有意义。

坦率地说,我很惊讶服务器端JavaScript实现花了这么长时间才获得临界数量的采用,但很明显Node已经做到了。我特别高兴看到Joyent微软都努力工作,确保Node在Windows上的开发像在其他平台一样稳固。

其次,PhoneGap是目前另一个令人兴奋的项目。能够将jQuery Mobile项目封装在PhoneGap中,并将原生应用部署到多个平台,几乎任何企业都能从中受益。这两个项目都还有一些粗糙之处,并且还存在一些特定于操作系统的问​​题(我在说你,Android),但解决这些问题只是时间和坚持的问题。

部署一个统一的UI代码库,它能在多个移动平台(以及桌面上的Chrome)上运行,最终实现了“一次编写,随处运行”的古老承诺。我越来越觉得,我们将看到公司利用PhoneGap迅速地在大多数移动平台上同时提供基本的“原生精简版”体验,然后为那些在其特定场景中值得额外开发努力的平台开发更丰富的原生应用。换句话说:广度优先而不是深度优先。

值得一提的是[Windows 8]、WinRTWinJS。由于我未能从BUILD大会上抢到一台开发机器(有没有慷慨的微软员工在读这篇文章?),而且在虚拟机中运行Windows 8很麻烦,所以我还没花太多时间在WinJS上。不过,我认为Windows 8可能会极大地改变应用商店的动态。当你可以使用Visual Studio时,为什么要处理笨重的Android SDK或经历iOS开发所需的所有繁琐步骤?同样地,当你可以将你的应用推向Windows 8商店中将成为数亿的潜在客户时,为什么要为了变幻莫测的iOS应用商店或以节俭著称的Android市场中争夺残羹剩饭呢?

我认为Windows 8是一个引人注目的机会。我肯定打算今年更彻底地开始探索Windows 8开发,特别是使用WinJS和JavaScript。

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

我的一个心头大患是不使用版本控制。从散落着名为 index-new.1–4–2012.USETHISONE.html 的文件的目录,到出于恐惧而注释掉而不是删除的代码块,在那种混乱中工作的后果是对开发和维护各个阶段生产力的持续拖累。

对于命名约定,我喜欢JavaScript和PHP中的 camelCase。C#中的 PascalCase。Python和Ruby中的 whatever_this_style_is_called 样式。我避免匈牙利命名法,但我确实喜欢用美元符号前缀jQuery包装集变量(例如,var $foo = $(‘#foo’);)。

缩进:2个空格。从理论上讲,制表符更有意义,但近年来我已逐渐放弃它们。在实践中,多行流畅的方法调用和对象字面量在我的工作中很常见,当在不同制表符大小的编辑器之间切换时,它们最终会 horribly misaligned。

括号:K&R。在JavaScript中标准化使用K&R有助于避免一个特定的边界情况。在Razor视图中,如果将循环或条件的开括号保留在同一行,格式会整洁得多。因此,尽管我在C#中使用了多年的Allman样式,但我还是标准化了K&R以保持简单。经过短暂的适应期后,我反而更喜欢K&R。垂直空间几乎总是比水平空间更宝贵。我发现屏幕上每个控制块多显示一行,非常值得我最初花时间适应K&R的努力。

您是如何开始编程的?

我的编程生涯始于80年代初,当时我父母为家里买了一台TRS–80 彩色电脑。它拥有惊人的16KB内存,并附带ROM上的Microsoft BASIC解释器。因此,只要打开电脑,你就可以输入BASIC语句并立即获得反馈。我相信这种即时性是我能接触到编程的关键部分,这可能也是为什么我仍然喜欢使用REPL环境,如FirebugLINQPad来学习和实验。

当时,软件分发的主要方式之一是杂志上的打印代码列表。通过反复输入(并重新输入;我无法在断电后保存我的工作)我想玩的游戏,并在出现错误时纠正错别字,我开始通过强行学习(brute-force mitosis)理解代码的含义。

很快,我决定尝试自己编写游戏。我的第一个“真正”的程序包含一个加粗的标题,一段说明文字,以及一个功能正常的“按任意键”提示来开始游戏。不幸的是,我当时不明白即使是简单的程序也有多少是在表面之下运行的。在按下任意键后,我的程序立即退回到BASIC提示符,因为我只写了那么多。

开发者社区是如何影响您的编码的?

开发者社区对我的编码产生了深远的影响。最激动人心的创新发生在探索相邻可能性的边缘时,而与社区脉搏保持联系是理解该领域所在位置的重要组成部分。

Twitter、其他博客的RSS订阅以及像Hacker News这样的聚合器都是从信息洪流中汲取营养的有用方式。与此同时,也很容易花费过多的时间消费内容,却没有时间自己动手实验或创作自己的内容。被动地阅读某件事与打开编辑器亲眼看看它是如何工作的完全不同。在消费和创作之间找到平衡是我一直在努力寻找的,但我想知道这一点就成功了一半吧?

另一方面,我发现回答Stack Overflow和ASP.NET论坛等问答网站上的问题也是社区中很有价值的一部分。了解实际开发者正在努力解决的问题以及他们用来描述问题的语言,促成了我一些最受欢迎的博客文章。同样,接触到各种混乱、真实的实现细节和障碍,有助于增加数据点,验证好的解决方案,并更早地暴露出不良方法。

您会对一个新兴的程序员提供什么建议?

写关于编程的文章。开始一个博客,在Code Project或Stack Overflow上回答问题,或者其他任何适合你的方式,但总要找到某种方式来写关于编程的文章。

我数不清有多少次我开始写一些我自认为非常了解的东西,结果却发现我必须填补知识中几个重要的空白才能胜任地写出来。同样重要的是,你必须更全面地学习主题,才能以简单的术语提炼和教授它们。撰写关于编程的文章,并尽可能让这些文章清晰简洁,这是一种强大的练习。

也许更引人注目的是,我曾看到研究声称有效教授左脑的、技术性概念(如编程)会迫使你同时调动左脑和右脑。据说,这有助于加深你对某个主题的掌握,并为你提供通常不会遇到的新视角。

我们可能都听过那句老话,不能做的人就去教。尝试教授我经常“做”的主题是令人大开眼界的,现在我完全不同意那句老话了。

我最近碰巧和朋友尼克谈论此事,他提醒了我另一句俗语:如果你不能教它,你就不知道它。那句更好。

© . All rights reserved.