《梦断代码》(《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高级征程:《大型网站技术架构》读书笔记系列
一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...
随机推荐
- 类型判断,代码块,流程控制及循环---day05
1.类型判断isinstance 用来做判断类型 语法: 用法一: isinstance(要判断的值,要判断的类型) 返回的是真或者假 用法二: isinstance(要判断的值,(可能的类型))如果 ...
- django学习第十五天-modelform的补充
基于form组件和modelform组件改造图书管理系统 详情可以去图书管理系统分类中查看 基于form组件和modelform组件改造图书管理系统 modelform的补充 class BookMo ...
- 【LeetCode二叉树#00】二叉树的基础知识
基础知识 分类 满二叉树 如果二叉树中除了叶子结点,每个结点的度都为 2,则此二叉树称为满二叉树. 完全二叉树 除了底层外,其他部分是满的,且底层从左到右是连续的,称为完全二叉树 满二叉树一定是完全二 ...
- picgo如何设置又拍云图床
1. 打开又拍云官网.正常注册,并且实名认证. 2. 选择产品,然后选择云存储,激活后进入控制台. 3. 创建云存储服务.注意服务名称.后续会用到 4. 新建一个操作员,并且给权限全部打勾. 添加好操 ...
- DataGear 自定义数据可视化看板的图表主题
DataGear 看板的 dg-chart-theme 属性,提供了简单且强大的自定义图表主题功能. 通常,只需要设置其color.backgroundColor.actualBackgroundCo ...
- 【Azure 事件中心】从Azure Event Hub中消费数据,如何查看当前消费客户端消费数据的Offset和SequenceNumber呢(消息偏移量和序列号)?
问题描述 当通过Azure Event Hub SDK消费Event Hub中的消息时,必须指定一个Storage Account(存储账号)用于保存 Checkpoint (检查点). 比如在C#代 ...
- Python-Json异常:Object of type Decimal is not JSON serializable
源起: 使用python分离出一串文本,因为是看起来像整数,结果json转换时发生异常:TypeError: Object of type Decimal is not JSON serializab ...
- Java 常用类 String的使用
1 package com.bytezero.stringclass; 2 3 import com.sun.tools.javac.Main; 4 import jdk.jfr.StackTrace ...
- C++ STL之 map 学习笔记
•何为 map? map 是 STL 的一个关联容器,它提供一对一的数据处理,map 中存放的是一个 key-value键值对,其类型可以自己定义: 第一个可以称为关键字,每个关键字在 map 中只能 ...
- Error running 'Tomcat 8.5.27': Unable to open debugger port (127.0.0.1:2887): java.net.SocketException "Interrupted function call: accept failed"-火绒安全搞的鬼
火绒安全-导致的tomcat8启动异常 一.问题由来 最近有个朋友在学习使用IDEA配置tomcat 8.5.99的时候,使用一切都正常,直到学习到使用Servlet实现文件 下载功能的时候,出现问题 ...