《代码大全2》第一、二、三章

隐喻思维在西方是一个热门的话题,隐喻的认知功能在各个学科正受到越来越多的重视,依照我的理解,其实就是以众所周知或者理解主体熟悉的事物为符号去将新事物、新概念具象化,与打比方的认知方式有同工异曲之妙。在《代码大全2》第二章,作者Steve McConnell主要列举了4种针对软件工程的隐喻:书法(写作代码)、耕作(培养系统)、牡蛎养殖(系统生长)、建造新建筑(建造软件)。作者认为前两者已无法、或者说从来都不能准确描述软件工程,书法暗示软件开发是一项代价昂贵的试错过程,而耕作大大低估了开发者对软件构建的自主控制。而后两种隐喻得到作者较大的认可。

牡蛎养殖隐喻的本体是增量式开发,也就是在开发前期先生成一个尽量简单、但能运行的版本,不必接受真实的输入或对数据进行处理,重点在构造软件的整体框架以支撑逐渐被完善,也就是“生长”的系统。根据个人经验,这种开发方式对于较大的工程有很大裨益,可以让开发者对整个软件的结构有比较清晰的认识并降低修改的成本。最后一种隐喻——建构软件本质上是适当的多层次规划,它强调“因地适宜”,根据软件工程的类型和用户的需求等等做出多个层次、循序渐进的规划。

我非常赞成这一章中智慧工具箱的提议。学习更多的语言和分析方法可以防止我们在遇到问题时不必要地浪费时间。

第三章用了一整个章节来阐述构建软件的前期工作,如需求分析和架构设计等,的必要性和重要性。书中让我很有共鸣的一个原则是令发现错误的时间尽量接近引入错误的时间,因为错误在开发过程中会引发链式效应,令后期修复的代价不断积累。另一个让我印象深刻的是作者对前期需求分析和后期应对需求变更的建议。开发者和客户都会在与软件日积月累的接触中不断地调整自己的认知和相应的需求,     所以前期不能让预设的需求束缚住构建过程,有必要留有余地,而在构建过程中,只接受最有价值的新需求。同时,使用能适应变更的开发方法,例如演进原型法和演进交付法能够大幅提升对需求做出的响应的能力。

