- 浏览: 140222 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
邪恶八进制:
译的还不错,其实简单说、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 745你的Java代码有可能会因终结操作带来的漏洞而易受到攻击,了解 ... -
[译文] 一种减少多线程Java应用的工作队列中的竞争和开销的方法
2011-06-21 10:08 991许多的服务器应用,比如说Web服务器、应用服务器、数据库服务器 ... -
[译文]Java SE 7带来更好的资源管理:不仅仅是语法糖
2011-06-18 19:55 777本文介绍了Java Platform, Standard Ed ... -
[译文]双重检查锁定和单件模式
2011-05-06 11:50 845所有的编程语言都会有分享一些它们的惯用技法,其中的 ... -
RJC501:为周转期付出的代价有多大?
2011-04-18 16:43 811通过重载Java类(Reloading Java ... -
RJC401:HotSwap和JRebel——幕后的故事
2011-04-11 16:31 1025在本文中,我们会回顾类在没有动态类加载器情况下的重载方式;我们 ... -
RJC301:Web开发——Tomcat、GlassFish、OSGi、Tapestry等服务器和框架中的Classloader
2011-04-04 15:26 955在本文中,我们会回顾真实的服务器、容器和框架是如何使用动态的类 ... -
RJC201:ClassLoader的泄漏是如何发生的?
2011-03-28 19:58 870你如果使用Java编程已有一段时间的话,那么你就会知道内存泄漏 ... -
jQuery的.bind()、.live()和.delegate()之间的区别
2011-03-19 22:01 833.bind()、.live()和.delegate()之间的 ... -
示例:JavaScript中的后续传递风格
2011-03-19 21:57 834本文介绍了CPS所扮演的两种角色——作为JavaScript中 ... -
[译文]开发者见解系列,第3部分:编写代码的步骤(上)
2010-07-27 22:05 1119原文:The Developer Insight Series ... -
[译文]开发者见解系列,第2部分:谈谈编码(下)
2010-07-14 22:31 859原文:The Developer Insight Series ... -
[译文]开发者见解系列,第2部分:谈谈编码(上)
2010-07-14 22:26 1081原文:The Developer Insight Series ... -
[译文]开发者见解系列,第1部分:编写傻瓜代码——来自四位首席Java开发者的建议(下)
2010-06-28 12:32 831原文:The Developer Insight Series ... -
[译文]开发者见解系列,第1部分:编写傻瓜代码——来自四位首席Java开发者的建议(上)
2010-06-28 12:25 1415原文:The Developer Insight Series ... -
[译文] Java EE 6中的DataSource资源的定义
2010-05-20 12:29 1935原文:DataSource Resource Definiti ... -
[译文] Java Applets和ASP.net——你可让他们玩到一起吗?
2010-05-13 18:01 1693原文:Java Applets, ASP.net - Can ... -
[译文]使用Java编写你的第一个Google Wave机器人(下)
2010-01-25 21:03 1062原文:Write Your First Google Wave ... -
[译文]使用Java编写你的第一个Google Wave机器人(上)
2010-01-25 21:02 1325原文:Write Your First Google Wave ... -
[译文]一些Java并发技巧
2009-12-20 18:25 1021原文:Some Java Concurrency Tips ...
相关推荐
Nutch,第2部分:搜索(译文) Nutch,第2部分:搜索(译文)
( Nutch,第1部分:爬行(译文) ( Nutch,第1部分:爬行(译文)
学习SDN控制器之一floodlight的中文文档。
The LabVIEW Style Book译文共享(第三章).doc The LabVIEW Style Book译文共享(第三章).docThe LabVIEW Style Book译文共享(第三章).doc 只有部分,刚找到拿来分享下。
国外的cocos2d教学翻译。 共13大节。。 第三弹:第11节到第13节。
毕业论文-源代码- PLC在高楼供水系统中的应用(设计图纸、任务书、译文、调研报告)论文字数:11809字.zip
译文:Fork and Join: Java Can Excel at Painless Parallel Programming Too!(Fork and Join Java也可以轻松地编写并发程序)
计算机英语(第三版) 刘艺 王春生主编 参考译文…… 课文A:计算机概览 一、引言 计算机是一种电子设备,它能接收一套指令或一个程序,然后通过对数字数据进行运算或对其他形式的信息进行处理来执行该程序。 要...
Floodlight开发文档的译文+实例,通过该实例你可以直接在mininet+floodlight中对SDN的控制器进行编程,增加其模块功能
2.)单元测试:编写单元测试用例并执行,以验证代码的正确性和稳定性。 3.)集成测试:将各个模块集成到一起进行测试,以验证系统的交互和功能。常用的集成测试框架有Selenium、Appium等。 4) 性能测试:通过模拟...
摘自:《Beginning JavaScript with DOM Scripting and Ajax,2006:3-6》 深入浅出JavaScript 1.1 JavaScript产生的原因 在Web发展的初期,主要有HTML和公共管理接口(GUI)。HTML定义了大部分的文本文档并且只是用户...
第一章至第三章帮助您夯实 wxPython相关概念的坚实基础。第六章则对构建合理大小程序的步骤进行了完整回顾。第五章介绍如何让代码更易于管理的方法,第四章提供了一些协助进 行调试、编写wxPython应用的工具。当你...
奥格无线蓝牙BLE部分协议译文
上海外语出版社大学英语综合教程第三册课后题答案及译文
该书涵盖了很多计算机专业术语。 计算机英语是专业英语,如果没有参考译文是很难读懂的。该书可以帮助你理解记忆相关内容
计算机专业 毕业论文 译文及原文,外文文献
JPS 2011算法译文部分内容 学习笔记
新概念英语第三册新版的课文、译文和生词,网上许多资料的错误比较多,这个是错误最少的一个版本,可以说几乎没有错误,希望能给大家的英语学习有帮助!