复制粘贴代码真的有问题吗?

当你编程的时候,复制和粘贴—将你现有的代码进行再利用,这是不必再重复编码的最佳做法。这是一个技术债务的最佳例子:偷懒,草率和目光短浅,这会让维护代码的长期成本增加。

但它同时也很自然,找一些已经在运行的代码,跟你所需要的非常像,复制,粘贴,并用它作为起点。几乎每个人都这么干过。因为有些时候,复制过来的代码不仅仅是方便,而且就算我们所需要的。

首先要清楚我讲得复制粘贴的意思。不是说从互联网上复制代码,我指的是程序员重用代码的捷径–当他们遇到的问题与他们之前在另外一个系统中遇到的问题类似的时候,他们开始用现有的代码副本,并加以改变。

在开发和设计阶段的早期,复制和粘贴并没有什么优势。代码和设计仍可塑的,这时系统需要做的是建立一套正确的抽象。这个时候没有什么好复制的。当在你开发的后期时,你已经有大量的代码,你需要维护庞大的系统,复制和粘贴就变得更加复杂。

为什么要复制粘贴?

程序员复制粘贴,因为这样可以节省时间。首先,你必须站在一个起点,你要知道你的代码要做什么事?你所要做的就是那里需要增加,哪里需要修改。你就 可以专注于理解不同点。这时你变得更加自由–你可以清理你不需要的代码。这一切都很主要。因为你可能不知道你需要保留的,你需要改变的,直到你进入更深的 层面。

复制和粘贴同样可以降低风险。如果你改变和扩展现有的代码,至少它运行了一段时间,通常是更安全的,并且成本较低。

如果你正在构建一个新的B2B客户界面,你会使用新的吗?通常会采用现有的接口,作为新的起点。然后看看那里需要改变,到年底的时候,你就有了2个接口,但通常需要一段的时间来理解这个代码是什么?

找到一个共同的设计,正确的抽象和变化,以支持不同的现实和异常处理。你最终的代码可能变得无法理解,难以维护,直到不得不改变—因为原来的设计没有预料到不同情况下的异常和扩展,重构只能到此结束,你需要一个全的设计和实施。

改变现有的代码,进行重构和扩展,将会让你目前的工作增加风险和成本,你不能为了适应网上的新客户而让给老客户带来问题。你需要格外的小心,你不但要明白你将要做的事每个细节(新界面),而且要明白现有界面的每个细节,它的行为和假设。

如果你认为这些改变都能被自动化测试工具捕捉到,那你就很天真了—假设你已经有良好的自动化测试工具,你需要整合现有的接口测试,这可能需要花费数周甚至数月的时间。让那些客户花费这么多的时间适应新界面,他们会不满意,因为他们都已经习惯了。

现在就复制粘贴,如果需要的话,过些日子要制定计划来重构和重新设计,是明智的选择。

什么时候该复制粘贴?

1.分叉 — 试探性的原因,如适应不同的平台或者硬件
2.模板 — 一些语言不支持某些库或者共享函数,这时有必要复制粘贴代码。
3.定制 — 临时的解决办法,只要是临时的。
4.微软克隆的做法 — 一个小组的代码给另外小组用。这时开源的通常做法,需要扩展来解决专有问题。

什么时候复制粘贴会变成问题?

什么时候复制粘贴会成为问题,有几个主要因素。

首先,你对你复制的代码理解程度是多少,你稳定程度如何,有多少潜在的bug。你总不想继承别人的问题吧。

还要知道这个代码已经拷贝了多少份?根据“三则重构”(three strikes and you refactor)原则。因为你复制了什么,并且加上改变,就带来维护上的问题。这个维护的困难就是如何理清问题,因为2个版本不足以理解哪些是共有的,哪些是特殊的。

越多次的拷贝,越多的维护上的问题。多个版本的更改和修正增加了维护的风险和成本。保持代码的同步,需要在多个系统中改变它。

虽然一些工具可以帮助你来寻找复制和粘贴的代码。随着时间的推移,不同的程序员寻找复制的副本代码变得更加艰难。有些程序员建议离职时做好复制标记,以便后来的程序员维护。

复制粘贴不是免费的。像软件里面的其它做法一样,它不是正确的或者是错误的,而是一个工具,你可以善用,也可以滥用。

意识到这些是非常重要的,假设我们有复制粘贴,我们必须为我们的工作负责。

全球最富互联网企业家排行榜 亚马逊CEO列第一

全球最富互联网企业家排行榜 亚马逊CEO列第一
亚马逊创始人和首席执行官杰夫·贝佐斯

6 月25日消息,据国外媒体报道,亚马逊创始人和首席执行官杰夫·贝佐斯(Jeff Bezos)曾在麦当劳做烙牛肉饼的工作。现在,据最新出炉的30名最富有的互联网企业家排行榜显示,贝佐斯的资产净值大约是202亿美元,成为全球最富 有的互联网企业家。然而,在互联网上使自己的资产净值增加到10位数的并不只有贝佐斯一个人,至少还有30个人达到了这个水平。

