阅读后感

There is a silver bullet or no silver bullet

link:No Silver Bullet. There is a silver bullet
Brooks在"No Silver Bullet."借用将软件开发过程中的复杂性,困难性比作传说中在月圆之夜去袭击人类“人狼”,普通子弹都伤不到也打不死它,只有一种用银子作成的”银弹“才能杀死他。并得出结论:

没有任何技术或管理上的进展,能够独立地许诺十年内使生产率、可靠性或简洁性获得数量级上的进步

这看上去有些悲观,初次看也是难以理解,只有“银弹”可以解决问题,而十年之内有找不到银弹,那得出的结论就是这个问题无解。在There is a silver bullet中,作者用托勒密扩展的亚里士多德宇宙学模型(宇宙以地球和人类为中心)做了说明,我们的以流程为中心的软件开发模型和宇宙学模型一样根深蒂固,我们可以对模型进行调整来消除一些差异或者偏差,但是没有想日心说这样一个性能的范式提出来简化这一切,要靠程序员不断订正来克服当今软件开发是不可能在数量级上取得突破,所以需要一场变革。Brad J. Cox认为我们需要一场文化变革,

It was not a new process, some whiz-bang computer or programming language for computing epicycles more efficiently. It was a cultural change, a paradigm shift, a "mere" shift in viewpoint as to whether the heavens rotate around the earth or the sun. 

而这场文化革命,或者说这个“银弹”是可重用的软件构件。
没有银弹,Brooks在《人月传说》中说的很明确,也很有道理,看似悲观,但是是事实。我们本科的程序基本都是为自己使用而构建的,没有开发中的问题,始于实现而终于实现。在软件开发这里,开发的模式,就开发流程一个整体实现不可能,划分阶段又是模糊的,而且每个项目,不可能用单一的方法,屡试不爽。有各种方法综合运用,才是解决之道;而一到综合运用,就和开发经验等多种因素有关,所以这个杀死狼人的终极武器,还是不能被开发出来,适应一切。在有银弹中提到的软件构件的可重用,我觉得这也许是铁弹,铜弹,因为“没有银弹”说的是不能获得数量级上的进步,没有说不会进步,在alpha阶段,我们的程序有些是仿写的,有些是复用的,而用julia的Flux本身不就是在复用性的一种体现吗?所以如果按照我对“复用性”的可能“错误”的理解的话,还是没有银弹。

A BIG BALL OF MUD

A BIG BALL OF MUD 中提到

A BIG BALL OF MUD is haphazardly structured, sprawling,
sloppy, duct-tape and bailing wire, spaghetti code jungle.

产生大泥球的缺点是:局部与全局,重要与不重要没有了明显的界定,所有的信息看上去都很重要,可重用和修复性很难得到控制,系统的整体结构可能永远不会很好地定义。
原因是:用户的需求或者编程的要求是在不断地变化的,程序员解决问题的代码是一次性代码等等诸多原因。
改进是:You need to deliver quality software on time, and under budget.
Therefore, focus first on features and functionality, then focus on architecture and performance.

在alpha阶段开始的时候,还好我们的有过讨论,确定了框架,再加之有指导性的开展工作,我们没有开发出大泥球。我们将数据处理,bi-lstm模型,main框架,evaluate四部分拆分来实现,每天有讨论,避免了我们开发出大泥球,我们上下接口是商量好的,如有变动,双方线下也会调整好。明确的分工在需求和编程要求变化后,可以及时的调整。我们的系统没有变成大泥球的也有一个原因是,我们的任务偏向学术方向,用户是潜在的,或者我们就是用户本身,需求规定好之后不会变化。但是我们模型错了之后,就有点像泥球啦,每个部分似乎都有出错的可能,而且几个模块内部的实现也有混乱。也许是A BIG BALL OF MUD的理解没有get 到,或者我们的项目julia for AI本身的选题避开了泥球中的一些问题。

CatB – Cathedral and the Bazaar

CatB – Cathedral and the Bazaar介绍了教堂和集市两种开发模式:

The Cathedral model, in which source code is available with each software release, but code developed between releases is restricted to an exclusive group of software developers. GNU Emacs and GCC were presented as examples.
The Bazaar model, in which the code is developed over the Internet in view of the public. Raymond credits Linus Torvalds, leader of the Linux kernel project, as the inventor of this process. Raymond also provides anecdotal accounts of his own implementation of this model for the Fetchmail project.

