MyException - 我的异常网
当前位置:我的异常网» 综合 » “懒”出效率是程序员的美德

“懒”出效率是程序员的美德

www.MyException.Cn  网友分享于:2015-02-04  浏览:1次

“懒”出效率是程序员的美德


        Perl 之父 Larry Wall 曾说过,程序员的三大美德是「懒惰」、「不耐烦」、以及「傲慢」,其中「懒惰」高居三大美德之首,这一回就让我们来看看程序代码设计的懒人之道。


惰性是人类科技持续进步的最大动力

       这字面上的「懒惰」,或许叫人误解,以为这是在暗示好的程序员是因为不愿意尽心投入代码设计工作,才会想要偷懒,尽量让自己少做点工作。不过,能成为卓越程序员的人,几乎没有例外的热爱程序代码设计工作,对他们来说,程序代码设计本身就是乐趣所在,只可能深陷于其中无法自拔,而没有不愿意多写点程序代码的。

       我们可以把「懒惰」分为两种,一种是单纯的不想做事,而另一种则是希望尽量少做点事,却达到一样的目标。同样是想要少做点事,后者却有着截然不同的正面、积极意义。而程序员的「懒惰」美德,也是建立在此种「懒惰」基础之上。

       知名的手机制造商 Nokia 说「科技始终来自于人性」,而这句话中的「人性」其实意味着人性中的需要,所以人们都说「需要是发明之母」,许多有用的科技,都是源自于人性中各式各样的需求及欲望,而在这些需求及欲望中,想要「偷懒」的念头,绝对是具有相当重要的地位。

       倘若说「懒惰是发明之母」,实在是一点也不为过。人类发明马车、牛车,就是希望藉由兽力提供额外的动作,好让人类在交通运输上能够更为轻松,这当然完全是出自于「懒惰」的想法。人类之后更发明了火车、汽车、甚至飞机,大幅提升了「懒惰」的程度。

       许多工程师绞尽脑汁、苦心孤诣的设计,最终便是希望得到一个让自己、也让所有人都能够偷懒的产物。从这个观点来看,惰性实在是人类科技持续进步的最大动力。


程序代码设计的懒人之道──四两拨千斤

       所以说,倘若从正向的角度来解读「懒惰」,工作偷工减料,其更积极的意义,应该是「以最小的力气达成目标,同时保持不变的品质,或是提升至更好的品质」。从这样的定义来看,「懒惰」的确可以做为程序员的美德之首。

       程序代码设计并不是一种单靠认真工作就能够开花结果的工作。一名程序员的工作成效,往往很难单纯地只倚靠工时的长短来评估。

       工作时间长的程序员,可能是工作能力出了问题,才会需要花费更多的时间。有许多优秀的程序员,只需要花上少许的时间,就能得到和别人一样、甚至更好的工作成果,原因之一便在于优秀的程序员懂得如何偷懒,而偷懒的真正意义,是以最小的力气达到一样的结果。

       程序代码设计的懒人之道便是四两拨千斤。施四两之力,得千斤之结果。掌握这懒人之道,便能掌握提升时间效率以及生产力的关键。


懒人善用工具增加生产力

       想要偷懒,你可以从许多面向来着手,而第一个会被大家所先想到的,便是开发工具上的辅助。的确,如果你想要偷懒,第一件事便是要试着尽可能地自动化所有的事物。

       在程序代码撰写的过程中,有太多具重复性、单纯只是劳力性质的工作。所有具有规则性的事物,都可以利用自动化的方式,让工具为我们代劳。例如善用程序代码的产生器,便可以免去人工撰写那些机器便有能力产生出来的程序代码。

       又好比一些自动化的建构工具,例如在 Java 社群广泛被使用的 ANT,便是一套透过让你描述建构软件的程序,借以自动化执行此一程序的工具。透过这样的工具,在建构过程中的许多动作,例如自版本控制系统中取出原始码、编译原始码、部署至测试环境、单元测试,及寄发测试报告等,都可以轻易地自动执行。

       降低人力介入的程度,不仅省时省力,也不易犯错。此外,许多 IDE 也都提供了像程序代码自动补全(Automatic Code Completion)、或自动 API 提示的功能,都可以省掉许多打字及查询 API 文件的时间。


优秀的程序员,多半懂得如何善用各式工具。

       尽管许多工具都能提升撰写程序代码的效率。但许多程序员都存在着对工具的迷思。并不是每种工具都适合每个程序员,原因在于每个工具的定位不同。工具并不是威力越强大就越好,你必须挑选适合用途的工具,正所谓杀鸡焉用牛刀,杀鸡不仅不需要动用到牛刀,用了牛刀,鸡反而可能也杀得不好。


