首页 > 代码库 > 个人阅读作业2
个人阅读作业2
虽然说这是老师给留的一份作业,但是在看了这几篇文章之后还是有一些感触的。我想根据这些文章的内容,写一些自己的想法。
我看了这几篇论文,有的很悲观,有的很乐观。有的赞美了集市式的编程,有的狠狠地批评了它(还是个致力于开源的哥们……)。所以说,我想在写这份读后感之前表明一下立场。我感觉我还是一个比较中立的程序员(可能连程序员都还不够格)。要是说偏向的话,还是一个更偏向于悲观的一个人。我可能在看待问题、分析问题方面更愿意看到困难,所以可能不太好发展(知道还不改(╯‵□′)╯︵┻━┻)。所以说我其实还是很能接受布鲁克斯的这篇《no silver bullet》,虽然作者在现在也认为当时的想法已经不适用于现在的计算机领域,不过我感觉这篇文章还是有很多可取之处的。
那么,就从《no silver bullet》这篇文章来开始写
《no silver bullet》
说实话,是一篇很悲观的论文。
作者先将软件开发分成两部分,本质性工作和副属性工作。前者是去创造出一种抽象的软件实体所组成的复杂概念结构,而后者就是用编程语言来编码。
布鲁克斯认为,没有一种方法可以在10年内将软件开发的轻松程度(个人理解包括成本、工作量等等)提升一个数量级。因为软件开发存在各种困难。这些困难是在软件开发的本质性工作中的。包括;
复杂性(complexity):软件要解决的问题,通常牵扯到计算步骤,这是一种人为、抽象化的智能活动,多半是复杂的。
隐匿性(invisibility):尚未完成的软件是看不见的,即使利用图标说明,也常无法充分呈现其结构,使得人们在沟通上面临极大的困难。
配合性(conformity):在大型软件环境中,各子系统的接口必须协同一致。由于时间和环境的演变,要维持这样的一致性通常十分困难。
易变性(changeability):软件所应用的环境常是由人群、法规、硬件设备、应用领域等,各因素所汇集而成,而这些因素皆会快速变化。
同时作者肯定了人们在副属性工作中做出的进步。高级语言的诞生、分时技术、统一的开发环境等等,但是作者仍然认为这不足以使软件开发提高一个数量级的效率。
其实我是感觉,关于提高软件工程效率这一点,并不是这么悲观。虽然我认同这篇论文里的不少观点、比如软件工程的核心困难不在于编码而在于设计、编码方面已经有很多的提升了,不过我感觉并不用这么悲观的理解这个软工轻松程度的提升问题。我虽然不像第二篇文章《There Is a Silver Bullet》的作者 Brad J Cox那么乐观,但是我仍然认为在10年对软件开发的轻松程度提高一个数量级时候可能的。
有这么几个原因:
1、现在有足够多的开发人员与相关从业者。那么,就算在已经优化了很多的副属性工作中,也可以继续提高效率。在技术暂时还没有办法更加优化的基础上,可以用一定的人力来进一步提到软件开发效率。但是人数不能太多,太多人同时进行会增加调度工作量,同时也会造成更多的错误。
2、现在有专业的人员去进行软件开发的本质性工作的设计。这些人员受过专业的训练,有深厚的专业知识与培养、并有相关经验。再加上过去的一代变成实践者逐渐离开基层而转战软件架构这方便的工作,会使复杂性和易变性降低。再加上面向对象程序设计的出现,可以更大程度上的满足隐匿性。再加上PM的统一调度,可以使软件开发碧昂的比原来更加简单,减少程序员的工作量。
但是,很重要的一点是:以上两点都是我的设想。作为一个基本没有软件设计经验、只会凭空想象的现代大学生,这些设想能否实现是一个很大的问题。而且,就算是这些设想被证明可以实现,实现的方式和在实现的的过程中会带来的新的问题也是没有考虑进去的。这还需要人们不断地努力。但是我相信,在提高软件开发这件事本身上,并不是那么悲观的。
《 Cathedral and the Bazaar》和《Lost in CatB》
这两篇文章我想一起写,可以算一个对比吧。
《 Cathedral and the Bazaar》这篇文章讲了两种自由的软件开发模式:
大教堂模式(The Cathedral model)︰原始码在本模式是公开的,但在软件的每个版本开发过程是由一个专属的团队所控管的。作者以GNU Emacs及GCC这两软件为例。
市集模式(The Bazaar model)︰原始码在本模式也是公开的,不过却是放在因特网上供人检视及开发。作者以Linux核心的创始者林纳斯·托瓦兹带领Linux核心的开发为例,亦引用fetchmail的开发为例。
这篇文章的作者偏向集市模式,将代码公开,所有人都可以修改。就比如维基百科。我倒是很喜欢这种模式的,不过再看了《Lost in CatB》之后,我的想法还真是有了些改观。
这篇文章上来直接就说,这是迷失在集市模式的一代人。作者主要批判了现今软件呈现一种"脓包"似的状况,无休止的复制,粘贴,质量越来越差。就像文章中提到的那样,现在学习计算机编程,就像是在“学会用钉子把两块木板钉在一起”一样简单。不断地复制粘贴,增加了代码的冗余性,而且让代码不断地庞大,知道没法让人理解和修改。这个就是集市模式的一个后果。
作者举的是Unux的例子。作为一个著名的开源系统,这个是集市模式的一个非常成功的作品。但是作者认为,Unix的发展现在停止了,就是因为所有人都可以不断地往里面加代码,使得这个系统过于庞大,但是其中有很多很多废话。不过在后人总结的时候,由于过于庞大的代码,无法发现这些问题,而是这样的问题就像滚雪球一样被不断放大。而且这些代码还是那些没有经过系统训练的半吊子程序员的写的代码,这些代码会破坏这个程序的平衡。反倒越该越乱。
我之所以对此有共鸣,是因为我在看到学霸这个项目的代码,前年的学长是按照功能来分工来写的。虽说前后端就没分开不过代码还是非常漂亮的。但是在我们的上一届学长修改优化了之后,算是分了比较明显的前后端的,但是出现了很多bug,而且在逻辑上也出现了很多问题。我感觉这就是集市模式的一个问题。虽说我不能完全算是集市模式,但是这个就很Unix一样,是因为越写越多,就越写越乱。
再看了这些文章之后,我发现软件开发不只是有内容,还有很多的理论可循。这个是很值得研究的。没有理论的实践是会有很多问题的,必须有方法才能更快的完成软件开发。
个人阅读作业2