正文
但就算如此重要的调试,也只是发现了代码的表面问题,更深层次的架构设计之类,仍需要借助与重构。
重构,通俗的称修改代码,或者代码优化。
在多数程序员处于匠人级别,是因为他们所写的代码仅仅是勉强能够运行,没有达到优化原则,在进阶艺人的台阶上,止步不前。
开源软件之所以在软件质量上通常都远高于闭源软件,很重要的一个原因是开源软件有更多的人参与软件的重构工作,不断修正软件中不完美的设计或组件。
重构不是修复Bug,而是一个把“玩具”变为“可用产品”的优化过程,琢石成器!
重构也不是随便看到哪里不顺眼就立即去修改,它有一些必须遵循的基本规范,其中最重要的一个就是
“
在不改变软件可观察行为的前提下改善其内部结构
”。
这也意味着,使得在重构完成后,不会影响软件的正常使用,同时尽量减少重构之后的代码调试。
由于每次修改的幅度都很小,所以任何错误都很容易发现,你不必耗费大把时间调试。
遵循合适的
重构
规范,
重构
之后的软件,在用户眼中它与
重构
前的软件没有任何差异,但在代码内部,软件小麻雀却早已“飞上枝头变凤凰”,变得更加强健、简洁、易于维护等。
同时,
重构
也不是一个永无止境的过程,要懂得适可而止。在
重构
的过程中,要时刻谨重构的目的是为了解决软件结构中的问题,而不是为了编程完美的代码。
单凭对完美的追求无法写出实用的代码,而“实用”是软件压倒一切的要素。
附:
我不是个伟大的程序员,我只是个有着一些优秀习惯的好程序员。
—— Kent Beck
6
.《
人月神话
》
:
弗雷德里克.布鲁克斯,
向进度落后的项目中增加人手,只会使进度落后。
关于作者:主持开发OS/360
如何处理大型项目中的管理问题?
我相信由于人员的分工,大型编程项目碰到的管理问题和小项目碰到的管理问题区别很大;我相信关键需要的是维持产品自身和概念完整性。
为什么我们时常陷入产品延期的僵局?
系统编程的进度安排背后的第一个错误的假设是:一切都将运作良好,每一项任务仅花费它所应该花费的时间。
这是一本被软件开发人员(特别是项目管理人员)推崇的神书,能够获得如此尊称的书并不多,除《人月神话》之外,《计算机编程艺术》也是其中之一。
我在多年前曾接触到这本书,当时我并没有任何团队开发经验,读这本书只是它的名声实在过于响亮。不幸的是第一次它给我的印象并不是很好,觉得百般无聊,如读天书,很快我就将它搁置在一旁。
直到高三那年我和3位好友创业失败,在创业过程中暴露出来的问题,以及自己在团队开发过程中学到的种种经验,才使得当我再次捧起这本书时,如若知己。
《人月神话》中的人代表参与开发工作的人员数量,月代表开发周期。在很多人眼中,人月是可以互换的,也即是安排更多的人员参与开发,那么开发工作只需要更短的月就可以完成。
但正如作者在书中所言:
我们围绕成本核算的估计技术,混淆了工作量和项目进展。人月是危险和带有欺骗性的神话,因为它暗示了人员数量和时间是可以相互替换的。
项目的时间依赖于顺序上的限制,人员的最大数量依赖于独立子任务的数量。
最终,我们得到了著名的布鲁克斯法则:
向进度落后的项目中增加人手,只会使进度落后。
这只是作者在实践中总结出的众多心得之一,除此之外,本书还涉及了其他软件开发与项目管理中出现的各种问题,如功能的取舍、手册编写、制定开发周期等。
如果你没有任何团队开发经验,我不建议你读这本书。
如果你已经参与团队开发,并且深陷项目管理的焦油坑,本书将带给你更多有价值的思考。
附:
手中有个锤子,看到什么都是钉子。
7
.《
黑客与画家
》:Paul Graham,
编程是一种艺术创作,黑客就是艺术家。
关于作者:创业投资公司
Y Combinator
创始人
编程语言对我们的思维有何影响?
你选择什么语言,决定了你能说什么话。编程语言就是程序员的思维方式。
什么才能成为一个优秀的黑客?
优秀的黑客养成了一种质疑一切的习惯。
一直以来,程序员总是给人一种呆子的错觉。他们木讷、情商低下、不善言辞.......普通人很难理解这些呆子,因为在作者看来:
书呆子已经在思考的东西,正是真实世界看重的东西。
换而言之,他们不是呆,他们只是在专于他们着迷的问题。
这本书是一个程序员到艺术家的转变之路
,使得程序员不再执着于技术,而是对商业、设计等都有更深的认识。
对于很多人盲目追求新语言、新技术,或者其他流行的东西,本书的观点是:
他们接受流行,不是因为想要与众不同,而是因为害怕与众不同。
对于那些被动跟着潮流而动,却又想要看到潮流方向的人,这本书狠狠得打了他们一个耳光:
如果自己就是潮水的一部分,怎么能看见潮流的方向呢?
附:
世界潮流,浩浩荡荡。顺之则昌,逆之者亡!
8
.《
大教堂与集市
》, Eric S. Raymond,
只要眼睛多,Bug容易捉。
关于作者:《UNIX编程艺术》的作者
怎样才能写出好的软件作品?
好的软件作品,往往源自开发者的个人需要。
如何成为一个优秀的程序员?
优秀的程序员知道写什么,卓越的程序员知道改写和重用什么。
一直以来存在着两种开发模式:大教堂与集市。
第一中模式中,软件开发人员类似于大教堂中专门研究神学的神职人员,关在小黑屋里,每日每夜的和其他人一起精雕细琢。通俗的讲,这就是集中力量办大事。要想进入此道,需有一个神职人员特许证。
第二个模式中,软件开发人员就是集市中熙熙攘攘的商贩。你可以随意参与你感兴趣的开发工作,而他人的成果也对你开放,不会被供奉在神探供他人景仰。如果你觉得某个软件用起来不爽,或者有什么问题,没关系,自己修改一下,然后再将它奉献给集市。通俗的讲,这就是人多力量大。要想进入此道,需要一种拿来就用,不爽就改的开源精神。
这是一本可以引领你进入
开源世界
的书,你顽固不化且邪恶的灵魂若想得以解脱,需每日诚心诵读全文,并按照大神指引的精神之路,参与开源事业。若你违反开源协议,将开源作品采用虚假手段作为个人的荣誉或公司产品,并给其披上邪恶的伪装,你将被世代钉在开源世界的耻辱柱!遭受所有程序员的不屑!
附:
开源是第一生产力。
9.
《
失控
》,凯文·凯利 ,
量变引起质变。
关于作者:maverick(游侠)
什么是量变引起质变?
大量个体和少量个体的行为存在重大差异。群聚的个体孕育出必要的复杂性,足以产生涌现的事物。随着成员数目的增加,两个或更多成员之间可能的相互作用呈指数级增长。当连接度高且成员数目大时,就产生了群体行为的动态特性——量变引起质变。
如何看待信息化所带来的民主?
在任何社会中,只要交流和信息连接的强度适中,民主就必然出现,在思想自由流动并产生新思想的地方,政治组织会最终走向民主这个必然的自组织的强大的吸引子。
刚进大学时,辅导员就强调一句话——量变引起质变。当然听着,感觉还有些哲理,但一直苦于不知道其出处。后来终于在这本书里看到了它。
本书作者是互联网教父般的凯文·凯利,简称KK。《失控》一书写作于1994年,其全称是《失控:机器、社会与经济的新生物学》。
这本书探讨了可能在当下也依然热门的很多问题,如
蜂群思维
、
控制论
、
分布式计算
、
蝴蝶效应
、
人工智能
、
混沌理论
......
很难想象,这样一本对未来饱有远见的书,却写于20多年前。而在20多年后,它仍被很多人推崇,其价值可见一斑。
近些年人工智能领域突发猛进,也引发越来越多的人,开始担忧人与机器的新生。对此,KK在书中是如何评论的:
在将生命的力量释放到我们所创造的机器中的同时,我们就丧失了对他们的控制。
而随着网络的快速发展,我们也有幸见证了微博反腐的变革,信息化所推动的民主革新,不可避免。对此,KK在书中又是这样论断:
唯有庞大的网状结构才能包容形态的真正多样性。这就是为什么网络差不多与民主和市场意义等同的原因。