当我写代码写久了,就会发现:不同的心境,写出的代码是不一样的。
在我刚开始加入编程行业的时候,无论项目有没有压力,我的代码都具有追求GDP且普遍松散的特质,因为我并不知道代码还有好坏之分。
几年之后,我在一位前辈的启发下,有所进步:在项目压力不大的情况下写代码,那个代码就具有追求完美、却略带松散的特质。在项目压力很大的情况下写代码,那个代码就具有追求GDP、却紧而有序的特质。其实开发者们都知道,哪里有多少项目压力小的时候。
现在我把这两个阶段归纳一下:
我的代码除了具有编码规范的特征、少量完美主义色彩之外,主体上带有明显的项目压力“烙印”,真的像是内心被“烙”过一样,也可以说是一种“略带完美主义的纠结主义”代码。我看过很多成熟产品的代码,包括世界级的代码,或多或少具有这个特征。无怪乎极限编程大师Kent Beck在《实现模式》一书中写道:“我见过太多丑陋的代码给它们的主人赚着大把钞票。”
但是,问题来了:在这个被称为“工程”的软件开发领域,我们的代码就只能是标准化的、GDP化的,而不能具有哪怕50%完美的特质吗?
有时,我的眼前会浮现出堂吉诃德的形象,他为了毫不相干的人打抱不平,搞得自己遍体鳞伤却不会皱一下眉头。他不容于现实世界,他的骑士精神更是夸张到了可笑的程度,但他的精神内涵却可以成为我的心法:堂吉诃德在压力很大(有生命危险)的情况下,仍然能够坚持内心的追求!
对于一个开发者来说,这个心法有点高,那我们就退一步讲,在项目压力很大的情况下,能不能追求有限度的完美?
【用习惯的力量,打造商业软件的代码理想国】
有些人会说“追求完美?这不可能”,或者说“这很难,也许别人能做到,反正我做不到”。但是,Kent Beck在《实现模式》一书中早已给出了他的答案:“将一些实现模式形成习惯后,我的开发速度得到了提升,令我分心的想法也更少了。”由此可见,习惯的力量是非常强大的,一旦养成好习惯之后,写好代码比写坏代码反而使用更少的时间!
但是人要养成一个好习惯确实很难,有句古语说得好“看得破,忍不过,想得到,做不来”。很多人养不成那个好习惯,其实是因为没有一个价值观来推动自己。作为一个开发者,需要的可能就是这样一个价值观:用习惯的力量,打造商业软件的代码理想国!
我不得不再次摘录Kent Beck的文字,而且是整段的文字,因为这段文字充分体现了他的价值观,写得太过精彩!Kent Beck在《实现模式》中写到:“我见过太多丑陋的代码给它们的主人赚着大把钞票,所以在我看来,软件要取得商业成功或者被广泛使用,‘好的代码质量’既不必要也不充分。即便如此,我仍然相信,尽管代码质量不能保证美好的未来,它仍然有其意义:有了质量良好的代码以后,业务需求能够被充满信心地开发和交付,软件用户能够给及时调整方向以便应对机遇和竞争,开发团队能够在挑战和挫折面前保持高昂的斗志。总而言之,比起质量低劣、错误重重的代码,好的代码更有可能帮助用户取得业务上的成功。”
所以,我觉得自己并不寂寞,因为我知道在地球的那一端有一些像Kent Beck那样的人,在地球的这一端我也见过一些那样的人,只是数量太少了,其实从Kent Beck的文字中能看出:国外也一样缺乏他那样的人。
【代码内圣七境界】
实际上,现实的情况远比想象中的复杂,想实现“商业软件的代码理想国”,并非只用价值观、习惯五个字就能顺利解决。对于那些爱思考的开发者,我要送上一份礼物:我最近才感悟到写代码七境界。其实它绝非只适用于写代码,对于从事大多数行业、追求一定程度完美的人,都有参考价值:
一、没有追求
二、无压力时追求完美
三、有压力时也追求完美
四、慎独
五、只要求自己,不要求别人
六、人不知而不愠
七、他施于我,而我亦不愠
前三个境界,我在前文中都提到过,这里不再赘述。
到了第四个境界就开始难了,孔子的孙子子思在《中庸》中提到“莫见乎隐,莫现乎微,故君子慎其独也。”对于开发者而言,慎独就意味着:在别人根本就没有时间看出我的代码是否具有容错性、扩展性这些优秀特质时,我能否仍然把代码写好?也就是说,无论有没有别人看着自己做事,我都是一样地做事。
慎独才是检验内心指向的根本依据:我到底是为了自己认为正确的那个东西而努力,还是为了博取别人的正面评价而努力!夜深人静时不妨自省一下。
其实“慎独”这个精神绝非中国古代特有,这里有一个关于苹果前掌门乔布斯的故事。在乔布斯小的时候,他的父亲是一个制作专家,当家里需要一个木柜的时候,他父亲就会做一个,而且对乔布斯说“木柜和围栏的背面虽然不被人看见,但也要做的很好”,小乔布斯就是在这种耳濡目染之下,学到了“慎独”的精神,并把它用在了苹果的产品中。
然而,“慎独”好像只是少数“贤人”的专利。令大多数开发者欣慰的是,前文提到的Kent Beck,他用“习惯的力量”就可以达到“慎独”境界,因为做自己习惯的事就不需要再经过大脑。但是,这只是“曲线救国”的一条羊肠小道而已,并不是“究竟”,“究竟”就需要价值观的指引。
第五个境界:只要求自己,不要求别人。
《论语·卫灵公》:“躬自厚而薄责于人,则远怨矣。”意思以多责备自己,少责备别人,就可以避免别人的怨恨了。
作为开发者,一旦自己已经能做到完美了,甚至达到慎独境界了,脾气也跟着来了,说别人这也不对那也不行,虽然说的每一句话都是真理,但突破了人与人之间的界限。人在某种程度上,并不都处于理性状态下,所以突破了对方的“气场”,就会有“不兼容”的事情发生。这就是只懂得知识的真理,却不懂得做人的道理。在这一点上,很多人都会中招,我也一样没有修炼到家。
第六个境界:人不知而不愠。
《论语·学而》:“人不知而不愠,不亦君子乎?”意思是:别人不了解我,我也不生气,不也是君子的行为吗?
又是《论语》!《论语》是我常读的枕边书,除了睡前,我也会在散步时,把日常中的所遭所遇、所思所想与孔子的话做映证。我惊奇地发现:在代码的世界里,论语有其用武之地,甚至是写好代码的关键因素!
“人不知而不愠”这句我们从小就会背诵的经典名句,如果没有深刻的切身体会,又怎能知道践行这句话的意义有多大、难度有多大!作为开发者,我们自己已经能做到完美了,但是,别人就是看不懂自己的代码、听不懂自己的话,甚至被别人忽略、误解。这种沮丧实在是难于名状,很多人会怒气陡升,肝气足的人很可能会拍案而起,与人争执。
殊不知,关键并不是别人不懂自己,而是自己还不知道别人的思维模型,自己并没有以对方容易理解的方式,把问题表达清楚。这就是《论语·学而》篇最后一句话“不患人之不己知,患不知人也”的内涵。人与人之间的深度沟通是很难的,尤其是已经达到较高层次的开发者之间,这时就需要开发者具有脑科学知识(脑科学的神奇效果,我会在后续文章给你展示),这样才能了解对方的思维模型,说出来的话,都是深入浅出、直指要害的,拥有这样的交流能力的开发者,还怕别人“读不懂”自己吗?
第七个境界:他施于我,而我亦不愠。
不要以为“人不知而不愠”的境界已经登峰造极了,如果有人明明知道我很强,或许他并不知道我强,看到我的代码后,露出轻蔑的一笑,之后就是给我的致命一击:要我必须按照他的方式去写代码!
我欲哭无泪,我明明知道我的代码比他好,而且他也争论不过我,但官大一级压死人啊。有时我会用《道德经》中的话作为我的心法:“不笑不足以为道。”开发者的高端能力就像“道”一样,不可能被普通开发者理解,他笑话我,这也是很正常的现象。但是,有时会觉得这很像阿Q的思维方式,虽然能让自己心里好受一些,但终究无法让自己站在更大的舞台上。其实我心里也没底:我到底有没有实力站在那个更大的舞台上。
想让自己心里有底,就需要有那种能让自己“立”得起来的能力。“君子不患无位,患所以立。”当我们有那种能“立”得起来的东西时,自然就有可能逐步达到这些境界,否则就会跌倒在第三个境界之前,而无法再向前跨越一步。
对于开发者而言,究竟什么是能“立”得起来的能力,我会在后续文章给你展示。
在本文结束的时候,我想说明一下我用“开发者”来代替程序员、工程师、码农的原因:我就是想让“开发者”这三个字带给自己也给广大的同行们一个“意象”:我们是有独立意识、创新精神的个体,并不是只具有单一技能的程序员,也不是具有标准化特征的工程师,更不是有点像“奴隶”一样的码农!
作于2018-3-24
网友评论