本书又名《软件随想录 卷1》,下面只是第一和第二部分的笔记总结,关于“第三部分joel对常态问题的遐想”暂时没有阅读。
  • 回归本原

1.字符串连接函数 施勒梅尔算法

void strcat(char* dest, char* src)
{ while (*dest) dest++; while (*dest++ = *src++);
} 

如果你要对一个字符串做上百次连接的运算,每一次都要从开头遍历,这就是施勒梅尔算法,它会让你的程序运行慢上一个级别。

如果返回最后一个字符的指针,那就快很多了。

char* mystrcat( char* dest, char* src )
{ <span style="white-space:pre">   </span>while (*dest) dest++;
<span style="white-space:pre"> </span>while (*dest++ = *src++);
<span style="white-space:pre"> </span>return --dest;
} 

2.c语言和pascal语言的字符串处理

c语言判断字符串的长度是在最后一个字符的后面加特殊字符"\0",而pascal是在第一个位置存字符串的长度。

3.内存分配的区块

4.xml和数据库的查询

xml和数据库的查询速度有巨大的差异

  • 乔尔测试

补充:源代码管理系统:svn和github   Git和SVN之间的五个基本区别 - 文章 - 伯乐在线
  • 软件开发者不可不知的Unicode和字符集知识。
  1. UTF-16 UTF-8
  2. 不能确定编码的字符串没有任何意义
  3. c语言宽字符 L
  • 轻松撰写功能规格书
     撰写功能规格书的3大理由:
  1. 更改技术文档比更改程序代码容易的多
  2. 节省沟通的时间
  3. 没有详细的说明,就无法制定进度表
规格书应包含的部分:免责声明,作者,使用场景,非目标,概述,细节,待解决的问题,多角度的注解,规格书需要与时俱进。
谁来写规格书?
人月神话里说一个卓越的软件工程师比100个糟糕的程序员加起来作用还大,但是考虑到人件的影响,我们需要一个项目经理来领导其余的程序员工作。
如何招到靠谱的项目经理?不要招典型的程序员,不要招营销人员,不要让程序员听命于项目经理。
规格书写作技巧:要幽默(防止没人读),易于理解,不要过多的技术术语,如果有,过于学术化的名词要有注解。注意排版。慎用模板。
  • 轻松掌握软件开发进度
1.使用excel
2.保持简单
3.每个功能点应该分成几个子任务
4.只有程序员才能准确的预估时间
5.细分任务,每个任务以小时为单位。
6.记录原始和当前的时间估计,训练自己的时间估计准度。
7.每天更新实际用时。
8.把休假考虑在内
9.把调试代码的时间也考虑在内
10.把集成时间考虑在内
11.预留缓冲时间
12.不要压缩程序员的预估时间
13.缩减功能以减少开发时间
  • 修复bug
1.尽可能收集bug的所有信息
2.衡量bug的成本与收益
3.算出修复所有bug的价值
  • 错误报告
建立bug数据库(小项目可以用记事本)
每个好的错误报告都要包括以下三个步骤:
      1.重现的步骤
      2.期望看到的
      3.实际看到的
好的测试员会把重现的步骤缩减到最短。
只有一开始测出问题的人才能关闭这个bug。
要解决错误可以有很多种办法,解决理由有:不予修正,暂缓,无法重现,重复的问题,设计限制。
  • 软件开发的五个世界

注意这五个世界所要求的软件开发质量是不一样的。
  • 二元文化
核心区别 区别举例1 区别举例2 区别举例3
unix文化 重视为程序员提供有用的程序 重视命令行 一项程序结束如果没有产生任何输出信息,就说明程序执行正确 文档应该写的简洁而完整,读者可以推导出未写出的结论并且信任自己的推导,一件事很少会讲两遍.
windows文化 重视对非程序员提供有用的程序 重视图形化界面 程序执行后如果没有任何提示你就搞不清楚是因为出错了而没有输出还是没出错只是不输出。 了解一般使用者一般不读文档,因此一件事情会多次提醒。
为什么会出现这种文化差异呢?
因为unix文化成熟的时候没有那么多一般使用者,而windows就是要尽可能多的赚到用户的钱。

