《代码大全2》读书笔记 Week 1
《代码大全2》第一、二、三章
隐喻思维在西方是一个热门的话题,隐喻的认知功能在各个学科正受到越来越多的重视,依照我的理解,其实就是以众所周知或者理解主体熟悉的事物为符号去将新事物、新概念具象化,与打比方的认知方式有同工异曲之妙。在《代码大全2》第二章,作者Steve McConnell主要列举了4种针对软件工程的隐喻:书法(写作代码)、耕作(培养系统)、牡蛎养殖(系统生长)、建造新建筑(建造软件)。作者认为前两者已无法、或者说从来都不能准确描述软件工程,书法暗示软件开发是一项代价昂贵的试错过程,而耕作大大低估了开发者对软件构建的自主控制。而后两种隐喻得到作者较大的认可。
牡蛎养殖隐喻的本体是增量式开发,也就是在开发前期先生成一个尽量简单、但能运行的版本,不必接受真实的输入或对数据进行处理,重点在构造软件的整体框架以支撑逐渐被完善,也就是“生长”的系统。根据个人经验,这种开发方式对于较大的工程有很大裨益,可以让开发者对整个软件的结构有比较清晰的认识并降低修改的成本。最后一种隐喻——建构软件本质上是适当的多层次规划,它强调“因地适宜”,根据软件工程的类型和用户的需求等等做出多个层次、循序渐进的规划。
我非常赞成这一章中智慧工具箱的提议。学习更多的语言和分析方法可以防止我们在遇到问题时不必要地浪费时间。
第三章用了一整个章节来阐述构建软件的前期工作,如需求分析和架构设计等,的必要性和重要性。书中让我很有共鸣的一个原则是令发现错误的时间尽量接近引入错误的时间,因为错误在开发过程中会引发链式效应,令后期修复的代价不断积累。另一个让我印象深刻的是作者对前期需求分析和后期应对需求变更的建议。开发者和客户都会在与软件日积月累的接触中不断地调整自己的认知和相应的需求, 所以前期不能让预设的需求束缚住构建过程,有必要留有余地,而在构建过程中,只接受最有价值的新需求。同时,使用能适应变更的开发方法,例如演进原型法和演进交付法能够大幅提升对需求做出的响应的能力。
《代码大全2》读书笔记 Week 1的更多相关文章
- 代码的未来读书笔记<二>
代码的未来读书笔记<二> 3.1语言的设计 对Ruby JavaScript Java Go 从服务端client以及静态动态这2个角度进行了对照. 这四种语言因为不同的设计方针,产生了不 ...
- 《第一行代码 android》 读书笔记:找出当前界面对应的Activity
在android开发中找出当前界面对应的Activity,步骤如下: 新建一个BaseActivity继承自Activity,然后在BaseActivity中重写onCreate()方法,通过getC ...
- 《Linux命令行与shell脚本编程大全》- 读书笔记1 - 基本的bash shell 命令
这本书买了好久了,除了刚到手的那几天翻看了一下以外,竟然到今天都没有看过.突然想要写一个shell脚本,发现什么也不会,是时候开始学习了,今天先把最简单的一章再看一遍顺便做一些笔记,明天继续后面的! ...
- 【代码大全2 学习笔记】ADT 抽象与封装
ADT abstract data type 抽象数据类型 要理解面向对象编程,就要先理解ADT这个概念.不懂ADT的程序员开发出来的类只是名义上的"类"而已--只是单纯的把一些相 ...
- 《Linux命令行与shell脚本编程大全》- 读书笔记3 - 理解shell
当用户登录终端的时候,通常会启动一个默认的交互式shell.系统究竟启动哪个shell,这取决于用户配置.一般这个shell都是/bin/shell.默认的系统shell(/bin/sh)用于系统sh ...
- 《Linux命令行与shell脚本编程大全》- 读书笔记2 - 更多的bash shell命令
更多的bash shell命令 想检测进程,需要熟悉ps命令的用法.ps命令好比工具中的瑞士军刀,它能输出运行在系统上的所有程序的许多信息.默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户 ...
- 《Linux命令行与shell脚本编程大全》读书笔记
第一章:初识Linux 1.linux可划分为四个部分:内核.GNU工具.图形化桌面环境.应用程序 2.内核主要负责:系统内存管理.软件程序管理.硬件设备管理.文件系统管理 3.内核的系统内存管理,有 ...
- 《代码大全》阅读笔记-33-个人性格(personal character)
很多好的编程做法都能减轻你的大脑灰质细胞(指脑力)的负担. 将系统"分解",是为了使之易于理解("设计的层次"). 进行审查.评审和测试正是为了减少人为失误.如 ...
- 《代码大全2》读书笔记 Week8
这一周博主阅读了<代码大全2>第11章至第13章,第三部分——"变量"就结束了,第四部分作者将转入语句的讨论. 第十一章作者详细阐述了变量名的有效命名规则,第十二和十三 ...
- 《代码大全2》读书笔记 week 7
博主终于继续更<代码大全2>了 (*´・ω・`)⊃,课上老师一再强调读书笔记要写出自己的心得不能简单摘抄,所以我现在基本上只会写一下自己在阅读过程中印象深刻或者有发散思考的地方,字数可能 ...
随机推荐
- 几种激活Profile的方式
方法一: 选择spring.profiles.active spring.profiles.active=prodspring.profiles.active=dev 方法二: 选择spring.pr ...
- vue,一路走来(17)--底部tabbar切换
<router-link></router-link>存在router-link-active属性,那么底部tabbar切换就简单多了.不会再出现刷新回到第一个的bug. &l ...
- 前端框架和其他:1.谈谈你对http协议的认识。
1.http是一种网络数据传输协议 hype text transfer protocol-超文本传输协议 2.传输什么:超文本(html文档) 3.协议遵守方,浏览器和服务器 4.一般的传输流程是 ...
- 通过注释查找mysql的表名
通过注释查找mysql的表名 select * from INFORMATION_SCHEMA.columns where COLUMN_NAME Like '%placement%';
- SpringBoot---提供的自动配置
1.自动配置的ViewResolver 1.1.ContentNegotiatingViewResolver 1.2.BeanNameViewResolver 1.3.InternalResource ...
- CPU缓存
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11520840.html 由于CPU发展的速度远快于内存的发展,CPU的处理速度就比内存的访问速度快得多 ...
- MongoDB笔记【2】——基本概念和基本指令
- 基本概念 数据库(database) 集合(collection) 文档(document) - 在MongoDB中,数据库和集合都不需要手动创建,当我们创建文档时,如果文档所在的集合或数据库不存 ...
- Java反射及注解学习- 反射的使用 - JDK动态代理
代理模式基本概念:1.代理模式的作用:为其他对象提供一种以控制对方的访问在某种情况下,一个客户不想或者不能直接引用另一个对象,代理可以在客户端和目标对象之间起到中介的作用代理的角色:(1)抽象角色:声 ...
- Review: 9-13 July
9 July 并查集 int fa[]; for (int i=1; i<=n; ++i) fa[i]=i; int f(int x){return fa[x]==x?x:fa[x]=f(fa[ ...
- [CSP-S模拟测试]:Revive(点分治)
题目背景 $Sparkling\ ashes\ drift\ along\ your\ flames \\ And\ softly\ merge\ into\ the\ sky$ 题目传送门(内部题1 ...