教堂模式注重版本的更替,一个开发团队负责一个版本,源码团队内部共享;而集市模式是代码开源给公众。
我们的开发模式符合集市模式,源码公布在github上, 我们有alpha和beta两个版本,但是beta是在alpha的基础设置上进行改进和完善,我们的开发团队只有一个,期间也只发生过人员的流动,所以我们的模式更符合The Bazaar model。

方法的好和坏

link The Rise of Worse is Better
Is Worse Really Better

作者首先提到了”the right thing“的特点:

简单性:在实现和接口中,设计必须简单。接口的简单性比实现更重要。   

正确性:在所有可观察的方面,设计都必须正确。一丝的错误都是不允许的。 

一致性:设计不能不一致。为了避免不一致性,可以稍微减少一些简单性和完整性。
     一致性和正确性同样重要。

完整性:实际上,设计必须覆盖许多重要的情况。应该覆盖可能出现所有情况。
      简单性不可以过度地削弱完整性。

他又提到了“worse-is-better”的设计原则:

简单性:在实现和接口中,设计必须简单。相对于接口而言,实现的简单性更为重要。
      简单性是设计中最重要的注意事项。 

正确性:在所有可观察的方面,设计都必须正确。正确性的重要程度仅次于简单性。 

一致性:设计不能过于不一致。在某些情况下,为了实现简单性可以牺牲一致性,
       但放弃设计中处理非常见情况的那些部分比引入实现复杂性或不一致性更好。

完整性:实际上,设计必须覆盖许多重要的情况。应该覆盖可能出现所有情况。为保证其它质量,
       可以牺牲完整性。实际上,只要危害到实现简单性,就必须牺牲完整性。如果保证了简单性,
       可以牺牲一致性以实现完整性;尤其是在接口的一致性没有价值的情况下,。 

可以看出来他是在强调简单性,我们的设计必须要做到简单,重要性高于正确性,必要时可以牺牲一致性和完整性。我们在实现的时候,过多关注的是正确性,简单性以这一点我们并没有去考虑,只是在实现过程中,自己会不自觉的注意。文中提到的为保证质量可以牺牲完整性这一点我是同意的,我们的需求可能不止一个,如果我们只完成了其中的几个,但是可复用性和可维护性高是完全可以的。比如我们就只是先把框架搭建起来,并没有去直接修改先把模型的准确率做到70%以上。我们首先要让我们的模型跑得通,其实还必须保证正确性,在一切基础工作都OK的情况下,修改模型或者训练参数来提高准确率。模型的简单性看似是不涉及,但其实用julia来实现NER本来就是出于简单性,由于julia的开发速度与python一样,运行速度又和c一杨,我们选择在julia上是实现,框架是很的清晰的。这篇文章我们可以借鉴的是,我们下来可以在接口上做的更简单,实现用到的数据结构可以在简化。

原文地址:https://www.cnblogs.com/enshengshi/p/10207116.html

时间: 2024-10-09 18:36:55

阅读后感的相关文章

构建之法:1、2、3章阅读后感

第一章 第一章中主要说的是软件工程的一些概论.阅读完<构建之法>的第一章,初步了解了开发软件的大致过阶段,了解了软件工程的特性,明确了开发软件的目标.在这章节中,解析了软件工程的概念,从实际软件开发的各个阶段出发,详细地分析了软件开发的各个阶段,推翻了以前我们单纯的打完代码后就算编程完成的想法.初步了解了软件工程的目标,个人与团队合作之间差别. 问题:软件行业前景? 第二章 第二章涉及到了一个新名词:单元测试.书中提到单元测试对一个好的软件起着重要的作用,一个好的单元测试应该是准确.快速地保证

《解忧杂货店》阅读后感

读书是一种乐趣,本文是阅读<解忧杂货店>而得到的一些感想 作为一个一直活在互联网的IT从业者,从这本书中领悟到了很多非专业外的知识,同时又可在书中探索出一些互联网的创意想法.我想这就是为什么要读书的原因,读书能扩展自我的知识面积,同时又能够将自身的研究方向与其他方向思维进行结合,从而可以升华自身的内在能力. 从小说整体看 整个故事都是从杂货店为支点,人来人往而永远不变的就是杂货店,一个愿意无私奉献,无时无刻帮人解决烦恼的杂货店.在看完本书以后,有人会问,真的有这种杂货店吗?即使有那么他的利益驱

管理的最低要求(一)

