01《梦断代码》阅读笔记之一

最近接触读到了《梦断代码》这本书。这本书讲了这样的故事:一群很有经验的代码牛人在先进软件开发模式的指导下,没有资金压力,在更多大牛的带领下,原计划用一到两年的时间开发出一个备受期待的个人信息管理软件(PIM),后来花了七年时间才完成这一创举,但是已经无人喝彩。有一些感想如下。

在讲团队协作时,作者提到了一本书《大教堂与集市》。《大教堂与集市》的作者认为,重要的软件应该像建大教堂一样,由独立的巫师精心打造,在面世之前绝对不发布 beta 版本。而 Linux 采用的开发风格却像一个乱哄哄的大集市,铺陈了各种日程和手法,要从中得到一个前后一致的稳定系统,简直只能指望奇迹再三出现。可事实上这种集市风格看起来行之有效,让人非常震惊。后来人们在 Linux 系统的开发中总结出了 Linus 法则:只要有足够多的 beta 版测试人员和开发者队伍,几乎所有问题都能被很快发现,而且总有人知道该怎么修复。虽然 Linux 和 Apache 服务器采用的是集市型的开发并取得了巨大的成功。但我仍然更欣赏大教堂式的开发模式和Unix 的设计哲学 “KISS”:即,让代码得到复用,由稳定、健壮和独立的小工具组合出大程序。

​ 书中还提到,量化程序员的工作量是很困难的事情,用代码行来衡量程序员的工作非常愚蠢。程序员之间的生产力差距可能多达十倍以上,给程序员分配合适的任务也是很困难的事情。在我看来,

​ Linus 在接受采访给开源项目的建议是:从小项目开始,而且永远不要期望它变大。如果期望它变大,就会过度设计,把它想象得过于重要。更坏的情况是,可能会被自己想象中的艰难工作吓到。所以要从小处起步,着力考虑细节。别去想大图景和好设计。如果项目没有解决眼前的需求,多半就是被过度设计了。我认为这很有道理,很多时候,过度设计、过早优化、过度抽象、过度工程都是造成软件工程失败的原因,在开发软件的过程中,我们应该及时反思,以避免这些问题。

​ 书中还提到一个有意思的概念,如“意大利面条式代码”,指的是糟糕的程序员写出来的枝蔓缠结的代码。我们应该尽量避免产生这样的代码。代码的整体美观清晰,以及必要的注释,这是老师在课上也反复强调的。

作者同样提及,著名的芝诺悖论描述了,一个每次行走剩余一般路程,却永远不能到达终点的乌龟的悖论。在完成项目时,我们往往可能陷入同样的境地,在完成任务的半途,我们可能会发现一些其他的方法,从而转而去制造项目的轮子。我们多数时候会告诉自己,停下项目去学习更好的技术,制造一个工具是值得的,因为磨刀不误砍柴功,之后再来解决项目也无妨。但实际上我们这样做是因为,停止项目制造工具比推进项目要容易的多,而又让人感到再往正确的方向前进。不知不觉中,我们就成了那一只芝诺龟,一直在前进,却总也到达不了项目的终点。这一点我们在团队项目中应当引以为鉴。

在过去,我常常认为某个任务只能用一种新的技术来解决从而一直停滞不前,从而想要在有空时掌握到工具再去学习。后来我发现这样也是不可取的,读完这本书后。我学会了我们要理性分析,同时不要做永远到不了终点的乌龟,走正确的路,合理分析比较时间差异。

posted @ 2023-05-23 17:19  橘子味芬达水  阅读(11)  评论(0编辑  收藏  举报