错与对并不是绝对的

梦断代码阅读笔记03

一些超乎常规的原则:用户不用关心软件的存储结构,只管输入数据就好;用户应该能够容易地扩展和修改数据结构、添加新分类,且不会导致数据丢失;用户应该能够用自己创建的新方式查看数据一也可以在自己创建的视图中操作和修改数据。

继恩格巴特的研究项目后,数十年间,计算领域的革命层出不穷。计算机从办公室里走出来,进入千家万户,摆到每个人的桌面上。无人可以抹煞这些新事物改变了世界的事实。另一方面,也很难说它们已经像恩格巴特期望的那样,让人类的智慧得到爆炸式的增长。每种提升人类生产力、方便性或创造力的计算机发明,看来都有其负面影响;系统崩溃、病毒、蠕虫侵袭着我们的进步之梦。那么多激情洋溢的鼓吹者为我们描绘出数字化进步的美妙图景,可他们对程序员努力把脆弱代码锻造成型的痛苦记录却只字不提。那记录由-个接一个的灾难组成,在计算领域的历史时间线上,留下了累累弹坑。

今天,任何打算开创一个大型软件开发项目的人都得与这种极度令人气馁的历史包袱相抗争。它让胸怀大志的新来者遭受重创,好像是在对他们说,你凭什么认为自己与众不同?

如果程序员太过在意过往那些软件灾难留下的教训,就一行代码也写不下去。每次失败都如此相似,简直令人遍体生寒。你唯有交叉十指,祈祷我们的程序不出毛病。然而,除了那些经历过类似FAA案例的老手程序员之外,多数人在做新软件时,都乐于忘记过去、盲信未来,坚信这次会不同。

'程序员都是乐天派,”弗里德里克●布鲁克斯在1975年写道,“或许那多挫折把别人都吓跑了,只剩下那些习惯性地关注最终目标的人。或许只不过因为计算机还年轻,程序员还年轻,而年轻人总是那么乐观。””但是,程序员与生俱来的乐天情绪,往往被他们径直杀向困难与问题的行动所掩盖。记者都知道,如果从销售人员或市场人员口中挖不出什么料,不妨去找个工程师问问,他(如果没被隔离在外或被命令闭嘴)会讲出困窘的真相。

在每个编程项目的早期阶段,当团队选择语言和技术、准备切入开发时,这种两难悖论就降临了。对语言和技术的选择,初时无关大局、重选亦可,转而变得混凝土般坚如铁石、关系重大。

“程序员就像诗人,他的工作几乎全是纯思考,”弗里德里克●布鲁克斯写道,“他运用想象,凭空造出城堡。唯有想象才如此灵活,如此易于琢磨和重塑,如此适于构思宏大的概念性架构。”

造性工作的精准大纲。程序的确“几乎全是纯思考”的产物,但不会永远停留在思考阶段,否则就什么也做不出来了。程序员从思维的沃土,上摘取点子,再用一行行具有实际功能的代码实现它一让它 在计算机世界中“有了居所和名字”。

磁芯乃是一种物理实体, 并非仅是比喻。它有居所和名字。你的计算机内存中有广大的空间容纳许多真实位置一在今天的高级芯片中它们处在微观量级一这些位置拥有名字和地址。在任意给定的瞬间,内存中的每个地址、每个比特,都保存着一个值为 0或1的数据;这是种简单开关,要么开启要么关闭。计算机上运行的其他一切, 不管是公司藏书还是毁灭者( Doom )游戏,都建立在这种二进制的基础之上一中央处理器遵从程序员的指令,从内存中取出这些比特,进行一些操作,再把它们放回去。

软件则有不同:它没有磁芯。它就像洋葱般层层叠叠,每一层都辛辛苦苦地建立于前一层基础之上,危如累卵,指望着底下那层不要移动或改变太多。做软件的人喜欢讨论垒砖头;而怀疑论者眼中只看到空中楼阁。无论如何,日积月累,一层一层搭建起来。

程序员把这种结构叫做“抽象层叠",每当新添一层时,就要把一些复杂而特殊的东西转换为简单而通用的东西。“抽象( abstraction)"一词来源于拉丁语,原意是“拉开”;在计算机科学中的定义是:“将多个较小操作组合为一个可通过其名称引用的单元的过程。”幼儿在托儿所就学会了抽象他们会意识到,如果想吃苹果,其实无须手指苹果,只要讲出“苹果”这个词就行。他们也认识到,抽象依赖于一种通用语言,依赖于使用者共同假定“苹果”这个词就是指某类事物。



posted on 2019-04-27 19:02  错与对并不是绝对的  阅读(102)  评论(0编辑  收藏  举报

导航