最近在读《程序员修炼之道》,在大牛的光环照耀下,越发感觉到编程中的很多道理和生活是相通的。

分享一下我的几个感悟。

“生活与学习”—“软件正交性”

正交性

“正交性”是几何学中的术语。如果两条直线相交成直角,它们就是正交的。例如平面内坐标轴的 x轴 和 y轴 就是正交的。
在计算机技术中,正交性则用来表示软件内部各个模块的不相依赖性。如果一个或多个模块发生变化,不会影响到其他模块。在设计良好的系统中,数据库代码和用户界面是正交的:你可以改动界面,而不用影响数据库;更换数据库,而不用改动上层的业务逻辑。当一个项目符合正交原则时,其开发和维护的成本也得以降低,因为一旦项目的出现问题,只需要找到有毛病的模块并修改之,不会牵一发而动全身。

生活与学习

过去几年,我一直追求的生活与学习的关系应该就是符合正交的。即理想的状态是:生活和学习互不相关。我在学习时,不会有生活上的事情打扰到我;我在玩的时候,也不希望心里还惦记着没有忙完的事情。为了达到这种正交性,我基本上每天给自己定下严格而具体的计划,例如上午的八点到十点看书,十点到十一点半写代码,十一点半之后去吃饭……我试图将每一块时间都隔离开来,每一块时间都只做一件事,每块时间内做的事互不相关,相互正交。

两者的关系

我总是把计划想的太完美,可事实并非如我所愿。往往一个电话打来,一个微信发来,一上午的计划就泡了汤。在大学,特别是考研需要集中注意力的时候,这种计划完不成导致的挫败感一直困扰着我。我甚至一度因为计划完成不了想要放弃考研。后来其洲的一句话(我还是太年轻~)点醒了梦中人:考研总是复习不完的,不要事事追求完美,你只要比你的竞争对手复习得好就行了。

确实,这个世界本来就充满了不确定性。谁也不能精准的预测到明天将会发生什么,生活与学习也不可能完全正交。我们能做的,只有接受不确定性,并将其对正交性的影响降到最低,君子事来而心始现,事去而心随空。追求生活与学习的正交性是没有错的,错就错在我不能接受现实的不确定性,因为完不成计划而产生强烈的挫败感。

“破窗理论”—“软件的熵”

破窗理论

“破窗理论”是犯罪学的一个理论。此理论认为:如果一栋建筑物的窗户被打碎而没有得到及时修理,那么就会有越来越多的人去打碎其他窗户,最后甚至会有人闯入其中搞破坏。在相对较短的一段时间内,建筑就被损毁得超过了业主愿意修理的程度,从而被废弃。“破窗理论”启示了纽约和其他大城市的警察部门,他们对一些轻微的案件严加处理,以防止大案的发生。

软件的熵

“熵”是一个物理学的概念,用来衡量系统中的无序性,熵越大,无序性越大。热力学定律保证了宇宙中的熵不断增大,最终导致宇宙的毁灭。同样,当软件中的无序性增长的时候,软件也开始慢慢“腐烂”。软件设计得一个原则就是:Don’t Live with Broken Windows 。破窗户可以是一个低劣的设计,一段重复的代码,一个隐藏的BUG,发现一个就修理一个,如果对于小问题置之不理,那么软件就会加速腐烂,直到最后整个项目面目全非,不得不放弃。

二者与生活的感悟

现实生活中,我经常会经历这样的一天:

早上偷懒八点起床,九点来到实验室,打开电脑划划水,然后再看时间,快十一点了,差不多该吃饭了;吃完饭后看看新闻,玩玩农药,就开始睡午觉。慢慢的,这一天的无序性慢慢增大,熵慢慢增大。醒来后醒一醒觉,就不知不觉到了三点,这个时候打开哔哩哔哩,发现up主又更新了好多视频,遂开始逛B栈;紧接着时间来到五点,该去吃晚饭了,这个时候才猛然发现,白天啥正事也没干。于是又索性破罐子破摔,吃完饭回宿舍继续逛B站。心里计划着,明天一定要好好学习~

事实上,如果我早上七点起床,来到实验室后就开始看书学习,而不是容忍一个个破窗户,那么一天应该过的很充实。如果窗户在被打破后(起床较晚)不去想办法修补,就会产生破罐子破摔的潜意识,导致一天的效率都很低。难怪古人有云:一日之计在于晨。

“恋爱”—“机器学习算法”

最近读了《他们谈爱时不讲道理》这篇文章,三对情侣的故事,以写实漫画的形式展开,写的很温柔。故事中,有一位男生拿学习算法来比喻两个人的恋爱,感觉颇有几分道理:

他们谈爱时不讲道理