懒人运用重构提炼自有的程序代码库

       真正优秀的程序员并不完全倚靠工具来达到偷懒的目的,事实上,工具所能节省的,往往并不是关键,真正的关键还是在于程序员自己如何进行设计。

       真正偷懒的程序员,会持续地让自己的设计保持在一种很容易可以偷懒的状态,也就是说,只需要花费一点点力气,就能得到自己所需要的东西。这就是我所说的四两拨千斤。

       如何让自己的设计尽可能的保持在一种很容易可以偷懒的状态呢?关键之一说穿了,还是要让自己的设计尽可能地可以被重复运用,而且是跨专案的重复运用。许多专案开发的系统,或许与最终呈现出来的面貌有着很大的不同,但内部会运用的元素,往往都落在一定的范畴之内。化学元素周期表中的元素总数仅有一百余个,但却也能组成了我们所见到的无数种物品。

       设计出能够跨专桉重复使用的程序代码,需要持续重构,并且让自己的代码朝着更佳的通用性持续演化。当你在执行重构时,会找出形态相似的程序代码,并且利用提炼函式或类别的技巧,将它们以更为通用的型式整理出来。你(或你的团队)需要建立一个自有的程序代码库,放置这些通用的代码。而且,必须在专案中持续使用程序代码库中的代码。唯有如此,才能持续考验它们并且让它们有演化的机会。


懒人不随便重新造轮

       虽然我鼓励人们建立自有的程序代码库,容纳在开发过程中所找出来的通用程序代码,但却不鼓励人们反覆地重造轮子。懒惰成性的程序员,是不会浪费时间去重新建造轮子的,一定是从既有的轮子中挑选出适用的,再施以最小的力气,添加一些程序代码码,使得所选出来的轮子,能够顺利地接上自己所开发的车子。

       所以,把「懒惰」视为美德的程序员,绝不轻易地重新开发已经存在的东西,而是会尽可能加以利用──尤其是开放源码的成品,因为这代表你可以自行加工或修缮的空间较大。现成的产物就是你能够得到的千斤,而四两就是你所施加的额外力气。倘若每个轮子都自己重头来过,那么施千斤力,或许反而只会有四两重的效果。

       随着时间的过程,懒惰的程序员会累积出相当多的资产,这些资产是可以被灵活地运用在各种专案中。懒惰的程序员在面临一个新的开发需求时,所做的事情,往往不是将程序代码重头写过,而比较像是把可被重复运用的程序代码,当做积木一般堆积起来,生产力自然大大的不同。


懒惰的最高原则:不浪费力气在不会发生的需求上

       偷懒的程序员更不会犯了设计过度工程化(Over-Engineering)的毛病,因为过度工程化,会浪费无谓的力气在不会发生的需求上。懒惰的程序员只会专注在面前以及可见的近端未来。

       你瞧,偷懒的天性竟会对程序代码设计带来这么多的好处,难怪它是那么重要的美德了。

       作者简介:

       王建兴

       清华大学资讯工程系的博士研究生,研究兴趣包括电脑网路、点对点网路、分散式网路管理、以及行动式代理人,专长则是 Internet 应用系统的开发。曾参与过的开发专桉性质十分广泛而且不同,从 ERP、PC Game 到 P2P 网路电话都在他的涉猎范围之内。

文章评论

我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
中美印日四国程序员比较
中美印日四国程序员比较
程序员必看的十大电影
程序员必看的十大电影
总结2014中国互联网十大段子
总结2014中国互联网十大段子
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
程序员应该关注的一些事儿
程序员应该关注的一些事儿
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
10个调试和排错的小建议
10个调试和排错的小建议
老程序员的下场
老程序员的下场
Java程序员必看电影
Java程序员必看电影
如何成为一名黑客
如何成为一名黑客
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
为什么程序员都是夜猫子
为什么程序员都是夜猫子
 程序员的样子
程序员的样子
我是如何打败拖延症的
我是如何打败拖延症的
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
程序员和编码员之间的区别
程序员和编码员之间的区别
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序员都该阅读的书
程序员都该阅读的书
漫画:程序员的工作
漫画:程序员的工作
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
旅行,写作,编程
旅行,写作,编程
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
鲜为人知的编程真相
鲜为人知的编程真相
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
程序员的鄙视链
程序员的鄙视链
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
那些争议最大的编程观点
那些争议最大的编程观点
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
每天工作4小时的程序员
每天工作4小时的程序员
一个程序员的时间管理
一个程序员的时间管理
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有