`
mondayw
  • 浏览: 144609 次
  • 性别: 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
分享到:
评论

相关推荐

    Nutch,第1部分:爬行(译文)

    ( Nutch,第1部分:爬行(译文) ( Nutch,第1部分:爬行(译文)

    EN 15085-2- 2020 中文版(译文)铁路应用-铁路车辆及部件的焊接-第2部分: 对焊接制造商的要求.pdf

    EN 15085-2_ 2020 中文版(译文)铁路应用-铁路车辆及部件的焊接-第2部分: 对焊接制造商的要求.pdf

    SDN开发:Floodlight开发文档的译文

    SDN开发:Floodlight开发文档的译文 SDN(Software Defined Networking,软件定义网络)是当前网络架构的主要发展方向之一,它通过将控制平面和数据平面分离,实现了网络架构的軟件化和自动化管理。Floodlight是...

    Floodlight开发者文档(译文)

    学习SDN控制器之一floodlight的中文文档。

    国外的cocos2d教学翻译。第三弹:第11节到第13节。

    这次分享的是系列教程的第三部分,涵盖了第11节至第13节,内容包括45度角瓷砖地图、物理引擎以及弹球游戏的实现。 第11章:45度角瓷砖地图(Isometric Tilemaps) 在这一章节中,我们将深入学习如何构建和管理45度...

    毕业论文 外文原文及译文

    6. **比较Jet 和 MSDE**:这部分是文章的核心,通过企业需求、使用分析和功能分析三个方面进行对比,帮助读者理解何时选择Jet,何时选择MSDE。 论文可能会详细探讨这些对比,包括但不限于: - **企业需求**:在...

    重构:改善既有代码的设计

    通过学习《重构:改善既有代码的设计》,开发者可以掌握一系列实用的重构技巧,提高代码质量,进而提升整个项目的质量和开发团队的生产力。无论是在团队协作还是个人项目中,这本书都是不可或缺的参考资料。

    译文:驱动开发之六:介绍显示驱动(含Mirror Driver介绍)

    在Windows中,`VIDEOPRT.SYS`不仅提供了必要的基础功能,还为视频驱动开发者提供了一套标准化的API,使得他们不必重新编写已经存在的代码。例如,在Win32子系统(win32k.sys)和迷你小端口驱动之间进行设备枚举的过程...

    ApacheCN 大数据译文集.zip

    在"apachecn-bigdata-zh-master"目录下,我们可以预见到一系列与大数据相关的项目和文档,这些项目通常包括但不限于以下几个方面: 1. **Hadoop**:Hadoop是大数据处理的基础框架,提供分布式存储(HDFS)和分布式...

    google c++ style guide译文

    - **核心理念**: 通过制定一系列明确的规则指导开发者如何编写C++代码,以避免其复杂性所带来的问题。 - **适用范围**: 适用于所有由Google开发的开源项目。 #### 代码风格的重要性 - **一致性的价值**: 统一的...

    EclipseMavenSpringDM(译文)- 中文版

    #### 第3章 创建和配置Spring DM工程 本章详细介绍了如何在Eclipse中创建和配置Spring DM项目。具体步骤如下: 1. **创建Maven项目**:通过Eclipse新建Maven项目,命名为`SpringDMBundle`。 2. **转换为插件项目**:...

    Face Alignment by Explicit Shape Regression原文及译文

    回归森林由一系列决策树组成,每个树负责预测一部分形状参数,最后汇总所有树的结果得到最终的形状估计。这种方法能够适应复杂的图像变化,并且可以在线性时间内完成计算,因此具有较高的效率。 在实际应用中,...

    ApacheCN 数据结构与算法译文集

    《ApacheCN 数据结构与算法译文集》是一个包含丰富的数据结构和算法学习资源的压缩包。...通过深入学习和实践这些内容,开发者能够更好地理解和设计高效的软件系统,提高代码质量,解决实际工程中的难题。

    ApacheCN 数据结构与算法译文集.zip

    **ApacheCN 数据结构与算法译文集.zip** 是一个包含了多语言版本的数据结构与算法学习资源的压缩包,特别适合正在学习或准备学习C/C++/JAVA/Python编程语言的大学生。这个资源集旨在帮助他们深入理解数据结构和算法...

    译文-Netty教程

    3. 可靠性:Netty有详尽的单元测试和集成测试,保证了其核心代码的稳定性。 4. 社区支持:Netty有着活跃的社区和大量基于Netty构建的应用,这意味着开发者可以得到来自社区的支持和帮助。 5. 异步和事件驱动:Netty...

    上外版大学英语综合教程第三册课后题答案及译文

    本压缩包提供的资源是该教程第三册的课后习题答案及译文,对学习者来说是一份极其宝贵的参考资料。 一、课后题答案 课后题是检验学生对课堂所学内容理解程度的重要环节,这些答案可以帮助学生自我评估,找出学习的...

Global site tag (gtag.js) - Google Analytics