这是我微信订阅号里面"道哥的黑板报"发表的一片文章,阅读后感觉受益匪浅,因此转载过来与大家分享.全文如下: 最近一年接触到了很多成功的创业者.大公司高管,他们身体力行的教会了我怎么做公司,怎么带团队.我觉得在这些方面我仍然有很多的不足和需要学习的地方.他们的一些心得与经验,我也会用在工作中,不断的印证和实践.我想逐渐的把这些经验心得总结下来,沉淀成自己的东西. 这几天我总结了十六个字,我认为是作为管理者必须要达到的基本要求.做不到的管理者基本都是不及格的.但当我用这个标准去衡量我遇到&

个人阅读&amp;个人总结

个人阅读作业+总结 助教推荐的那些文章都是软件工程上的经典文章,阅读后感受到软件工程本身的深度,之前学习的软件工程都只是皮毛之中的皮毛而已.随着软件规模的越来越庞大,软件工程已经成为了软件开发中的必备知识.在软件工程中有很多前人的思考和经历在其中,细细品读下来还是十分有趣.有用的. No Silver Bullet - Essence and Accidents of Software Engineering - Brooks 链接 所有的软件在构建过程中都会遇到根本性的任务:组成抽象软件实体的

阅《大道至简--软件工程实践者的思想》,读后感

大道至简这本书总体来说比较通俗易懂,同时在说明自己观点的时候引用了许多古代的例子,更加的形象生动有趣,可读性很强.       前几章的主要思想如下:       程序=算法+结构+方法:编程的第一要务是先把事情分析清楚,把事件先后的逻辑关系和依赖关系搞清楚,然后再去写代码实现.代码是不存在的,存在的只是思想.其实算法是对一个程序的逻辑实现的描述,而结构是逻辑实现所依附的数据实体.在所有算法的描述中,有且仅有顺序.分支.循环这三种执行逻辑.而且对于编程语言来说只有喜不喜欢的问题,没有会不会的问题

《活着》读后感4500字

<活着>读后感4500字:听说张艺谋在转型拍商业电影前,拍过一部电影<活着>,被誉为是他拍得最好的电影.想看已经有大半年了,却一直没看.年底有空,想培养一下“艺术细胞”去学习下,看了下电影内容简介,好像内容很悲惨,不忍心看.挡不住电影原著--余华写的<活着>盛名的诱惑,想着文字的冲击力应该没有电影画面那么直观强烈,就打开书本,可没想到小说内容更悲惨,太扎心了.一个泪腺萎缩,神经大条的中年人,深夜一气读完,数次眼泪喷涌而出.读完后首先不禁有些愤慨作者这么决绝残忍的让福贵一

读书与读人生-《如何阅读一本书》的优秀读后感2300字

读书与读人生-<如何阅读一本书>的优秀读后感2300字:我一直觉得读书读到最后就是读人生,你的我的,所以我第一次看到这本书的时候,我其实蛮鄙夷的,我们自己怎么读书,还需要有专业的指点吗?就算作者指点的很专业,那每一个人的人生也是也是不一样的,所以这本书被我凉在书橱的一个角落很久,直到我不得不好好读一遍的时候,这一读就是读额好几遍.从这本书来说,这本书是通过层层递进的方式告诉我们要如何刷选书籍,如何进行分析阅读,简单的说也就是最后挑选出我们自己的阅读书单,第二部分作者就如何精读做了详细的介绍,尤

03-20 《构建之法》第1,2,3章读后感

第一章读后感: 看了大概了解软件从一个想法到最终成品的一个过程.软件先是由一个想法引出的,有那个想法,你需要一个工具去做什么,然后根据自己想要的功能大概做一个能实现基本功能的软件,再对客户提出的要求进行完善,实现了功能后对软件进行维护.还有做的软件要符合客户的要求,而不是只根据自己的想法去做,要满足大部分的需要,满足客户的需求,在使用过程中发现有bug对其进行修复. 软件工程在社会发展处于什么地位,发展潜力在未来究竟有多大? 第二章读后感: 看完第二章后知道软件是需要单元测试的,之前对这个没什么

《大道至简》第一,二章读后感

注:我忘记老师要求什么时间之前提交了,之所以发了这么晚是因为我觉得要写读后感的话最好还是把一本书读完了再写读后感比较好.但是直到今天晚上我发现,由于我的变成基础并不扎实,编程的造诣也并不深,所以在这短短几天之内根本不可能读完这本书.当然囫囵吞枣不求甚解倒是没问题,但是要大致读懂意思却是几乎不可能.所以只好写读后感写到第一二章. 第一章标题是编程的精义,讲的是如何用最朴素最大众最傻瓜的方法编写出一个程序.以“愚公移山”的故事贯穿全篇.愚公首先有用户需求,即被两座大山挡住了门.有具体的目标,也就是搬