`
mondayw
  • 浏览: 140222 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

[译文]开发者见解系列,第3部分:编写代码的步骤(下)

    博客分类:
  • Java
阅读更多

原文:The Developer Insight Series, Part 3: The Process of Writing Code

作者:Janice J. Heiss

出处:http://java.sun.com/developer/technicalArticles/Interviews/devinsight_3/

 

[译文]开发者见解系列,第3部分:编写代码的步骤(上)

 

Shannon Hickey:汇聚方法,然后创建原型



关于
Shannon Hickey

Shannon Hickey2000年到2008年期间在Sun Microsystems工作,他是公司的Swing团队的技术带头人,他目前是Adobe Systems的一位资深计算机科学家。Hickey与他的家庭及双胞胎儿子住在加拿大,这两个男孩让他忙个不停。

 

我倾向于把许多能量汇集起来,因此如果我真地热衷于解决某个问题的话,那么我首先要做到事情是快速地把各种方法汇合起来然后构建原型,如此直到我在屏幕上得到正确的比特位或是获得正确的行为,这就是我对概念的验证,这可能需要一下午或是一两个小时的时间。

不过一旦我证明了原型是行之有效的,我就会开始考虑如何正确地设计API,在工具包团队或是Sun的任何部门工作,我们为其他人编写他们会用到的代码,因此我们必须要考虑创建适当的API。一旦我们把实现放入到API中,我们就再也不能够把它从JDK中拿出来了,因此我们在设计时时刻记着开发者的需要。使得API能够高速运作与把它设计成真正灵活的这两者之间有着很大的不同,这其中有许多需要考虑。

当我在为大型的项目构建原型功能的时候,我通常会采用循序渐进的方法,编写小块的代码,然后在其之上再构建。例如,比方说我想编写一个允许你在屏幕上四处拖动图标的拖放应用,首先我会把所有的移动假设对象的拖放支持都汇合到一起,然后我会查看是否能够在屏幕上四处拖动诸如红色的长方框一类的特定图标;接下来,我会查看是否能够让图像在屏幕上四处移动,然后我再编写生成图像的代码。

我发现这一过程很是令人兴奋,我总是渴望着去解开下一个谜题!

 

可参阅对Shannon Hickey所作的完整访谈

 

Richard Gabriel:把开发者训练得像诗人和艺术家一样

 



关于
Richard Gabriel

Richard Gabriel曾在Sun Microsystems担任了几年的Distinguished Engineer一职,研究超大型系统的架构、设计和实现,同时开发构建这些系统的技术。他于1981年获得斯坦福大学的计算机科学博士学位,并重返校园于1998年在Warren Wilson学院获得诗歌写作方面的MFA学位。

 

编写软件应被视为一种创造性活动,只要想想看——令人感兴趣去制造的软件都是之前从未被制造过的软件。大多数其他工程学科都是关于构建之前已构建过的事物的,人们会说:“那么,为什么我们不能以构建桥梁的方式来构建软件呢?”

问题的答案是,我们构建桥梁的历史已有数千年,虽然我们能够逐步地改善桥梁,但事实是每座桥都会类似于其他某座已经建好的桥。有人会说:“呃,让我们建一座横跨这条河的桥,这条河有这么宽,有这么深,他必须要承担这样的负担,他要能行车,允许行人,或者还要通火车,因此它必须类似这一座桥或是那一座桥。”他们能够知道他们正在构建的桥的类别,因此他们能够在设计方面对准目标,快速入手,他们不需要重新发明车轮。

但在软件方面,即使就Java 2企业版或者Java实现(或是几乎任何我们定义的API)这一类产品来说,我们推出了——如果不是首次的话——至多是第七或者第八个版本,我们构建软件的历史只有50年,几乎每一次对我们来说都是在创建新的事物。

如果你看一下软件开发者及他们的产品,如果你研究研究他们的源代码,他们编写的程序以及他们最终创建的设计,那是相当的千变万化,一些人做得相当好,而其他的一些则没那么好。

那么,因为你的编程工作可能做得很好或不好,并且因为绝大部分的工作都是创造性的(由于我们在开始着手时确实不知道我们正在实现的是什么),我的看法是,我们应该像培养诗人和艺术家一类的有创意的人那样来培养开发者。

人们可能会说:“啊,那听起来这是有点疯了。”然而,当人们在接受训练时他们会做什么呢?举个例子来说,要获得诗歌写作方面的艺术硕士学位吗?他们研究诗歌的著名作品,我们在软件工程学科中这样做吗?不,你不用研究软件的优秀产品的源代码,或是研究软件的优秀产品的架构,你不用研究他们的设计,你不用观察优秀的软件设计者的生活,因此你不用学习你正试图构建的事物的相关学问。

再者,MFA(艺术硕士)程序创建了一个你在反思的同时也在创造的语境,例如,你在阅读和批判其他诗歌时,与正在审核你的作品、帮助你思考你的作品以及与你一起修正你的作品的导师一起探讨时,你同时也在写诗。接下来你进入到了写作者的工作领域中,并继续整个过程,在一种有苛刻语境监督及有辅导老师的情况下写出许多许多的诗歌。我们并不把这样的做法放到软件上。

 

可参阅对Richard Gabriel所作的完整访谈

 

Tor Norbye:首先很快地给出一个基础框架,然后逐步填补空缺的地方

 



关于
Tor Norbye

Tor NorbyeSun Microsystems的首席工程师(principal engineer),自1996年来一直在从事开发工具方面的工作,最近则忙于NetBeans中的RubyJavaScript编辑器。他还是每周的Java Posse播客的共同主持人,他拥有斯坦福大学的计算机科学硕士学位。

 

我在写代码时通常要实现一些新的功能,我的方法是首先很快地给出基本的框架,然后逐步填补各个空白处,并在这个过程中通过执行代码来进行手动的测试。一旦我有了一些基本可用的东西,我就会写一些单元测试,当基本的测试通过之后,我就开始考虑一些边边角角的用例,我通过细想每一种可能的边角情况并为之添加单元测试来实现这些用例,然后使用这些单元测试来捕获代码中的bug

因此,我的方法是先编写功能代码,之后再进行测试,然后在掉转过程的方向,为我还未指望能通过的用例编写测试代码,并使用这些测试来完善代码。

另一条重要的编码经验是“听”音乐,我在iTunes中有一个专门的名为“编码音乐”的播放列表,编码音乐有助于我把干扰的背景噪音隔离掉,使得整个经历更加愉快,窍诀在于找到不会令人分心的音乐——这就是为什么我之前把“听”一词放在引号中。

古典音乐就很有效,特别是巴洛克音乐,不过像麦当娜的“Confessions on a Dance Floor”之类的快速舞曲也可以。我并不总是能够享受听着音乐编程的奢华——例如,在开会或是做播客视频时,我不得不做出我正在关注的样子,只是开玩笑啦,我不会这样的。好吧,我会,不过不是总这样。

从头开始编写新的代码这很有趣,但这只占工作的百分之九十,另外的百分之九十是使得代码是可拿得出手的且是正确的。调试代码则非常不同于制造新的代码,这通常涉及花费许多时间在调试器上,彻底检测假设,有时要编写一些定制代码来缩小问题空间,不过其实我同样也喜欢调试。

我把在Sun公司的头五年花费在了Sun WorkShopC/C++调试器上,从中我不仅学到了所有的技巧和诀窍,而且还添加了对新的调试功能的支持,我总是会对调试器情有独钟。

 

参阅对Tor Norbye所作的完整访谈

 

Romain Guy:以编写原型作为开始

 



关于
Romain Guy

荣获Java Champion称号的Romain GuyGoogle公司Android Project项目的一位用户界面工具工程师。

 

随着诸如主流IDE中的重构一类的强大的新编程工具的出现,过去几年以来我编码的方式已经改变了许多。大多数时候,我以通过编写验证我的设想的原型作为开始,然后我会通过重构代码把原型逐渐演变成真正的代码。我在各个层面都使用这一方法,包括几行代码到一个完整的应用模块。

原型方法通常被说成假定最初的代码将会被抛弃,你要重新开始,不过我确信,如果你够严谨的话,那么重构能够产生很好的效果,我偶尔也会以一张纸或是通过与他人讨论项目以获得关于架构应如何的好主意作为开始……

最有趣的部分在最后,在我可以见到工作的结果,特别是当结果正好符合我一开始时的想法时。我喜爱编程,因为这能够令我梦想成真,考虑到我在艺术方面如此糟糕,如果我想有创造性的话,那么实在是没有什么选择。

 

参阅对Romain Guy所作的完整访谈

 

Éamonn McManus:泉涌状态

 



关于
Éamonn McManus

Éamonn McManusSun MicrosystemsJava Management ExtensionsJMX)团队的规范带头人,因此,他现领导着JSR 255JMX API 2.0)和JSR 262Web Services Connector for JMX Agents)方面的技术工作。

 

就其最好的情形来说,编写代码是发生在某种“泉涌”状态或是某种沉浸状态中,这确实难以形容,不过当你进入这一状态中时你就会明白,这种状态并不容易达到,且我们日常所作的大部分工作并不容许这样的状态出现。

为了最大程度地提高你的机会,你应该确保在编写某些较大的代码时不会被打断,并且精通你的工具。精通使用工具意味能够在不看键盘的情况下快速输入,了解IDE能做的所有工作则可以提高你开发的速度,并且要对关键的API了然于胸。

你可能还想安排有座附近的山以用于眺望。

 

可参阅对Éamonn McManus所作的完整访谈

 

Alan Williamson:大量的白板讨论和方框图

 



关于
Alan Williamson

Alan Williamson2006年荣获UK的第一个Java Champion称号,作为一位开发者有着超过16年的辉煌时间,他曾担任了几年的Java Developer’s Journal的主编,2008年的1120日,他组织了第一个临境云计算训练营,并在20091月份被指定为新的Cloud Computing Journal的编辑。

 

我会做大量的白板讨论和画框图,当来到编写代码的阶段时,我会实现许多版型代码,设计类、方法调用等,但不考虑方法的细节,因此有许多的return null语句,到处都是。

我是那种能够很好地想象出解决方案的那种人,因此当我看到展示的类层次时,在到达任何临近实现代码的真身之地之前,我就会知道那是行之有效的。

有些人使用其他的工具,诸如UML,不过我总觉得它有些碍事。

 

可参阅对Alan Williamson所作的完整访谈

 

其他参考

Adam Bien访谈博客

Kohsuke Kawaguchi访谈博客

Chet Haase访谈博客

Arun Gupta访谈博客

Kelly O’Hair访谈博客

Josh Marinacci访谈博客

Masood Mortazavi的访谈1部分2部分,以及博客

Shannon Hickey访谈

Richard Gabriel访谈博客

Tor Norbye访谈博客

Romain Guy访谈博客

Éamonn McManus访谈博客

Alan Williamson访谈博客

开发者见解系列:

1部分:编写傻瓜代码——四位首席Java开发者的建议

2部分:谈谈编码

 

评论

 

你有想要和其他人分享的特有的编写代码的步骤吗?或是对你读到的内容有什么回应?我们很乐意倾听。我们欢迎你加入到我们的社区中来,请保证评论的礼貌性和相关性,你可以选择提供电子邮件地址以获得对你的答复的通知——你的个人信息不会做其他用途。在提交评论时,你要同意这些使用条款

 

 

 

  • 大小: 25.2 KB
  • 大小: 4.8 KB
  • 大小: 33.9 KB
  • 大小: 22.8 KB
  • 大小: 12.9 KB
  • 大小: 12.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics