梦断代码阅读笔记01

人类文明运行于软件之上。但是,软件创建艺术却隐于暗处,即便对
于专家们也是如此。在历史上,我们从未如此地完全依赖于这样一种人类
自己不知道怎么才做得好的产品。在对软件系统的加速依赖和踱着方步学
习怎么做好软件之间,有一条巨大且有时叫人恐惧的壕沟。对软件的依赖
以指数级增长,而做软件的技能一和应 用技能的愿望一却进展缓慢。
你要和程序员说这些,就等着挨批吧。这边厢,有人也许会说,世界
从未如此光明:我们拥有了比以往更好的工具、更好的测试、更好的语言,
还有更好的方法!那边厢,你又听人家说,自计算机时代的黎明以来,其
实并未取得多少进展。计算机先驱莫瑞斯●威尔克斯( Maurice Wilkes ) A
回忆起1949年他在英国剑桥工作的情形,在拖着打孔纸带上楼给雏形计算
机EDASC装载程序(如图0-3所示)时,他看到了未来:“我强烈地意识到,
生命中剩下的好日子,都将耗费在给自己的程序找错误上头。”从威尔克斯
的时代直到现在,尽管有那许多创新,程序员却-直陷于调试除错之苦境。
工作中只有百分之-的灵感迸发,剩下的是艰难寻找、汗湿重衣:他们的
作品永远尚未完成或未臻至善,区别仅仅是“问题更少”的程度不同罢了。

软件就是麻烦一堆。 而且我们不能够也不愿意把电脑-关走为上计。
给我们带来挫败和束缚的软件,也用更多功能、更快更好的工作与生活
方式来引诱我们。无路可回。我们对软件的需要,远甚于对它的仇恨。
所以我们梦想着得到更新更好的东西。在现代软件研究领域多有建
树的专家弗里德里克●布鲁克斯( Frederick Brooks )在1987年写了一-篇
题为《没有银弹( No Silver Bulle )》的著名论文。布鲁克斯在论文中称,
无论编写计算机程序是如何地令我们倍感挫败,也永远无法找到一种魔
法般的突破一我们只能期待渐次前行。 布鲁克斯的观点难以辩驳,但
也难以接受;参加计算机业界会议或是浏览程序员网站时,你总会遇到
一些坚称其错的人。
有些人梦想炸毁今天的整座软件大厦,替以某种全新之物。有些人
则只- -味盼望找到不太顽固、更能响应人类愿望和行为流程的程序员,
盼望能得到招之即来、挥之即去的软件,盼望得到足堪依赖的代码。

感觉像是这样:在软件开发项目中暗藏有一条线缆。 线缆系紧时,
进展迅速。线缆断开时,工作停滞。局中人上下求索,想找到断点所在;
观局者先是试图指点迷津,尔后耐心尽失,猛批通。

软件公司售卖=进制文件,因为你需要它来使用他们的产品;他们
也喜欢二进制文件,因为它能保护机密。比如,假使你想了解Microsoft
Word是如何编写的,光看二进制文件没有用;得读到源代码一人类为
编译器撰写的成千行代码。但是,和大多数商业软件企业一样,微软不
会让你接触源代码。程序源代码是商业软件公司最重要的资产,知识产
权法规的柏林墙保护着这些财宝。
这让比尔●盖茨的公司得以创立历史上最赚钱的软件特权。这也意
味着如果微软的软件产品出了问题,即便你是个编程老手也无法修补它。
你得等着微软来修正问题,因为只有微软程序员才能接触到源代码。
学术计算领域则一直有开放之风:源代码的自由共享,传承了科学
研究各领域的自由共享传统。20世纪80年代和90年代,微软问鼎个人
计算软件产业之际,开源只余星火之光,但并未熄灭。20 世纪90年代
中期是互联网出现在上百万台个人计算机桌面上的全盛期,这是学术界
借助政府资助而培育出的结果。具体而言,学术界开发出一系列协议,
让不同公司制造、由不同硬件组成、运行不同操作系统的计算机之间得
以互通。将计算的孤岛连接为一个全球网络的软件概念,并非出自追求
利润的企业办公室中,而是根源于在大学或公众资助研究中心辛勤工作
的理想主义研究者们"发布且共享"的心态。