《代码大全2》读书笔记 Week 1的更多相关文章

  1. 代码的未来读书笔记<二>

    代码的未来读书笔记<二> 3.1语言的设计 对Ruby JavaScript Java Go 从服务端client以及静态动态这2个角度进行了对照. 这四种语言因为不同的设计方针,产生了不 ...

  2. 《第一行代码 android》 读书笔记:找出当前界面对应的Activity

    在android开发中找出当前界面对应的Activity,步骤如下: 新建一个BaseActivity继承自Activity,然后在BaseActivity中重写onCreate()方法,通过getC ...

  3. 《Linux命令行与shell脚本编程大全》- 读书笔记1 - 基本的bash shell 命令

    这本书买了好久了,除了刚到手的那几天翻看了一下以外,竟然到今天都没有看过.突然想要写一个shell脚本,发现什么也不会,是时候开始学习了,今天先把最简单的一章再看一遍顺便做一些笔记,明天继续后面的! ...

  4. 【代码大全2 学习笔记】ADT 抽象与封装

    ADT abstract data type 抽象数据类型 要理解面向对象编程,就要先理解ADT这个概念.不懂ADT的程序员开发出来的类只是名义上的"类"而已--只是单纯的把一些相 ...

  5. 《Linux命令行与shell脚本编程大全》- 读书笔记3 - 理解shell

    当用户登录终端的时候,通常会启动一个默认的交互式shell.系统究竟启动哪个shell,这取决于用户配置.一般这个shell都是/bin/shell.默认的系统shell(/bin/sh)用于系统sh ...

  6. 《Linux命令行与shell脚本编程大全》- 读书笔记2 - 更多的bash shell命令

    更多的bash shell命令 想检测进程,需要熟悉ps命令的用法.ps命令好比工具中的瑞士军刀,它能输出运行在系统上的所有程序的许多信息.默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户 ...

  7. 《Linux命令行与shell脚本编程大全》读书笔记

    第一章:初识Linux 1.linux可划分为四个部分:内核.GNU工具.图形化桌面环境.应用程序 2.内核主要负责:系统内存管理.软件程序管理.硬件设备管理.文件系统管理 3.内核的系统内存管理,有 ...

  8. 《代码大全》阅读笔记-33-个人性格(personal character)

    很多好的编程做法都能减轻你的大脑灰质细胞(指脑力)的负担. 将系统"分解",是为了使之易于理解("设计的层次"). 进行审查.评审和测试正是为了减少人为失误.如 ...

  9. 《代码大全2》读书笔记 Week8

    这一周博主阅读了<代码大全2>第11章至第13章,第三部分——"变量"就结束了,第四部分作者将转入语句的讨论. 第十一章作者详细阐述了变量名的有效命名规则,第十二和十三 ...

  10. 《代码大全2》读书笔记 week 7

    博主终于继续更<代码大全2>了 (*´・ω・`)⊃,课上老师一再强调读书笔记要写出自己的心得不能简单摘抄,所以我现在基本上只会写一下自己在阅读过程中印象深刻或者有发散思考的地方,字数可能 ...

随机推荐

  1. 【知识强化】第四章 指令系统 4.3 CISC和RISC的基本概念

    那么我们进入本章的最后一节,CISC和RISC. 我们先来回顾一下,我们这一章的一个概览.我们之前已经把指令格式和指令的寻址方式都讲完了,这两部分呢是本章的一个重点.而本章的这一部分,CISC和RIS ...

  2. [置顶]unity常用开发套件

    维京人骨骼动画制作(Unity 2D Animation资源包使用指南) 维京人骨骼动画制作2(Unity 2D IK资源包使用指南) -------------------------------- ...

  3. java 大数运算,高精度模板

    转自:https://blog.csdn.net/stffer/article/details/46382949 有修改 关于BigInteger类更详细的用法请移步官方文档 package prac ...

  4. ftp 上传文件时报 cant open output connection for file "ftp://129.28.149.240/shop/web/index.html". Reason: "550 Permission denied.".

    原因:没有写入权限 修改权限即可 vsftpd.conf vim /etc/vsftpd.conf write_enable=YES #加入这句

  5. python 利用subprocess调用cmd命令程序,并正确输出控制台的输出中文

    平台Python3.7 1.利用控制台运行程序后在控制台会输出中文提示,但是用python调用subprocess.run函数后返回的输出是乱码,于是,解决方法是用subprocess.check_o ...

  6. MySQL学习笔记_时间,多表更新,数据库元数据

    MySQL技术内幕一.MySQL基础知识1.1.显示表中的列SHOW COLUMNS FROM order_info like 'order%'1.2.显示表SHOW TABLES LIKE 'ord ...

  7. B/S架构和C/S架构介绍

    一.C/S架构 C/S架构及其背景 C/S架构是一种比较早的软件架构,主要应用于局域网内.在这之前经历了集中计算模式,随着计算机网络的进步与发展,尤其是可视化工具的应用,出现过两层C/S和三层C/S架 ...

  8. postgre存储过程或者视图中"::"双冒号是什么意思

    双冒号是类型转换的意思. 比如: '2019-09-10'::date

  9. Linux 多个cpp文件的编译(Makefile)

    打包so文件: CC = g++ CFLAGS=-Wall -O2 -fPIC TARGET = libbg.so SRCS := $(wildcard *.cpp) OBJS := $(patsub ...

  10. vue项目轮播图的实现

    利用   Vue-Awesome-Swiper插件来做轮播效果,github地址:https://github.com/surmon-china/vue-awesome-swiper 安装 npm i ...