第一篇文章:No Silver Bullet: Essence and Accidents of Software Engineering
主要在说软件工程这件事很难以及为什么难。
软件工程难,难在复杂性、整合性、易变性和不可视性都是软件工程的本质问题,而非偶然问题。
在软件工程领域有几大突破:高级语言、分时系统和统一编程环境。但很可惜,这些突破解决的都是偶然性问题(Accidents)而非本质性问题。
有哪些技术可能成为解决问题的终极方案呢?模块化编程、面向对象编程、人工智能、专家系统、自动编程、图像编程、程序验证、环境和工具、工作站。这些都不堪大用。
对于解决概念问题有哪些尝试呢?购买而不是构建、要求细化和敏捷开发、伟大的设计师、令人激动的产品。这几个方面效果比较客观。
第二篇文章:There Is a Silver Bullet
与第一篇关联较大,观点相对第一篇乐观。
经济刺激对软件工程困境的解决有很大帮助。同时认为终极的解决方案是基于复用和互换的软件工业革命。
面相对象的重点在于将注意力从构建对象的过程转移到对象本身。这样我就可以像操纵现实中的物体一样操纵软件。
可复用的组件是重要的方式。达到像硬件那样的复用水平是最理想的状态。
同时作者作了更远的展望:非文字的编程,可以使每个计算机的使用者都成为编程者。
第三篇文章:Big Ball of Mud
讲述了虽然人们常讨论高级架构,但实际上很多软件的架构是Big Ball of Mud。这些架构很随意。而且很多经典的软件架构也很平庸。文章主要讨论为何会出现这一问题以及解决之道。
简单的一次性程序会产生大泥球。需求的变更和零碎的增长也会使设计良好的架构肢解成大泥球。
作者提供的解决之道有隐藏和重建
第四篇文章:The Cathedral and the Bazaar
大教堂模式:源码在软件发行后公开。
市集模式:源码在开发过程中即公开。
大教堂模式的软件开发让程式除错的时间大幅增加,因为只有少数的开发者可参与修改工作。市集模式则相反。
第五篇文章:A Generation Lost inthe Bazaar
“一坨脓包似的权宜代码,被一群盲目的根本不知IT架构为何物的所谓IT“专业人士”永无休止地复制着,粘贴着。”
“所谓质量,只有在某人对它负责时才有意义,而这个“某人”只能是一个人,不能是几个人——二重奏除外。”
第六篇文章:The Rise of "Worst is Better"
接口简单和实现简单,哪个有更高的优先级?作业以Unix和C为例证认为实现简单的优先级更高。
另一篇:Is Worse Really Better?
作者对之前的观点进行了反思,实现简单也可能造成结构的混乱。
第七篇文章:Managing the Development of Large Software Systems
瀑布模型是一个项目开发架构,开发过程是通过设计一系列阶段顺序展开的,从系统需求分析开始直到产品发布和维护,每个阶段都会产生循环反馈。核心思想是按工序将问题化简,将功能的实现与设计分开,便于分工协作。缺点阶段划分固定,文档较多。末期才能看到成果,风险大。不适应需求变化。
第八篇文章:The New Methodology
敏捷开发要求预见性和适应性。一些方法有设计和实现分离、设计兼容单元。具体的有XP、Scrum、Crystal、Context Driven Test、Lean Development、United Process等。
第九篇文章:Why Software Development Methodologies Suck
“为什么IT业的技能很难被掌握和度量?Daniel Kahneman说,掌握技能有两个基本条件:一个环境足够规律以便可预测;有机会通过长时间实践来学习掌握这些规律。”
读了这么多文章了,或精或泛,说说我的想法吧。
我们组是一个迭代开发的项目,而非从无到有的过程,很多上面文章说的地方虽然能够理解,但是实际体会不到。
在团队项目过程中最大的问题是文档太少。但因为本身规模不大,费点神还是可以handle。
再说一些项目之外的感受吧。感觉老师们都挺着急的,催着我们一直朝前走,让我们做一些完全没有知识基础的事情。于是只能边查边写,别人的代码或者dll拿来用一用,完全不明白内部的原理,但也应了组件复用的方法论。课堂上也讲了一些软件工程相关的事情,但和实际的coding没有很大关系。不听课一样可以完成团队项目,可能这也是为什么听课的人越来越少。
这学期SE课的跟上学期的OO课给我的感觉很像,就是没学到东西。很多理论还没讲明白,就让写代码。不得不再次吐槽OO课,UML居然就讲了一节课,以至于编译课上老师问大家学过UML么,大家齐声说没学过。看来大家的感受都差不多。
另外,我们不是软件工程系的学生,大学也不是职业技能培训所。感觉所有的人都很着急,css会不会?jsp会不会?php会不会?没学过当然不会啦。学的匆匆忙忙,能搞完作业再说。对于像搞清来龙去脉的人来说心里一团浆糊的感受真的很不爽。感觉老师让看的文章也不是很实际。让没有项目经验的学生去看这些在软件工程方法论层次上讨论的文章,我们也只能提取提前段落大意中心思想了,共鸣真的没有。
目前的感觉,软件工程真的是个坑啊。