开源倡导者们喜欢强调“免费啤酒那样的free" 和“自由演讲那样
的free" 之间的区别:并非所有开源软件产品都免费,但所有开源软件
均可被自由查看、摘选和复用。开源世界内部山头林立:例如,斯托曼
的追随者们视“ 开放源代码”-词为过时货,只垂青于“ 自由软件"的
说法;关于不同许可方式的争论也带有宗教般的狂热。但是,各种意见
的鼓吹者都拥有同一信仰:每个人都可修改的软件会随时间的推移得到
改进,而这正是“封闭”软件所无法做到的。

 

在软件管理中,协作不是马后炮,也不是无足轻重之事:它是工作
的核心,决定采用何种工具和方法有可能成就或毁掉项目。管理这些工
具容易诱使项目偏离正轨。当"我们自己做!"的呼声高涨,奇客们总是
欢欣鼓舞。麻省理工大学有一句著名的(也可能是假冒的)涂鸦:“我宁
肯写帮我写程序的程序,也不写能写程序的程序。”亚伯拉罕.林肯
( Abraham Lincoln )也有类似的名言:“给我6个小时砍树,我会用前4
个小时磨斧头。”这条原则被写入商业顾问手册《高效人士的7个习惯
( The Seven Habits of Highly Effective People )>*,激起了每个程序员制造
工具的热情。但如果执着于此,管理最佳的项目也会一头载到阴沟里。
Java语言发明者、编程大师詹姆斯●高斯林( James Gosling)在blog上
探讨这种偏好,他写道:

有两个暗面:人们谈论最多的是切实磨快斧头然后回去砍树。但多
数时候打造工具比作手边工作要有趣许多。
对我来说,“磨斧头”的最大问题是循环往复,有点像是芝诺悖论
(Zeno's Paradoxes)。:你先花上三分之二的时间完成制造工具的任务。
但制造工具的任务本身也需要工具:要磨斧头,得有块磨刀石。于是你
再花三分之二磨斧头的时间来做一块好磨刀石。在打造磨刀石之前你还
需要花时间找合适的石头。所以你得去据说是盛产优质磨刀石的巴芬岛
( Baffn Island )北部海岸地区。要去到那边,你得先造一具狗拉雪*....
解决芝诺悖论不成问题,因为虽然工作量看似无限,但指数衰减值
也是无限的。而在软件开发中则没那么幸运。打造工具的事越来越多,
很快就让你忘记刚开始要干什么了。
程序员们还用“ 给牦牛剃毛(yak-shaving )来形容这种状况一艾
瑞克●瑞蒙德的《新黑客词典》中定义yak -shaving是一种“看似毫无意
义的举动,但确乎是解决某一问题的必要工作,解决此问题就能解决其
他问题,如是循环递归,最终解决工作中的真正问题。”
程序员总将磨斧头或剃牦牛毛之类的个别行为判断为“确乎必要”。
当然有些是必要的。对于许多软件经理来说,很难判定磨斧头和剃牦牛
毛在何时偏离了项目的原始目标,也很难让乐此不疲于打造工具的程序
员们重回正轨。

 

个人感受:团队协作确实是开发工作的核心,所谓孤掌难鸣,我之在前的

团队作业中并没有很好的做到这一点,自己埋头干总归是缺了点什么,书中也写道

团队协作很重要,我在之后要学好团队合作。

解决方案:项目开始前认真分配工作,互相监督,做好沟通。

posted @ 2020-05-05 21:42  XiaoGao128  阅读(136)  评论(0编辑  收藏  举报