个人阅读作业2
经过几周的个人项目、结对项目、团队项目的编程作业,我对软件开发有了一些了解和认识,在读过关于软件开发本质和开发方法的文章后,更有了一些启发。
在《No Silver Bullet: Essence and Accidents of Software Engineering》中,作者将软件开发的困难分为两种:第一种是软件本身在概念建构上存在先天的困难,也就是如何从抽象性问题发展出具体概念上的解决方案;第二种就是概念建构之后将构思具体在电脑上实现时遇到困难。软件开发的过程是很复杂的,通常会遇到四个难题:1.复杂性,软件要解决的问题,通常牵扯到计算步骤,这是一种人为、抽象化的智能活动,多半是复杂的。2.不可见性:尚未完成的软件是看不见的,即使利用图标说明,也常无法充分呈现其结构,使得人们在沟通上面临极大的困难。3.统一性:在大型软件环境中,各子系统的接口必须协同一致。由于时间和环境的演变,要维持这样的一致性通常十分困难。4.可变性:软件所应用的环境常是由人群、法规、硬件设备、应用领域等,各因素所汇集而成,而这些因素皆会快速变化。软件开发从本质上来说就是复杂而困难没有通法的,人们仍然在积极地研究方法来使得软件开发变得更加方便、安全、高效以及低成本。在文章中,作者提到,高级程序设计语言,时间共享以及统一的环境都使得人们在进行软件开发的过程中更加方便高效以及安全。
在《A Generation Lost in the Bazaar》中,作者描述软件开发有两种开发模式:1.大教堂模式(The Cathedral model)︰原始码在本模式是公开的,但在软件的每个版本开发过程是由一个专属的团队所控管的。作者以GNU Emacs及GCC这两软件为例。2.市集模式(The Bazaar model)︰原始码在本模式也是公开的,不过却是放在因特网上供人检视及开发。
在《Worse Is Better》中,作者分析了软件工程设计过程的一些特性,并进来了优先界别的分析:1.简单性:设计要简单,实现也要简单,简单性是非常重要的一个因素。2.正确性:设计要保证正确,在可以考虑到的方面,要尽量保持正确性。3.一致性:设计要保持一致,不过为了简单性和正确性,可适度牺牲一致性。4.完整性:软件工程设计要覆盖各种情况,可以想到的情况都要尽量覆盖到,不过优先级最低,可以为了其它特性适当牺牲完整性。
在我们团队的合作中,我们采用的是市集模式,我们的项目是共同开发,保持进度,相互之间还要有所交流。我们从学长那里拿到了MOOC的代码,我们先花了一些时间阅读学长的代码,仔细研究,然后又学习自己设计新的不同环境下的MOOC。我们的团队项目分成了几个不同的版块,分成各组进行分别实现。各组要进行沟通,分别对各自的部分负责,有人负责,才有质量。
软件开发需要遵循一些方法,有一些前人的经验可以借鉴,但软件工程本身也是多变化的,没有完备统一的规律,我们要在实践中慢慢摸索,在团队项目中做好分工部分,逐渐找到软件开发的方法,掌握一些更有用的理论。