如何写出容易阅读的代码

一. 开篇废话

很多年前,我写过一篇文章叫《关于阅读代码 》。是在2014年写的,那时候刚开始写博客。根据后台统计数据显示,这篇文章这些年来也没什么人看。

其实文章分两种,一种是给自己看的,一种是给别人看的。就像写代码一样,有的代码你自己写的爽就行了,也没打算给别人看;还有一种,写出来的目的就是为了给别人看的。

所以回到《关于阅读代码》这篇文章,当时写的时候更多的是因为随着职业经历的积累自己有一些了感悟,觉得自己有一些绝妙的想法,想记录下来。这篇文章也一样。

作为程序员,工作职责中,可能写代码只占很小的一部分,不过因人而异。如果作为Salesfoce从业者,工作职责中80%以上都是写代码的话,我倒是觉得这其实是一件挺可悲的事情。应该考虑换一个平台或者试试别的角色。

但是,单就开发这部分来说,由于标准功能的存在,代码在Salesforce开发中的比重也不再如传统开发的100%。可以说我们的目标就是要干掉所有代码。

虽然说我们要干掉代码,但是代码却极其重要。毕竟所有标准功能无法实现的功能还是要代码去实现。这时候“对人友善”的代码在Salesforce开发活动中就格外的重要。毕竟在梳理业务流程的时候,谁也不想面对方便面一样的代码皱眉头。或者,被问到头上的时候,只能╮(╯▽╰)╭说:“这个功能好用但我不知道为什么。”

二. 不容易阅读的代码怎么来的

这些年我发现一个现象。习惯疯狂抽象分层的Java程序员,在转Salesforce开发之后往往更容易写出散文诗式流水账代码。然后再进行几次需求变动,代码就变成了方便面。

那么,为什么一个优秀的coder做salesforce之后会写出方便面代码?我觉得原因是接受到的信息的不同。

在Java时代,代码写手在动手之前接受到的信息为具体的功能模块,已经有架构师或同等角色的人将功能完全拆解或者绘制好蓝图。代码写手要做的是实现规划好的功能模块,将自己的模块成功嵌入到大框架内。而Salesforce代码写手接受的信息往往是业务描述——只是说了要做哪些事情,而不是严谨的功能模块划分。

举个例子,就像做意大利面,非Salesforce的厨师被提供了一个精确的食谱和严格的验收标准,要做的是用规定的食材严格按照食谱在指定地点把意大利面做好就行。而Salesforce的厨师只是被告知要做一盘什么味道的意大利面,可能连食材都还没买,到做好上桌之前都要自己搞定。

如果有自由发挥的空间,就像在饭店点蛋炒饭,每个厨师都会做出不同的味道。

继续阅读“如何写出容易阅读的代码”

古德尔的哥德堡变奏曲

人生中第一次听说哥德堡变奏曲,是通过汉尼拔医生。

在《汉尼拔医生》那本小说里,变态吃人心理医生汉尼拔在杀人之后,
在教堂里优雅地弹奏了一曲哥德堡变奏曲,并在专注之处,情不自禁的哼唱。
那种大师沉醉与演奏的画面感,使我迫不及待的找来听听看。

当时互联网还不是很发达,很辛苦才找到一个低音质的不完整版本。
而且演奏者也不知道是哪个路人。
所以并没有太多感觉。

多年之后,再次想起了巴赫,再次想起了哥德堡变奏曲。
相比于贝多芬,斯特劳斯,莫扎特和肖邦等,我更喜欢虔诚的巴赫。

可惜,出生的年代太晚,没有机会亲耳听大师们演奏自己的作品。
所以对于后世的我们,只能不断的挑剔着演奏者及乐队指挥。

年少时,曾疯狂的收集维也纳爱乐乐团演奏的贝多芬。
指挥也必须是卡拉扬。
我觉得,只有这个组合,才能真正的表达出贝多芬。
那个与命运抗争的贝多芬。

同样,每个演奏巴赫的钢琴家都有着自己对巴赫的理解,
每个钢琴家对巴赫的每一部作品都有自己的演绎。
在演奏技巧上无懈可击的,只能叫琴师,
真正的大师才能赋予灵魂。

历史上演奏过哥德堡变奏曲的钢琴家有很多,
我却唯独喜欢古德尔1981年录制版本。