第二部分 开发人员的管理
  • 面试游击指南
      面试官有时候会故意刁难你,看你能否坚持自己的正确的观点。好的面试者会坚持自己的观点,然后试图说服面试官。
  • 重金激励害多利少
      原因是绩效考核的不正确,负面评价对士气伤害很大,而正面评价对士气的激励也不如想象的那么好(会让他们觉得自己是为了拿到好成绩才好好工作的,就像巴普洛夫的狗)。
      大多数人都认为自己把事情做得很好(即使不是)。
      评价机制的不合理:比如某人是团队的粘合剂,总是能够在士气低落的时候激励大家,某人总喜欢研究新技术,别人有问题总要靠他解决,但是他写的代码量很少,这两种人可能得到的评价很低,但是不可否认他们的作用很大。
      绩效考评会使团队产生间隙。
  • 不配备测试人员的五个错误原因
      1.问题是懒惰的程序员弄出来的
      2.我的软件放在网络上。即使有问题也马上就能修好。
      3.客户会替我测试软件。
      4.有资格可以胜任的人都不想做测试人员。
      5.我请不起测试人员。
      注意这五条理由都是错误的。
  • 任务换人有害无益
      作者用cpu并行和单步循环举了个例子,说明在切换任务上人所花的时间绝对比单步处理的时间多得多。
      绝对不要让人同时做一件以上的事。
  • 不到万不得已不要想着去重构代码
  • 冰川下的秘密
      程序员和非技术人员的思考语言不一样。
      客户不知道他们要什么,别再期望客户知道他们要什么。
      冰山理论:原型图上漂亮的接口只占10%的工作,而真正的90%的程序设计都是看不到的。
      推论1:把使用接口的画面展示给非程序人员看时,如果这个接口很不好,对方会以为你整个程序也是很不好的。
    推论2:相反,如果这个接口很漂亮,对方会以为这个程序几乎已经完工。
    推论3:展示时唯一重要的就是外观。一定要让它美得冒泡。
  • 漏洞抽象定律
      可靠的tcp建立在不可靠的ip协议之上。
      所有重大的抽象机制在某种程序上都是有漏洞的,所以我们有一天遇到了这些漏洞,不得不去学习它的底层实现。
      比如二维数组的访问(内存分页),sql语句查询的快慢(逻辑上等义的sql语句查询起来速度完全不一样),c++的字符串处理。

