《构建之法》阅读
0. 说明
我觉得把书上已经有的东西抄一遍到博客上,对于学习帮助不大。我想了个办法,把每个知识块用一句话加以提炼,每次看到这句话,都把相关的知识在脑中快速再现一遍,作为检验。如果回想不起来,就去重新学习。多次再现成功之后,知识转为长期记忆,就把这些话再作为一个知识块提炼成一句话。如此迭代,书可以越读越薄。
心得与评论的丰富度,除了和书本的知识量有关系之外,我觉得还和我自己已有的“相关知识”的量有关,因为知识只有通过联结才能活起来,心中有底才能说得出话。因此有些章节我没写什么评论,说明我没有新想法,只是在积累知识“学习一个”而已。
1. 概论
知识要点:
航空业和软件业的类比,商业与业余软件的区别,软件工程大致领域,软件复杂性的来源,什么是工程,怎样的软件才算好。
1.1 软件 = 程序 + 软件工程
实际上从产业规律来看,先驱探索应该放在成熟产业之后,毕竟能战斗在一线的都是化用规则于无形的巨佬。
商用软件与业余软件的区别在于,商用软件需要确保符合需求、功能齐备、可以维护、万无一失。但是,企业的能力是有限的,软件bug是无穷的。就算是微软的OS也在一直打补丁不是么?所以其中的取舍,确是一门学问。
1.2 软件工程是什么
软件的复杂度,随代码量指数增长。
软件的复杂度,本质不在技术而在管理。软件工程的工具能够帮助降低便携软件的难度,当一个软件工程师的代码量达到瓶颈后,他就知道应该使用更强力的软件工程工具了。
2. 个人技术和流程
知识要点:单元测试,回归测试,抽样,代码注入,效能分析工具的用法,psp。
2.1 单元测试
单元测试就是一堆的测试函数,是一堆的用例。我直接把这种函数和普通函数放在一起,每次跑程序的时候顺便测试一下。单元测试显然更规范,更灵活了,但是也就那么回事。
回归测试,概念类似“回档”。模块的版本,就像一棵树,应该可以用github管理,但是我现在还不怎么会用,也没遇到过这么复杂的情况。现在我最多只会保留一个备份而已。
2.2 效能分析工具
选个指标,比如说内存吧,分析一下,发现某个函数特别消耗资源,改它,资源消耗量将下来了。这就是用效能分析工具进行优化,理论上特别简单。当然,性能不是一切,不能为了性能牺牲代码的可维护性。
2.3 个人开发流程
是个检核表,好用。现在我对其中各项的理解还不够,所以我准备了一个秒表,做什么事情都计时,最后再看看什么任务属于什么项目,再加进去。当然,这样就很难估算各个项目的耗时了,但是这样做是理解其中各项的最好办法。
3. 软件工程师的成长
知识要点
个人贡献者的工作流程,初级工程师的成长方式,TSP要求简介,三层问题模型与自动化。
3.1 个人能力的衡量与发展
现阶段主要就是积累知识、训练基本能力,其他的太虚了。我也感慨,PSP真的是一个很好的管理工具。
3.2 软件工程师的职业发展
3.3 技能的反面
怎么检测是否真正掌握了某个知识?
- 脑中有一个知识地图,脉络非常清晰,用知识的时候就想在地图上开车,也清楚地知道自己知识的边界。
- 化繁为简,能用起来,甚至教会10岁小孩。
书里面介绍了问题层次的模型。我马上就想到那个很出名的心理学模型:舒适区、过渡区、恐慌区。我在很多领域都见过类似的东西,这个模型真的很重要。比如说习惯培养的最终目的,就是自动化地做事情。