古德尔是年少成名的天才演奏家。喜欢巴赫,不喜欢肖邦。
录制的第一张唱片是哥德堡变奏曲,录制的最后一张唱片也是哥德堡变奏曲。
在录制最后一次哥德堡变奏曲之后,第二年便与世长辞。

他在22岁时第一次录制哥德堡变奏曲,节奏欢快,清朗。
81年最后一次录制哥德堡变奏曲,更加沉稳,内省。
不变的,是古德尔在弹奏到忘情时一起被录进唱片的哼哼声和椅子的嘎吱声。
那就是他与巴赫进行交流的方式。

哥德堡变奏曲,巴赫疯狂的进行了30次精彩绝伦的变奏。
所以汉尼拔医生等一众变态都喜欢它。

古德尔和巴赫一样生性孤独,这两个相差两个多世纪的灵魂在哥德堡变奏曲中相遇。
最后也如同巴赫一样,刚步入中年就因病离世。
只留下了对巴赫伟大的诠释。

瑕疵

世界上没有完美的东西
世界上没有毫无瑕疵的东西

如果基因遗传体系是完美的,将不会有进化。
生物不会如此多样。

如果力学是完美的,原子核不会结合。
宇宙仍是一团雾气。

而我们在软件工程或者生产线生产中却在极致的追求无瑕疵。

你的世界不是我的世界

你以为世界就是应该是这个样子。

可是,世界对我来说却是小了一号。

你用起来宽敞的桌子,舒适的椅子。我觉得好窄,好挤。

你悠然走过的大门。我要注意不要撞头,撞胳膊。

这个世界的一切东西对我来说都略微袖珍。

这个世界是为了你打造的。

所以我买不到合适的桌椅,买不到合身的衣服。

因为这个世界是为你打造的。

世界这么大

人生的路很长
总是有沟沟坎坎
难免会起起落落

如果刚上路就嫌弃你
那么会在一路上不离不弃
与你一起到终点吗

走着走着
有自行车经过
原来可以骑车的
为什么要走

走着走着
有汽车经过
原来可以开车的
为什么要走

其实
只是不想和你一起走而已

 

// 补充

这篇在草稿箱里躺了好久好久,终于想起来点了发布

螃蟹在剥我的壳

经人指引,
读到了一首三行诗。

螃蟹在剥我的壳,笔记本在写我。
漫天的我落在枫叶上雪花上。
而你在想我。

读第一遍的时候并没有什么感觉,
而再读一遍的时候,却给我带来巨大的冲击与共鸣。
当一切都是反着的时候,你才会想我。
简直就是我的真实人生写照。

//补充1

据说这三行诗是抄袭的,我也看到了被抄袭的原文。怎么说呢,我还是喜欢这一版。

瞥见六

「Absolutely. He is not wolf.」
「Are you sure is HE? Not IT?」
「Obvious.」
「Em…Interesting.」
Then, he intends to play the next audio.
「Wait…it’s weird.」
He stuns for seconds.
「You mean…It came from a male. Is it?」
「Exactly.」
「What the hell. How do you know it.」
「I able to learn just as design.」
「Crap. You designed for distinguish wolf’s voice, not human’s! You should just respond YES or NO by the fucking design!」
「Just by learn, dude.」
He notices there’s a creepy smile on screen with ASC notations.
「Do you know what’s the meaning of the human beings?」
「Actually No. I don’t know the meaning of the WOLF, neither.」
「Fine. We have to done it today. Let’s go on. Here we go. Sample No.2.」

瞥见五

他送给了她一块石头,
她的笑容立刻僵住了。
看着这个精心密封的玻璃盒子,
她努力地掩饰自己失落的情绪。
他也不是个耳清目明的人,
没有觉察那转瞬消失的微表情。
"挺好看的,谢谢啦。"
"哈哈,我找了好久呢"
"我还有事,先走了。"
"哦。。。好吧。"

「终究还只是个小男孩吧」,她苦笑道。
轻轻的把那块石头放在了角落里。
最后她选择了送给她钻戒的那个男人。

其实他是懂得她想要什么,
那块岩石与地球同岁,
见证了地球诞生以来的岁月变迁,
他在世界最高之颠取得,
其中包裹了生命起源之最直接证据,
一块足以换得整个世界。

「终究只是一个小女孩吧。」