《joel说软件》读书笔记相关推荐

  1. 读书笔记 | 墨菲定律

    1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...

  2. 读书笔记 | 墨菲定律(一)

    1. 有些事,你现在不做,永远也不会去做. 2. 能轻易实现的梦想都不叫梦想. 3.所有的事都会比你预计的时间长.(做事要有耐心,要经得起前期的枯燥.) 4. 当我们的才华还撑不起梦想时,更要耐下心来 ...

  3. 洛克菲勒的38封信pdf下载_《洛克菲勒写给孩子的38封信》读书笔记

    <洛克菲勒写给孩子的38封信>读书笔记 洛克菲勒写给孩子的38封信 第1封信:起点不决定终点 人人生而平等,但这种平等是权利与法律意义上的平等,与经济和文化优势无关 第2封信:运气靠策划 ...

  4. 股神大家了解多少?深度剖析股神巴菲特

    股神巴菲特是金融界里的传奇,大家是否都对股神巴菲特感兴趣呢?大家对股神了解多少?小编最近在QR社区发现了<阿尔法狗与巴菲特>,里面记载了许多股神巴菲特的人生经历,今天小编简单说一说关于股神 ...

  5. 2014巴菲特股东大会及巴菲特创业分享

     沃伦·巴菲特,这位传奇人物.在美国,巴菲特被称为"先知".在中国,他更多的被喻为"股神",巴菲特在11岁时第一次购买股票以来,白手起家缔造了一个千亿规模的 ...

  6. 《成为沃伦·巴菲特》笔记与感想

    本文首发于微信公众帐号: 一界码农(The_hard_the_luckier) 无需授权即可转载: 甚至无需保留以上版权声明-- 沃伦·巴菲特传记的纪录片 http://www.bilibili.co ...

  7. 读书笔记002:托尼.巴赞之快速阅读

    读书笔记002:托尼.巴赞之快速阅读 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<快速阅读>之后,我们就可以可以快速提高阅读速度,保持并改善理解嗯嗯管理,通过增进了解眼睛和大脑功能 ...

  8. 读书笔记001:托尼.巴赞之开动大脑

    读书笔记001:托尼.巴赞之开动大脑 托尼.巴赞是放射性思维与思维导图的提倡者.读完他的<开动大脑>之后,我们就可以对我们的大脑有更多的了解:大脑可以进行比我们预期多得多的工作:我们可以最 ...

  9. 读书笔记003:托尼.巴赞之思维导图

    读书笔记003:托尼.巴赞之思维导图 托尼.巴赞的<思维导图>一书,详细的介绍了思维发展的新概念--放射性思维:如何利用思维导图实施你的放射性思维,实现你的创造性思维,从而给出一种深刻的智 ...

  10. 产品读书《滚雪球:巴菲特和他的财富人生》

    作者简介 艾丽斯.施罗德,曾经担任世界知名投行摩根士丹利的董事总经理,因为撰写研究报告与巴菲特相识.业务上的往来使得施罗德有更多的机会与巴菲特亲密接触,她不仅是巴菲特别的忘年交,她也是第一个向巴菲特建 ...

最新文章

  1. PHP程序员如何突破成长瓶颈(转)
  2. python traceback什么意思_浅谈Python traceback的优雅处理
  3. yum 错误:Invalid configuration value: failovermethod=priority
  4. 随笔:web服务器中建立一个小的个人站点
  5. uva 1557 - Calendar Game(博弈)
  6. P4395-[BOI2003]Gem气垫车【树形dp,四色定理】
  7. 滚动截屏软件_华为指关节截屏不如三指截屏好用?一步到位,实践出真知
  8. php服务器端注释,php标识和注释
  9. servlet的四种响应
  10. CSS如何让图片垂直并水平居中等比缩放?
  11. 算法笔记_面试题_18.动态规划_模板及示例十几道(上)
  12. mysql linux 表名区分大小写吗_MySQL在linux下的表名如何不区分大小写
  13. ISO 28000供应链安全管理简述及标准
  14. transition属性
  15. P1308 统计单词数 洛谷
  16. Totem协议(SRP/RRP)讲解PPT
  17. 电脑开机内存占用过高处理
  18. opencv matlab配置,MATLAB配置mexopencv
  19. html页面插件 复制,ReadabilityCopy - 一键复制网页内容插件
  20. 神经网络每次输出不一样,神经网络输出值相同

热门文章

  1. 网易云课堂-数据结构-练习题实现-00,打印沙漏
  2. python创建一个国际象棋棋盘,Jupyter Notebook:实现国际象棋棋盘
  3. 为什么机会总是留给有准备的人?这是我听过最好的答案
  4. 【WPS】未安装VBA支持库,无法运行文档中的宏。如需要启用宏功能,请点击这里了解详情。
  5. 使用minikube快速部署k8s集群
  6. teamspeak3快速安装
  7. Android实现仿有道云笔记头像背景(模糊效果)
  8. 深度学习自然语言处理模型实现大集合(精简版<100行)
  9. MCP2515 (2)
  10. 如何平衡老师任务和自学之间的关系