谷歌共同创始人和现任首席执行官拉里·佩奇(Larry Page)的资产净值是175亿美元,是排名第2位的全球最富有的互联网企业家。谷歌另一位共同创始人和佩奇以前的同学谢尔盖·布林(Sergey Brin)排名第3位,资产净值为174亿美元。

创始人和首席执行官马克·扎克伯格(MarkZuckerberg)排名第4位。他拥有Facebook的28.4%的股权,价值142亿美元。扎克伯格也是美国第二年轻的亿万富翁。

 

中国百度搜索引擎的共同创始人、董事长兼首席执行官李彦宏排名第5位,资产净值为102亿美元。拍卖网站eBay的 创始人皮埃尔·奥米迪亚(Pierre Omidyar)排名第8,资产净值为67亿美元。法国最大的互联网服务提供商Lliad的创始人克萨维埃·尼埃勒(Xavier Niel)排名第12位,资产净值为45亿美元。俄罗斯风险投资家尤里·米尔纳(Yuri Milner)排名第29位,资产净值为29亿美元。米尔纳等投资Facebook和Mail.ru等互联网公司。

多合一通讯工具 Digsby 将开源

Digsby开发团队在博客中宣布,其著名的多合一通讯工具Digsby即将开源。

Digsby是一款集合了即时聊天(IM)、电子邮件(Email)和社交网络(Social Networks)的桌面软件,使用一个Digsby就可以导入并集成你的各种应用,同时使用各种服务,免于下载各种聊天软件和登录不同的服务网页 了,Digsby同时也提供自己的Widget嵌入式聊天插件。

Digsby支持的各种服务包括:

  • 即时聊天(IM):AIM、MSN、Yahoo、ICQ、Google Talk、Jabber和Facebook Chat;
  • 电子邮件(Email):Hotmail、Gmail、Yahoo Mail、AOL/AIM Mail、IMAP和POP账户;
  • 社交网络(Social Networks):Facebook、Twitter、MySpace和LinkedIn 账户。

Digsby开发团队称,Digsby拥有今天的成就和用户群,和用户的支持是分不开的,所以有必要将Digsby平台开源,允许广大开发者共同构建和发展这个伟大的产品。

如果使用Digsby的开源版本,用户的Digsby设置将保存在本地计算机上,而不是服务器上。Digsby部件也将不可用,但用户仍可以使用Digsby的所有特性。

Digsby团队表示,未来几周内,他们会将Digsby的开源版本发布到Github

Via DigsbyBlog

功能更强 高通发布 Snapdragon Android 工具包

据The Verge报道,芯片生产商高通(Qualcomm)将为Snapdragon S4 8960处理器推出一款SDK(软件开发工具包),旨在让Android平台的开发者们更好地利用Snapdragon处理器的性能。据悉,该SDK功能非常强大。

高通发布的这款SDK中将提供一系列工具,以实现面部处理、环绕立体声、低功耗地理围栏、多种手势传感器等等。虽然目前它只支持 Snapdragon S4 8960,但公司承诺以后将会加入对更多处理器的支持。虽然高通此前已经发布过HTML5的API(应用程序接口),但本 SDK的放出意味着开发者们能够更轻易地加入许多此前不曾被广泛使用的特性,这将使用户们能够看到更多更新颖的Android平台应用。

目前高通公司已经发布了该SDK的开发预览版,正式版将在下个月放出。据悉,这也是公司对于Nvidia为Tegra处理器推出工具包的回应。 

Developer Network

文/weiphone

谷歌前高管:Android 碎片化 我选择 iOS

Rian Liebenberg曾是谷歌公司的工程主管,他在离开谷歌之后,开发了一款名为《Racce》的定位应用。有趣的是,Liebenberg为 自家应用寻找的归宿是iOS,而不是他最熟悉的Android。对于这个情况,科技网站Electricpig对Liebenberg进行了采访,请他道 出这样选择的原因。

“我们确实曾开发过Android版的《Racce》。但由于这个平台的碎片化,我们无法保证每一部设备都能够得到最佳的体验。”面对提 问,Liebenberg是这样回答的,“系统碎片化问题让开发工作复杂化了,因此关于Android版《Racce》,我们打算再等等。”

虽然这听起来很不可思议,但每一位Android用户都知道这番话的意思。Ice Cream Sandwich系统已于九个月前放出,但到目前为止 仅有10%的手机获得了该版本更新。最新的Jelly Bean则更是遥遥无期。这对于消费者来说是个恶梦,也同样让开发者感到头疼。

从这个角度来说,苹果试图将所有设备体验统一化管理的“纵向整合”策略可以说是非常成功的。拥有iOS设备的用户们几乎无需担心最新的系统和体验无法 为自己所用——除非是硬件限制问题。就像家用游戏主机市场那样,主机玩家担心过新出的某款大作自己可能跑不起吗?消费者的这种心理非常重要,能够保证自己 不落伍是非常令人振奋的。

编译/weiphone