`
mondayw
  • 浏览: 144224 次
  • 性别: 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/

 

历年来,我曾听过开发者讨论他们最喜欢的代码、最有趣的代码、最酷的代码,以及如何编写代码,如何避免编写代码,编写好代码的障碍,以及与编写代码相关的爱恨情仇等等,在采访过程中,我收获了许多值得分享的真知灼见。

这一文章系列的第1和第2部分提供了关于如何编写好的代码的建议,在第3部分中,开发者就编写代码的实际步骤做了思考,过程是如何开始的,有什么样的感觉,以及他们是如何进行这一过程的。

 

目录

 

-           Adam Bien:这几乎可说是神秘莫测的

-           Kohsuke Kawaguchi:我就这么让代码从我的指尖流出

-           Chet Haase:我采用了原型方法

-           Arun Gupta:设计是第一步也是最重要的一步

-           Kelly O'Hair:启动NetBeans,创建测试用例,创建模板,填写模板

-           Josh Marinacci:很像是在雕塑或者是在绘画

-           Masood Mortazavi:需求、设计、实现

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

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

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

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

-           Éamonn McManus:泉涌状态

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

-           其他参考

-           评论

 

Adam Bien:这几乎可说是神秘莫测的

 



关于
Adam Bien

Adam Bien是一位Java Champion,致力于Java EE平台,他是一位自雇顾问、讲师、软件架构师,且是位于德国的企业级Java部门的开发者,他实现各种各样丰富的Java技术。他还是几本书的作者,一些关于JavaJ2EE技术,以及分布式Java编程的文章的撰稿者。

 

这几乎是一个神秘的过程,难以形容。如果你真的极具动力的话,你能够在最短的时间内开发出任何你想要的东西,天空才是极限。

为了编写出好的代码,你首先必须要理解相关领域和实际的问题,不过,最好的了解领域的方式是编写代码,因此会面临着在自底向上的方法和自顶向下的方法之间保持平衡这一挑战。

我尽量是分析问题,接着编写一些代码,校验解决方案,在与客户的交流过程中有时会调整代码存在的问题,所以,编写代码的自然的方式是有着很短的瀑布阶段的短期迭代和反馈周期。

 

可参阅对Adam Bien所作的完整访谈

 

Kohsuke Kawaguchi:我就这么让代码从我的指尖流出

 



关于
Kohsuke Kawaguchi

    Kohsuke KawaguchiSun Microsystems的主管级工程师(staff engineer),从2001年起一直在从事XMLXML模式语言方面的工作,特别是在RELAX NGW3C XML模式、JAXB以及JAXP等方面。他还主持了多个与java.net相关的项目,最近更多的精力则是放在web service上。

 

大部分情况下,我就只是在IDE中开始键入,然后让那个代码从我的指尖流淌出来。有时我会停下来,在心里或者纸上画画图,这有助于我决定如何继续。

如果问题过于复杂,我会列出解决方案的大纲,并开始记下方法的优缺点,一旦我完成了代码编写,我就会检查这些笔记,然后开始写修正方案的大纲。我会一直重复这一过程直到感觉满意为止。

我发现最适合在普通的旧纸上做这样的事情,当我还是学生的时候,这一做法就得到了相当的发挥,因为在上历史、英语等课时我会这样做,在那种地方是不会有一台计算机放在我的面前的。

 

可查阅对Kohsuke Kawaquchi所作的完整访谈

 

Chet Haase:我采用了原型方法

 



关于
Chet Haase

Chet HaaseAdobeFlex SDK团队的一位资深计算机科学家,致力于图像方面的问题及功能。其之前的生涯,即在接受以下采访时,是Sun Microsystems的桌面Java组的一位客户端架构师。他与Romain Guy合著了Filthy Rich Clients: Developing Animated and Graphical Effects for Desktop Java Applications一书,他还是一本很幽默的书When I am King的作者。

 

这一过程于不同人来说是不同的,我所知道的是,有些人(特别是那些有写著软件开发书籍的人)在开始编码之前就写出了完整的设计,有些人则以编码为开始,并且自始至终都在编写代码。

我采用了原型方法,也许这是不稳定的做法,或者是出于快速满足某种需要,不过我从来没有对哪种特定的方法有过信心,除非我已经先获得了一些以某种简单方式工作的主要元素,因此我以编写仅仅能够发挥基本效用的难看粗糙的代码为开始。

一旦我说服了自己这一方法是行之有效的话,我会回退一步,进行设计,然后编写更好的代码。我在Steve McConell的书Code Complete中读到了这一过程的一个有趣的做法。原型过程的窍门是扔掉最初的代码,重新开始,以避免那任何来自最初的难看的原型代码的剩余部分。

我会为看到在屏幕上出现最初的结果而雀跃不已,我之所以是一个图像极客的原因之一是因为我发现,看到由我的代码中的数学函数和算法产生的像素在屏幕上显示出来是多么令人满足的一件事。当看到这些像素的时候,你就会知道有些代码已经起作用了,而当你看到这些像素出现在错误的地方或是颜色不对时,就知道有些代码没有在工作。

很容易因看到那来自原型的最初输出告诉我:“这将是行之有效的!”而高兴不已,当然,原型只花费了半天的时间,而真正的解决方案则有可能需要另外一整个月,但最佳之处正是确定了这一方法最终是行得通的。

 

可参阅对Chet Haase所作的完整访谈。

 

Arun Gupta:设计是第一步也是最重要的一步

 



关于
Arun Gupta

    Arun GuptaSunweb serviceWeb 2.0应用的技术传道士,他是Java平台的API的规范带头人,多个开源项目的成员,某些标准组织的参与者,以及Java EEJava SE发布版本的贡献者。他拥有印度Delhi大学的电子学学士学位和计算机科学硕士学位。

   

我坚信在编写任何代码时,设计都是第一个步骤也是最重要的一个步骤。根据项目的大小,我会准备一份可选的单页文档,用以描述项目的顶层需求。该单页文档随后会被通过使用UMLUnified Modeling Language,统一建模语言)建模工具或是Javadoc格式的注解来转换成类图和序列图,这些UML视图随后基于扩展设计评审的目的而与更大的团队共享。

如果团队买账,认可的话,这些视图随后就被翻译成接口,可使用UML工具的功能或是手工编码来实现这一步。一旦所有接口都准备好了,我就一个接一个地实现他们。把接口和实际的实现分离可保持代码的模块化和可移植。

测试、性能以及文档通常是附加的部分,我把他们保留下来作为我的开发周期的一部分,同样希望其他的每个人都这样做。

 

可参阅对Arun Gupta所作的完整访谈

 

Kelly O'Hair:启动NetBeans,创建测试用例,创建模板,填写模板

 

关于Kelly O'Hair

Kelly O’HairSun Microsystems的一位资深主管级工程师(senior staff engineer),从1993年起加入该公司,从事Java Development KitJDK)核心适用性这一方面的工作,目前致力于改进JDK的版本构建。

 

启动NetBeans,创建测试用例,创建模板,填写模板,运行测试用例,调试代码,运行测试用例;写更多的测试用例,运行测试用例,调试代码,运行测试用例;编写更多的测试用例,运行测试用例,调试代码;编写更多的测试用例,运行测试用例,调试代码;编写更多的测试用例,花些时间休息,然后回来自动化构建和测试过程。

 

可参阅对Kelly O’Hair所作的完整访谈

 

Josh Marinacci:很像是在雕塑或者是在绘画

 



 关于
Josh Marinacci

Josh Marinacci把过去的十年用在了为无线、web和桌面平台编写基于Java技术的用户界面(UI)方面,在厌倦了为一家家居装修零售中心、一家无线运营商和一家文档管理公司编写web程序之后,他加入了SunSwing工具包团队,重返高品质UI领域。他最近致力于JavaFX方面的工作。

 

对我来说,编写代码就好像是在雕刻或者在绘画。我先开始勾勒出我想要做的东西的纲要,有时这是一个功能列表,有时则是用纸和笔画的一个真正有形的草图。在涂画上了我的想法之后,我会使用NetBeans IDE中的Matisse一类的快速开发工具来构建一个初始版本,通常是植入持久化或是网络访问一类的功能。

一旦我把基本概念放进去了之后,我就有条不紊地实现各个功能并修正某些bug,不断地检查接口,查找有缺陷的地方;过后不久,我就会把这一实现展示给别人看以获得反馈,然后再返回来,进入到代码中做修改。

迭代式的开发是关键,甚至在我修改Java SE 6中的bug的时候,在那里我不会去创建新的软件,我会先重现该bug,然后做出快速地修改,最后提炼修改方法以解决与向后或是向前兼容性相关的问题,如此反复地达到修正bug的目的。

 

可参阅对Josh Marinacci所作的完整访谈

 

Masood Mortazavi:需求、设计、实现

 



关于
Masood Mortazavi

Masood MortazaviSun公司的软件工程经理,开始时他加入公司的Java EE开发团队工作,后来成为持续可用性问题以及电信与Java软件组合作方面的专家;近年来,他管理多个工程师团队,致力于多种开源数据库如Apache DerbyPostgreSQL以及MySQL等。他拥有许多学位,其中包括加州大学戴维斯分校的计算流体动力学博士学位。

 

从正规的角度来看,很容易描述:需求、设计以及实现。而从非正规的角度来看的话,则更微妙一些:解释、概念和想象力,约束的创造性汇合。

我们用到的那些间接获得的、且不好彩还处于编写实现过程中的工具或系统,他们通常会带来阻碍,因为很难用来工作。在一个新的环境中创建并运行你的第一个“hell world”程序比在同一个环境中编写最大的一块代码还要难得多。

在如何编程方面的创造性发明能够给编写好的程序带来巨大的好处。在编写代码时,我过去会想象出一个3D开发环境,在那里我能够通过使用了我的手和一个语音感应系统的大量动作来逐字逐句地连接并处理用颜色区分编码的对象。

 

可参阅对Masood Mortazavi所作的完整访谈:1部分2部分

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

 

  • 大小: 7.8 KB
  • 大小: 1.7 KB
  • 大小: 3.1 KB
  • 大小: 3.7 KB
  • 大小: 2.4 KB
  • 大小: 39.7 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 大数据译文集》是一份包含大量关于数据采集、处理和展示相关源码及工具的压缩包资源。这份资料集由ApacheCN社区精心整理,旨在为中文用户提供高质量的大数据技术学习材料。主要涵盖了大数据领域的核心...

    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