《梦断代码》(《Dreaming in Code》)读书笔记
《梦断代码》(《Dreaming in Code》)读书笔记
在看了这本书之后,我在豆瓣看到一段书评:做软件难。软件乃是人类自以为最有把握,实则最难掌控的技术。这本书揭示了好多软件开发的根本性问题。
里面有一些给我留下深刻印象的论述:
"Hello World " 程序能够唤醒每个程序员心中乐观的一面。既然能叫它说话,就能让它做任何事!为什么就是不能像造桥那样造软件?造桥和软件开发的区别在哪?软件开发领域惊人的熵,一方面在于所面向问题域的范围广泛,另一方面在于软件本身技术的高速进化发展,这两方面相互推动。桥梁工程、建筑工程以及其他传统工程行业发展至今,面向的问题域已经非常固定和精确。而软件行业所面对的问题域却是无时无刻在变化的。
软件开发是否能找到一个合适的方法论
布鲁克斯法
向已延误的项目中补充人力,只会使其继续延误。
布鲁克斯写道,软件开发者通常都是乐天派,他们认定每个缺陷都可以被迅速修正,且修正旧缺陷必能减少新缺陷的数量。
布鲁克斯发现,在实际开发中,编码只占软件项目开发时间的1/6, 有一半时间用于测试和修正缺陷。但只有少数项目经理会真正按照这种思路来安排开发人员的工作时间。
所谓“人月", 是一种科学管理概念,它假定生产力可被拆分为不连续、无差异、可替换的单元。
布鲁克斯观察到,“只有在任务能分派给许多互相之间无须沟通的工作者时,人和月才是可互换品。
“对于软件而言,项目各有差异、工具不断升级,每当团队中加入一个新组员,老组员就得放下手边的工作,帮助新组员进入角色,每位组员都要等待重新分派任务,好让新组员有事可做。在你意识到这一切之前,已经远远落后于进度了。也就是说,每次重新安排进度计划,都导致雇用更多人力,于是又不得不重新安排进度。
制作软件的大量工作受困于“序列约束",它限制了任务分解的程度:完成某项任务是处理其他任务的先决条件,这与人力投入多少无关。
布鲁克斯法则暗示最理想的开发组规模是一个人——无须停下工作与同事沟通的单个开发者。
乐高假设
指未来程序将由可复用的部件组合而成。部件将在全球范围内提供。虽然实际上这种假设不太容易实现,甚至不能实现。做好项目的关键在于复用,而不是重复发明。
祖尔测试
索伯斯基提出了祖尔测试( Joel Test),基于他自己的经验和“集体智慧",给出一套快餐式原则, 判断开发组织是否符合这条原则—— “不会叫人头疼的CMM”。
祖尔测试询问以下十二个问题:
1)Do you use source control? 你们使用源代码控制吗?
2)Can you make a build in one step? 你们一步就能完成构建吗?
3)Do you make daily builds? 你们做每日构建吗?
4)Do you have a bug database? 你们有缺陷数据库吗?
5)Do you fix bugs before writing new code? 你们会在写新代码之前修复缺陷吗?
6)Do you have an up-to-date schedule? 你们有与当前工作吻合的进度安排吗?
7)Do you have a spec? 你们有规约吗?
8)Do programmers have quiet working conditions? 程序员工作环境安静吗?
9)Do you use the best tools money can buy? 你们采用了市面上最好工具吗?
10)Do you have testers? 你们有测试人员吗?
11)Do new candidates write code during their interview? 你们会要求应聘者在面试时写代码吗?
12)Do you do hallway usability testing? 你们做走廊可用性测试吗?
“得12分为最佳,“索伯斯基写道, “11分还可以接受,得10分或更低就说明你们问题大了。其实多数软件组织只能得2、3分,他们迫切需要帮助,因为微软等公司一直都得12 分。”
工程师和艺术家
软件开发者是工程师还是艺术家。
这个问题,总结了软件开发过程中无数细节问题,这些问题统统没有答案。软件开发领域的圣战比宗教中的还要多。从项目管理到软件设计,只有模糊的建议,以经验性方法为主导,估算工期的方法叫“拍”: 一拍脑袋有了,一拍胸口干了,一拍大腿坏了,一拍屁股走了。往复循环!一地鸡毛!
以前有一篇文章叫“谦卑的程序员”,有这么一段话:“优秀的程序员很清楚自己的能力是有限的,所以他对待编程任务的态度是完全谦卑的,特别是,他们会象逃避瘟疫那样逃避‘聪明的技巧’”。
(一辆车刹车失灵,摔下悬崖,项目经历,硬件工程师和软件工程师的对话:软件工程师说了句,动手开干之前,我想应该把车推回山上,看看事故是否会重现!!!亮了)如果向程序员报告缺陷,他的第一反应是问你:“重现问题了吗?”--意思是说,你能确实让问题重现一次吗?如果答案是肯定的,事情就成了一半;如果是否定的,程序员就会耸耸肩,把责任推卸给硬件或者宇宙射线! 介个~~~我们遇到bug也先问能不能重现,不过目地多...
写程序,这句话值得驻足思量。那么编程是工程还是文学?是科学还是艺术?如何解决编程的双重问题成为改领域中许多人的困惑所在。、
高德纳在1984年获得图灵奖时说:’计算机编程是门艺术‘。艺术是什么,艺术是人类智慧所做之物,相对于源自天然或本能的行为而言。
《梦断代码》(《Dreaming in Code》)读书笔记的更多相关文章
- csapp读书笔记-并发编程
这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...
- CSAPP 读书笔记 - 2.31练习题
根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1) 属于第一种情况 sum = x ...
- CSAPP读书笔记--第八章 异常控制流
第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...
- CSAPP 并发编程读书笔记
CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《C#本质论》读书笔记(18)多线程处理
.NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- Web高级征程:《大型网站技术架构》读书笔记系列
一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...
随机推荐
- kubebuilder
https://book.kubebuilder.io/quick-start crd+operator 定义了CRD之后,下一步就是需要一个像Deployment Controller Manage ...
- 彻底搞懂Java中的Runnable和Thread
写在前面 今天在阅读ThreadPoolExecutor源码的时候觉得有些地方理解起来似是而非,很别扭!最后才猛然发现,原来是我自己的问题:没有真正理解Runnable和Thread的含义! 我之前对 ...
- 在SpringBoot中实践AOP编程
具体实践 Spring AOP是Spring框架中一个支持实现面向切面编程的模块,由于Spring Boot已经把Spring框架组合得非常好用,所以在基于Spring Boot框架的项目中实现AOP ...
- 记一次 splice 导致 io.Copy 阻塞的排查过程
记一次 splice 导致 io.Copy 阻塞的排查过程 简而言之,net.TCPConn 的 ReadFrom 零拷贝实现 splice 在 1.21.0 - 1.21.4 删除了 SPLICE_ ...
- locals和globals,函数的嵌套,nonlocal,闭包函数及特点以及匿名函数---day11
1.locals和globals 1.1locals 获取当前作用域中的所有内容 locals 如果在函数外,调用locals(),获取打印的是打印之前的所有变量,返回字典,全局空间作用域 loca ...
- python枚举之Enum模块
枚举是与多个唯一常量值绑定的一组符号(即成员).枚举中的成员可以进行身份比较,并且枚举自身也可迭代. 枚举成员名称建议使用大写字母 # 示例 from enum import Enum,unique, ...
- 深入理解maven及应用
在项目里用了快一年的maven了,最近突然发现maven项目在eclipse中build时非常慢,因为经常用clean install命令来build项目,也没有管那么多,但最近实在受不了乌龟一样的b ...
- 用linux命令cd 查找想要找的文件
如果想找文件Computer下的bin文件,在终端输入绝对路径 cd /bin,不能输入 cd /Computer/bin,因为文件目录不对 文件目录可以在文件的终端看到,/bin就是正确的目录 比如 ...
- VSCode 配置 Spring Boot 项目开发环境
神器IDEA在升级到2023之后越发卡顿, EDU邮箱也不能用了, 照现在这个JDK版本的升级速度, 神器不升级也不行, 需要开始物色替代品. 其它IDE我用得少, VSCode还是比较熟悉的, 可以 ...
- iview 动态表单验证 FormItem prop rules v-show 动态表单校验
iview 动态表单验证 FormItem prop rules v-show 重点1 用v-show 控制显示隐藏 重点2 prop 指定字段 重点3 :rules 动态指定规则 <div v ...