序
仅仅知道如何编程,并不会让你成为一名更好的程序员,在这个过程中必须经历有意识和深思熟虑的实践
前言
1,关注你的技艺
2,思考!思考你的工作
3,这是一个持续的过程(改善)
第一章 务实的哲学
1,人生是你的,你有选择权
人生是你自己的,是你在拥有、经营和创造;学习一些看起来有趣的新东西
2,软件的熵:破窗理论
在城市中心,有些建筑干净漂亮,而另一些则破落不堪,为什么会这样?
一扇破窗
不要放任破窗
漠视会加速腐烂
3,催化剂角色:石头汤
石头做的汤和煮熟的青蛙
做推动变革的催化剂
4,够好即可的软件:完美的诱惑
避免陷入偏执的完美主义
知道何时止步
5,对知识组合做定期投资
我们可以将程序员所了解的一切有关计算过程的事实、工作的应用领域,以及所有经验,视为他们拥有的知识组合
构建知识组合
6,交流:所获对方的反应即是沟通的意义
说什么和怎么说同样重要
第二章 务实的方法
1,DRY(Do not Repeat Yourself)
2,软件设计的正交性
消除不相关事物之间的影响
3,曳(yè)光弹
在黑暗中发光的代码
使用曳光弹找到目标
4,用原型学习
5,估算
所有的估算都是基于对问题的建模
问问已经做过的人
第三章 基础工具
1,纯文本的威力
2,shell脚本
3,游刃有余地使用编辑器
4,版本控制
进步,远非寓于改变之中,而是依赖于保持。那些不能铭记过去的人,注定要重蹈覆辙。-- 乔治·桑塔压那
5,调试
调整心态,不要恐慌
找个橡皮鸭
6,工程日记
它比记忆更可靠
它为你提供了一个放想法的地方
它就像一个橡皮鸭
第四章 务实的偏执
1,你无法写出完美的软件
2,断言式编程
自责中往往有种奢侈。我们自责时,总觉得别人无权再责备我们。-- 奥斯卡·王尔德《道林·格雷的画像》
第五章 宁弯不折
1,解耦
当我们试着单独挑出一个事物的时候,总会发现它与宇宙中其他一切都有关联。-- 约翰·缪尔《夏日走过山间》
2,在现实世界中抛球杂耍--事件
3,变换式编程--管道符
4,继承税
第六章 并发
0,一切都会并发
1,通过分析工作流程来提高并发性
并行的机会
识别出这些机会只是开始
2,共享状态不是正确的状态
信号量和其他形式的互斥
3,用角色实现并发性时不必共享状态
角色只会是并发的
4,黑板
黑板方法
第七章 当你编码时
1,听从你的蜥蜴脑--直觉
如何同蜥蜴脑交谈:转移当前的注意力,做一些其他无关的事情
2,如何深思熟虑地编程
3,算法速度Ο()
Ο,读音:big-oh、欧米可荣(大写);表示上界(tightness unknown),小于等于的意思。
评估算法到底是什么意思?
4,重构
四境所见,尽是变迁腐朽······ -- 亨利·弗兰西斯·赖特《与我同往》
何时该重构?
持续变革:革新而非革命
5,出门在外注意数据安全
6,事务命名
名不正,言不顺;言不顺,则事不成。-- 孔子
第八章 项目启动之前
1,需求之坑:无人确切知道自己想要什么
人们只有在知道自己真正想要什么的时候才会尝试自动化。
2,程序员帮助人们理解他们想要什么
如治愈般编程
3,需求是个过程
需求是从反馈循环中学到的
4,需求文档不是为客户准备的,是为计划准备的
5,处理无法解决的难题
一些工程问题你把握不了,或者某些代码比你想象的更难写,也许看起来根本做不到。但这些真的像看起来那么难吗?
6,自由度
7,不要跳出框框思考 -- 找到框框
8,携手共建,用户是你团队的一部分
9,结对编程
我们人类的大脑带宽有限,天马行空地输入编译器勉强能接受的深奥的单词和符号,就已经占用了我们相当大的处理能力,在执行任务的过程中,有另一个开发人员的完整大脑可用,将带来更多的脑力供我们支配。
不要一个人埋头钻进代码中
10,敏捷的本质
敏捷不是一个名词,敏捷有关你如何做事
敏捷价值观:
- 个体和互动>流程和工具
- 工作的软件>详尽的文档
- 客户合作>合同谈判
- 响应变化>遵循计划
- 敏捷是做事时该有的精神
第九章 务实的项目
1,务实的团队
团队是小而稳定的实体,50个人就不算团队,那是部落。
维持小而稳定的团队:
- 禁止破窗
- 煮熟的青蛙
- 为知识组合安排日程
- 团队整体的对外交流(创建一个品牌,起一个稀奇古怪的名字)
- 团队的曳光弹
- 椰子派不上用场
- 同一尺码无法适应所有人
- 重构、复盘
2,取悦用户,而不只是交付代码
用户真正要的不是代码,他们只是遇到某个业务问题,需要在目标和预算范围内解决,他们的信念是,通过与你的团队合作,能够做到这一点。
一个务实程序员的本质:解决问题的人。