- 浏览: 143699 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
邪恶八进制:
译的还不错,其实简单说、JPA三种继承映射体系如下:1.参照父 ...
[译文]JPA的实施模式:映射继承的层次体系 -
mondayw:
卓越上有售,地址:http://www.amazon.cn/m ...
翻译的第一本书出版了 -
黑暗浪子:
哪里有订?
翻译的第一本书出版了 -
mondayw:
不好意思,没有测试过,我以为这只是示范性的代码而已。
[译文]Java EE 6中的依赖注入——第1部分(二) -
jimmy.shine:
不知道你有无测试过这范例程序,在JBoss 6.0M2中,程序 ...
[译文]Java EE 6中的依赖注入——第1部分(二)
原文:The Developer Insight Series, Part 3: The Process of Writing Code
作者:Janice J. Heiss
出处:http://java.sun.com/developer/technicalArticles/Interviews/devinsight_3/
Shannon Hickey:汇聚方法,然后创建原型
关于Shannon Hickey:
Shannon Hickey于2000年到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 Norbye是Sun Microsystems的首席工程师(principal engineer),自1996年来一直在从事开发工具方面的工作,最近则忙于NetBeans中的Ruby和JavaScript编辑器。他还是每周的Java Posse播客的共同主持人,他拥有斯坦福大学的计算机科学硕士学位。
我在写代码时通常要实现一些新的功能,我的方法是首先很快地给出基本的框架,然后逐步填补各个空白处,并在这个过程中通过执行代码来进行手动的测试。一旦我有了一些基本可用的东西,我就会写一些单元测试,当基本的测试通过之后,我就开始考虑一些边边角角的用例,我通过细想每一种可能的边角情况并为之添加单元测试来实现这些用例,然后使用这些单元测试来捕获代码中的bug。
因此,我的方法是先编写功能代码,之后再进行测试,然后在掉转过程的方向,为我还未指望能通过的用例编写测试代码,并使用这些测试来完善代码。
另一条重要的编码经验是“听”音乐,我在iTunes中有一个专门的名为“编码音乐”的播放列表,编码音乐有助于我把干扰的背景噪音隔离掉,使得整个经历更加愉快,窍诀在于找到不会令人分心的音乐——这就是为什么我之前把“听”一词放在引号中。
古典音乐就很有效,特别是巴洛克音乐,不过像麦当娜的“Confessions on a Dance Floor”之类的快速舞曲也可以。我并不总是能够享受听着音乐编程的奢华——例如,在开会或是做播客视频时,我不得不做出我正在关注的样子,只是开玩笑啦,我不会这样的。好吧,我会,不过不是总这样。
从头开始编写新的代码这很有趣,但这只占工作的百分之九十,另外的百分之九十是使得代码是可拿得出手的且是正确的。调试代码则非常不同于制造新的代码,这通常涉及花费许多时间在调试器上,彻底检测假设,有时要编写一些定制代码来缩小问题空间,不过其实我同样也喜欢调试。
我把在Sun公司的头五年花费在了Sun WorkShop的C/C++调试器上,从中我不仅学到了所有的技巧和诀窍,而且还添加了对新的调试功能的支持,我总是会对调试器情有独钟。
参阅对Tor Norbye所作的完整访谈。
Romain Guy:以编写原型作为开始
关于Romain Guy:
荣获Java Champion称号的Romain Guy是Google公司Android Project项目的一位用户界面工具工程师。
随着诸如主流IDE中的重构一类的强大的新编程工具的出现,过去几年以来我编码的方式已经改变了许多。大多数时候,我以通过编写验证我的设想的原型作为开始,然后我会通过重构代码把原型逐渐演变成真正的代码。我在各个层面都使用这一方法,包括几行代码到一个完整的应用模块。
原型方法通常被说成假定最初的代码将会被抛弃,你要重新开始,不过我确信,如果你够严谨的话,那么重构能够产生很好的效果,我偶尔也会以一张纸或是通过与他人讨论项目以获得关于架构应如何的好主意作为开始……
最有趣的部分在最后,在我可以见到工作的结果,特别是当结果正好符合我一开始时的想法时。我喜爱编程,因为这能够令我梦想成真,考虑到我在艺术方面如此糟糕,如果我想有创造性的话,那么实在是没有什么选择。
参阅对Romain Guy所作的完整访谈。
Éamonn McManus:泉涌状态
关于Éamonn McManus
Éamonn McManus是Sun Microsystems的Java Management Extensions(JMX)团队的规范带头人,因此,他现领导着JSR 255(JMX API 2.0)和JSR 262(Web Services Connector for JMX Agents)方面的技术工作。
就其最好的情形来说,编写代码是发生在某种“泉涌”状态或是某种沉浸状态中,这确实难以形容,不过当你进入这一状态中时你就会明白,这种状态并不容易达到,且我们日常所作的大部分工作并不容许这样的状态出现。
为了最大程度地提高你的机会,你应该确保在编写某些较大的代码时不会被打断,并且精通你的工具。精通使用工具意味能够在不看键盘的情况下快速输入,了解IDE能做的所有工作则可以提高你开发的速度,并且要对关键的API了然于胸。
你可能还想安排有座附近的山以用于眺望。
可参阅对Éamonn McManus所作的完整访谈。
Alan Williamson:大量的白板讨论和方框图
关于Alan Williamson:
Alan Williamson在2006年荣获UK的第一个Java Champion称号,作为一位开发者有着超过16年的辉煌时间,他曾担任了几年的Java Developer’s Journal的主编,2008年的11月20日,他组织了第一个临境云计算训练营,并在2009年1月份被指定为新的Cloud Computing Journal的编辑。
我会做大量的白板讨论和画框图,当来到编写代码的阶段时,我会实现许多版型代码,设计类、方法调用等,但不考虑方法的细节,因此有许多的return null语句,到处都是。
我是那种能够很好地想象出解决方案的那种人,因此当我看到展示的类层次时,在到达任何临近实现代码的真身之地之前,我就会知道那是行之有效的。
有些人使用其他的工具,诸如UML,不过我总觉得它有些碍事。
可参阅对Alan Williamson所作的完整访谈。
其他参考
Masood Mortazavi的访谈第1部分和第2部分,以及博客
Shannon Hickey的访谈
开发者见解系列:
评论
你有想要和其他人分享的特有的编写代码的步骤吗?或是对你读到的内容有什么回应?我们很乐意倾听。我们欢迎你加入到我们的社区中来,请保证评论的礼貌性和相关性,你可以选择提供电子邮件地址以获得对你的答复的通知——你的个人信息不会做其他用途。在提交评论时,你要同意这些使用条款。
发表评论
-
[译文]技巧:防范代码的终结器漏洞
2011-08-02 11:11 766你的Java代码有可能会因终结操作带来的漏洞而易受到攻击,了解 ... -
[译文] 一种减少多线程Java应用的工作队列中的竞争和开销的方法
2011-06-21 10:08 1014许多的服务器应用,比如说Web服务器、应用服务器、数据库服务器 ... -
[译文]Java SE 7带来更好的资源管理:不仅仅是语法糖
2011-06-18 19:55 792本文介绍了Java Platform, Standard Ed ... -
[译文]双重检查锁定和单件模式
2011-05-06 11:50 863所有的编程语言都会有分享一些它们的惯用技法,其中的 ... -
RJC501:为周转期付出的代价有多大?
2011-04-18 16:43 835通过重载Java类(Reloading Java ... -
RJC401:HotSwap和JRebel——幕后的故事
2011-04-11 16:31 1042在本文中,我们会回顾类在没有动态类加载器情况下的重载方式;我们 ... -
RJC301:Web开发——Tomcat、GlassFish、OSGi、Tapestry等服务器和框架中的Classloader
2011-04-04 15:26 976在本文中,我们会回顾真实的服务器、容器和框架是如何使用动态的类 ... -
RJC201:ClassLoader的泄漏是如何发生的?
2011-03-28 19:58 890你如果使用Java编程已有一段时间的话,那么你就会知道内存泄漏 ... -
jQuery的.bind()、.live()和.delegate()之间的区别
2011-03-19 22:01 854.bind()、.live()和.delegate()之间的 ... -
示例:JavaScript中的后续传递风格
2011-03-19 21:57 858本文介绍了CPS所扮演的两种角色——作为JavaScript中 ... -
[译文]开发者见解系列,第3部分:编写代码的步骤(上)
2010-07-27 22:05 1141原文:The Developer Insight Series ... -
[译文]开发者见解系列,第2部分:谈谈编码(下)
2010-07-14 22:31 881原文:The Developer Insight Series ... -
[译文]开发者见解系列,第2部分:谈谈编码(上)
2010-07-14 22:26 1108原文:The Developer Insight Series ... -
[译文]开发者见解系列,第1部分:编写傻瓜代码——来自四位首席Java开发者的建议(下)
2010-06-28 12:32 854原文:The Developer Insight Series ... -
[译文]开发者见解系列,第1部分:编写傻瓜代码——来自四位首席Java开发者的建议(上)
2010-06-28 12:25 1449原文:The Developer Insight Series ... -
[译文] Java EE 6中的DataSource资源的定义
2010-05-20 12:29 1960原文:DataSource Resource Definiti ... -
[译文] Java Applets和ASP.net——你可让他们玩到一起吗?
2010-05-13 18:01 1722原文:Java Applets, ASP.net - Can ... -
[译文]使用Java编写你的第一个Google Wave机器人(下)
2010-01-25 21:03 1086原文:Write Your First Google Wave ... -
[译文]使用Java编写你的第一个Google Wave机器人(上)
2010-01-25 21:02 1349原文:Write Your First Google Wave ... -
[译文]一些Java并发技巧
2009-12-20 18:25 1051原文:Some Java Concurrency Tips ...
相关推荐
( Nutch,第1部分:爬行(译文) ( Nutch,第1部分:爬行(译文)
SDN开发:Floodlight开发文档的译文 SDN(Software Defined Networking,软件定义网络)是当前网络架构的主要发展方向之一,它通过将控制平面和数据平面分离,实现了网络架构的軟件化和自动化管理。Floodlight是...
学习SDN控制器之一floodlight的中文文档。
这次分享的是系列教程的第三部分,涵盖了第11节至第13节,内容包括45度角瓷砖地图、物理引擎以及弹球游戏的实现。 第11章:45度角瓷砖地图(Isometric Tilemaps) 在这一章节中,我们将深入学习如何构建和管理45度...
6. **比较Jet 和 MSDE**:这部分是文章的核心,通过企业需求、使用分析和功能分析三个方面进行对比,帮助读者理解何时选择Jet,何时选择MSDE。 论文可能会详细探讨这些对比,包括但不限于: - **企业需求**:在...
通过学习《重构:改善既有代码的设计》,开发者可以掌握一系列实用的重构技巧,提高代码质量,进而提升整个项目的质量和开发团队的生产力。无论是在团队协作还是个人项目中,这本书都是不可或缺的参考资料。
在Windows中,`VIDEOPRT.SYS`不仅提供了必要的基础功能,还为视频驱动开发者提供了一套标准化的API,使得他们不必重新编写已经存在的代码。例如,在Win32子系统(win32k.sys)和迷你小端口驱动之间进行设备枚举的过程...
在"apachecn-bigdata-zh-master"目录下,我们可以预见到一系列与大数据相关的项目和文档,这些项目通常包括但不限于以下几个方面: 1. **Hadoop**:Hadoop是大数据处理的基础框架,提供分布式存储(HDFS)和分布式...
#### 第3章 创建和配置Spring DM工程 本章详细介绍了如何在Eclipse中创建和配置Spring DM项目。具体步骤如下: 1. **创建Maven项目**:通过Eclipse新建Maven项目,命名为`SpringDMBundle`。 2. **转换为插件项目**:...
EN 15085-2_ 2020 中文版(译文)铁路应用-铁路车辆及部件的焊接-第2部分: 对焊接制造商的要求.pdf
回归森林由一系列决策树组成,每个树负责预测一部分形状参数,最后汇总所有树的结果得到最终的形状估计。这种方法能够适应复杂的图像变化,并且可以在线性时间内完成计算,因此具有较高的效率。 在实际应用中,...
《ApacheCN 数据结构与算法译文集》是一个包含丰富的数据结构和算法学习资源的压缩包。...通过深入学习和实践这些内容,开发者能够更好地理解和设计高效的软件系统,提高代码质量,解决实际工程中的难题。
**ApacheCN 数据结构与算法译文集.zip** 是一个包含了多语言版本的数据结构与算法学习资源的压缩包,特别适合正在学习或准备学习C/C++/JAVA/Python编程语言的大学生。这个资源集旨在帮助他们深入理解数据结构和算法...
3. 可靠性:Netty有详尽的单元测试和集成测试,保证了其核心代码的稳定性。 4. 社区支持:Netty有着活跃的社区和大量基于Netty构建的应用,这意味着开发者可以得到来自社区的支持和帮助。 5. 异步和事件驱动:Netty...
本压缩包提供的资源是该教程第三册的课后习题答案及译文,对学习者来说是一份极其宝贵的参考资料。 一、课后题答案 课后题是检验学生对课堂所学内容理解程度的重要环节,这些答案可以帮助学生自我评估,找出学习的...