为什么说不要编写庞大的程序
《Unix 编程艺术》中总结的 Unix 哲学中有这么一条:除非确无它法,不要编写庞大的程序。并且在第 13 章 花了一章讨论复杂度的问题。(第 13 章 复杂度:尽可能简单,单别简单过了头)
下周一,是我们项目的一个进度线。所以,周末我安排了加班。当然,我最近两年,每个休息日都给自己安排的加班,无所谓周末。不过给团队安排加班还是比较稀少的事情。
由于种种原因,不是每个人都能够把自己的休息时间贡献出来的。作为团队负责人,我的原则是,生活大于工作。如果有生活上的事情,就可以拒绝加班。对于项目,也不应该把某件事情依赖到特别的某个人身上,虽然某些东西由特定的人去做(比如维护自己写的模块/程序)会效率高一些,但是其他人也应当可以顶替。
所以,偶尔维护一下不是自己写的代码,且能够在很短时间进入状态,就是团队每个人应该具有的能力。在这方面,我们的团队做的还不是很好,不是每个人都有这样的能力。但、这也并非个人能力单方面的因素。
同样,光靠提升代码质量也不是能完全解决问题的。整个项目的模块切分、文档定义等等更为重要。
说起来,我的感触就是:”除非确无它法,不要编写庞大的程序“ 。简洁小巧的程序总是好维护的。尤其是容易进入状态的。我说的进入状态即:在出现 bug 的 30 分钟内可以弄明白那些不是自己写的、陌生的没有读过的代码的脉络。并且开始着手解决问题。
强调进入状态的速度,是因为,如果需要去读几个小时的代码才摸清楚结构的话,还不如等到下个工作日,让原作者给你解释或由原作者去解决问题。
其实,不仅仅是这个周末。已经有太多周末以及夜晚,办公室里人员不齐,遇到问题必须自己解决了。虽然不是所有问题都可以自己弄明白,偶尔也需要打电话给相关代码的作者问清楚。但是,大部分问题都还是可以搞定的。我觉得很大程度上,就是因为,我们从来没有编写庞大的程序,即使是迫不得以编写庞大的程序(比如游戏的 client ),也把层次和模块分的很清晰,每个都不大。
最后想说的是:不要把问题推给别人。即便不是为自己的项目工作,作为程序员,发现问题就应该着手考虑解决。这也是开源的精神(当然,使用闭源软件就很难做到了)。作为程序员,解决问题,是自身能力提高的源泉。
有时,修补他人的代码,甚至是不被你的美学所接受的代码,更能增强对代码的把握能力。比如:我放弃用 C++ 编写软件,但我不排斥阅读 C++ 项目。即便我一边用嘲讽的语气去评论那些“精巧的”设计,另一方面也会客观的去理解是什么需求导致了如此的结构。
最近,工作太忙。没时间看书。只是把《Unix 编程艺术》放在手边,累了就翻一下。其实呢,许多道理本就明白,可每次看见白纸黑字,还是觉得的确很有道理。最近一年,觉得自己悟了许多。悟:并非明白了以前不明白的东西.知识还是那些知识,道理还是那些道理,似乎没有学到新的,又胜过学了新的东西。
一则有趣的对比:
我们的项目在 Windows 下,使用 mingw make 全部需要 47 秒(很干净的 Windows XP ,没有装任何杀毒软件)。
但是在 freeBSD 上用同样的机器,做同样的事情只用 18 秒。
谁可以解释这个差异?
因为 Windows 开进程太慢?文件系统太糟糕?Console 速度太慢?mingw 的 gcc 太慢?
Comments
Posted by: 文生 | (59) July 29, 2016 01:30 AM
Posted by: 股票行情 | (58) May 23, 2009 03:42 AM
Posted by: xx | (57) May 12, 2009 02:37 PM
Posted by: ajivacat | (56) May 12, 2009 01:23 PM
Posted by: zzz | (55) May 2, 2009 12:50 PM
Posted by: fuwu | (54) May 1, 2009 12:51 PM
Posted by: Dim | (53) May 1, 2009 02:45 AM
Posted by: 平台租用 | (52) April 30, 2009 02:05 PM
Posted by: Jim | (51) April 29, 2009 02:46 PM
Posted by: summer | (50) April 28, 2009 10:32 AM
Posted by: heighgun | (49) April 24, 2009 05:37 PM
Posted by: lily | (48) April 24, 2009 11:30 AM
Posted by: lily | (47) April 24, 2009 11:29 AM
Posted by: 草榴 | (46) April 23, 2009 08:02 PM
Posted by: LFB | (45) April 23, 2009 07:17 PM
Posted by: 哥俩好 | (44) April 23, 2009 10:20 AM
Posted by: 哥俩好 | (43) April 23, 2009 10:12 AM
Posted by: David | (42) April 23, 2009 04:47 AM
Posted by: Tim | (41) April 22, 2009 11:05 PM
Posted by: fnsoxt | (40) April 22, 2009 09:35 PM
Posted by: Br | (39) April 22, 2009 07:58 PM
Posted by: loveour | (38) April 22, 2009 09:10 AM
Posted by: ER1C | (37) April 21, 2009 04:51 PM
Posted by: toorq | (36) April 21, 2009 04:10 PM
Posted by: 123 | (35) April 21, 2009 12:48 PM
Posted by: firendless | (34) April 21, 2009 01:09 AM
Posted by: sjinny | (33) April 20, 2009 10:22 PM
Posted by: limantian | (32) April 20, 2009 09:34 PM
Posted by: sjinny | (31) April 20, 2009 08:19 PM
Posted by: chinainvent | (30) April 20, 2009 06:38 PM
Posted by: sunway | (29) April 20, 2009 04:36 PM
Posted by: sunway | (28) April 20, 2009 04:34 PM
Posted by: kxjiron | (27) April 20, 2009 04:04 PM
Posted by: kxjiron | (26) April 20, 2009 04:02 PM
Posted by: dyou | (25) April 20, 2009 03:08 PM
Posted by: kxjiron | (24) April 20, 2009 01:37 PM
Posted by: RAINSSA | (23) April 20, 2009 11:21 AM
Posted by: kevinlei | (22) April 20, 2009 11:17 AM
Posted by: 赵中 | (21) April 20, 2009 10:53 AM
Posted by: mouse | (20) April 20, 2009 10:02 AM
Posted by: chinainvent | (19) April 20, 2009 09:13 AM
Posted by: 发不了言? | (18) April 20, 2009 09:11 AM
Posted by: mm | (17) April 20, 2009 12:30 AM
Posted by: zhangyafeikimi | (16) April 19, 2009 09:58 PM
Posted by: zhangyafeikimi | (15) April 19, 2009 09:56 PM
Posted by: black | (14) April 19, 2009 09:54 PM
Posted by: netawater | (13) April 19, 2009 09:44 PM
Posted by: sjinny | (12) April 19, 2009 06:50 PM
Posted by: Tairan | (11) April 19, 2009 06:21 PM
Posted by: analyst | (10) April 19, 2009 05:38 PM
Posted by: liuzhi | (9) April 19, 2009 03:24 PM
Posted by: Xw.Y | (8) April 19, 2009 02:08 PM
Posted by: abcs | (7) April 19, 2009 01:23 PM
Posted by: hacker47 | (6) April 19, 2009 10:50 AM
Posted by: mm | (5) April 19, 2009 10:45 AM
Posted by: 无限 | (4) April 19, 2009 10:26 AM
Posted by: Li | (3) April 19, 2009 10:12 AM
Posted by: ngn | (2) April 19, 2009 09:35 AM
Posted by: chu | (1) April 19, 2009 09:16 AM