• 个人阅读作业2


    这次的阅读作业,由于之前没有没太重视,真正开始看才发现内容真的不少,导致阅读的时候看的也不是很详细吧,也就简单总结一下对这些文章内容的理解与体会吧。

    1、  No Silver Bullet: Essence and Accidents of Software Engineering

    by Frederick P. Brooks, Jr.

    这篇文章主要介绍了软件编写的难度。总的来说,编写软件的难度,在于其规格,设计以及对概念结构的测试,而不是在如何具体实现与测试。

    具体来说,来自于软件编写的四个特性。

    (1)复杂性。软件中各个部分都有它本身的复杂性,且比较难以抽象出来,而整体的复杂性跟远远大于各部分之和,它的整体难度随着其规模的增长呈现非线性增长,大大增加的软件编写的难度。

    (2)一致性。软件编写是一个整体工作,而分配给多个人或者一个团队时,虽然各编写人员能够同时编写,加快工作进度,但是编写时必须保证整个项目的一致性,如各个接口之间的统一,这也很大程度上使软件编写找不到很好的降低难度的方法。

    (3)易变性。软件编写工作,始终是为了完成一项工作,最后得出一个能够满足要求的软件。而对一个软件需求又总是会随时间以及各种外部原因而改变,同时,因为软件使用过程以及使用设备的不同,也必须对软件进行必要的各种调整,这也使得软件编写完成了也不能算是真正的成功了,也加大了难度。

    (4)不可见性。软件编写工作不像一些具体科学一样可以很好的将问题抽象出来,然后建立相应的模型去解决。软件不易抽象具体,很大程度上考验着软件编写人员。

    文章中当然也提到了一些可能的用来解决软件编写问题的方法,如使用高级编程语言,采用分时的概念,或者使用统一的编程环境等,但这些也只能在一定程度上时软件编写的过程多一些便利,而不是在本质上解决软件编写过程中遇到的各种问题。

    作者还介绍了一些将来可能用来解决软件编写问题的方法,如使用其他高级编程语言,采用面向对象编程的思想,人工智能,专家系统,自动化编程,图形编程,程序验证和工作站。这些都是一些不错的发展方向,期待未来在这些方面能有好的进展。

    最后作者提到了解决软件编写问题的根本方法,还是要靠好的程序设计员。最关键的还是要看人。

    就我来说,编写程序、软件时也因为种种原因,遇到各种令我头疼的问题,问题的来源也不外乎作者提到的那几种。像对这个程序整体的把握不到位,想把各个部分整合起来时又发现各种不一致等等,面对这些问题,也试着想各种方法去解决,不过往往到最后自己花了好长时间想来想去,找个同学问一下却很快解决了。感觉最后关键还是在自己的编程能力啊。

    2、  There Is a Silver Bullet

    by Brad J. Cox

    这篇文章,标题就算是与上面一篇交相呼应。作者认为有“银色子弹”。文中主要介绍了面向对象的编程思想,对面向对象的方法、技术作了很详细的介绍与说明。作者也将软件工程与许多其他方面作了比较来类比说明。

    对于面向对象的思想,上学期也专门有一门OO课程,对此也已经有了不少了解。就这学期软件工程的个人项目作业来说,也使用了面向对象的方法,要完成对指定目录的单词查询,通过将程序中的各个对象分开,针对这些对象来编写相应的程序结构,使程序结构清晰了,也很多程度上简化了我编写代码的过程吧。之后的结对编程作业也是,电梯调度程序,将程序按对象分成电梯类,调度类,乘客类等来逐个编写串联起来程序,整个过程能够比较有效地逐步实现完成。

    3、Big Ball of Mud

       by Brian Foote and Joseph Yoder

    文章主要介绍了“大泥球”——杂乱无章、错综复杂、邋遢不堪、随意拼贴的大堆代码。

    作者详细说明了“大泥球”产生的原因。

    (1)有些本来就打算只用一次的代码,草率随意的编写出来后,虽然结构混乱,但用了觉得挺好用的,就干脆继续用下去,知道出现问题时,就直接去改这部分的问题,而不是重新从头设计一个结构良好,规则有序的项目。久而久之,这就成为了一个“大泥球”。

    (2)有些尽管已经有清晰结构、明确框架的程序,在面对外界各种不断变化的需求时,也常常不得已慢慢的被破坏,最后甚至失控。

    (3)对于一个已经建立的项目,为了使它继续运作下去,对它的部分不断做出改变,导致其结构也就越来越混乱,最后也就成为了一个“大泥球”。

    这些原因,看上去也是不得已而为之,也是因为背后也很多不得已的因素。

    (1)时间。尽管可能一个项目已经设计好了一个很好的框架结构,但是往往没有足够的时间去实现,也就不得已只能选择一个平庸的架构。

    (2)代价。一个好的架构要花费很高的代价,而许多投资开发的人员却往往不乐于在这方面投入很多。

    (3)经验。一个好的架构对设计者有很高的要求,设计人员可能因为自己经验不足,难以设计出良好的系统架构。

    (4)能力。与经验类似,对设计者的能力要求也是一个重要因素。

    (5)可见性。架构往往在人们看不见的地方,很难直观的判断它的好坏,也就因此经常被人们忽略。

    (6)复杂性。应用的内在复杂性导致了体系结构的更加混乱复杂。

    (7)变化。当前设计的架构主要是针对当前的需求,未来的变化很难预测。

    (8)规模。项目的规模也让架构显得过于繁杂。

    对于“大泥球”问题,以前这方面考略的确实不多,也是因为自己之前没怎么参加编写过什么大的工程项目吧。也就不怎么能体会到一个比较大的程序的架构的重要性。但在这次的团队作业中,还是要尽量避免让我们团队的工程也成为一个“大泥球”吧。看了作者说到的“大泥球”产生的各种原因,我觉得,有些地方我们是要多注意的。因为我们团队做的项目是MOOC的手机客户端,而我们是将具体的工作分配给团队中的各个个人,因此编写过程中的交流协调就显得尤为重要,定时讨论沟通彼此的进展与完成情况,努力做到及时解决出现的问题,避免程序到最后混乱不堪。

    4、The Cathedral and the Bazaar

       from Wikipedia

    这个维基百科链接介绍了一本书——《The Cathedral and the Bazaar》。在这本书中,主要讨论了两种不同的自由软件开发模式。

    (1)大教堂模式。源代码在软件发行后公开,但在软件的每个版本开发过程中是由一个专属的团队所控管的。

    (2)市集模式。源代码在开发过程中即在互联网上公开,供人检视及开发。

    就我们团队而言,采用的算是大教堂模式。由我们团队开发负责工程的源代码。

    5、A Generation Lost in the Bazaar

       by Poul-Henning Kamp

    这篇文章中作者首先提到了10多年前,IT行业爆发式增长,而绝大部分——99%都如泡沫般破灭了,因为他们过于相信Raymond在《大教堂与集市》中鼓吹的集市模式,学习计算机编程时满足于表面,都认为“对付过去就行”,严重的缺乏基本功。作者也提到关于代码重用问题,举了不少例子,批判了在编写代码时盲目重用已有代码的行为。作者赞扬认同Brooks提出的观点,“质量,只有在某人对它负责时才有意义,而这个“某人”只能是一个人,不能是几个人——二重奏除外。”

    我们的团队工作中,因为我们采用的是大教堂模式开发,没有作者所说的第一个问题。虽然我们团队成员间的代码编写能力也各有差距,就我来说,编写代码的基本功也远远不够扎实。而关于代码重用行为,我们的项目是写一个安卓版的MOOC手机客户端,用作参考的有一个之前学长写的ios版的,两者之间在很多方面还是有不小的差距的,也不会盲目的用学长的代码。

    6、The Rise of ``Worse is Better''

    by Richard Gabriel

    文中作者首先介绍了编写代码的两种方法,MIT方法和New Jersey方法,或者说是,“the right thing”和“worse-is-better”,虽然两者的只是稍有不同,相较于前者,“worse-is-better”中实现过程的简单比接口更重要,且简单比正确更好一点,一致性和完整性也可以在一定程度上做出让步。

    作者认为,“worse-is-better”是一种更好的编程思想。

    (1)能够满足大部分设备,对设备要求低。

    (2)在小型机器和大型机器上都能移植。

    (3)有利于集成。

    7、Is Worse Really Better?

    by Richard Gabriel

    这篇文章与上面一篇是同一个作者,作者在这篇文章中,主要还是进一步说明了“worse-is-better”思想的优越性。能更快速的编写,能被移植到更多的电脑上,能更快地被接受并能不断提高,也更适合程序员。作者还通过C++的例子,更说明了它的优点。

    8、The New Methodology

    by Martin Fowler

    这篇文章主要介绍了敏捷型方法以及其“适应性”与“面向人”的特点。

    具体介绍我也就不展开了,我主要讲讲我们团队工作中用到的敏捷思想和做法。

    (1)SCRUM。我们将整个项目分为为期一周左右的三个迭代阶段,每个阶段都有工作的安排与计划,而在每个阶段中,定期举行会议讨论各自的工作进展与各自工作中遇到的问题。

    (2)结对编程。我们基本将一项任务交给两个人搭档完成,共同编写这一部分的代码,完成项目中这一部分的功能。

    9、Why Software Development Methodologies Suck

       by 乔梁

    文章针对一些认为软件开发方法论糟糕的论调,分析解释反驳了他们。首先作者提出来两条常用有效的法则——划小开发周期以及提升反馈效率。文中提到说明了要找合适的开发者以及软件项目开发困难的原因。最后,作者强调了开发团队中学习能力与适应能力的重要性。

    而从文章下面的评论中,大家也基本同意作者的观点,一个团队中的成员因为各自本身的各种差异,很难将工作安排分配地很好,但应用这些软件开发的方法论,或多或少能使团队更好地协作与运转,从而使软件开发的过程能够更有效率。

    要求阅读的文章中,关于“瀑布模型”的两篇文章不在这里,(还没有阅读),而软件工程方法论的另一篇文章链接好像有问题,也没阅读。下次找时间再看吧。

  • 相关阅读:
    ubuntu如何设置Python的版本
    PHP队列之理论篇
    ubuntu系統如何啟動root用戶登陸?
    如何绑定腾讯企业邮箱?
    VMware虚拟机安装Ubuntu并设置root登陆
    毕业生,如何选择高薪资与学习机会?
    如何改变memcached默认的缓存时间?
    PHP常用函数之数组篇
    如何安装并使用bower包依赖工具
    z-score
  • 原文地址:https://www.cnblogs.com/JinD/p/4093433.html
Copyright © 2020-2023  润新知